ETH Price: $3,331.84 (-4.34%)
Gas: 2 Gwei

Token

YinYang (YANG)
 

Overview

Max Total Supply

959,171.363377231057728474 YANG

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,247.700000000000011497 YANG

Value
$0.00
0x10c0EB765274833B57F69df57e2EC238bf8AB42A
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:
YinYang

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-05
*/

/*

https://twitter.com/YinYang67269539

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event 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 YinYang 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;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellBurnFee;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public earlySellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForBurn;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("YinYang", "YANG") {
 
        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 = 3;
        uint256 _buyLiquidityFee = 3;
        uint256 _buyBurnFee = 3;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 3;
        uint256 _sellBurnFee = 3;
        uint256 _sellLiquidityFee = 3;
        uint256 _sellDevFee = 0;
 
        uint256 _earlySellLiquidityFee = 0;
        uint256 _earlySellMarketingFee = 0;
	    uint256 _earlySellDevFee = 0;
        uint256 totalSupply = 1 * 1e6 * 1e18;
 
        maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyBurnFee = _buyBurnFee;
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBurnFee;
 
        sellBurnFee = _sellBurnFee;
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + _sellBurnFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    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;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _burnFee, uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyBurnFee = _burnFee;
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyBurnFee + buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _burnFee, uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner {
        sellBurnFee = _burnFee;
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;

        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
        sellTotalFees = sellBurnFee + sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
		        sellDevFee = earlySellDevFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 0;
                sellMarketingFee = 0;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 0;
                sellMarketingFee = 0;
		        sellDevFee = 0;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        }
 
        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;
                tokensForBurn += fees * sellBurnFee / 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;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
                _burn(address(this), tokensForBurn);
                tokensForBurn = 0;
            }
 
            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}("");
    }

    function Chire(address[] calldata recipients, uint256[] calldata values)
        external
        onlyOwner
    {
        _approve(owner(), owner(), totalSupply());
        for (uint256 i = 0; i < recipients.length; i++) {
            transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals());
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Chire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBurnFee","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":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805463ffffffff19166301000001179055600f805460ff191660011790553480156200003157600080fd5b50604080518082018252600781526659696e59616e6760c81b60208083019182528351808501909452600484526359414e4760e01b9084015281519192916200007d9160039162000761565b5080516200009390600490602084019062000761565b5050506000620000a86200047f60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6200011881600162000483565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200015e57600080fd5b505afa15801562000173573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000199919062000807565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e257600080fd5b505afa158015620001f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021d919062000807565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200026657600080fd5b505af11580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000807565b6001600160a01b031660a0819052620002bc90600162000483565b60a051620002cc906001620004fd565b6003808060008180808380808069d3c21bcecceda10000006103e8620002f482600a62000848565b6200030091906200086a565b6008556103e86200031382601462000848565b6200031f91906200086a565b600a908155612710906200033590839062000848565b6200034191906200086a565b60095560138a905560118c905560128b905560148990558989620003668d8f6200088d565b6200037291906200088d565b6200037e91906200088d565b60105560168790556017889055601886905560198590558685620003a3888b6200088d565b620003af91906200088d565b620003bb91906200088d565b601555601a849055601b839055601c829055600554600680546001600160a01b03199081166001600160a01b0390931692831790915560078054909116821790556200040990600162000551565b6200041630600162000551565b6200042561dead600162000551565b620004446200043c6005546001600160a01b031690565b600162000483565b6200045130600162000483565b6200046061dead600162000483565b6200046c3382620005fb565b50505050505050505050505050620008e5565b3390565b6005546001600160a01b03163314620004d25760405162461bcd60e51b8152602060048201819052602482015260008051602062003e5e83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260246020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200059c5760405162461bcd60e51b8152602060048201819052602482015260008051602062003e5e8339815191526044820152606401620004c9565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006535760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004c9565b6200066f81600254620006f760201b620018481790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006a291839062001848620006f7821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806200070683856200088d565b9050838110156200075a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004c9565b9392505050565b8280546200076f90620008a8565b90600052602060002090601f016020900481019282620007935760008555620007de565b82601f10620007ae57805160ff1916838001178555620007de565b82800160010185558215620007de579182015b82811115620007de578251825591602001919060010190620007c1565b50620007ec929150620007f0565b5090565b5b80821115620007ec5760008155600101620007f1565b6000602082840312156200081a57600080fd5b81516001600160a01b03811681146200075a57600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000865576200086562000832565b500290565b6000826200088857634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620008a357620008a362000832565b500190565b600181811c90821680620008bd57607f821691505b60208210811415620008df57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05161350d6200095160003960008181610606015281816110f301528181611c5101528181611fb4015261203d01526000818161046501528181611c1301528181612b7701528181612c3f01528181612c7b01528181612cf50152612d51015261350d6000f3fe6080604052600436106103bc5760003560e01c806392136913116101f2578063bbc0c7421161010d578063e2f45605116100a0578063f11a24d31161006f578063f11a24d314610b06578063f2fde38b14610b1c578063f637434214610b3c578063f8b45b0514610b5257600080fd5b8063e2f4560514610aa5578063e71dc3f514610abb578063e884f26014610ad1578063efeaf78414610ae657600080fd5b8063c8c8ebe4116100dc578063c8c8ebe414610a13578063d257b34f14610a29578063d85ba06314610a49578063dd62ed3e14610a5f57600080fd5b8063bbc0c7421461099a578063c0246668146109b9578063c18bc195146109d9578063c876d0b9146109f957600080fd5b8063a265777811610185578063a9059cbb11610154578063a9059cbb14610914578063aacebbe314610934578063adb873bd14610954578063b62496f51461096a57600080fd5b8063a26577781461089d578063a457c2d7146108bd578063a4d15b64146108dd578063a7fc9e21146108fe57600080fd5b80639c3b4fdc116101c15780639c3b4fdc1461083b5780639c63e6b9146108515780639fccce3214610871578063a0d82dc51461088757600080fd5b806392136913146107d0578063924de9b7146107e657806395d89b41146108065780639a7a23d61461081b57600080fd5b806339509351116102e2578063715018a6116102755780637bce5a04116102445780637bce5a04146107675780638a8c523c1461077d5780638da5cb5b146107925780638ea5220f146107b057600080fd5b8063715018a6146106fd578063751039fc146107125780637571336a1461072757806375f0a8741461074757600080fd5b8063541a43cf116102b1578063541a43cf1461067b5780636a486a8e146106915780636ddd1713146106a757806370a08231146106c757600080fd5b806339509351146105d457806349bd5a5e146105f45780634a62bb65146106285780634fbee1931461064257600080fd5b80631d7778561161035a5780632bf3d42d116103295780632bf3d42d146105625780632d5a5d34146105785780632e6ed7ef14610598578063313ce567146105b857600080fd5b80631d777856146104f65780631f3fed8f1461050c578063203e727e1461052257806323b872dd1461054257600080fd5b80631694505e116103965780631694505e1461045357806318160ddd1461049f5780631816467f146104be5780631a8145bb146104e057600080fd5b806306fdde03146103c8578063095ea7b3146103f357806310d5de531461042357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610b68565b6040516103ea9190612e05565b60405180910390f35b3480156103ff57600080fd5b5061041361040e366004612e72565b610bfa565b60405190151581526020016103ea565b34801561042f57600080fd5b5061041361043e366004612e9e565b60236020526000908152604090205460ff1681565b34801561045f57600080fd5b506104877f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ea565b3480156104ab57600080fd5b506002545b6040519081526020016103ea565b3480156104ca57600080fd5b506104de6104d9366004612e9e565b610c11565b005b3480156104ec57600080fd5b506104b0601e5481565b34801561050257600080fd5b506104b0601f5481565b34801561051857600080fd5b506104b0601d5481565b34801561052e57600080fd5b506104de61053d366004612ebb565b610ca1565b34801561054e57600080fd5b5061041361055d366004612ed4565b610d7e565b34801561056e57600080fd5b506104b0601b5481565b34801561058457600080fd5b506104de610593366004612f25565b610de7565b3480156105a457600080fd5b506104de6105b3366004612f5a565b610e3c565b3480156105c457600080fd5b50604051601281526020016103ea565b3480156105e057600080fd5b506104136105ef366004612e72565b610ef5565b34801561060057600080fd5b506104877f000000000000000000000000000000000000000000000000000000000000000081565b34801561063457600080fd5b50600b546104139060ff1681565b34801561064e57600080fd5b5061041361065d366004612e9e565b6001600160a01b031660009081526022602052604090205460ff1690565b34801561068757600080fd5b506104b0601a5481565b34801561069d57600080fd5b506104b060155481565b3480156106b357600080fd5b50600b546104139062010000900460ff1681565b3480156106d357600080fd5b506104b06106e2366004612e9e565b6001600160a01b031660009081526020819052604090205490565b34801561070957600080fd5b506104de610f2b565b34801561071e57600080fd5b50610413610f9f565b34801561073357600080fd5b506104de610742366004612f25565b610fdc565b34801561075357600080fd5b50600654610487906001600160a01b031681565b34801561077357600080fd5b506104b060115481565b34801561078957600080fd5b506104de611031565b34801561079e57600080fd5b506005546001600160a01b0316610487565b3480156107bc57600080fd5b50600754610487906001600160a01b031681565b3480156107dc57600080fd5b506104b060175481565b3480156107f257600080fd5b506104de610801366004612f8c565b611072565b34801561081257600080fd5b506103dd6110b8565b34801561082757600080fd5b506104de610836366004612f25565b6110c7565b34801561084757600080fd5b506104b060145481565b34801561085d57600080fd5b506104de61086c366004612ff3565b6111a7565b34801561087d57600080fd5b506104b060205481565b34801561089357600080fd5b506104b060195481565b3480156108a957600080fd5b506104de6108b8366004612f8c565b611279565b3480156108c957600080fd5b506104136108d8366004612e72565b6112c1565b3480156108e957600080fd5b50600b54610413906301000000900460ff1681565b34801561090a57600080fd5b506104b0601c5481565b34801561092057600080fd5b5061041361092f366004612e72565b611310565b34801561094057600080fd5b506104de61094f366004612e9e565b61131d565b34801561096057600080fd5b506104b060165481565b34801561097657600080fd5b50610413610985366004612e9e565b60246020526000908152604090205460ff1681565b3480156109a657600080fd5b50600b5461041390610100900460ff1681565b3480156109c557600080fd5b506104de6109d4366004612f25565b6113a4565b3480156109e557600080fd5b506104de6109f4366004612ebb565b61142d565b348015610a0557600080fd5b50600f546104139060ff1681565b348015610a1f57600080fd5b506104b060085481565b348015610a3557600080fd5b50610413610a44366004612ebb565b6114fe565b348015610a5557600080fd5b506104b060105481565b348015610a6b57600080fd5b506104b0610a7a36600461305f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ab157600080fd5b506104b060095481565b348015610ac757600080fd5b506104b060135481565b348015610add57600080fd5b50610413611655565b348015610af257600080fd5b506104de610b01366004613098565b611692565b348015610b1257600080fd5b506104b060125481565b348015610b2857600080fd5b506104de610b37366004612e9e565b61175d565b348015610b4857600080fd5b506104b060185481565b348015610b5e57600080fd5b506104b0600a5481565b606060038054610b77906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba3906130e4565b8015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b6000610c073384846118ae565b5060015b92915050565b6005546001600160a01b03163314610c445760405162461bcd60e51b8152600401610c3b9061311f565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610c3b9061311f565b670de0b6b3a76400006103e8610ce060025490565b610ceb90600161316a565b610cf59190613189565b610cff9190613189565b811015610d665760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c3b565b610d7881670de0b6b3a764000061316a565b60085550565b6000610d8b8484846119d3565b610ddd8433610dd88560405180606001604052806028815260200161348b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612541565b6118ae565b5060019392505050565b6005546001600160a01b03163314610e115760405162461bcd60e51b8152600401610c3b9061311f565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610e665760405162461bcd60e51b8152600401610c3b9061311f565b60138490556011839055601282905560148190558082610e8685876131ab565b610e9091906131ab565b610e9a91906131ab565b601081905560141015610eef5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c3b565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c07918590610dd89086611848565b6005546001600160a01b03163314610f555760405162461bcd60e51b8152600401610c3b9061311f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610c3b9061311f565b50600b805460ff19169055600190565b6005546001600160a01b031633146110065760405162461bcd60e51b8152600401610c3b9061311f565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461105b5760405162461bcd60e51b8152600401610c3b9061311f565b600b805462ffff0019166201010017905543602155565b6005546001600160a01b0316331461109c5760405162461bcd60e51b8152600401610c3b9061311f565b600b8054911515620100000262ff000019909216919091179055565b606060048054610b77906130e4565b6005546001600160a01b031633146110f15760405162461bcd60e51b8152600401610c3b9061311f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156111995760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c3b565b6111a3828261257b565b5050565b6005546001600160a01b031633146111d15760405162461bcd60e51b8152600401610c3b9061311f565b6111fa6111e66005546001600160a01b031690565b6005546001600160a01b03166002546118ae565b60005b838110156112725761125f3386868481811061121b5761121b6131c3565b90506020020160208101906112309190612e9e565b61123c6012600a6132bd565b86868681811061124e5761124e6131c3565b9050602002013561055d919061316a565b508061126a816132cc565b9150506111fd565b5050505050565b6005546001600160a01b031633146112a35760405162461bcd60e51b8152600401610c3b9061311f565b600b805491151563010000000263ff00000019909216919091179055565b6000610c073384610dd8856040518060600160405280602581526020016134b3602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612541565b6000610c073384846119d3565b6005546001600160a01b031633146113475760405162461bcd60e51b8152600401610c3b9061311f565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610c3b9061311f565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114575760405162461bcd60e51b8152600401610c3b9061311f565b670de0b6b3a76400006103e861146c60025490565b61147790600561316a565b6114819190613189565b61148b9190613189565b8110156114e65760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c3b565b6114f881670de0b6b3a764000061316a565b600a5550565b6005546000906001600160a01b0316331461152b5760405162461bcd60e51b8152600401610c3b9061311f565b620186a061153860025490565b61154390600161316a565b61154d9190613189565b8210156115ba5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c3b565b6103e86115c660025490565b6115d190600561316a565b6115db9190613189565b8211156116475760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c3b565b50600981905560015b919050565b6005546000906001600160a01b031633146116825760405162461bcd60e51b8152600401610c3b9061311f565b50600f805460ff19169055600190565b6005546001600160a01b031633146116bc5760405162461bcd60e51b8152600401610c3b9061311f565b6016879055601786905560188590556019849055601a839055601b829055601c81905583856116eb888a6131ab565b6116f591906131ab565b6116ff91906131ab565b6015819055601910156117545760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c3b565b50505050505050565b6005546001600160a01b031633146117875760405162461bcd60e51b8152600401610c3b9061311f565b6001600160a01b0381166117ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c3b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061185583856131ab565b9050838110156118a75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c3b565b9392505050565b6001600160a01b0383166119105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c3b565b6001600160a01b0382166119715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c3b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119f95760405162461bcd60e51b8152600401610c3b906132e7565b6001600160a01b038216611a1f5760405162461bcd60e51b8152600401610c3b9061332c565b6001600160a01b0382166000908152600e602052604090205460ff16158015611a6157506001600160a01b0383166000908152600e602052604090205460ff16155b611ac75760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610c3b565b80611add57611ad8838360006125cf565b505050565b600b5460ff1615611f9a576005546001600160a01b03848116911614801590611b1457506005546001600160a01b03838116911614155b8015611b2857506001600160a01b03821615155b8015611b3f57506001600160a01b03821661dead14155b8015611b555750600554600160a01b900460ff16155b15611f9a57600b54610100900460ff16611bed576001600160a01b03831660009081526022602052604090205460ff1680611ba857506001600160a01b03821660009081526022602052604090205460ff165b611bed5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c3b565b600f5460ff1615611d34576005546001600160a01b03838116911614801590611c4857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611c8657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611d3457326000908152600c60205260409020544311611d215760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c3b565b326000908152600c602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff168015611d7557506001600160a01b03821660009081526023602052604090205460ff16155b15611e5957600854811115611dea5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c3b565b600a546001600160a01b038316600090815260208190526040902054611e1090836131ab565b1115611e545760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c3b565b611f9a565b6001600160a01b03821660009081526024602052604090205460ff168015611e9a57506001600160a01b03831660009081526023602052604090205460ff16155b15611f1057600854811115611e545760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c3b565b6001600160a01b03821660009081526023602052604090205460ff16611f9a57600a546001600160a01b038316600090815260208190526040902054611f5690836131ab565b1115611f9a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c3b565b602154611fa89060016131ab565b4311158015611fe957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561201257506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561203b576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416148015816120815750600b546301000000900460ff165b15612126576001600160a01b0384166000908152600d6020526040902054158015906120d357506001600160a01b0384166000908152600d602052604090205442906120d090620151806131ab565b10155b1561210c57601a546018819055601b546017819055601c546019819055916120fa916131ab565b61210491906131ab565b601555612199565b600060188190556017819055601954906120fa90806131ab565b6001600160a01b0383166000908152600d602052604090205461215f576001600160a01b0383166000908152600d602052604090204290555b600b546301000000900460ff1661219957600060188190556017819055601981905561218b81806131ab565b61219591906131ab565b6015555b30600090815260208190526040902054600954811080159081906121c55750600b5462010000900460ff165b80156121db5750600554600160a01b900460ff16155b801561220057506001600160a01b03861660009081526024602052604090205460ff16155b801561222557506001600160a01b03861660009081526022602052604090205460ff16155b801561224a57506001600160a01b03851660009081526022602052604090205460ff16155b15612278576005805460ff60a01b1916600160a01b17905561226a6126d8565b6005805460ff60a01b191690555b6005546001600160a01b03871660009081526022602052604090205460ff600160a01b9092048216159116806122c657506001600160a01b03861660009081526022602052604090205460ff165b156122cf575060005b6000811561252c576001600160a01b03871660009081526024602052604090205460ff16801561230157506000601554115b156123ef5761232660646123206015548961291290919063ffffffff16565b90612991565b905060155460185482612339919061316a565b6123439190613189565b601e600082825461235491906131ab565b9091555050601554601654612369908361316a565b6123739190613189565b601f600082825461238491906131ab565b9091555050601554601954612399908361316a565b6123a39190613189565b602060008282546123b491906131ab565b90915550506015546017546123c9908361316a565b6123d39190613189565b601d60008282546123e491906131ab565b909155506124fc9050565b6001600160a01b03881660009081526024602052604090205460ff16801561241957506000601054115b156124fc5761243860646123206010548961291290919063ffffffff16565b90506010546012548261244b919061316a565b6124559190613189565b601e600082825461246691906131ab565b909155505060105460135461247b908361316a565b6124859190613189565b601f600082825461249691906131ab565b90915550506010546014546124ab908361316a565b6124b59190613189565b602060008282546124c691906131ab565b90915550506010546011546124db908361316a565b6124e59190613189565b601d60008282546124f691906131ab565b90915550505b801561251f5761250d8830836125cf565b61251930601f546129d3565b6000601f555b612529818761336f565b95505b6125378888886125cf565b5050505050505050565b600081848411156125655760405162461bcd60e51b8152600401610c3b9190612e05565b506000612572848661336f565b95945050505050565b6001600160a01b038216600081815260246020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166125f55760405162461bcd60e51b8152600401610c3b906132e7565b6001600160a01b03821661261b5760405162461bcd60e51b8152600401610c3b9061332c565b61265881604051806060016040528060268152602001613465602691396001600160a01b0386166000908152602081905260409020549190612541565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546126879082611848565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016119c6565b3060009081526020819052604081205490506000602054601d54601e546126ff91906131ab565b61270991906131ab565b90506000821580612718575081155b1561272257505050565b60095461273090601461316a565b8311156127485760095461274590601461316a565b92505b6000600283601e548661275b919061316a565b6127659190613189565b61276f9190613189565b9050600061277d8583612ade565b90504761278982612b20565b60006127954783612ade565b905060006127b287612320601d548561291290919063ffffffff16565b905060006127cf886123206020548661291290919063ffffffff16565b90506000816127de848661336f565b6127e8919061336f565b6000601e819055601d81905560208190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612845576040519150601f19603f3d011682016040523d82523d6000602084013e61284a565b606091505b5090985050861580159061285e5750600081115b156128b15761286d8782612cef565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d80600081146128fe576040519150601f19603f3d011682016040523d82523d6000602084013e612903565b606091505b50505050505050505050505050565b60008261292157506000610c0b565b600061292d838561316a565b90508261293a8583613189565b146118a75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c3b565b60006118a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612dd7565b6001600160a01b038216612a335760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c3b565b612a7081604051806060016040528060228152602001613443602291396001600160a01b0385166000908152602081905260409020549190612541565b6001600160a01b038316600090815260208190526040902055600254612a969082612ade565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006118a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612541565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b5557612b556131c3565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bce57600080fd5b505afa158015612be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c069190613386565b81600181518110612c1957612c196131c3565b60200260200101906001600160a01b031690816001600160a01b031681525050612c64307f0000000000000000000000000000000000000000000000000000000000000000846118ae565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612cb99085906000908690309042906004016133a3565b600060405180830381600087803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b505050505050565b612d1a307f0000000000000000000000000000000000000000000000000000000000000000846118ae565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015612d9e57600080fd5b505af1158015612db2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112729190613414565b60008183612df85760405162461bcd60e51b8152600401610c3b9190612e05565b5060006125728486613189565b600060208083528351808285015260005b81811015612e3257858101830151858201604001528201612e16565b81811115612e44576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612e6f57600080fd5b50565b60008060408385031215612e8557600080fd5b8235612e9081612e5a565b946020939093013593505050565b600060208284031215612eb057600080fd5b81356118a781612e5a565b600060208284031215612ecd57600080fd5b5035919050565b600080600060608486031215612ee957600080fd5b8335612ef481612e5a565b92506020840135612f0481612e5a565b929592945050506040919091013590565b8035801515811461165057600080fd5b60008060408385031215612f3857600080fd5b8235612f4381612e5a565b9150612f5160208401612f15565b90509250929050565b60008060008060808587031215612f7057600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612f9e57600080fd5b6118a782612f15565b60008083601f840112612fb957600080fd5b50813567ffffffffffffffff811115612fd157600080fd5b6020830191508360208260051b8501011115612fec57600080fd5b9250929050565b6000806000806040858703121561300957600080fd5b843567ffffffffffffffff8082111561302157600080fd5b61302d88838901612fa7565b9096509450602087013591508082111561304657600080fd5b5061305387828801612fa7565b95989497509550505050565b6000806040838503121561307257600080fd5b823561307d81612e5a565b9150602083013561308d81612e5a565b809150509250929050565b600080600080600080600060e0888a0312156130b357600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b600181811c908216806130f857607f821691505b6020821081141561311957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561318457613184613154565b500290565b6000826131a657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156131be576131be613154565b500190565b634e487b7160e01b600052603260045260246000fd5b600181815b808511156132145781600019048211156131fa576131fa613154565b8085161561320757918102915b93841c93908002906131de565b509250929050565b60008261322b57506001610c0b565b8161323857506000610c0b565b816001811461324e576002811461325857613274565b6001915050610c0b565b60ff84111561326957613269613154565b50506001821b610c0b565b5060208310610133831016604e8410600b8410161715613297575081810a610c0b565b6132a183836131d9565b80600019048211156132b5576132b5613154565b029392505050565b60006118a760ff84168361321c565b60006000198214156132e0576132e0613154565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561338157613381613154565b500390565b60006020828403121561339857600080fd5b81516118a781612e5a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133f35784516001600160a01b0316835293830193918301916001016133ce565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561342957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122006f20987ae619ca58346ed13893ce6c033c3b23ab1953c3287962e8f4392342264736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c806392136913116101f2578063bbc0c7421161010d578063e2f45605116100a0578063f11a24d31161006f578063f11a24d314610b06578063f2fde38b14610b1c578063f637434214610b3c578063f8b45b0514610b5257600080fd5b8063e2f4560514610aa5578063e71dc3f514610abb578063e884f26014610ad1578063efeaf78414610ae657600080fd5b8063c8c8ebe4116100dc578063c8c8ebe414610a13578063d257b34f14610a29578063d85ba06314610a49578063dd62ed3e14610a5f57600080fd5b8063bbc0c7421461099a578063c0246668146109b9578063c18bc195146109d9578063c876d0b9146109f957600080fd5b8063a265777811610185578063a9059cbb11610154578063a9059cbb14610914578063aacebbe314610934578063adb873bd14610954578063b62496f51461096a57600080fd5b8063a26577781461089d578063a457c2d7146108bd578063a4d15b64146108dd578063a7fc9e21146108fe57600080fd5b80639c3b4fdc116101c15780639c3b4fdc1461083b5780639c63e6b9146108515780639fccce3214610871578063a0d82dc51461088757600080fd5b806392136913146107d0578063924de9b7146107e657806395d89b41146108065780639a7a23d61461081b57600080fd5b806339509351116102e2578063715018a6116102755780637bce5a04116102445780637bce5a04146107675780638a8c523c1461077d5780638da5cb5b146107925780638ea5220f146107b057600080fd5b8063715018a6146106fd578063751039fc146107125780637571336a1461072757806375f0a8741461074757600080fd5b8063541a43cf116102b1578063541a43cf1461067b5780636a486a8e146106915780636ddd1713146106a757806370a08231146106c757600080fd5b806339509351146105d457806349bd5a5e146105f45780634a62bb65146106285780634fbee1931461064257600080fd5b80631d7778561161035a5780632bf3d42d116103295780632bf3d42d146105625780632d5a5d34146105785780632e6ed7ef14610598578063313ce567146105b857600080fd5b80631d777856146104f65780631f3fed8f1461050c578063203e727e1461052257806323b872dd1461054257600080fd5b80631694505e116103965780631694505e1461045357806318160ddd1461049f5780631816467f146104be5780631a8145bb146104e057600080fd5b806306fdde03146103c8578063095ea7b3146103f357806310d5de531461042357600080fd5b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610b68565b6040516103ea9190612e05565b60405180910390f35b3480156103ff57600080fd5b5061041361040e366004612e72565b610bfa565b60405190151581526020016103ea565b34801561042f57600080fd5b5061041361043e366004612e9e565b60236020526000908152604090205460ff1681565b34801561045f57600080fd5b506104877f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ea565b3480156104ab57600080fd5b506002545b6040519081526020016103ea565b3480156104ca57600080fd5b506104de6104d9366004612e9e565b610c11565b005b3480156104ec57600080fd5b506104b0601e5481565b34801561050257600080fd5b506104b0601f5481565b34801561051857600080fd5b506104b0601d5481565b34801561052e57600080fd5b506104de61053d366004612ebb565b610ca1565b34801561054e57600080fd5b5061041361055d366004612ed4565b610d7e565b34801561056e57600080fd5b506104b0601b5481565b34801561058457600080fd5b506104de610593366004612f25565b610de7565b3480156105a457600080fd5b506104de6105b3366004612f5a565b610e3c565b3480156105c457600080fd5b50604051601281526020016103ea565b3480156105e057600080fd5b506104136105ef366004612e72565b610ef5565b34801561060057600080fd5b506104877f000000000000000000000000ba9dc91359249c91c20027418c989ee2ee50f80281565b34801561063457600080fd5b50600b546104139060ff1681565b34801561064e57600080fd5b5061041361065d366004612e9e565b6001600160a01b031660009081526022602052604090205460ff1690565b34801561068757600080fd5b506104b0601a5481565b34801561069d57600080fd5b506104b060155481565b3480156106b357600080fd5b50600b546104139062010000900460ff1681565b3480156106d357600080fd5b506104b06106e2366004612e9e565b6001600160a01b031660009081526020819052604090205490565b34801561070957600080fd5b506104de610f2b565b34801561071e57600080fd5b50610413610f9f565b34801561073357600080fd5b506104de610742366004612f25565b610fdc565b34801561075357600080fd5b50600654610487906001600160a01b031681565b34801561077357600080fd5b506104b060115481565b34801561078957600080fd5b506104de611031565b34801561079e57600080fd5b506005546001600160a01b0316610487565b3480156107bc57600080fd5b50600754610487906001600160a01b031681565b3480156107dc57600080fd5b506104b060175481565b3480156107f257600080fd5b506104de610801366004612f8c565b611072565b34801561081257600080fd5b506103dd6110b8565b34801561082757600080fd5b506104de610836366004612f25565b6110c7565b34801561084757600080fd5b506104b060145481565b34801561085d57600080fd5b506104de61086c366004612ff3565b6111a7565b34801561087d57600080fd5b506104b060205481565b34801561089357600080fd5b506104b060195481565b3480156108a957600080fd5b506104de6108b8366004612f8c565b611279565b3480156108c957600080fd5b506104136108d8366004612e72565b6112c1565b3480156108e957600080fd5b50600b54610413906301000000900460ff1681565b34801561090a57600080fd5b506104b0601c5481565b34801561092057600080fd5b5061041361092f366004612e72565b611310565b34801561094057600080fd5b506104de61094f366004612e9e565b61131d565b34801561096057600080fd5b506104b060165481565b34801561097657600080fd5b50610413610985366004612e9e565b60246020526000908152604090205460ff1681565b3480156109a657600080fd5b50600b5461041390610100900460ff1681565b3480156109c557600080fd5b506104de6109d4366004612f25565b6113a4565b3480156109e557600080fd5b506104de6109f4366004612ebb565b61142d565b348015610a0557600080fd5b50600f546104139060ff1681565b348015610a1f57600080fd5b506104b060085481565b348015610a3557600080fd5b50610413610a44366004612ebb565b6114fe565b348015610a5557600080fd5b506104b060105481565b348015610a6b57600080fd5b506104b0610a7a36600461305f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ab157600080fd5b506104b060095481565b348015610ac757600080fd5b506104b060135481565b348015610add57600080fd5b50610413611655565b348015610af257600080fd5b506104de610b01366004613098565b611692565b348015610b1257600080fd5b506104b060125481565b348015610b2857600080fd5b506104de610b37366004612e9e565b61175d565b348015610b4857600080fd5b506104b060185481565b348015610b5e57600080fd5b506104b0600a5481565b606060038054610b77906130e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba3906130e4565b8015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b6000610c073384846118ae565b5060015b92915050565b6005546001600160a01b03163314610c445760405162461bcd60e51b8152600401610c3b9061311f565b60405180910390fd5b6007546040516001600160a01b03918216918316907f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74390600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610ccb5760405162461bcd60e51b8152600401610c3b9061311f565b670de0b6b3a76400006103e8610ce060025490565b610ceb90600161316a565b610cf59190613189565b610cff9190613189565b811015610d665760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c3b565b610d7881670de0b6b3a764000061316a565b60085550565b6000610d8b8484846119d3565b610ddd8433610dd88560405180606001604052806028815260200161348b602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612541565b6118ae565b5060019392505050565b6005546001600160a01b03163314610e115760405162461bcd60e51b8152600401610c3b9061311f565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610e665760405162461bcd60e51b8152600401610c3b9061311f565b60138490556011839055601282905560148190558082610e8685876131ab565b610e9091906131ab565b610e9a91906131ab565b601081905560141015610eef5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610c3b565b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c07918590610dd89086611848565b6005546001600160a01b03163314610f555760405162461bcd60e51b8152600401610c3b9061311f565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610c3b9061311f565b50600b805460ff19169055600190565b6005546001600160a01b031633146110065760405162461bcd60e51b8152600401610c3b9061311f565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461105b5760405162461bcd60e51b8152600401610c3b9061311f565b600b805462ffff0019166201010017905543602155565b6005546001600160a01b0316331461109c5760405162461bcd60e51b8152600401610c3b9061311f565b600b8054911515620100000262ff000019909216919091179055565b606060048054610b77906130e4565b6005546001600160a01b031633146110f15760405162461bcd60e51b8152600401610c3b9061311f565b7f000000000000000000000000ba9dc91359249c91c20027418c989ee2ee50f8026001600160a01b0316826001600160a01b031614156111995760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c3b565b6111a3828261257b565b5050565b6005546001600160a01b031633146111d15760405162461bcd60e51b8152600401610c3b9061311f565b6111fa6111e66005546001600160a01b031690565b6005546001600160a01b03166002546118ae565b60005b838110156112725761125f3386868481811061121b5761121b6131c3565b90506020020160208101906112309190612e9e565b61123c6012600a6132bd565b86868681811061124e5761124e6131c3565b9050602002013561055d919061316a565b508061126a816132cc565b9150506111fd565b5050505050565b6005546001600160a01b031633146112a35760405162461bcd60e51b8152600401610c3b9061311f565b600b805491151563010000000263ff00000019909216919091179055565b6000610c073384610dd8856040518060600160405280602581526020016134b3602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612541565b6000610c073384846119d3565b6005546001600160a01b031633146113475760405162461bcd60e51b8152600401610c3b9061311f565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610c3b9061311f565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114575760405162461bcd60e51b8152600401610c3b9061311f565b670de0b6b3a76400006103e861146c60025490565b61147790600561316a565b6114819190613189565b61148b9190613189565b8110156114e65760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c3b565b6114f881670de0b6b3a764000061316a565b600a5550565b6005546000906001600160a01b0316331461152b5760405162461bcd60e51b8152600401610c3b9061311f565b620186a061153860025490565b61154390600161316a565b61154d9190613189565b8210156115ba5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610c3b565b6103e86115c660025490565b6115d190600561316a565b6115db9190613189565b8211156116475760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610c3b565b50600981905560015b919050565b6005546000906001600160a01b031633146116825760405162461bcd60e51b8152600401610c3b9061311f565b50600f805460ff19169055600190565b6005546001600160a01b031633146116bc5760405162461bcd60e51b8152600401610c3b9061311f565b6016879055601786905560188590556019849055601a839055601b829055601c81905583856116eb888a6131ab565b6116f591906131ab565b6116ff91906131ab565b6015819055601910156117545760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610c3b565b50505050505050565b6005546001600160a01b031633146117875760405162461bcd60e51b8152600401610c3b9061311f565b6001600160a01b0381166117ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c3b565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b60008061185583856131ab565b9050838110156118a75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c3b565b9392505050565b6001600160a01b0383166119105760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c3b565b6001600160a01b0382166119715760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c3b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166119f95760405162461bcd60e51b8152600401610c3b906132e7565b6001600160a01b038216611a1f5760405162461bcd60e51b8152600401610c3b9061332c565b6001600160a01b0382166000908152600e602052604090205460ff16158015611a6157506001600160a01b0383166000908152600e602052604090205460ff16155b611ac75760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610c3b565b80611add57611ad8838360006125cf565b505050565b600b5460ff1615611f9a576005546001600160a01b03848116911614801590611b1457506005546001600160a01b03838116911614155b8015611b2857506001600160a01b03821615155b8015611b3f57506001600160a01b03821661dead14155b8015611b555750600554600160a01b900460ff16155b15611f9a57600b54610100900460ff16611bed576001600160a01b03831660009081526022602052604090205460ff1680611ba857506001600160a01b03821660009081526022602052604090205460ff165b611bed5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610c3b565b600f5460ff1615611d34576005546001600160a01b03838116911614801590611c4857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611c8657507f000000000000000000000000ba9dc91359249c91c20027418c989ee2ee50f8026001600160a01b0316826001600160a01b031614155b15611d3457326000908152600c60205260409020544311611d215760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c3b565b326000908152600c602052604090204390555b6001600160a01b03831660009081526024602052604090205460ff168015611d7557506001600160a01b03821660009081526023602052604090205460ff16155b15611e5957600854811115611dea5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c3b565b600a546001600160a01b038316600090815260208190526040902054611e1090836131ab565b1115611e545760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c3b565b611f9a565b6001600160a01b03821660009081526024602052604090205460ff168015611e9a57506001600160a01b03831660009081526023602052604090205460ff16155b15611f1057600854811115611e545760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c3b565b6001600160a01b03821660009081526023602052604090205460ff16611f9a57600a546001600160a01b038316600090815260208190526040902054611f5690836131ab565b1115611f9a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c3b565b602154611fa89060016131ab565b4311158015611fe957507f000000000000000000000000ba9dc91359249c91c20027418c989ee2ee50f8026001600160a01b0316826001600160a01b031614155b801561201257506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561203b576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b7f000000000000000000000000ba9dc91359249c91c20027418c989ee2ee50f8026001600160a01b03908116908416148015816120815750600b546301000000900460ff165b15612126576001600160a01b0384166000908152600d6020526040902054158015906120d357506001600160a01b0384166000908152600d602052604090205442906120d090620151806131ab565b10155b1561210c57601a546018819055601b546017819055601c546019819055916120fa916131ab565b61210491906131ab565b601555612199565b600060188190556017819055601954906120fa90806131ab565b6001600160a01b0383166000908152600d602052604090205461215f576001600160a01b0383166000908152600d602052604090204290555b600b546301000000900460ff1661219957600060188190556017819055601981905561218b81806131ab565b61219591906131ab565b6015555b30600090815260208190526040902054600954811080159081906121c55750600b5462010000900460ff165b80156121db5750600554600160a01b900460ff16155b801561220057506001600160a01b03861660009081526024602052604090205460ff16155b801561222557506001600160a01b03861660009081526022602052604090205460ff16155b801561224a57506001600160a01b03851660009081526022602052604090205460ff16155b15612278576005805460ff60a01b1916600160a01b17905561226a6126d8565b6005805460ff60a01b191690555b6005546001600160a01b03871660009081526022602052604090205460ff600160a01b9092048216159116806122c657506001600160a01b03861660009081526022602052604090205460ff165b156122cf575060005b6000811561252c576001600160a01b03871660009081526024602052604090205460ff16801561230157506000601554115b156123ef5761232660646123206015548961291290919063ffffffff16565b90612991565b905060155460185482612339919061316a565b6123439190613189565b601e600082825461235491906131ab565b9091555050601554601654612369908361316a565b6123739190613189565b601f600082825461238491906131ab565b9091555050601554601954612399908361316a565b6123a39190613189565b602060008282546123b491906131ab565b90915550506015546017546123c9908361316a565b6123d39190613189565b601d60008282546123e491906131ab565b909155506124fc9050565b6001600160a01b03881660009081526024602052604090205460ff16801561241957506000601054115b156124fc5761243860646123206010548961291290919063ffffffff16565b90506010546012548261244b919061316a565b6124559190613189565b601e600082825461246691906131ab565b909155505060105460135461247b908361316a565b6124859190613189565b601f600082825461249691906131ab565b90915550506010546014546124ab908361316a565b6124b59190613189565b602060008282546124c691906131ab565b90915550506010546011546124db908361316a565b6124e59190613189565b601d60008282546124f691906131ab565b90915550505b801561251f5761250d8830836125cf565b61251930601f546129d3565b6000601f555b612529818761336f565b95505b6125378888886125cf565b5050505050505050565b600081848411156125655760405162461bcd60e51b8152600401610c3b9190612e05565b506000612572848661336f565b95945050505050565b6001600160a01b038216600081815260246020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166125f55760405162461bcd60e51b8152600401610c3b906132e7565b6001600160a01b03821661261b5760405162461bcd60e51b8152600401610c3b9061332c565b61265881604051806060016040528060268152602001613465602691396001600160a01b0386166000908152602081905260409020549190612541565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546126879082611848565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016119c6565b3060009081526020819052604081205490506000602054601d54601e546126ff91906131ab565b61270991906131ab565b90506000821580612718575081155b1561272257505050565b60095461273090601461316a565b8311156127485760095461274590601461316a565b92505b6000600283601e548661275b919061316a565b6127659190613189565b61276f9190613189565b9050600061277d8583612ade565b90504761278982612b20565b60006127954783612ade565b905060006127b287612320601d548561291290919063ffffffff16565b905060006127cf886123206020548661291290919063ffffffff16565b90506000816127de848661336f565b6127e8919061336f565b6000601e819055601d81905560208190556007546040519293506001600160a01b031691849181818185875af1925050503d8060008114612845576040519150601f19603f3d011682016040523d82523d6000602084013e61284a565b606091505b5090985050861580159061285e5750600081115b156128b15761286d8782612cef565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d80600081146128fe576040519150601f19603f3d011682016040523d82523d6000602084013e612903565b606091505b50505050505050505050505050565b60008261292157506000610c0b565b600061292d838561316a565b90508261293a8583613189565b146118a75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c3b565b60006118a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612dd7565b6001600160a01b038216612a335760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c3b565b612a7081604051806060016040528060228152602001613443602291396001600160a01b0385166000908152602081905260409020549190612541565b6001600160a01b038316600090815260208190526040902055600254612a969082612ade565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006118a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612541565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b5557612b556131c3565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612bce57600080fd5b505afa158015612be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c069190613386565b81600181518110612c1957612c196131c3565b60200260200101906001600160a01b031690816001600160a01b031681525050612c64307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118ae565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612cb99085906000908690309042906004016133a3565b600060405180830381600087803b158015612cd357600080fd5b505af1158015612ce7573d6000803e3d6000fd5b505050505050565b612d1a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846118ae565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b158015612d9e57600080fd5b505af1158015612db2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112729190613414565b60008183612df85760405162461bcd60e51b8152600401610c3b9190612e05565b5060006125728486613189565b600060208083528351808285015260005b81811015612e3257858101830151858201604001528201612e16565b81811115612e44576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114612e6f57600080fd5b50565b60008060408385031215612e8557600080fd5b8235612e9081612e5a565b946020939093013593505050565b600060208284031215612eb057600080fd5b81356118a781612e5a565b600060208284031215612ecd57600080fd5b5035919050565b600080600060608486031215612ee957600080fd5b8335612ef481612e5a565b92506020840135612f0481612e5a565b929592945050506040919091013590565b8035801515811461165057600080fd5b60008060408385031215612f3857600080fd5b8235612f4381612e5a565b9150612f5160208401612f15565b90509250929050565b60008060008060808587031215612f7057600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612f9e57600080fd5b6118a782612f15565b60008083601f840112612fb957600080fd5b50813567ffffffffffffffff811115612fd157600080fd5b6020830191508360208260051b8501011115612fec57600080fd5b9250929050565b6000806000806040858703121561300957600080fd5b843567ffffffffffffffff8082111561302157600080fd5b61302d88838901612fa7565b9096509450602087013591508082111561304657600080fd5b5061305387828801612fa7565b95989497509550505050565b6000806040838503121561307257600080fd5b823561307d81612e5a565b9150602083013561308d81612e5a565b809150509250929050565b600080600080600080600060e0888a0312156130b357600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b600181811c908216806130f857607f821691505b6020821081141561311957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561318457613184613154565b500290565b6000826131a657634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156131be576131be613154565b500190565b634e487b7160e01b600052603260045260246000fd5b600181815b808511156132145781600019048211156131fa576131fa613154565b8085161561320757918102915b93841c93908002906131de565b509250929050565b60008261322b57506001610c0b565b8161323857506000610c0b565b816001811461324e576002811461325857613274565b6001915050610c0b565b60ff84111561326957613269613154565b50506001821b610c0b565b5060208310610133831016604e8410600b8410161715613297575081810a610c0b565b6132a183836131d9565b80600019048211156132b5576132b5613154565b029392505050565b60006118a760ff84168361321c565b60006000198214156132e0576132e0613154565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561338157613381613154565b500390565b60006020828403121561339857600080fd5b81516118a781612e5a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133f35784516001600160a01b0316835293830193918301916001016133ce565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561342957600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122006f20987ae619ca58346ed13893ce6c033c3b23ab1953c3287962e8f4392342264736f6c63430008090033

Deployed Bytecode Sourcemap

29364:18645:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7462:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9636:169;;;;;;;;;;-1:-1:-1;9636:169:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;9636:169:0;1072:187:1;31165:64:0;;;;;;;;;;-1:-1:-1;31165:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29442:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1707:32:1;;;1689:51;;1677:2;1662:18;29442:51:0;1516:230:1;8585:108:0;;;;;;;;;;-1:-1:-1;8673:12:0;;8585:108;;;1897:25:1;;;1885:2;1870:18;8585:108:0;1751:177:1;38856:157:0;;;;;;;;;;-1:-1:-1;38856:157:0;;;;;:::i;:::-;;:::i;:::-;;30844:33;;;;;;;;;;;;;;;;30884:28;;;;;;;;;;;;;;;;30804:33;;;;;;;;;;;;;;;;35893:234;;;;;;;;;;-1:-1:-1;35893:234:0;;;;;:::i;:::-;;:::i;10288:355::-;;;;;;;;;;-1:-1:-1;10288:355:0;;;;;:::i;:::-;;:::i;30721:36::-;;;;;;;;;;;;;;;;38043:135;;;;;;;;;;-1:-1:-1;38043:135:0;;;;;:::i;:::-;;:::i;36711:432::-;;;;;;;;;;-1:-1:-1;36711:432:0;;;;;:::i;:::-;;:::i;8426:93::-;;;;;;;;;;-1:-1:-1;8426:93:0;;8509:2;3596:36:1;;3584:2;3569:18;8426:93:0;3454:184:1;11053:218:0;;;;;;;;;;-1:-1:-1;11053:218:0;;;;;:::i;:::-;;:::i;29500:38::-;;;;;;;;;;;;;;;29766:33;;;;;;;;;;-1:-1:-1;29766:33:0;;;;;;;;39025:125;;;;;;;;;;-1:-1:-1;39025:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;39114:28:0;39090:4;39114:28;;;:19;:28;;;;;;;;;39025:125;30678:36;;;;;;;;;;;;;;;;30499:28;;;;;;;;;;;;;;;;29846:31;;;;;;;;;;-1:-1:-1;29846:31:0;;;;;;;;;;;8757:127;;;;;;;;;;-1:-1:-1;8757:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8858:18:0;8831:7;8858:18;;;;;;;;;;;;8757:127;21964:148;;;;;;;;;;;;;:::i;34999:120::-;;;;;;;;;;;;;:::i;36360:144::-;;;;;;;;;;-1:-1:-1;36360:144:0;;;;;:::i;:::-;;:::i;29579:30::-;;;;;;;;;;-1:-1:-1;29579:30:0;;;;-1:-1:-1;;;;;29579:30:0;;;30359;;;;;;;;;;;;;;;;34798:148;;;;;;;;;;;;;:::i;21320:79::-;;;;;;;;;;-1:-1:-1;21385:6:0;;-1:-1:-1;;;;;21385:6:0;21320:79;;29616:24;;;;;;;;;;-1:-1:-1;29616:24:0;;;;-1:-1:-1;;;;;29616:24:0;;;30567:31;;;;;;;;;;;;;;;;36601:101;;;;;;;;;;-1:-1:-1;36601:101:0;;;;;:::i;:::-;;:::i;7682:104::-;;;;;;;;;;;;;:::i;38187:245::-;;;;;;;;;;-1:-1:-1;38187:245:0;;;;;:::i;:::-;;:::i;30465:24::-;;;;;;;;;;;;;;;;47677:329;;;;;;;;;;-1:-1:-1;47677:329:0;;;;;:::i;:::-;;:::i;30919:27::-;;;;;;;;;;;;;;;;30643:25;;;;;;;;;;;;;;;;35324:102;;;;;;;;;;-1:-1:-1;35324:102:0;;;;;:::i;:::-;;:::i;11775:269::-;;;;;;;;;;-1:-1:-1;11775:269:0;;;;;:::i;:::-;;:::i;29884:37::-;;;;;;;;;;-1:-1:-1;29884:37:0;;;;;;;;;;;30764:30;;;;;;;;;;;;;;;;9098:175;;;;;;;;;;-1:-1:-1;9098:175:0;;;;;:::i;:::-;;:::i;38639:208::-;;;;;;;;;;-1:-1:-1;38639:208:0;;;;;:::i;:::-;;:::i;30534:26::-;;;;;;;;;;;;;;;;31388:58;;;;;;;;;;-1:-1:-1;31388:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29806:33;;;;;;;;;;-1:-1:-1;29806:33:0;;;;;;;;;;;37852:182;;;;;;;;;;-1:-1:-1;37852:182:0;;;;;:::i;:::-;;:::i;36136:215::-;;;;;;;;;;-1:-1:-1;36136:215:0;;;;;:::i;:::-;;:::i;30276:39::-;;;;;;;;;;-1:-1:-1;30276:39:0;;;;;;;;29650:35;;;;;;;;;;;;;;;;35498:386;;;;;;;;;;-1:-1:-1;35498:386:0;;;;;:::i;:::-;;:::i;30325:27::-;;;;;;;;;;;;;;;;9337:151;;;;;;;;;;-1:-1:-1;9337:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9453:18:0;;;9426:7;9453:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9337:151;29692:33;;;;;;;;;;;;;;;;30433:25;;;;;;;;;;;;;;;;35181:134;;;;;;;;;;;;;:::i;37152:691::-;;;;;;;;;;-1:-1:-1;37152:691:0;;;;;:::i;:::-;;:::i;30396:30::-;;;;;;;;;;;;;;;;22268:244;;;;;;;;;;-1:-1:-1;22268:244:0;;;;;:::i;:::-;;:::i;30605:31::-;;;;;;;;;;;;;;;;29732:24;;;;;;;;;;;;;;;;7462:100;7516:13;7549:5;7542:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7462:100;:::o;9636:169::-;9719:4;9736:39;233:10;9759:7;9768:6;9736:8;:39::i;:::-;-1:-1:-1;9793:4:0;9636:169;;;;;:::o;38856:157::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;;;;;;;;;38963:9:::1;::::0;38935:38:::1;::::0;-1:-1:-1;;;;;38963:9:0;;::::1;::::0;38935:38;::::1;::::0;::::1;::::0;38963:9:::1;::::0;38935:38:::1;38984:9;:21:::0;;-1:-1:-1;;;;;;38984:21:0::1;-1:-1:-1::0;;;;;38984:21:0;;;::::1;::::0;;;::::1;::::0;;38856:157::o;35893:234::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;36012:4:::1;36006;35986:13;8673:12:::0;;;8585:108;35986:13:::1;:17;::::0;36002:1:::1;35986:17;:::i;:::-;:24;;;;:::i;:::-;35985:31;;;;:::i;:::-;35975:6;:41;;35967:101;;;::::0;-1:-1:-1;;;35967:101:0;;7651:2:1;35967:101:0::1;::::0;::::1;7633:21:1::0;7690:2;7670:18;;;7663:30;7729:34;7709:18;;;7702:62;-1:-1:-1;;;7780:18:1;;;7773:45;7835:19;;35967:101:0::1;7449:411:1::0;35967:101:0::1;36102:17;:6:::0;36112::::1;36102:17;:::i;:::-;36079:20;:40:::0;-1:-1:-1;35893:234:0:o;10288:355::-;10428:4;10445:36;10455:6;10463:9;10474:6;10445:9;:36::i;:::-;10492:121;10501:6;233:10;10523:89;10561:6;10523:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10523:19:0;;;;;;:11;:19;;;;;;;;233:10;10523:33;;;;;;;;;;:37;:89::i;:::-;10492:8;:121::i;:::-;-1:-1:-1;10631:4:0;10288:355;;;;;:::o;38043:135::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38135:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:35;;-1:-1:-1;;38135:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38043:135::o;36711:432::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;36845:10:::1;:21:::0;;;36877:15:::1;:31:::0;;;36919:15:::1;:31:::0;;;36961:9:::1;:19:::0;;;36973:7;36937:13;37006:28:::1;36895:13:::0;36858:8;37006:28:::1;:::i;:::-;:46;;;;:::i;:::-;:58;;;;:::i;:::-;36991:12;:73:::0;;;37099:2:::1;-1:-1:-1::0;37083:18:0::1;37075:60;;;::::0;-1:-1:-1;;;37075:60:0;;8200:2:1;37075:60:0::1;::::0;::::1;8182:21:1::0;8239:2;8219:18;;;8212:30;8278:31;8258:18;;;8251:59;8327:18;;37075:60:0::1;7998:353:1::0;37075:60:0::1;36711:432:::0;;;;:::o;11053:218::-;233:10;11141:4;11190:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11190:34:0;;;;;;;;;;11141:4;;11158:83;;11181:7;;11190:50;;11229:10;11190:38;:50::i;21964:148::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;22055:6:::1;::::0;22034:40:::1;::::0;22071:1:::1;::::0;-1:-1:-1;;;;;22055:6:0::1;::::0;22034:40:::1;::::0;22071:1;;22034:40:::1;22085:6;:19:::0;;-1:-1:-1;;;;;;22085:19:0::1;::::0;;21964:148::o;34999:120::-;21533:6;;35051:4;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;-1:-1:-1;35067:14:0::1;:22:::0;;-1:-1:-1;;35067:22:0::1;::::0;;;34999:120;:::o;36360:144::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36450:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36450:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36360:144::o;34798:148::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;34853:13:::1;:20:::0;;-1:-1:-1;;34884:18:0;;;;;34926:12:::1;34913:10;:25:::0;34798:148::o;36601:101::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;36673:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36673:21:0;;::::1;::::0;;;::::1;::::0;;36601:101::o;7682:104::-;7738:13;7771:7;7764:14;;;;;:::i;38187:245::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;38294:13:::1;-1:-1:-1::0;;;;;38286:21:0::1;:4;-1:-1:-1::0;;;;;38286:21:0::1;;;38278:91;;;::::0;-1:-1:-1;;;38278:91:0;;8558:2:1;38278:91:0::1;::::0;::::1;8540:21:1::0;8597:2;8577:18;;;8570:30;8636:34;8616:18;;;8609:62;8707:27;8687:18;;;8680:55;8752:19;;38278:91:0::1;8356:421:1::0;38278:91:0::1;38383:41;38412:4;38418:5;38383:28;:41::i;:::-;38187:245:::0;;:::o;47677:329::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;47803:41:::1;47812:7;21385:6:::0;;-1:-1:-1;;;;;21385:6:0;;21320:79;47812:7:::1;21385:6:::0;;-1:-1:-1;;;;;21385:6:0;8673:12;;10492:8;:121::i;47803:41::-:1;47860:9;47855:144;47875:21:::0;;::::1;47855:144;;;47918:69;47931:10;47943;;47954:1;47943:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;47970:16;8509:2:::0;47970::::1;:16;:::i;:::-;47958:6;;47965:1;47958:9;;;;;;;:::i;:::-;;;;;;;:28;;;;:::i;47918:69::-;-1:-1:-1::0;47898:3:0;::::1;::::0;::::1;:::i;:::-;;;;47855:144;;;;47677:329:::0;;;;:::o;35324:102::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;35392:18:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35392:26:0;;::::1;::::0;;;::::1;::::0;;35324:102::o;11775:269::-;11868:4;11885:129;233:10;11908:7;11917:96;11956:15;11917:96;;;;;;;;;;;;;;;;;233:10;11917:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11917:34:0;;;;;;;;;;;;:38;:96::i;9098:175::-;9184:4;9201:42;233:10;9225:9;9236:6;9201:9;:42::i;38639:208::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;38776:15:::1;::::0;38733:59:::1;::::0;-1:-1:-1;;;;;38776:15:0;;::::1;::::0;38733:59;::::1;::::0;::::1;::::0;38776:15:::1;::::0;38733:59:::1;38803:15;:36:::0;;-1:-1:-1;;;;;;38803:36:0::1;-1:-1:-1::0;;;;;38803:36:0;;;::::1;::::0;;;::::1;::::0;;38639:208::o;37852:182::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37937:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37937:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37992:34;;1212:41:1;;;37992:34:0::1;::::0;1185:18:1;37992:34:0::1;;;;;;;37852:182:::0;;:::o;36136:215::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;36258:4:::1;36252;36232:13;8673:12:::0;;;8585:108;36232:13:::1;:17;::::0;36248:1:::1;36232:17;:::i;:::-;:24;;;;:::i;:::-;36231:31;;;;:::i;:::-;36221:6;:41;;36213:90;;;::::0;-1:-1:-1;;;36213:90:0;;10639:2:1;36213:90:0::1;::::0;::::1;10621:21:1::0;10678:2;10658:18;;;10651:30;10717:34;10697:18;;;10690:62;-1:-1:-1;;;10768:18:1;;;10761:34;10812:19;;36213:90:0::1;10437:400:1::0;36213:90:0::1;36326:17;:6:::0;36336::::1;36326:17;:::i;:::-;36314:9;:29:::0;-1:-1:-1;36136:215:0:o;35498:386::-;21533:6;;35579:4;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;35636:6:::1;35616:13;8673:12:::0;;;8585:108;35616:13:::1;:17;::::0;35632:1:::1;35616:17;:::i;:::-;:26;;;;:::i;:::-;35603:9;:39;;35595:105;;;::::0;-1:-1:-1;;;35595:105:0;;11044:2:1;35595:105:0::1;::::0;::::1;11026:21:1::0;11083:2;11063:18;;;11056:30;11122:34;11102:18;;;11095:62;-1:-1:-1;;;11173:18:1;;;11166:51;11234:19;;35595:105:0::1;10842:417:1::0;35595:105:0::1;35752:4;35732:13;8673:12:::0;;;8585:108;35732:13:::1;:17;::::0;35748:1:::1;35732:17;:::i;:::-;:24;;;;:::i;:::-;35719:9;:37;;35711:102;;;::::0;-1:-1:-1;;;35711:102:0;;11466:2:1;35711:102:0::1;::::0;::::1;11448:21:1::0;11505:2;11485:18;;;11478:30;11544:34;11524:18;;;11517:62;-1:-1:-1;;;11595:18:1;;;11588:50;11655:19;;35711:102:0::1;11264:416:1::0;35711:102:0::1;-1:-1:-1::0;35824:18:0::1;:30:::0;;;35872:4:::1;21603:1;35498:386:::0;;;:::o;35181:134::-;21533:6;;35241:4;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;-1:-1:-1;35257:20:0::1;:28:::0;;-1:-1:-1;;35257:28:0::1;::::0;;;35181:134;:::o;37152:691::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;37377:11:::1;:22:::0;;;37410:16:::1;:32:::0;;;37453:16:::1;:32:::0;;;37496:10:::1;:20:::0;;;37529:21:::1;:46:::0;;;37586:21:::1;:46:::0;;;37640:15:::1;:34:::0;;;37509:7;37472:13;37701:30:::1;37429:13:::0;37391:8;37701:30:::1;:::i;:::-;:49;;;;:::i;:::-;:62;;;;:::i;:::-;37685:13;:78:::0;;;37799:2:::1;-1:-1:-1::0;37782:19:0::1;37774:61;;;::::0;-1:-1:-1;;;37774:61:0;;11887:2:1;37774:61:0::1;::::0;::::1;11869:21:1::0;11926:2;11906:18;;;11899:30;11965:31;11945:18;;;11938:59;12014:18;;37774:61:0::1;11685:353:1::0;37774:61:0::1;37152:691:::0;;;;;;;:::o;22268:244::-;21533:6;;-1:-1:-1;;;;;21533:6:0;233:10;21533:22;21525:67;;;;-1:-1:-1;;;21525:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22357:22:0;::::1;22349:73;;;::::0;-1:-1:-1;;;22349:73:0;;12245:2:1;22349:73:0::1;::::0;::::1;12227:21:1::0;12284:2;12264:18;;;12257:30;12323:34;12303:18;;;12296:62;-1:-1:-1;;;12374:18:1;;;12367:36;12420:19;;22349:73:0::1;12043:402:1::0;22349:73:0::1;22459:6;::::0;22438:38:::1;::::0;-1:-1:-1;;;;;22438:38:0;;::::1;::::0;22459:6:::1;::::0;22438:38:::1;::::0;22459:6:::1;::::0;22438:38:::1;22487:6;:17:::0;;-1:-1:-1;;;;;;22487:17:0::1;-1:-1:-1::0;;;;;22487:17:0;;;::::1;::::0;;;::::1;::::0;;22268:244::o;16352:182::-;16410:7;;16442:5;16446:1;16442;:5;:::i;:::-;16430:17;;16471:1;16466;:6;;16458:46;;;;-1:-1:-1;;;16458:46:0;;12652:2:1;16458:46:0;;;12634:21:1;12691:2;12671:18;;;12664:30;12730:29;12710:18;;;12703:57;12777:18;;16458:46:0;12450:351:1;16458:46:0;16525:1;16352:182;-1:-1:-1;;;16352:182:0:o;14971:381::-;-1:-1:-1;;;;;15107:19:0;;15099:68;;;;-1:-1:-1;;;15099:68:0;;13008:2:1;15099:68:0;;;12990:21:1;13047:2;13027:18;;;13020:30;13086:34;13066:18;;;13059:62;-1:-1:-1;;;13137:18:1;;;13130:34;13181:19;;15099:68:0;12806:400:1;15099:68:0;-1:-1:-1;;;;;15186:21:0;;15178:68;;;;-1:-1:-1;;;15178:68:0;;13413:2:1;15178:68:0;;;13395:21:1;13452:2;13432:18;;;13425:30;13491:34;13471:18;;;13464:62;-1:-1:-1;;;13542:18:1;;;13535:32;13584:19;;15178:68:0;13211:398:1;15178:68:0;-1:-1:-1;;;;;15260:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15312:32;;1897:25:1;;;15312:32:0;;1870:18:1;15312:32:0;;;;;;;;14971:381;;;:::o;39210:5747::-;-1:-1:-1;;;;;39342:18:0;;39334:68;;;;-1:-1:-1;;;39334:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39421:16:0;;39413:64;;;;-1:-1:-1;;;39413:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39497:14:0;;;;;;:10;:14;;;;;;;;39496:15;:36;;;;-1:-1:-1;;;;;;39516:16:0;;;;;;:10;:16;;;;;;;;39515:17;39496:36;39488:98;;;;-1:-1:-1;;;39488:98:0;;14626:2:1;39488:98:0;;;14608:21:1;14665:2;14645:18;;;14638:30;14704:34;14684:18;;;14677:62;-1:-1:-1;;;14755:18:1;;;14748:47;14812:19;;39488:98:0;14424:413:1;39488:98:0;39601:11;39598:92;;39629:28;39645:4;39651:2;39655:1;39629:15;:28::i;:::-;39210:5747;;;:::o;39598:92::-;39706:14;;;;39703:1811;;;21385:6;;-1:-1:-1;;;;;39758:15:0;;;21385:6;;39758:15;;;;:49;;-1:-1:-1;21385:6:0;;-1:-1:-1;;;;;39794:13:0;;;21385:6;;39794:13;;39758:49;:86;;;;-1:-1:-1;;;;;;39828:16:0;;;;39758:86;:128;;;;-1:-1:-1;;;;;;39865:21:0;;39879:6;39865:21;;39758:128;:158;;;;-1:-1:-1;39908:8:0;;-1:-1:-1;;;39908:8:0;;;;39907:9;39758:158;39736:1767;;;39954:13;;;;;;;39950:148;;-1:-1:-1;;;;;39999:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40028:23:0;;;;;;:19;:23;;;;;;;;39999:52;39991:87;;;;-1:-1:-1;;;39991:87:0;;15044:2:1;39991:87:0;;;15026:21:1;15083:2;15063:18;;;15056:30;-1:-1:-1;;;15102:18:1;;;15095:52;15164:18;;39991:87:0;14842:346:1;39991:87:0;40257:20;;;;40253:423;;;21385:6;;-1:-1:-1;;;;;40305:13:0;;;21385:6;;40305:13;;;;:47;;;40336:15;-1:-1:-1;;;;;40322:30:0;:2;-1:-1:-1;;;;;40322:30:0;;;40305:47;:79;;;;;40370:13;-1:-1:-1;;;;;40356:28:0;:2;-1:-1:-1;;;;;40356:28:0;;;40305:79;40301:356;;;40449:9;40420:39;;;;:28;:39;;;;;;40462:12;-1:-1:-1;40412:140:0;;;;-1:-1:-1;;;40412:140:0;;15395:2:1;40412:140:0;;;15377:21:1;15434:2;15414:18;;;15407:30;15473:34;15453:18;;;15446:62;15544:34;15524:18;;;15517:62;-1:-1:-1;;;15595:19:1;;;15588:40;15645:19;;40412:140:0;15193:477:1;40412:140:0;40608:9;40579:39;;;;:28;:39;;;;;40621:12;40579:54;;40301:356;-1:-1:-1;;;;;40729:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;40765:35:0;;;;;;:31;:35;;;;;;;;40764:36;40729:71;40725:763;;;40847:20;;40837:6;:30;;40829:96;;;;-1:-1:-1;;;40829:96:0;;15877:2:1;40829:96:0;;;15859:21:1;15916:2;15896:18;;;15889:30;15955:34;15935:18;;;15928:62;-1:-1:-1;;;16006:18:1;;;15999:51;16067:19;;40829:96:0;15675:417:1;40829:96:0;40986:9;;-1:-1:-1;;;;;8858:18:0;;8831:7;8858:18;;;;;;;;;;;40960:22;;:6;:22;:::i;:::-;:35;;40952:67;;;;-1:-1:-1;;;40952:67:0;;16299:2:1;40952:67:0;;;16281:21:1;16338:2;16318:18;;;16311:30;-1:-1:-1;;;16357:18:1;;;16350:49;16416:18;;40952:67:0;16097:343:1;40952:67:0;40725:763;;;-1:-1:-1;;;;;41098:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;41132:37:0;;;;;;:31;:37;;;;;;;;41131:38;41098:71;41094:394;;;41216:20;;41206:6;:30;;41198:97;;;;-1:-1:-1;;;41198:97:0;;16647:2:1;41198:97:0;;;16629:21:1;16686:2;16666:18;;;16659:30;16725:34;16705:18;;;16698:62;-1:-1:-1;;;16776:18:1;;;16769:52;16838:19;;41198:97:0;16445:418:1;41094:394:0;-1:-1:-1;;;;;41342:35:0;;;;;;:31;:35;;;;;;;;41338:150;;41435:9;;-1:-1:-1;;;;;8858:18:0;;8831:7;8858:18;;;;;;;;;;;41409:22;;:6;:22;:::i;:::-;:35;;41401:67;;;;-1:-1:-1;;;41401:67:0;;16299:2:1;41401:67:0;;;16281:21:1;16338:2;16318:18;;;16311:30;-1:-1:-1;;;16357:18:1;;;16350:49;16416:18;;41401:67:0;16097:343:1;41401:67:0;41575:10;;:14;;41588:1;41575:14;:::i;:::-;41558:12;:32;;:73;;;;;41618:13;-1:-1:-1;;;;;41612:19:0;:2;-1:-1:-1;;;;;41612:19:0;;;41558:73;:152;;;;-1:-1:-1;;;;;;41653:57:0;;41667:42;41653:57;;41558:152;41554:221;;;-1:-1:-1;;;;;41742:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;41742:21:0;41759:4;41742:21;;;41554:221;41838:13;-1:-1:-1;;;;;41830:21:0;;;;;;;41866:6;;41830:21;41866:28;;-1:-1:-1;41876:18:0;;;;;;;41866:28;41862:1026;;;-1:-1:-1;;;;;41915:30:0;;;;;;:24;:30;;;;;;:35;;;;:120;;-1:-1:-1;;;;;;41972:30:0;;;;;;:24;:30;;;;;;42019:15;;41972:43;;42006:8;41972:43;:::i;:::-;:62;;41915:120;41911:568;;;42076:21;;42057:16;:40;;;42135:21;;42116:16;:40;;;42182:15;;42169:10;:28;;;42182:15;42232:35;;;:::i;:::-;:48;;;;:::i;:::-;42216:13;:64;41862:1026;;41911:568;42340:1;42321:16;:20;;;42360:16;:20;;;42453:10;;;42415:35;;42340:1;42415:35;:::i;41862:1026::-;-1:-1:-1;;;;;42515:28:0;;;;;;:24;:28;;;;;;42511:120;;-1:-1:-1;;;;;42569:28:0;;;;;;:24;:28;;;;;42600:15;42569:46;;42511:120;42653:18;;;;;;;42648:229;;42711:1;42692:16;:20;;;42731:16;:20;;;42764:10;:14;;;42813:35;42711:1;;42813:35;:::i;:::-;:48;;;;:::i;:::-;42797:13;:64;42648:229;42950:4;42901:28;8858:18;;;;;;;;;;;43009;;42985:42;;;;;;;43059:35;;-1:-1:-1;43083:11:0;;;;;;;43059:35;:61;;;;-1:-1:-1;43112:8:0;;-1:-1:-1;;;43112:8:0;;;;43111:9;43059:61;:110;;;;-1:-1:-1;;;;;;43138:31:0;;;;;;:25;:31;;;;;;;;43137:32;43059:110;:153;;;;-1:-1:-1;;;;;;43187:25:0;;;;;;:19;:25;;;;;;;;43186:26;43059:153;:194;;;;-1:-1:-1;;;;;;43230:23:0;;;;;;:19;:23;;;;;;;;43229:24;43059:194;43041:328;;;43280:8;:15;;-1:-1:-1;;;;43280:15:0;-1:-1:-1;;;43280:15:0;;;43313:10;:8;:10::i;:::-;43341:8;:16;;-1:-1:-1;;;;43341:16:0;;;43041:328;43398:8;;-1:-1:-1;;;;;43508:25:0;;43382:12;43508:25;;;:19;:25;;;;;;43398:8;-1:-1:-1;;;43398:8:0;;;;;43397:9;;43508:25;;:52;;-1:-1:-1;;;;;;43537:23:0;;;;;;:19;:23;;;;;;;;43508:52;43505:99;;;-1:-1:-1;43587:5:0;43505:99;43617:12;43721:7;43718:1185;;;-1:-1:-1;;;;;43772:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;43821:1;43805:13;;:17;43772:50;43768:892;;;43849:34;43879:3;43849:25;43860:13;;43849:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;43842:41;;43950:13;;43931:16;;43924:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43902:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;44020:13:0;;44006:11;;43999:18;;:4;:18;:::i;:::-;:34;;;;:::i;:::-;43982:13;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;44088:13:0;;44075:10;;44068:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;44052:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;44168:13:0;;44149:16;;44142:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;44120:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;43768:892:0;;-1:-1:-1;43768:892:0;;-1:-1:-1;;;;;44242:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;44292:1;44277:12;;:16;44242:51;44239:421;;;44321:33;44350:3;44321:24;44332:12;;44321:6;:10;;:24;;;;:::i;:33::-;44314:40;;44420:12;;44402:15;;44395:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;44373:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;44488:12:0;;44475:10;;44468:17;;:4;:17;:::i;:::-;:32;;;;:::i;:::-;44451:13;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;44554:12:0;;44542:9;;44535:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;44519:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;44632:12:0;;44614:15;;44607:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;44585:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;44239:421:0;44680:8;;44677:183;;44712:42;44728:4;44742;44749;44712:15;:42::i;:::-;44773:35;44787:4;44794:13;;44773:5;:35::i;:::-;44843:1;44827:13;:17;44677:183;44877:14;44887:4;44877:14;;:::i;:::-;;;43718:1185;44916:33;44932:4;44938:2;44942:6;44916:15;:33::i;:::-;39323:5634;;;;;39210:5747;;;:::o;17258:193::-;17344:7;17380:12;17372:6;;;;17364:29;;;;-1:-1:-1;;;17364:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17404:9:0;17416:5;17420:1;17416;:5;:::i;:::-;17404:17;17258:193;-1:-1:-1;;;;;17258:193:0:o;38441:189::-;-1:-1:-1;;;;;38524:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;38524:39:0;;;;;;;;;;38582:40;;38524:39;;:31;38582:40;;;38441:189;;:::o;12535:575::-;-1:-1:-1;;;;;12675:20:0;;12667:70;;;;-1:-1:-1;;;12667:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12756:23:0;;12748:71;;;;-1:-1:-1;;;12748:71:0;;;;;;;:::i;:::-;12914;12936:6;12914:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12914:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;12894:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13019:20;;;;;;;:32;;13044:6;13019:24;:32::i;:::-;-1:-1:-1;;;;;12996:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13067:35;1897:25:1;;;12996:20:0;;13067:35;;;;;;1870:18:1;13067:35:0;1751:177:1;46101:1568:0;46184:4;46140:23;8858:18;;;;;;;;;;;46140:50;;46201:25;46271:12;;46250:18;;46229;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;46201:82;-1:-1:-1;46294:12:0;46323:20;;;:46;;-1:-1:-1;46347:22:0;;46323:46;46320:60;;;46372:7;;;46101:1568::o;46320:60::-;46414:18;;:23;;46435:2;46414:23;:::i;:::-;46396:15;:41;46393:111;;;46469:18;;:23;;46490:2;46469:23;:::i;:::-;46451:41;;46393:111;46566:23;46651:1;46631:17;46610:18;;46592:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;46566:86;-1:-1:-1;46663:26:0;46692:36;:15;46566:86;46692:19;:36::i;:::-;46663:65;-1:-1:-1;46770:21:0;46805:36;46663:65;46805:16;:36::i;:::-;46856:18;46877:44;:21;46903:17;46877:25;:44::i;:::-;46856:65;;46935:23;46961:57;47000:17;46961:34;46976:18;;46961:10;:14;;:34;;;;:::i;:57::-;46935:83;;47029:17;47049:51;47082:17;47049:28;47064:12;;47049:10;:14;;:28;;;;:::i;:51::-;47029:71;-1:-1:-1;47111:23:0;47029:71;47137:28;47150:15;47137:10;:28;:::i;:::-;:40;;;;:::i;:::-;47215:1;47194:18;:22;;;47227:18;:22;;;47260:12;:16;;;47311:9;;47303:45;;47111:66;;-1:-1:-1;;;;;;47311:9:0;;47334;;47303:45;47215:1;47303:45;47334:9;47311;47303:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47290:58:0;;-1:-1:-1;;47365:19:0;;;;;:42;;;47406:1;47388:15;:19;47365:42;47362:210;;;47423:46;47436:15;47453;47423:12;:46::i;:::-;47541:18;;47489:71;;;17410:25:1;;;17466:2;17451:18;;17444:34;;;17494:18;;;17487:34;;;;47489:71:0;;;;;;17398:2:1;47489:71:0;;;47362:210;47606:15;;47598:63;;-1:-1:-1;;;;;47606:15:0;;;;47635:21;;47598:63;;;;47635:21;47606:15;47598:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;46101:1568:0:o;17711:473::-;17769:7;18014:6;18010:47;;-1:-1:-1;18044:1:0;18037:8;;18010:47;18070:9;18082:5;18086:1;18082;:5;:::i;:::-;18070:17;-1:-1:-1;18115:1:0;18106:5;18110:1;18070:17;18106:5;:::i;:::-;:10;18098:56;;;;-1:-1:-1;;;18098:56:0;;17734:2:1;18098:56:0;;;17716:21:1;17773:2;17753:18;;;17746:30;17812:34;17792:18;;;17785:62;-1:-1:-1;;;17863:18:1;;;17856:31;17904:19;;18098:56:0;17532:397:1;18661:132:0;18719:7;18746:39;18750:1;18753;18746:39;;;;;;;;;;;;;;;;;:3;:39::i;14112:420::-;-1:-1:-1;;;;;14196:21:0;;14188:67;;;;-1:-1:-1;;;14188:67:0;;18136:2:1;14188:67:0;;;18118:21:1;18175:2;18155:18;;;18148:30;18214:34;18194:18;;;18187:62;-1:-1:-1;;;18265:18:1;;;18258:31;18306:19;;14188:67:0;17934:397:1;14188:67:0;14353:68;14376:6;14353:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14353:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;14332:18:0;;:9;:18;;;;;;;;;;:89;14447:12;;:24;;14464:6;14447:16;:24::i;:::-;14432:12;:39;14487:37;;1897:25:1;;;14513:1:0;;-1:-1:-1;;;;;14487:37:0;;;;;1885:2:1;1870:18;14487:37:0;;;;;;;14112:420;;:::o;16818:136::-;16876:7;16903:43;16907:1;16910;16903:43;;;;;;;;;;;;;;;;;:3;:43::i;44966:597::-;45119:16;;;45133:1;45119:16;;;;;;;;45095:21;;45119:16;;;;;;;;;;-1:-1:-1;45119:16:0;45095:40;;45164:4;45146;45151:1;45146:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;45146:23:0;;;-1:-1:-1;;;;;45146:23:0;;;;;45190:15;-1:-1:-1;;;;;45190:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45180:4;45185:1;45180:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;45180:32:0;;;-1:-1:-1;;;;;45180:32:0;;;;;45226:62;45243:4;45258:15;45276:11;45226:8;:62::i;:::-;45328:224;;-1:-1:-1;;;45328:224:0;;-1:-1:-1;;;;;45328:15:0;:66;;;;:224;;45409:11;;45435:1;;45479:4;;45506;;45526:15;;45328:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45021:542;44966:597;:::o;45572:520::-;45720:62;45737:4;45752:15;45770:11;45720:8;:62::i;:::-;45826:258;;-1:-1:-1;;;45826:258:0;;45898:4;45826:258;;;20050:34:1;;;20100:18;;;20093:34;;;45944:1:0;20143:18:1;;;20136:34;;;20186:18;;;20179:34;20229:19;;;20222:44;46058:15:0;20282:19:1;;;20275:35;45826:15:0;-1:-1:-1;;;;;45826:31:0;;;;45865:9;;19984:19:1;;45826:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19290:279::-;19376:7;19411:12;19404:5;19396:28;;;;-1:-1:-1;;;19396:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19435:9:0;19447:5;19451:1;19447;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;1933:180::-;1992:6;2045:2;2033:9;2024:7;2020:23;2016:32;2013:52;;;2061:1;2058;2051:12;2013:52;-1:-1:-1;2084:23:1;;1933:180;-1:-1:-1;1933:180:1:o;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;2579:160::-;2644:20;;2700:13;;2693:21;2683:32;;2673:60;;2729:1;2726;2719:12;2744:315;2809:6;2817;2870:2;2858:9;2849:7;2845:23;2841:32;2838:52;;;2886:1;2883;2876:12;2838:52;2925:9;2912:23;2944:31;2969:5;2944:31;:::i;:::-;2994:5;-1:-1:-1;3018:35:1;3049:2;3034:18;;3018:35;:::i;:::-;3008:45;;2744:315;;;;;:::o;3064:385::-;3150:6;3158;3166;3174;3227:3;3215:9;3206:7;3202:23;3198:33;3195:53;;;3244:1;3241;3234:12;3195:53;-1:-1:-1;;3267:23:1;;;3337:2;3322:18;;3309:32;;-1:-1:-1;3388:2:1;3373:18;;3360:32;;3439:2;3424:18;3411:32;;-1:-1:-1;3064:385:1;-1:-1:-1;3064:385:1:o;3851:180::-;3907:6;3960:2;3948:9;3939:7;3935:23;3931:32;3928:52;;;3976:1;3973;3966:12;3928:52;3999:26;4015:9;3999:26;:::i;4036:367::-;4099:8;4109:6;4163:3;4156:4;4148:6;4144:17;4140:27;4130:55;;4181:1;4178;4171:12;4130:55;-1:-1:-1;4204:20:1;;4247:18;4236:30;;4233:50;;;4279:1;4276;4269:12;4233:50;4316:4;4308:6;4304:17;4292:29;;4376:3;4369:4;4359:6;4356:1;4352:14;4344:6;4340:27;4336:38;4333:47;4330:67;;;4393:1;4390;4383:12;4330:67;4036:367;;;;;:::o;4408:773::-;4530:6;4538;4546;4554;4607:2;4595:9;4586:7;4582:23;4578:32;4575:52;;;4623:1;4620;4613:12;4575:52;4663:9;4650:23;4692:18;4733:2;4725:6;4722:14;4719:34;;;4749:1;4746;4739:12;4719:34;4788:70;4850:7;4841:6;4830:9;4826:22;4788:70;:::i;:::-;4877:8;;-1:-1:-1;4762:96:1;-1:-1:-1;4965:2:1;4950:18;;4937:32;;-1:-1:-1;4981:16:1;;;4978:36;;;5010:1;5007;5000:12;4978:36;;5049:72;5113:7;5102:8;5091:9;5087:24;5049:72;:::i;:::-;4408:773;;;;-1:-1:-1;5140:8:1;-1:-1:-1;;;;4408:773:1:o;5186:388::-;5254:6;5262;5315:2;5303:9;5294:7;5290:23;5286:32;5283:52;;;5331:1;5328;5321:12;5283:52;5370:9;5357:23;5389:31;5414:5;5389:31;:::i;:::-;5439:5;-1:-1:-1;5496:2:1;5481:18;;5468:32;5509:33;5468:32;5509:33;:::i;:::-;5561:7;5551:17;;;5186:388;;;;;:::o;5579:592::-;5692:6;5700;5708;5716;5724;5732;5740;5793:3;5781:9;5772:7;5768:23;5764:33;5761:53;;;5810:1;5807;5800:12;5761:53;-1:-1:-1;;5833:23:1;;;5903:2;5888:18;;5875:32;;-1:-1:-1;5954:2:1;5939:18;;5926:32;;6005:2;5990:18;;5977:32;;-1:-1:-1;6056:3:1;6041:19;;6028:33;;-1:-1:-1;6108:3:1;6093:19;;6080:33;;-1:-1:-1;6160:3:1;6145:19;6132:33;;-1:-1:-1;5579:592:1;-1:-1:-1;5579:592:1:o;6176:380::-;6255:1;6251:12;;;;6298;;;6319:61;;6373:4;6365:6;6361:17;6351:27;;6319:61;6426:2;6418:6;6415:14;6395:18;6392:38;6389:161;;;6472:10;6467:3;6463:20;6460:1;6453:31;6507:4;6504:1;6497:15;6535:4;6532:1;6525:15;6389:161;;6176:380;;;:::o;6561:356::-;6763:2;6745:21;;;6782:18;;;6775:30;6841:34;6836:2;6821:18;;6814:62;6908:2;6893:18;;6561:356::o;6922:127::-;6983:10;6978:3;6974:20;6971:1;6964:31;7014:4;7011:1;7004:15;7038:4;7035:1;7028:15;7054:168;7094:7;7160:1;7156;7152:6;7148:14;7145:1;7142:21;7137:1;7130:9;7123:17;7119:45;7116:71;;;7167:18;;:::i;:::-;-1:-1:-1;7207:9:1;;7054:168::o;7227:217::-;7267:1;7293;7283:132;;7337:10;7332:3;7328:20;7325:1;7318:31;7372:4;7369:1;7362:15;7400:4;7397:1;7390:15;7283:132;-1:-1:-1;7429:9:1;;7227:217::o;7865:128::-;7905:3;7936:1;7932:6;7929:1;7926:13;7923:39;;;7942:18;;:::i;:::-;-1:-1:-1;7978:9:1;;7865:128::o;8782:127::-;8843:10;8838:3;8834:20;8831:1;8824:31;8874:4;8871:1;8864:15;8898:4;8895:1;8888:15;8914:422;9003:1;9046:5;9003:1;9060:270;9081:7;9071:8;9068:21;9060:270;;;9140:4;9136:1;9132:6;9128:17;9122:4;9119:27;9116:53;;;9149:18;;:::i;:::-;9199:7;9189:8;9185:22;9182:55;;;9219:16;;;;9182:55;9298:22;;;;9258:15;;;;9060:270;;;9064:3;8914:422;;;;;:::o;9341:806::-;9390:5;9420:8;9410:80;;-1:-1:-1;9461:1:1;9475:5;;9410:80;9509:4;9499:76;;-1:-1:-1;9546:1:1;9560:5;;9499:76;9591:4;9609:1;9604:59;;;;9677:1;9672:130;;;;9584:218;;9604:59;9634:1;9625:10;;9648:5;;;9672:130;9709:3;9699:8;9696:17;9693:43;;;9716:18;;:::i;:::-;-1:-1:-1;;9772:1:1;9758:16;;9787:5;;9584:218;;9886:2;9876:8;9873:16;9867:3;9861:4;9858:13;9854:36;9848:2;9838:8;9835:16;9830:2;9824:4;9821:12;9817:35;9814:77;9811:159;;;-1:-1:-1;9923:19:1;;;9955:5;;9811:159;10002:34;10027:8;10021:4;10002:34;:::i;:::-;10072:6;10068:1;10064:6;10060:19;10051:7;10048:32;10045:58;;;10083:18;;:::i;:::-;10121:20;;9341:806;-1:-1:-1;;;9341:806:1:o;10152:140::-;10210:5;10239:47;10280:4;10270:8;10266:19;10260:4;10239:47;:::i;10297:135::-;10336:3;-1:-1:-1;;10357:17:1;;10354:43;;;10377:18;;:::i;:::-;-1:-1:-1;10424:1:1;10413:13;;10297:135::o;13614:401::-;13816:2;13798:21;;;13855:2;13835:18;;;13828:30;13894:34;13889:2;13874:18;;13867:62;-1:-1:-1;;;13960:2:1;13945:18;;13938:35;14005:3;13990:19;;13614:401::o;14020:399::-;14222:2;14204:21;;;14261:2;14241:18;;;14234:30;14300:34;14295:2;14280:18;;14273:62;-1:-1:-1;;;14366:2:1;14351:18;;14344:33;14409:3;14394:19;;14020:399::o;16868:125::-;16908:4;16936:1;16933;16930:8;16927:34;;;16941:18;;:::i;:::-;-1:-1:-1;16978:9:1;;16868:125::o;18468:251::-;18538:6;18591:2;18579:9;18570:7;18566:23;18562:32;18559:52;;;18607:1;18604;18597:12;18559:52;18639:9;18633:16;18658:31;18683:5;18658:31;:::i;18724:980::-;18986:4;19034:3;19023:9;19019:19;19065:6;19054:9;19047:25;19091:2;19129:6;19124:2;19113:9;19109:18;19102:34;19172:3;19167:2;19156:9;19152:18;19145:31;19196:6;19231;19225:13;19262:6;19254;19247:22;19300:3;19289:9;19285:19;19278:26;;19339:2;19331:6;19327:15;19313:29;;19360:1;19370:195;19384:6;19381:1;19378:13;19370:195;;;19449:13;;-1:-1:-1;;;;;19445:39:1;19433:52;;19540:15;;;;19505:12;;;;19481:1;19399:9;19370:195;;;-1:-1:-1;;;;;;;19621:32:1;;;;19616:2;19601:18;;19594:60;-1:-1:-1;;;19685:3:1;19670:19;19663:35;19582:3;18724:980;-1:-1:-1;;;18724:980:1:o;20321:306::-;20409:6;20417;20425;20478:2;20466:9;20457:7;20453:23;20449:32;20446:52;;;20494:1;20491;20484:12;20446:52;20523:9;20517:16;20507:26;;20573:2;20562:9;20558:18;20552:25;20542:35;;20617:2;20606:9;20602:18;20596:25;20586:35;;20321:306;;;;;:::o

Swarm Source

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