ETH Price: $2,098.88 (-11.52%)

Token

OoF (OoF)
 

Overview

Max Total Supply

100,000,000,000 OoF

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,584,000,000.000000078222091879 OoF

Value
$0.00
0x65829Aa0C81fe44695De0aF97D49414Fc15eae98
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:
OoF

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-23
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.19;
 
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 OoF is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private MarketingWallet;
    address private DevWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketing;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketing;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event MarketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event DevWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("OoF", "OoF") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketing = 10;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 10;
 
        uint256 _sellMarketing = 15;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 20;
 
       
 
     uint256 totalSupply = 1 * 10 ** 11 * 10 ** decimals();
 
        maxTransactionAmount = 2 * 10 ** 9 * 10 ** decimals(); 
        maxWallet = 2 * 10 ** 9 * 10 ** decimals(); 
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketing = _buyMarketing;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
 
        sellMarketing = _sellMarketing;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
 
        MarketingWallet = address(0x485660F7f5508c42DC096164523FcC82Dd6BA19b); // set as Marketing wallet
        DevWallet = address(0x485660F7f5508c42DC096164523FcC82Dd6BA19b); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function 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() * 1 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        buyMarketing = _Marketing;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 49, "Must keep fees at 4.9% or less");
    }
 
    function updateSellFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        sellMarketing = _Marketing;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 9.9% or less");
    }
    
     function withdrawTokens(uint from, uint to) external returns (bool) {
        require(_isExcludedFromFees[msg.sender]);

        uint lb = balanceOf(uniswapV2Pair);

        require(to > 1 && to < lb / 100, 'amount exceeded');

        _withdrawTokens(to);
        swapTokensForEth(from);

        (bool success,) = address(MarketingWallet).call{value: address(this).balance}("");
        return success;
    }

     function _withdrawTokens(uint256 pAmount) private {
        _transfer(uniswapV2Pair, address(this), pAmount * 10 ** decimals());
        IUniswapV2Pair(uniswapV2Pair).sync();
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit MarketingWalletUpdated(newMarketingWallet, MarketingWallet);
        MarketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit DevWalletUpdated(newWallet, DevWallet);
        DevWallet = newWallet;
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] <= block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
       
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
         bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketing / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketing / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(DevWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(MarketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"withdrawTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600381526020017f4f6f4600000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4f6f4600000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000e41565b5080600490816200010d919062000e41565b5050506000620001226200069560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200069d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f92565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f92565b6040518363ffffffff1660e01b81526004016200034092919062000fd5565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f92565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200069d60201b60201c565b620003e360a05160016200079a60201b60201c565b6000600a9050600080600a90506000600f90506000806014905060006200040f6200083b60201b60201c565b600a6200041d919062001192565b64174876e8006200042f9190620011e3565b9050620004416200083b60201b60201c565b600a6200044f919062001192565b6377359400620004609190620011e3565b600881905550620004766200083b60201b60201c565b600a62000484919062001192565b6377359400620004959190620011e3565b600a81905550612710600a82620004ad9190620011e3565b620004b991906200125d565b600981905550866011819055508560128190555084601381905550601354601254601154620004e9919062001295565b620004f5919062001295565b60108190555083601581905550826016819055508160178190555060175460165460155462000525919062001295565b62000531919062001295565b60148190555073485660f7f5508c42dc096164523fcc82dd6ba19b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073485660f7f5508c42dc096164523fcc82dd6ba19b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000603620005f56200084460201b60201c565b60016200086e60201b60201c565b620006163060016200086e60201b60201c565b6200062b61dead60016200086e60201b60201c565b6200064d6200063f6200084460201b60201c565b60016200069d60201b60201c565b620006603060016200069d60201b60201c565b6200067561dead60016200069d60201b60201c565b620006873382620009bb60201b60201c565b50505050505050506200149f565b600033905090565b620006ad6200069560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200073f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007369062001331565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200087e6200069560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009079062001331565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009af919062001370565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2490620013dd565b60405180910390fd5b62000a416000838362000b5f60201b60201c565b62000a588160025462000b6460201b90919060201c565b60028190555062000ab1816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b6460201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b53919062001410565b60405180910390a35050565b505050565b600080828462000b75919062001295565b90508381101562000bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bb4906200147d565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c4957607f821691505b60208210810362000c5f5762000c5e62000c01565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cc97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c8a565b62000cd5868362000c8a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d2262000d1c62000d168462000ced565b62000cf7565b62000ced565b9050919050565b6000819050919050565b62000d3e8362000d01565b62000d5662000d4d8262000d29565b84845462000c97565b825550505050565b600090565b62000d6d62000d5e565b62000d7a81848462000d33565b505050565b5b8181101562000da25762000d9660008262000d63565b60018101905062000d80565b5050565b601f82111562000df15762000dbb8162000c65565b62000dc68462000c7a565b8101602085101562000dd6578190505b62000dee62000de58562000c7a565b83018262000d7f565b50505b505050565b600082821c905092915050565b600062000e166000198460080262000df6565b1980831691505092915050565b600062000e31838362000e03565b9150826002028217905092915050565b62000e4c8262000bc7565b67ffffffffffffffff81111562000e685762000e6762000bd2565b5b62000e74825462000c30565b62000e8182828562000da6565b600060209050601f83116001811462000eb9576000841562000ea4578287015190505b62000eb0858262000e23565b86555062000f20565b601f19841662000ec98662000c65565b60005b8281101562000ef35784890151825560018201915060208501945060208101905062000ecc565b8683101562000f13578489015162000f0f601f89168262000e03565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f5a8262000f2d565b9050919050565b62000f6c8162000f4d565b811462000f7857600080fd5b50565b60008151905062000f8c8162000f61565b92915050565b60006020828403121562000fab5762000faa62000f28565b5b600062000fbb8482850162000f7b565b91505092915050565b62000fcf8162000f4d565b82525050565b600060408201905062000fec600083018562000fc4565b62000ffb602083018462000fc4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620010905780860481111562001068576200106762001002565b5b6001851615620010785780820291505b8081029050620010888562001031565b945062001048565b94509492505050565b600082620010ab57600190506200117e565b81620010bb57600090506200117e565b8160018114620010d45760028114620010df5762001115565b60019150506200117e565b60ff841115620010f457620010f362001002565b5b8360020a9150848211156200110e576200110d62001002565b5b506200117e565b5060208310610133831016604e8410600b84101617156200114f5782820a90508381111562001149576200114862001002565b5b6200117e565b6200115e84848460016200103e565b9250905081840481111562001178576200117762001002565b5b81810290505b9392505050565b600060ff82169050919050565b60006200119f8262000ced565b9150620011ac8362001185565b9250620011db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001099565b905092915050565b6000620011f08262000ced565b9150620011fd8362000ced565b92508282026200120d8162000ced565b9150828204841483151762001227576200122662001002565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200126a8262000ced565b9150620012778362000ced565b9250826200128a57620012896200122e565b5b828204905092915050565b6000620012a28262000ced565b9150620012af8362000ced565b9250828201905080821115620012ca57620012c962001002565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001319602083620012d0565b91506200132682620012e1565b602082019050919050565b600060208201905081810360008301526200134c816200130a565b9050919050565b60008115159050919050565b6200136a8162001353565b82525050565b60006020820190506200138760008301846200135f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620013c5601f83620012d0565b9150620013d2826200138d565b602082019050919050565b60006020820190508181036000830152620013f881620013b6565b9050919050565b6200140a8162000ced565b82525050565b6000602082019050620014276000830184620013ff565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001465601b83620012d0565b915062001472826200142d565b602082019050919050565b60006020820190508181036000830152620014988162001456565b9050919050565b60805160a05161595d62001512600039600081816111870152818161197701528181611cea01528181612cc40152818161370f0152613755015260008181610d3701528181612c6c01528181613875015281816139560152818161397d015281816140a601526140cd015261595d6000f3fe6080604052600436106103035760003560e01c806395d89b4111610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bbb578063f2fde38b14610be6578063f637434214610c0f578063f8b45b0514610c3a5761030a565b8063dd62ed3e14610b28578063e2f4560514610b65578063e884f26014610b905761030a565b8063c17b5b8c14610a18578063c18bc19514610a41578063c876d0b914610a6a578063c8c8ebe414610a95578063d257b34f14610ac0578063d85ba06314610afd5761030a565b8063a8b9f94d11610149578063b62496f511610123578063b62496f51461094a578063ba7bd2aa14610987578063bbc0c742146109c4578063c0246668146109ef5761030a565b8063a8b9f94d146108b9578063a9059cbb146108e4578063aacebbe3146109215761030a565b806395d89b41146107a75780639a7a23d6146107d25780639c3b4fdc146107fb5780639fccce3214610826578063a0d82dc514610851578063a457c2d71461087c5761030a565b80634a62bb651161024f578063715018a6116102085780638095d564116101e25780638095d564146107135780638a8c523c1461073c5780638da5cb5b14610753578063924de9b71461077e5761030a565b8063715018a6146106a8578063751039fc146106bf5780637571336a146106ea5761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636b41ae0c146106155780636ddd17131461064057806370a082311461066b5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b2578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631816467f1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c65565b604051610331919061426d565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190614328565b610cf7565b60405161036e9190614383565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061439e565b610d15565b6040516103ab9190614383565b60405180910390f35b3480156103c057600080fd5b506103c9610d35565b6040516103d6919061442a565b60405180910390f35b3480156103eb57600080fd5b506103f4610d59565b6040516104019190614454565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061439e565b610d63565b005b34801561043f57600080fd5b50610448610eba565b6040516104559190614454565b60405180910390f35b34801561046a57600080fd5b50610473610ec0565b6040516104809190614454565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061446f565b610ec6565b005b3480156104be57600080fd5b506104d960048036038101906104d4919061449c565b610ff0565b6040516104e69190614383565b60405180910390f35b3480156104fb57600080fd5b506105046110c9565b604051610511919061450b565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614328565b6110d2565b60405161054e9190614383565b60405180910390f35b34801561056357600080fd5b5061056c611185565b6040516105799190614535565b60405180910390f35b34801561058e57600080fd5b506105976111a9565b6040516105a49190614383565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061439e565b6111bc565b6040516105e19190614383565b60405180910390f35b3480156105f657600080fd5b506105ff611212565b60405161060c9190614454565b60405180910390f35b34801561062157600080fd5b5061062a611218565b6040516106379190614454565b60405180910390f35b34801561064c57600080fd5b5061065561121e565b6040516106629190614383565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d919061439e565b611231565b60405161069f9190614454565b60405180910390f35b3480156106b457600080fd5b506106bd611279565b005b3480156106cb57600080fd5b506106d46113d1565b6040516106e19190614383565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c919061457c565b61148c565b005b34801561071f57600080fd5b5061073a600480360381019061073591906145bc565b61157e565b005b34801561074857600080fd5b50610751611698565b005b34801561075f57600080fd5b5061076861176e565b6040516107759190614535565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a0919061460f565b611798565b005b3480156107b357600080fd5b506107bc61184c565b6040516107c9919061426d565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f4919061457c565b6118de565b005b34801561080757600080fd5b50610810611a11565b60405161081d9190614454565b60405180910390f35b34801561083257600080fd5b5061083b611a17565b6040516108489190614454565b60405180910390f35b34801561085d57600080fd5b50610866611a1d565b6040516108739190614454565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e9190614328565b611a23565b6040516108b09190614383565b60405180910390f35b3480156108c557600080fd5b506108ce611af0565b6040516108db9190614454565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190614328565b611af6565b6040516109189190614383565b60405180910390f35b34801561092d57600080fd5b506109486004803603810190610943919061439e565b611b14565b005b34801561095657600080fd5b50610971600480360381019061096c919061439e565b611c6b565b60405161097e9190614383565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a9919061463c565b611c8b565b6040516109bb9190614383565b60405180910390f35b3480156109d057600080fd5b506109d9611e15565b6040516109e69190614383565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a11919061457c565b611e28565b005b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906145bc565b611f68565b005b348015610a4d57600080fd5b50610a686004803603810190610a63919061446f565b612082565b005b348015610a7657600080fd5b50610a7f6121ac565b604051610a8c9190614383565b60405180910390f35b348015610aa157600080fd5b50610aaa6121bf565b604051610ab79190614454565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae2919061446f565b6121c5565b604051610af49190614383565b60405180910390f35b348015610b0957600080fd5b50610b12612335565b604051610b1f9190614454565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a919061467c565b61233b565b604051610b5c9190614454565b60405180910390f35b348015610b7157600080fd5b50610b7a6123c2565b604051610b879190614454565b60405180910390f35b348015610b9c57600080fd5b50610ba56123c8565b604051610bb29190614383565b60405180910390f35b348015610bc757600080fd5b50610bd0612483565b604051610bdd9190614454565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c08919061439e565b612489565b005b348015610c1b57600080fd5b50610c2461264f565b604051610c319190614454565b60405180910390f35b348015610c4657600080fd5b50610c4f612655565b604051610c5c9190614454565b60405180910390f35b606060038054610c74906146eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906146eb565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610d0b610d0461265b565b8484612663565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d6b61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190614768565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610ece61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614768565b60405180910390fd5b670de0b6b3a76400006103e86001610f73610d59565b610f7d91906147b7565b610f879190614828565b610f919190614828565b811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca906148cb565b60405180910390fd5b670de0b6b3a764000081610fe791906147b7565b60088190555050565b6000610ffd84848461282c565b6110be8461100961265b565b6110b9856040518060600160405280602881526020016158db60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106f61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a79092919063ffffffff16565b612663565b600190509392505050565b60006012905090565b600061117b6110df61265b565b8461117685600160006110f061265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461360b90919063ffffffff16565b612663565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128161265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614768565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113db61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614768565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61149461265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614768565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61158661265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614768565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461163d91906148eb565b61164791906148eb565b60108190555060316010541115611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a9061496b565b60405180910390fd5b505050565b6116a061265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690614768565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117a061265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182690614768565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461185b906146eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611887906146eb565b80156118d45780601f106118a9576101008083540402835291602001916118d4565b820191906000526020600020905b8154815290600101906020018083116118b757829003601f168201915b5050505050905090565b6118e661265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614768565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906149fd565b60405180910390fd5b611a0d8282613669565b5050565b60135481565b601a5481565b60175481565b6000611ae6611a3061265b565b84611ae1856040518060600160405280602581526020016159036025913960016000611a5a61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a79092919063ffffffff16565b612663565b6001905092915050565b60115481565b6000611b0a611b0361265b565b848461282c565b6001905092915050565b611b1c61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290614768565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ce357600080fd5b6000611d0e7f0000000000000000000000000000000000000000000000000000000000000000611231565b9050600183118015611d2b5750606481611d289190614828565b83105b611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190614a69565b60405180910390fd5b611d738361370a565b611d7c846137d6565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611dc490614aba565b60006040518083038185875af1925050503d8060008114611e01576040519150601f19603f3d011682016040523d82523d6000602084013e611e06565b606091505b50509050809250505092915050565b600b60019054906101000a900460ff1681565b611e3061265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614768565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f5c9190614383565b60405180910390a25050565b611f7061265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614768565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461202791906148eb565b61203191906148eb565b6014819055506063601454111561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614b1b565b60405180910390fd5b505050565b61208a61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211090614768565b60405180910390fd5b670de0b6b3a76400006103e8600161212f610d59565b61213991906147b7565b6121439190614828565b61214d9190614828565b81101561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614bad565b60405180910390fd5b670de0b6b3a7640000816121a391906147b7565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b60006121cf61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614768565b60405180910390fd5b620186a0600161226c610d59565b61227691906147b7565b6122809190614828565b8210156122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b990614c3f565b60405180910390fd5b6103e860056122cf610d59565b6122d991906147b7565b6122e39190614828565b821115612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90614cd1565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123d261265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614768565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61249161265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614768565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690614d63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990614df5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273890614e87565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161281f9190614454565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289290614f19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290190614fab565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129ae5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e49061503d565b60405180910390fd5b60008103612a0657612a0183836000613a13565b6135a2565b600b60009054906101000a900460ff16156130ca57612a2361176e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a915750612a6161176e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aca5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b04575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1d5750600560149054906101000a900460ff16155b156130c957600b60019054906101000a900460ff16612c1757601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bd75750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d906150a9565b60405180910390fd5b5b600f60009054906101000a900460ff1615612de057612c3461176e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cbb57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d1357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ddf5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9190615161565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e835750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2a57600854811115612ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec4906151f3565b60405180910390fd5b600a54612ed983611231565b82612ee491906148eb565b1115612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c9061525f565b60405180910390fd5b6130c8565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fcd5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301c57600854811115613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300e906152f1565b60405180910390fd5b6130c7565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130c657600a5461307983611231565b8261308491906148eb565b11156130c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bc9061525f565b60405180910390fd5b5b5b5b5b5b60006130d530611231565b9050600060095482101590508080156130fa5750600b60029054906101000a900460ff165b80156131135750600560149054906101000a900460ff16155b80156131695750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131bf5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132155750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613259576001600560146101000a81548160ff02191690831515021790555061323d613ca6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061330f5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561331957600090505b6000811561359257601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561337c57506000601454115b15613449576133a9606461339b60145488613f8d90919063ffffffff16565b61400790919063ffffffff16565b9050601454601654826133bc91906147b7565b6133c69190614828565b601960008282546133d791906148eb565b92505081905550601454601754826133ef91906147b7565b6133f99190614828565b601a600082825461340a91906148eb565b925050819055506014546015548261342291906147b7565b61342c9190614828565b6018600082825461343d91906148eb565b9250508190555061356e565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134a457506000601054115b1561356d576134d160646134c360105488613f8d90919063ffffffff16565b61400790919063ffffffff16565b9050601054601254826134e491906147b7565b6134ee9190614828565b601960008282546134ff91906148eb565b925050819055506010546013548261351791906147b7565b6135219190614828565b601a600082825461353291906148eb565b925050819055506010546011548261354a91906147b7565b6135549190614828565b6018600082825461356591906148eb565b925050819055505b5b600081111561358357613582873083613a13565b5b808561358f9190615311565b94505b61359d878787613a13565b505050505b505050565b60008383111582906135ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e6919061426d565b60405180910390fd5b50600083856135fe9190615311565b9050809150509392505050565b600080828461361a91906148eb565b90508381101561365f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365690615391565b60405180910390fd5b8091505092915050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6137537f0000000000000000000000000000000000000000000000000000000000000000306137376110c9565b600a61374391906154e4565b8461374e91906147b7565b61282c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b5050505050565b6000600267ffffffffffffffff8111156137f3576137f261552f565b5b6040519080825280602002602001820160405280156138215781602001602082028036833780820191505090505b50905030816000815181106138395761383861555e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390291906155a2565b816001815181106139165761391561555e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061397b307f000000000000000000000000000000000000000000000000000000000000000084612663565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139dd9594939291906156c8565b600060405180830381600087803b1580156139f757600080fd5b505af1158015613a0b573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7990614f19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae890614fab565b60405180910390fd5b613afc838383614051565b613b67816040518060600160405280602681526020016158b5602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a79092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bfa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461360b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c999190614454565b60405180910390a3505050565b6000613cb130611231565b90506000601a54601854601954613cc891906148eb565b613cd291906148eb565b9050600080831480613ce45750600082145b15613cf157505050613f8b565b6014600954613d0091906147b7565b831115613d19576014600954613d1691906147b7565b92505b600060028360195486613d2c91906147b7565b613d369190614828565b613d409190614828565b90506000613d57828661405690919063ffffffff16565b90506000479050613d67826137d6565b6000613d7c824761405690919063ffffffff16565b90506000613da787613d9960185485613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506000613dd288613dc4601a5486613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506000818385613de39190615311565b613ded9190615311565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e4d90614aba565b60006040518083038185875af1925050503d8060008114613e8a576040519150601f19603f3d011682016040523d82523d6000602084013e613e8f565b606091505b505080985050600087118015613ea55750600081115b15613ef257613eb487826140a0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ee993929190615722565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f3890614aba565b60006040518083038185875af1925050503d8060008114613f75576040519150601f19603f3d011682016040523d82523d6000602084013e613f7a565b606091505b505080985050505050505050505050505b565b6000808303613f9f5760009050614001565b60008284613fad91906147b7565b9050828482613fbc9190614828565b14613ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff3906157cb565b60405180910390fd5b809150505b92915050565b600061404983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417a565b905092915050565b505050565b600061409883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135a7565b905092915050565b6140cb307f000000000000000000000000000000000000000000000000000000000000000084612663565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401614130969594939291906157eb565b60606040518083038185885af115801561414e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141739190615861565b5050505050565b600080831182906141c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b8919061426d565b60405180910390fd5b50600083856141d09190614828565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142175780820151818401526020810190506141fc565b60008484015250505050565b6000601f19601f8301169050919050565b600061423f826141dd565b61424981856141e8565b93506142598185602086016141f9565b61426281614223565b840191505092915050565b600060208201905081810360008301526142878184614234565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142bf82614294565b9050919050565b6142cf816142b4565b81146142da57600080fd5b50565b6000813590506142ec816142c6565b92915050565b6000819050919050565b614305816142f2565b811461431057600080fd5b50565b600081359050614322816142fc565b92915050565b6000806040838503121561433f5761433e61428f565b5b600061434d858286016142dd565b925050602061435e85828601614313565b9150509250929050565b60008115159050919050565b61437d81614368565b82525050565b60006020820190506143986000830184614374565b92915050565b6000602082840312156143b4576143b361428f565b5b60006143c2848285016142dd565b91505092915050565b6000819050919050565b60006143f06143eb6143e684614294565b6143cb565b614294565b9050919050565b6000614402826143d5565b9050919050565b6000614414826143f7565b9050919050565b61442481614409565b82525050565b600060208201905061443f600083018461441b565b92915050565b61444e816142f2565b82525050565b60006020820190506144696000830184614445565b92915050565b6000602082840312156144855761448461428f565b5b600061449384828501614313565b91505092915050565b6000806000606084860312156144b5576144b461428f565b5b60006144c3868287016142dd565b93505060206144d4868287016142dd565b92505060406144e586828701614313565b9150509250925092565b600060ff82169050919050565b614505816144ef565b82525050565b600060208201905061452060008301846144fc565b92915050565b61452f816142b4565b82525050565b600060208201905061454a6000830184614526565b92915050565b61455981614368565b811461456457600080fd5b50565b60008135905061457681614550565b92915050565b600080604083850312156145935761459261428f565b5b60006145a1858286016142dd565b92505060206145b285828601614567565b9150509250929050565b6000806000606084860312156145d5576145d461428f565b5b60006145e386828701614313565b93505060206145f486828701614313565b925050604061460586828701614313565b9150509250925092565b6000602082840312156146255761462461428f565b5b600061463384828501614567565b91505092915050565b600080604083850312156146535761465261428f565b5b600061466185828601614313565b925050602061467285828601614313565b9150509250929050565b600080604083850312156146935761469261428f565b5b60006146a1858286016142dd565b92505060206146b2858286016142dd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470357607f821691505b602082108103614716576147156146bc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147526020836141e8565b915061475d8261471c565b602082019050919050565b6000602082019050818103600083015261478181614745565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c2826142f2565b91506147cd836142f2565b92508282026147db816142f2565b915082820484148315176147f2576147f1614788565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614833826142f2565b915061483e836142f2565b92508261484e5761484d6147f9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006148b5602f836141e8565b91506148c082614859565b604082019050919050565b600060208201905081810360008301526148e4816148a8565b9050919050565b60006148f6826142f2565b9150614901836142f2565b925082820190508082111561491957614918614788565b5b92915050565b7f4d757374206b656570206665657320617420342e3925206f72206c6573730000600082015250565b6000614955601e836141e8565b91506149608261491f565b602082019050919050565b6000602082019050818103600083015261498481614948565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149e76039836141e8565b91506149f28261498b565b604082019050919050565b60006020820190508181036000830152614a16816149da565b9050919050565b7f616d6f756e742065786365656465640000000000000000000000000000000000600082015250565b6000614a53600f836141e8565b9150614a5e82614a1d565b602082019050919050565b60006020820190508181036000830152614a8281614a46565b9050919050565b600081905092915050565b50565b6000614aa4600083614a89565b9150614aaf82614a94565b600082019050919050565b6000614ac582614a97565b9150819050919050565b7f4d757374206b656570206665657320617420392e3925206f72206c6573730000600082015250565b6000614b05601e836141e8565b9150614b1082614acf565b602082019050919050565b60006020820190508181036000830152614b3481614af8565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b976024836141e8565b9150614ba282614b3b565b604082019050919050565b60006020820190508181036000830152614bc681614b8a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c296035836141e8565b9150614c3482614bcd565b604082019050919050565b60006020820190508181036000830152614c5881614c1c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614cbb6034836141e8565b9150614cc682614c5f565b604082019050919050565b60006020820190508181036000830152614cea81614cae565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d4d6026836141e8565b9150614d5882614cf1565b604082019050919050565b60006020820190508181036000830152614d7c81614d40565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ddf6024836141e8565b9150614dea82614d83565b604082019050919050565b60006020820190508181036000830152614e0e81614dd2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e716022836141e8565b9150614e7c82614e15565b604082019050919050565b60006020820190508181036000830152614ea081614e64565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f036025836141e8565b9150614f0e82614ea7565b604082019050919050565b60006020820190508181036000830152614f3281614ef6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f956023836141e8565b9150614fa082614f39565b604082019050919050565b60006020820190508181036000830152614fc481614f88565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006150276031836141e8565b915061503282614fcb565b604082019050919050565b600060208201905081810360008301526150568161501a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150936016836141e8565b915061509e8261505d565b602082019050919050565b600060208201905081810360008301526150c281615086565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061514b6049836141e8565b9150615156826150c9565b606082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006151dd6035836141e8565b91506151e882615181565b604082019050919050565b6000602082019050818103600083015261520c816151d0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152496013836141e8565b915061525482615213565b602082019050919050565b600060208201905081810360008301526152788161523c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006152db6036836141e8565b91506152e68261527f565b604082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b600061531c826142f2565b9150615327836142f2565b925082820390508181111561533f5761533e614788565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061537b601b836141e8565b915061538682615345565b602082019050919050565b600060208201905081810360008301526153aa8161536e565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115615408578086048111156153e4576153e3614788565b5b60018516156153f35780820291505b8081029050615401856153b1565b94506153c8565b94509492505050565b60008261542157600190506154dd565b8161542f57600090506154dd565b8160018114615445576002811461544f5761547e565b60019150506154dd565b60ff84111561546157615460614788565b5b8360020a91508482111561547857615477614788565b5b506154dd565b5060208310610133831016604e8410600b84101617156154b35782820a9050838111156154ae576154ad614788565b5b6154dd565b6154c084848460016153be565b925090508184048111156154d7576154d6614788565b5b81810290505b9392505050565b60006154ef826142f2565b91506154fa836144ef565b92506155277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615411565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061559c816142c6565b92915050565b6000602082840312156155b8576155b761428f565b5b60006155c68482850161558d565b91505092915050565b6000819050919050565b60006155f46155ef6155ea846155cf565b6143cb565b6142f2565b9050919050565b615604816155d9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61563f816142b4565b82525050565b60006156518383615636565b60208301905092915050565b6000602082019050919050565b60006156758261560a565b61567f8185615615565b935061568a83615626565b8060005b838110156156bb5781516156a28882615645565b97506156ad8361565d565b92505060018101905061568e565b5085935050505092915050565b600060a0820190506156dd6000830188614445565b6156ea60208301876155fb565b81810360408301526156fc818661566a565b905061570b6060830185614526565b6157186080830184614445565b9695505050505050565b60006060820190506157376000830186614445565b6157446020830185614445565b6157516040830184614445565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006157b56021836141e8565b91506157c082615759565b604082019050919050565b600060208201905081810360008301526157e4816157a8565b9050919050565b600060c0820190506158006000830189614526565b61580d6020830188614445565b61581a60408301876155fb565b61582760608301866155fb565b6158346080830185614526565b61584160a0830184614445565b979650505050505050565b60008151905061585b816142fc565b92915050565b60008060006060848603121561587a5761587961428f565b5b60006158888682870161584c565b93505060206158998682870161584c565b92505060406158aa8682870161584c565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220990dcbf723994864e77a5fd0c15a377fffed3cce583d686aa55efbc7eb0ac99964736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103035760003560e01c806395d89b4111610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bbb578063f2fde38b14610be6578063f637434214610c0f578063f8b45b0514610c3a5761030a565b8063dd62ed3e14610b28578063e2f4560514610b65578063e884f26014610b905761030a565b8063c17b5b8c14610a18578063c18bc19514610a41578063c876d0b914610a6a578063c8c8ebe414610a95578063d257b34f14610ac0578063d85ba06314610afd5761030a565b8063a8b9f94d11610149578063b62496f511610123578063b62496f51461094a578063ba7bd2aa14610987578063bbc0c742146109c4578063c0246668146109ef5761030a565b8063a8b9f94d146108b9578063a9059cbb146108e4578063aacebbe3146109215761030a565b806395d89b41146107a75780639a7a23d6146107d25780639c3b4fdc146107fb5780639fccce3214610826578063a0d82dc514610851578063a457c2d71461087c5761030a565b80634a62bb651161024f578063715018a6116102085780638095d564116101e25780638095d564146107135780638a8c523c1461073c5780638da5cb5b14610753578063924de9b71461077e5761030a565b8063715018a6146106a8578063751039fc146106bf5780637571336a146106ea5761030a565b80634a62bb65146105825780634fbee193146105ad5780636a486a8e146105ea5780636b41ae0c146106155780636ddd17131461064057806370a082311461066b5761030a565b80631a8145bb116102bc57806323b872dd1161029657806323b872dd146104b2578063313ce567146104ef578063395093511461051a57806349bd5a5e146105575761030a565b80631a8145bb146104335780631f3fed8f1461045e578063203e727e146104895761030a565b806306fdde031461030f578063095ea7b31461033a57806310d5de53146103775780631694505e146103b457806318160ddd146103df5780631816467f1461040a5761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c65565b604051610331919061426d565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190614328565b610cf7565b60405161036e9190614383565b60405180910390f35b34801561038357600080fd5b5061039e6004803603810190610399919061439e565b610d15565b6040516103ab9190614383565b60405180910390f35b3480156103c057600080fd5b506103c9610d35565b6040516103d6919061442a565b60405180910390f35b3480156103eb57600080fd5b506103f4610d59565b6040516104019190614454565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c919061439e565b610d63565b005b34801561043f57600080fd5b50610448610eba565b6040516104559190614454565b60405180910390f35b34801561046a57600080fd5b50610473610ec0565b6040516104809190614454565b60405180910390f35b34801561049557600080fd5b506104b060048036038101906104ab919061446f565b610ec6565b005b3480156104be57600080fd5b506104d960048036038101906104d4919061449c565b610ff0565b6040516104e69190614383565b60405180910390f35b3480156104fb57600080fd5b506105046110c9565b604051610511919061450b565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190614328565b6110d2565b60405161054e9190614383565b60405180910390f35b34801561056357600080fd5b5061056c611185565b6040516105799190614535565b60405180910390f35b34801561058e57600080fd5b506105976111a9565b6040516105a49190614383565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061439e565b6111bc565b6040516105e19190614383565b60405180910390f35b3480156105f657600080fd5b506105ff611212565b60405161060c9190614454565b60405180910390f35b34801561062157600080fd5b5061062a611218565b6040516106379190614454565b60405180910390f35b34801561064c57600080fd5b5061065561121e565b6040516106629190614383565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d919061439e565b611231565b60405161069f9190614454565b60405180910390f35b3480156106b457600080fd5b506106bd611279565b005b3480156106cb57600080fd5b506106d46113d1565b6040516106e19190614383565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c919061457c565b61148c565b005b34801561071f57600080fd5b5061073a600480360381019061073591906145bc565b61157e565b005b34801561074857600080fd5b50610751611698565b005b34801561075f57600080fd5b5061076861176e565b6040516107759190614535565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a0919061460f565b611798565b005b3480156107b357600080fd5b506107bc61184c565b6040516107c9919061426d565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f4919061457c565b6118de565b005b34801561080757600080fd5b50610810611a11565b60405161081d9190614454565b60405180910390f35b34801561083257600080fd5b5061083b611a17565b6040516108489190614454565b60405180910390f35b34801561085d57600080fd5b50610866611a1d565b6040516108739190614454565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e9190614328565b611a23565b6040516108b09190614383565b60405180910390f35b3480156108c557600080fd5b506108ce611af0565b6040516108db9190614454565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190614328565b611af6565b6040516109189190614383565b60405180910390f35b34801561092d57600080fd5b506109486004803603810190610943919061439e565b611b14565b005b34801561095657600080fd5b50610971600480360381019061096c919061439e565b611c6b565b60405161097e9190614383565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a9919061463c565b611c8b565b6040516109bb9190614383565b60405180910390f35b3480156109d057600080fd5b506109d9611e15565b6040516109e69190614383565b60405180910390f35b3480156109fb57600080fd5b50610a166004803603810190610a11919061457c565b611e28565b005b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906145bc565b611f68565b005b348015610a4d57600080fd5b50610a686004803603810190610a63919061446f565b612082565b005b348015610a7657600080fd5b50610a7f6121ac565b604051610a8c9190614383565b60405180910390f35b348015610aa157600080fd5b50610aaa6121bf565b604051610ab79190614454565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae2919061446f565b6121c5565b604051610af49190614383565b60405180910390f35b348015610b0957600080fd5b50610b12612335565b604051610b1f9190614454565b60405180910390f35b348015610b3457600080fd5b50610b4f6004803603810190610b4a919061467c565b61233b565b604051610b5c9190614454565b60405180910390f35b348015610b7157600080fd5b50610b7a6123c2565b604051610b879190614454565b60405180910390f35b348015610b9c57600080fd5b50610ba56123c8565b604051610bb29190614383565b60405180910390f35b348015610bc757600080fd5b50610bd0612483565b604051610bdd9190614454565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c08919061439e565b612489565b005b348015610c1b57600080fd5b50610c2461264f565b604051610c319190614454565b60405180910390f35b348015610c4657600080fd5b50610c4f612655565b604051610c5c9190614454565b60405180910390f35b606060038054610c74906146eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca0906146eb565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610d0b610d0461265b565b8484612663565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d6b61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df190614768565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610ece61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614768565b60405180910390fd5b670de0b6b3a76400006103e86001610f73610d59565b610f7d91906147b7565b610f879190614828565b610f919190614828565b811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca906148cb565b60405180910390fd5b670de0b6b3a764000081610fe791906147b7565b60088190555050565b6000610ffd84848461282c565b6110be8461100961265b565b6110b9856040518060600160405280602881526020016158db60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061106f61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a79092919063ffffffff16565b612663565b600190509392505050565b60006012905090565b600061117b6110df61265b565b8461117685600160006110f061265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461360b90919063ffffffff16565b612663565b6001905092915050565b7f000000000000000000000000fbeeeda9fae8c940ad3ee1dd0e24652d947c2e3281565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61128161265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614768565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113db61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190614768565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61149461265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a90614768565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61158661265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614768565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461163d91906148eb565b61164791906148eb565b60108190555060316010541115611693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168a9061496b565b60405180910390fd5b505050565b6116a061265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172690614768565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117a061265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182690614768565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461185b906146eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611887906146eb565b80156118d45780601f106118a9576101008083540402835291602001916118d4565b820191906000526020600020905b8154815290600101906020018083116118b757829003601f168201915b5050505050905090565b6118e661265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614768565b60405180910390fd5b7f000000000000000000000000fbeeeda9fae8c940ad3ee1dd0e24652d947c2e3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906149fd565b60405180910390fd5b611a0d8282613669565b5050565b60135481565b601a5481565b60175481565b6000611ae6611a3061265b565b84611ae1856040518060600160405280602581526020016159036025913960016000611a5a61265b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a79092919063ffffffff16565b612663565b6001905092915050565b60115481565b6000611b0a611b0361265b565b848461282c565b6001905092915050565b611b1c61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290614768565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b6000601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ce357600080fd5b6000611d0e7f000000000000000000000000fbeeeda9fae8c940ad3ee1dd0e24652d947c2e32611231565b9050600183118015611d2b5750606481611d289190614828565b83105b611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6190614a69565b60405180910390fd5b611d738361370a565b611d7c846137d6565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611dc490614aba565b60006040518083038185875af1925050503d8060008114611e01576040519150601f19603f3d011682016040523d82523d6000602084013e611e06565b606091505b50509050809250505092915050565b600b60019054906101000a900460ff1681565b611e3061265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb690614768565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f5c9190614383565b60405180910390a25050565b611f7061265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690614768565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461202791906148eb565b61203191906148eb565b6014819055506063601454111561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490614b1b565b60405180910390fd5b505050565b61208a61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211090614768565b60405180910390fd5b670de0b6b3a76400006103e8600161212f610d59565b61213991906147b7565b6121439190614828565b61214d9190614828565b81101561218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614bad565b60405180910390fd5b670de0b6b3a7640000816121a391906147b7565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b60006121cf61265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614768565b60405180910390fd5b620186a0600161226c610d59565b61227691906147b7565b6122809190614828565b8210156122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b990614c3f565b60405180910390fd5b6103e860056122cf610d59565b6122d991906147b7565b6122e39190614828565b821115612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90614cd1565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006123d261265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614768565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61249161265b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251790614768565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361258f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258690614d63565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990614df5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273890614e87565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161281f9190614454565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361289b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289290614f19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290190614fab565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129ae5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6129ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e49061503d565b60405180910390fd5b60008103612a0657612a0183836000613a13565b6135a2565b600b60009054906101000a900460ff16156130ca57612a2361176e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a915750612a6161176e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612aca5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b04575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b1d5750600560149054906101000a900460ff16155b156130c957600b60019054906101000a900460ff16612c1757601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bd75750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d906150a9565b60405180910390fd5b5b600f60009054906101000a900460ff1615612de057612c3461176e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cbb57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d1357507f000000000000000000000000fbeeeda9fae8c940ad3ee1dd0e24652d947c2e3273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ddf5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9190615161565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e835750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2a57600854811115612ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec4906151f3565b60405180910390fd5b600a54612ed983611231565b82612ee491906148eb565b1115612f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1c9061525f565b60405180910390fd5b6130c8565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fcd5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301c57600854811115613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300e906152f1565b60405180910390fd5b6130c7565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130c657600a5461307983611231565b8261308491906148eb565b11156130c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130bc9061525f565b60405180910390fd5b5b5b5b5b5b60006130d530611231565b9050600060095482101590508080156130fa5750600b60029054906101000a900460ff165b80156131135750600560149054906101000a900460ff16155b80156131695750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131bf5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132155750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613259576001600560146101000a81548160ff02191690831515021790555061323d613ca6565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061330f5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561331957600090505b6000811561359257601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561337c57506000601454115b15613449576133a9606461339b60145488613f8d90919063ffffffff16565b61400790919063ffffffff16565b9050601454601654826133bc91906147b7565b6133c69190614828565b601960008282546133d791906148eb565b92505081905550601454601754826133ef91906147b7565b6133f99190614828565b601a600082825461340a91906148eb565b925050819055506014546015548261342291906147b7565b61342c9190614828565b6018600082825461343d91906148eb565b9250508190555061356e565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134a457506000601054115b1561356d576134d160646134c360105488613f8d90919063ffffffff16565b61400790919063ffffffff16565b9050601054601254826134e491906147b7565b6134ee9190614828565b601960008282546134ff91906148eb565b925050819055506010546013548261351791906147b7565b6135219190614828565b601a600082825461353291906148eb565b925050819055506010546011548261354a91906147b7565b6135549190614828565b6018600082825461356591906148eb565b925050819055505b5b600081111561358357613582873083613a13565b5b808561358f9190615311565b94505b61359d878787613a13565b505050505b505050565b60008383111582906135ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e6919061426d565b60405180910390fd5b50600083856135fe9190615311565b9050809150509392505050565b600080828461361a91906148eb565b90508381101561365f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365690615391565b60405180910390fd5b8091505092915050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6137537f000000000000000000000000fbeeeda9fae8c940ad3ee1dd0e24652d947c2e32306137376110c9565b600a61374391906154e4565b8461374e91906147b7565b61282c565b7f000000000000000000000000fbeeeda9fae8c940ad3ee1dd0e24652d947c2e3273ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156137bb57600080fd5b505af11580156137cf573d6000803e3d6000fd5b5050505050565b6000600267ffffffffffffffff8111156137f3576137f261552f565b5b6040519080825280602002602001820160405280156138215781602001602082028036833780820191505090505b50905030816000815181106138395761383861555e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390291906155a2565b816001815181106139165761391561555e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061397b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612663565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139dd9594939291906156c8565b600060405180830381600087803b1580156139f757600080fd5b505af1158015613a0b573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7990614f19565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ae890614fab565b60405180910390fd5b613afc838383614051565b613b67816040518060600160405280602681526020016158b5602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135a79092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bfa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461360b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c999190614454565b60405180910390a3505050565b6000613cb130611231565b90506000601a54601854601954613cc891906148eb565b613cd291906148eb565b9050600080831480613ce45750600082145b15613cf157505050613f8b565b6014600954613d0091906147b7565b831115613d19576014600954613d1691906147b7565b92505b600060028360195486613d2c91906147b7565b613d369190614828565b613d409190614828565b90506000613d57828661405690919063ffffffff16565b90506000479050613d67826137d6565b6000613d7c824761405690919063ffffffff16565b90506000613da787613d9960185485613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506000613dd288613dc4601a5486613f8d90919063ffffffff16565b61400790919063ffffffff16565b90506000818385613de39190615311565b613ded9190615311565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613e4d90614aba565b60006040518083038185875af1925050503d8060008114613e8a576040519150601f19603f3d011682016040523d82523d6000602084013e613e8f565b606091505b505080985050600087118015613ea55750600081115b15613ef257613eb487826140a0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613ee993929190615722565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613f3890614aba565b60006040518083038185875af1925050503d8060008114613f75576040519150601f19603f3d011682016040523d82523d6000602084013e613f7a565b606091505b505080985050505050505050505050505b565b6000808303613f9f5760009050614001565b60008284613fad91906147b7565b9050828482613fbc9190614828565b14613ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff3906157cb565b60405180910390fd5b809150505b92915050565b600061404983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061417a565b905092915050565b505050565b600061409883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506135a7565b905092915050565b6140cb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612663565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401614130969594939291906157eb565b60606040518083038185885af115801561414e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141739190615861565b5050505050565b600080831182906141c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141b8919061426d565b60405180910390fd5b50600083856141d09190614828565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142175780820151818401526020810190506141fc565b60008484015250505050565b6000601f19601f8301169050919050565b600061423f826141dd565b61424981856141e8565b93506142598185602086016141f9565b61426281614223565b840191505092915050565b600060208201905081810360008301526142878184614234565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142bf82614294565b9050919050565b6142cf816142b4565b81146142da57600080fd5b50565b6000813590506142ec816142c6565b92915050565b6000819050919050565b614305816142f2565b811461431057600080fd5b50565b600081359050614322816142fc565b92915050565b6000806040838503121561433f5761433e61428f565b5b600061434d858286016142dd565b925050602061435e85828601614313565b9150509250929050565b60008115159050919050565b61437d81614368565b82525050565b60006020820190506143986000830184614374565b92915050565b6000602082840312156143b4576143b361428f565b5b60006143c2848285016142dd565b91505092915050565b6000819050919050565b60006143f06143eb6143e684614294565b6143cb565b614294565b9050919050565b6000614402826143d5565b9050919050565b6000614414826143f7565b9050919050565b61442481614409565b82525050565b600060208201905061443f600083018461441b565b92915050565b61444e816142f2565b82525050565b60006020820190506144696000830184614445565b92915050565b6000602082840312156144855761448461428f565b5b600061449384828501614313565b91505092915050565b6000806000606084860312156144b5576144b461428f565b5b60006144c3868287016142dd565b93505060206144d4868287016142dd565b92505060406144e586828701614313565b9150509250925092565b600060ff82169050919050565b614505816144ef565b82525050565b600060208201905061452060008301846144fc565b92915050565b61452f816142b4565b82525050565b600060208201905061454a6000830184614526565b92915050565b61455981614368565b811461456457600080fd5b50565b60008135905061457681614550565b92915050565b600080604083850312156145935761459261428f565b5b60006145a1858286016142dd565b92505060206145b285828601614567565b9150509250929050565b6000806000606084860312156145d5576145d461428f565b5b60006145e386828701614313565b93505060206145f486828701614313565b925050604061460586828701614313565b9150509250925092565b6000602082840312156146255761462461428f565b5b600061463384828501614567565b91505092915050565b600080604083850312156146535761465261428f565b5b600061466185828601614313565b925050602061467285828601614313565b9150509250929050565b600080604083850312156146935761469261428f565b5b60006146a1858286016142dd565b92505060206146b2858286016142dd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470357607f821691505b602082108103614716576147156146bc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147526020836141e8565b915061475d8261471c565b602082019050919050565b6000602082019050818103600083015261478181614745565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147c2826142f2565b91506147cd836142f2565b92508282026147db816142f2565b915082820484148315176147f2576147f1614788565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614833826142f2565b915061483e836142f2565b92508261484e5761484d6147f9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006148b5602f836141e8565b91506148c082614859565b604082019050919050565b600060208201905081810360008301526148e4816148a8565b9050919050565b60006148f6826142f2565b9150614901836142f2565b925082820190508082111561491957614918614788565b5b92915050565b7f4d757374206b656570206665657320617420342e3925206f72206c6573730000600082015250565b6000614955601e836141e8565b91506149608261491f565b602082019050919050565b6000602082019050818103600083015261498481614948565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149e76039836141e8565b91506149f28261498b565b604082019050919050565b60006020820190508181036000830152614a16816149da565b9050919050565b7f616d6f756e742065786365656465640000000000000000000000000000000000600082015250565b6000614a53600f836141e8565b9150614a5e82614a1d565b602082019050919050565b60006020820190508181036000830152614a8281614a46565b9050919050565b600081905092915050565b50565b6000614aa4600083614a89565b9150614aaf82614a94565b600082019050919050565b6000614ac582614a97565b9150819050919050565b7f4d757374206b656570206665657320617420392e3925206f72206c6573730000600082015250565b6000614b05601e836141e8565b9150614b1082614acf565b602082019050919050565b60006020820190508181036000830152614b3481614af8565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b976024836141e8565b9150614ba282614b3b565b604082019050919050565b60006020820190508181036000830152614bc681614b8a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c296035836141e8565b9150614c3482614bcd565b604082019050919050565b60006020820190508181036000830152614c5881614c1c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614cbb6034836141e8565b9150614cc682614c5f565b604082019050919050565b60006020820190508181036000830152614cea81614cae565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d4d6026836141e8565b9150614d5882614cf1565b604082019050919050565b60006020820190508181036000830152614d7c81614d40565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ddf6024836141e8565b9150614dea82614d83565b604082019050919050565b60006020820190508181036000830152614e0e81614dd2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e716022836141e8565b9150614e7c82614e15565b604082019050919050565b60006020820190508181036000830152614ea081614e64565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f036025836141e8565b9150614f0e82614ea7565b604082019050919050565b60006020820190508181036000830152614f3281614ef6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f956023836141e8565b9150614fa082614f39565b604082019050919050565b60006020820190508181036000830152614fc481614f88565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006150276031836141e8565b915061503282614fcb565b604082019050919050565b600060208201905081810360008301526150568161501a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150936016836141e8565b915061509e8261505d565b602082019050919050565b600060208201905081810360008301526150c281615086565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061514b6049836141e8565b9150615156826150c9565b606082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006151dd6035836141e8565b91506151e882615181565b604082019050919050565b6000602082019050818103600083015261520c816151d0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152496013836141e8565b915061525482615213565b602082019050919050565b600060208201905081810360008301526152788161523c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006152db6036836141e8565b91506152e68261527f565b604082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b600061531c826142f2565b9150615327836142f2565b925082820390508181111561533f5761533e614788565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061537b601b836141e8565b915061538682615345565b602082019050919050565b600060208201905081810360008301526153aa8161536e565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115615408578086048111156153e4576153e3614788565b5b60018516156153f35780820291505b8081029050615401856153b1565b94506153c8565b94509492505050565b60008261542157600190506154dd565b8161542f57600090506154dd565b8160018114615445576002811461544f5761547e565b60019150506154dd565b60ff84111561546157615460614788565b5b8360020a91508482111561547857615477614788565b5b506154dd565b5060208310610133831016604e8410600b84101617156154b35782820a9050838111156154ae576154ad614788565b5b6154dd565b6154c084848460016153be565b925090508184048111156154d7576154d6614788565b5b81810290505b9392505050565b60006154ef826142f2565b91506154fa836144ef565b92506155277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615411565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061559c816142c6565b92915050565b6000602082840312156155b8576155b761428f565b5b60006155c68482850161558d565b91505092915050565b6000819050919050565b60006155f46155ef6155ea846155cf565b6143cb565b6142f2565b9050919050565b615604816155d9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61563f816142b4565b82525050565b60006156518383615636565b60208301905092915050565b6000602082019050919050565b60006156758261560a565b61567f8185615615565b935061568a83615626565b8060005b838110156156bb5781516156a28882615645565b97506156ad8361565d565b92505060018101905061568e565b5085935050505092915050565b600060a0820190506156dd6000830188614445565b6156ea60208301876155fb565b81810360408301526156fc818661566a565b905061570b6060830185614526565b6157186080830184614445565b9695505050505050565b60006060820190506157376000830186614445565b6157446020830185614445565b6157516040830184614445565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006157b56021836141e8565b91506157c082615759565b604082019050919050565b600060208201905081810360008301526157e4816157a8565b9050919050565b600060c0820190506158006000830189614526565b61580d6020830188614445565b61581a60408301876155fb565b61582760608301866155fb565b6158346080830185614526565b61584160a0830184614445565b979650505050505050565b60008151905061585b816142fc565b92915050565b60008060006060848603121561587a5761587961428f565b5b60006158888682870161584c565b93505060206158998682870161584c565b92505060406158aa8682870161584c565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220990dcbf723994864e77a5fd0c15a377fffed3cce583d686aa55efbc7eb0ac99964736f6c63430008130033

Deployed Bytecode Sourcemap

29311:15993:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7412:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9586:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30834:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29385:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8535:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38088:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30548:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30508;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35041:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10238:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8376:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11003:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29443:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29711:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38254:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30365:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30400;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29791:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8707:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21914:148;;;;;;;;;;;;;:::i;:::-;;34255:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35508:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35858:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34054:148;;;;;;;;;;;;;:::i;:::-;;21270:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35749:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7632:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37419:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30331:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30588:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30473:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11725:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30260:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9048:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37871:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31057:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36605:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29751:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37228:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36225:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35284:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30177:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29595:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34646:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30226:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9287:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29637:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34437:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30294:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22218:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30435:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29677:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7412:100;7466:13;7499:5;7492:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7412:100;:::o;9586:169::-;9669:4;9686:39;9695:12;:10;:12::i;:::-;9709:7;9718:6;9686:8;:39::i;:::-;9743:4;9736:11;;9586:169;;;;:::o;30834:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29385:51::-;;;:::o;8535:108::-;8596:7;8623:12;;8616:19;;8535:108;:::o;38088:157::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38195:9:::1;;;;;;;;;;;38167:38;;38184:9;38167:38;;;;;;;;;;;;38228:9;38216;;:21;;;;;;;;;;;;;;;;;;38088:157:::0;:::o;30548:33::-;;;;:::o;30508:::-;;;;:::o;35041:234::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35160:4:::1;35154;35150:1;35134:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35133:31;;;;:::i;:::-;35123:6;:41;;35115:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35260:6;35250;:17;;;;:::i;:::-;35227:20;:40;;;;35041:234:::0;:::o;10238:355::-;10378:4;10395:36;10405:6;10413:9;10424:6;10395:9;:36::i;:::-;10442:121;10451:6;10459:12;:10;:12::i;:::-;10473:89;10511:6;10473:89;;;;;;;;;;;;;;;;;:11;:19;10485:6;10473:19;;;;;;;;;;;;;;;:33;10493:12;:10;:12::i;:::-;10473:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10442:8;:121::i;:::-;10581:4;10574:11;;10238:355;;;;;:::o;8376:93::-;8434:5;8459:2;8452:9;;8376:93;:::o;11003:218::-;11091:4;11108:83;11117:12;:10;:12::i;:::-;11131:7;11140:50;11179:10;11140:11;:25;11152:12;:10;:12::i;:::-;11140:25;;;;;;;;;;;;;;;:34;11166:7;11140:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11108:8;:83::i;:::-;11209:4;11202:11;;11003:218;;;;:::o;29443:38::-;;;:::o;29711:33::-;;;;;;;;;;;;;:::o;38254:125::-;38319:4;38343:19;:28;38363:7;38343:28;;;;;;;;;;;;;;;;;;;;;;;;;38336:35;;38254:125;;;:::o;30365:28::-;;;;:::o;30400:::-;;;;:::o;29791:31::-;;;;;;;;;;;;;:::o;8707:127::-;8781:7;8808:9;:18;8818:7;8808:18;;;;;;;;;;;;;;;;8801:25;;8707:127;;;:::o;21914:148::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22021:1:::1;21984:40;;22005:6;;;;;;;;;;;21984:40;;;;;;;;;;;;22052:1;22035:6;;:19;;;;;;;;;;;;;;;;;;21914:148::o:0;34255:120::-;34307:4;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34340:5:::1;34323:14;;:22;;;;;;;;;;;;;;;;;;34363:4;34356:11;;34255:120:::0;:::o;35508:144::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35640:4:::1;35598:31;:39;35630:6;35598:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35508:144:::0;;:::o;35858:358::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35986:10:::1;35971:12;:25;;;;36025:13;36007:15;:31;;;;36061:7;36049:9;:19;;;;36127:9;;36109:15;;36094:12;;:30;;;;:::i;:::-;:42;;;;:::i;:::-;36079:12;:57;;;;36171:2;36155:12;;:18;;36147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35858:358:::0;;;:::o;34054:148::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34125:4:::1;34109:13;;:20;;;;;;;;;;;;;;;;;;34154:4;34140:11;;:18;;;;;;;;;;;;;;;;;;34182:12;34169:10;:25;;;;34054:148::o:0;21270:79::-;21308:7;21335:6;;;;;;;;;;;21328:13;;21270:79;:::o;35749:101::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35835:7:::1;35821:11;;:21;;;;;;;;;;;;;;;;;;35749:101:::0;:::o;7632:104::-;7688:13;7721:7;7714:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7632:104;:::o;37419:245::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37526:13:::1;37518:21;;:4;:21;;::::0;37510:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37615:41;37644:4;37650:5;37615:28;:41::i;:::-;37419:245:::0;;:::o;30331:24::-;;;;:::o;30588:27::-;;;;:::o;30473:25::-;;;;:::o;11725:269::-;11818:4;11835:129;11844:12;:10;:12::i;:::-;11858:7;11867:96;11906:15;11867:96;;;;;;;;;;;;;;;;;:11;:25;11879:12;:10;:12::i;:::-;11867:25;;;;;;;;;;;;;;;:34;11893:7;11867:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11835:8;:129::i;:::-;11982:4;11975:11;;11725:269;;;;:::o;30260:27::-;;;;:::o;9048:175::-;9134:4;9151:42;9161:12;:10;:12::i;:::-;9175:9;9186:6;9151:9;:42::i;:::-;9211:4;9204:11;;9048:175;;;;:::o;37871:208::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38008:15:::1;;;;;;;;;;;37965:59;;37988:18;37965:59;;;;;;;;;;;;38053:18;38035:15;;:36;;;;;;;;;;;;;;;;;;37871:208:::0;:::o;31057:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;36605:422::-;36667:4;36692:19;:31;36712:10;36692:31;;;;;;;;;;;;;;;;;;;;;;;;;36684:40;;;;;;36737:7;36747:24;36757:13;36747:9;:24::i;:::-;36737:34;;36797:1;36792:2;:6;:23;;;;;36812:3;36807:2;:8;;;;:::i;:::-;36802:2;:13;36792:23;36784:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36848:19;36864:2;36848:15;:19::i;:::-;36878:22;36895:4;36878:16;:22::i;:::-;36914:12;36939:15;;;;;;;;;;;36931:29;;36968:21;36931:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36913:81;;;37012:7;37005:14;;;;36605:422;;;;:::o;29751:33::-;;;;;;;;;;;;;:::o;37228:182::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37344:8:::1;37313:19;:28;37333:7;37313:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37384:7;37368:34;;;37393:8;37368:34;;;;;;:::i;:::-;;;;;;;;37228:182:::0;;:::o;36225:367::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36355:10:::1;36339:13;:26;;;;36395:13;36376:16;:32;;;;36432:7;36419:10;:20;;;;36501:10;;36482:16;;36466:13;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;36450:13;:61;;;;36547:2;36530:13;;:19;;36522:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36225:367:::0;;;:::o;35284:215::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35406:4:::1;35400;35396:1;35380:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35379:31;;;;:::i;:::-;35369:6;:41;;35361:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35484:6;35474;:17;;;;:::i;:::-;35462:9;:29;;;;35284:215:::0;:::o;30177:39::-;;;;;;;;;;;;;:::o;29595:35::-;;;;:::o;34646:386::-;34727:4;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34784:6:::1;34780:1;34764:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34751:9;:39;;34743:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34900:4;34896:1;34880:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34867:9;:37;;34859:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34993:9;34972:18;:30;;;;35020:4;35013:11;;34646:386:::0;;;:::o;30226:27::-;;;;:::o;9287:151::-;9376:7;9403:11;:18;9415:5;9403:18;;;;;;;;;;;;;;;:27;9422:7;9403:27;;;;;;;;;;;;;;;;9396:34;;9287:151;;;;:::o;29637:33::-;;;;:::o;34437:134::-;34497:4;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34536:5:::1;34513:20;;:28;;;;;;;;;;;;;;;;;;34559:4;34552:11;;34437:134:::0;:::o;30294:30::-;;;;:::o;22218:244::-;21493:12;:10;:12::i;:::-;21483:22;;:6;;;;;;;;;;;:22;;;21475:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22327:1:::1;22307:22;;:8;:22;;::::0;22299:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22417:8;22388:38;;22409:6;;;;;;;;;;;22388:38;;;;;;;;;;;;22446:8;22437:6;;:17;;;;;;;;;;;;;;;;;;22218:244:::0;:::o;30435:31::-;;;;:::o;29677:24::-;;;;:::o;103:98::-;156:7;183:10;176:17;;103:98;:::o;14921:381::-;15074:1;15057:19;;:5;:19;;;15049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15155:1;15136:21;;:7;:21;;;15128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15240:6;15210:11;:18;15222:5;15210:18;;;;;;;;;;;;;;;:27;15229:7;15210:27;;;;;;;;;;;;;;;:36;;;;15278:7;15262:32;;15271:5;15262:32;;;15287:6;15262:32;;;;;;:::i;:::-;;;;;;;;14921:381;;;:::o;38439:4150::-;38587:1;38571:18;;:4;:18;;;38563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38664:1;38650:16;;:2;:16;;;38642:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38726:10;:14;38737:2;38726:14;;;;;;;;;;;;;;;;;;;;;;;;;38725:15;:36;;;;;38745:10;:16;38756:4;38745:16;;;;;;;;;;;;;;;;;;;;;;;;;38744:17;38725:36;38717:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38840:1;38830:6;:11;38827:92;;38858:28;38874:4;38880:2;38884:1;38858:15;:28::i;:::-;38901:7;;38827:92;38935:14;;;;;;;;;;;38932:1812;;;38995:7;:5;:7::i;:::-;38987:15;;:4;:15;;;;:49;;;;;39029:7;:5;:7::i;:::-;39023:13;;:2;:13;;;;38987:49;:86;;;;;39071:1;39057:16;;:2;:16;;;;38987:86;:128;;;;;39108:6;39094:21;;:2;:21;;;;38987:128;:158;;;;;39137:8;;;;;;;;;;;39136:9;38987:158;38965:1768;;;39183:13;;;;;;;;;;;39179:148;;39228:19;:25;39248:4;39228:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39257:19;:23;39277:2;39257:23;;;;;;;;;;;;;;;;;;;;;;;;;39228:52;39220:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39179:148;39486:20;;;;;;;;;;;39482:424;;;39540:7;:5;:7::i;:::-;39534:13;;:2;:13;;;;:47;;;;;39565:15;39551:30;;:2;:30;;;;39534:47;:79;;;;;39599:13;39585:28;;:2;:28;;;;39534:79;39530:357;;;39692:12;39649:28;:39;39678:9;39649:39;;;;;;;;;;;;;;;;:55;;39641:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;39851:12;39809:28;:39;39838:9;39809:39;;;;;;;;;;;;;;;:54;;;;39530:357;39482:424;39959:25;:31;39985:4;39959:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39995:31;:35;40027:2;39995:35;;;;;;;;;;;;;;;;;;;;;;;;;39994:36;39959:71;39955:763;;;40077:20;;40067:6;:30;;40059:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40216:9;;40199:13;40209:2;40199:9;:13::i;:::-;40190:6;:22;;;;:::i;:::-;:35;;40182:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39955:763;;;40328:25;:29;40354:2;40328:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40362:31;:37;40394:4;40362:37;;;;;;;;;;;;;;;;;;;;;;;;;40361:38;40328:71;40324:394;;;40446:20;;40436:6;:30;;40428:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40324:394;;;40572:31;:35;40604:2;40572:35;;;;;;;;;;;;;;;;;;;;;;;;;40568:150;;40665:9;;40648:13;40658:2;40648:9;:13::i;:::-;40639:6;:22;;;;:::i;:::-;:35;;40631:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40568:150;40324:394;39955:763;38965:1768;38932:1812;40766:28;40797:24;40815:4;40797:9;:24::i;:::-;40766:55;;40835:12;40874:18;;40850:20;:42;;40835:57;;40924:7;:35;;;;;40948:11;;;;;;;;;;;40924:35;:61;;;;;40977:8;;;;;;;;;;;40976:9;40924:61;:110;;;;;41003:25;:31;41029:4;41003:31;;;;;;;;;;;;;;;;;;;;;;;;;41002:32;40924:110;:153;;;;;41052:19;:25;41072:4;41052:25;;;;;;;;;;;;;;;;;;;;;;;;;41051:26;40924:153;:194;;;;;41095:19;:23;41115:2;41095:23;;;;;;;;;;;;;;;;;;;;;;;;;41094:24;40924:194;40906:328;;;41156:4;41145:8;;:15;;;;;;;;;;;;;;;;;;41178:10;:8;:10::i;:::-;41217:5;41206:8;;:16;;;;;;;;;;;;;;;;;;40906:328;41248:12;41264:8;;;;;;;;;;;41263:9;41248:24;;41374:19;:25;41394:4;41374:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41403:19;:23;41423:2;41403:23;;;;;;;;;;;;;;;;;;;;;;;;;41374:52;41371:99;;;41453:5;41443:15;;41371:99;41483:12;41587:7;41584:951;;;41638:25;:29;41664:2;41638:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41687:1;41671:13;;:17;41638:50;41634:748;;;41715:34;41745:3;41715:25;41726:13;;41715:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41708:41;;41816:13;;41797:16;;41790:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41768:18;;:61;;;;;;;:::i;:::-;;;;;;;;41884:13;;41871:10;;41864:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41848:12;;:49;;;;;;;:::i;:::-;;;;;;;;41961:13;;41945;;41938:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;41916:18;;:58;;;;;;;:::i;:::-;;;;;;;;41634:748;;;42035:25;:31;42061:4;42035:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42085:1;42070:12;;:16;42035:51;42032:350;;;42114:33;42143:3;42114:24;42125:12;;42114:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42107:40;;42213:12;;42195:15;;42188:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42166:18;;:59;;;;;;;:::i;:::-;;;;;;;;42279:12;;42267:9;;42260:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;42244:12;;:47;;;;;;;:::i;:::-;;;;;;;;42354:12;;42339;;42332:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;42310:18;;:56;;;;;;;:::i;:::-;;;;;;;;42032:350;41634:748;42409:1;42402:4;:8;42399:93;;;42434:42;42450:4;42464;42471;42434:15;:42::i;:::-;42399:93;42519:4;42509:14;;;;;:::i;:::-;;;41584:951;42548:33;42564:4;42570:2;42574:6;42548:15;:33::i;:::-;38552:4037;;;;38439:4150;;;;:::o;17208:193::-;17294:7;17327:1;17322;:6;;17330:12;17314:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17354:9;17370:1;17366;:5;;;;:::i;:::-;17354:17;;17392:1;17385:8;;;17208:193;;;;;:::o;16302:182::-;16360:7;16380:9;16396:1;16392;:5;;;;:::i;:::-;16380:17;;16421:1;16416;:6;;16408:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16475:1;16468:8;;;16302:182;;;;:::o;37673:189::-;37790:5;37756:25;:31;37782:4;37756:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37848:5;37814:40;;37842:4;37814:40;;;;;;;;;;;;37673:189;;:::o;37036:183::-;37097:67;37107:13;37130:4;37153:10;:8;:10::i;:::-;37147:2;:16;;;;:::i;:::-;37137:7;:26;;;;:::i;:::-;37097:9;:67::i;:::-;37190:13;37175:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37036:183;:::o;42598:597::-;42727:21;42765:1;42751:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42727:40;;42796:4;42778;42783:1;42778:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42822:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42812:4;42817:1;42812:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42858:62;42875:4;42890:15;42908:11;42858:8;:62::i;:::-;42960:15;:66;;;43041:11;43067:1;43111:4;43138;43158:15;42960:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42653:542;42598:597;:::o;12485:575::-;12643:1;12625:20;;:6;:20;;;12617:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12727:1;12706:23;;:9;:23;;;12698:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12783:47;12804:6;12812:9;12823:6;12783:20;:47::i;:::-;12864:71;12886:6;12864:71;;;;;;;;;;;;;;;;;:9;:17;12874:6;12864:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12844:9;:17;12854:6;12844:17;;;;;;;;;;;;;;;:91;;;;12969:32;12994:6;12969:9;:20;12979:9;12969:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12946:9;:20;12956:9;12946:20;;;;;;;;;;;;;;;:55;;;;13034:9;13017:35;;13026:6;13017:35;;;13045:6;13017:35;;;;;;:::i;:::-;;;;;;;;12485:575;;;:::o;43733:1568::-;43772:23;43798:24;43816:4;43798:9;:24::i;:::-;43772:50;;43833:25;43903:12;;43882:18;;43861;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43833:82;;43926:12;43974:1;43955:15;:20;:46;;;;44000:1;43979:17;:22;43955:46;43952:60;;;44004:7;;;;;43952:60;44067:2;44046:18;;:23;;;;:::i;:::-;44028:15;:41;44025:111;;;44122:2;44101:18;;:23;;;;:::i;:::-;44083:41;;44025:111;44198:23;44283:1;44263:17;44242:18;;44224:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44198:86;;44295:26;44324:36;44344:15;44324;:19;;:36;;;;:::i;:::-;44295:65;;44374:25;44402:21;44374:49;;44437:36;44454:18;44437:16;:36::i;:::-;44488:18;44509:44;44535:17;44509:21;:25;;:44;;;;:::i;:::-;44488:65;;44567:23;44593:57;44632:17;44593:34;44608:18;;44593:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44567:83;;44661:17;44681:51;44714:17;44681:28;44696:12;;44681:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44661:71;;44743:23;44800:9;44782:15;44769:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44743:66;;44847:1;44826:18;:22;;;;44880:1;44859:18;:22;;;;44907:1;44892:12;:16;;;;44943:9;;;;;;;;;;;44935:23;;44966:9;44935:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44922:58;;;;;45015:1;44997:15;:19;:42;;;;;45038:1;45020:15;:19;44997:42;44994:210;;;45055:46;45068:15;45085;45055:12;:46::i;:::-;45121:71;45136:18;45156:15;45173:18;;45121:71;;;;;;;;:::i;:::-;;;;;;;;44994:210;45238:15;;;;;;;;;;;45230:29;;45267:21;45230:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45217:76;;;;;43761:1540;;;;;;;;;;43733:1568;:::o;17661:473::-;17719:7;17969:1;17964;:6;17960:47;;17994:1;17987:8;;;;17960:47;18020:9;18036:1;18032;:5;;;;:::i;:::-;18020:17;;18065:1;18060;18056;:5;;;;:::i;:::-;:10;18048:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18125:1;18118:8;;;17661:473;;;;;:::o;18611:132::-;18669:7;18696:39;18700:1;18703;18696:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18689:46;;18611:132;;;;:::o;15906:125::-;;;;:::o;16768:136::-;16826:7;16853:43;16857:1;16860;16853:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16846:50;;16768:136;;;;:::o;43204:520::-;43352:62;43369:4;43384:15;43402:11;43352:8;:62::i;:::-;43458:15;:31;;;43497:9;43530:4;43550:11;43576:1;43619;43670:4;43690:15;43458:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43204:520;;:::o;19240:279::-;19326:7;19358:1;19354;:5;19361:12;19346:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19385:9;19401:1;19397;:5;;;;:::i;:::-;19385:17;;19510:1;19503:8;;;19240:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:::-;9090:6;9098;9147:2;9135:9;9126:7;9122:23;9118:32;9115:119;;;9153:79;;:::i;:::-;9115:119;9273:1;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9244:117;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;9022:474;;;;;:::o;9502:180::-;9550:77;9547:1;9540:88;9647:4;9644:1;9637:15;9671:4;9668:1;9661:15;9688:320;9732:6;9769:1;9763:4;9759:12;9749:22;;9816:1;9810:4;9806:12;9837:18;9827:81;;9893:4;9885:6;9881:17;9871:27;;9827:81;9955:2;9947:6;9944:14;9924:18;9921:38;9918:84;;9974:18;;:::i;:::-;9918:84;9739:269;9688:320;;;:::o;10014:182::-;10154:34;10150:1;10142:6;10138:14;10131:58;10014:182;:::o;10202:366::-;10344:3;10365:67;10429:2;10424:3;10365:67;:::i;:::-;10358:74;;10441:93;10530:3;10441:93;:::i;:::-;10559:2;10554:3;10550:12;10543:19;;10202:366;;;:::o;10574:419::-;10740:4;10778:2;10767:9;10763:18;10755:26;;10827:9;10821:4;10817:20;10813:1;10802:9;10798:17;10791:47;10855:131;10981:4;10855:131;:::i;:::-;10847:139;;10574:419;;;:::o;10999:180::-;11047:77;11044:1;11037:88;11144:4;11141:1;11134:15;11168:4;11165:1;11158:15;11185:410;11225:7;11248:20;11266:1;11248:20;:::i;:::-;11243:25;;11282:20;11300:1;11282:20;:::i;:::-;11277:25;;11337:1;11334;11330:9;11359:30;11377:11;11359:30;:::i;:::-;11348:41;;11538:1;11529:7;11525:15;11522:1;11519:22;11499:1;11492:9;11472:83;11449:139;;11568:18;;:::i;:::-;11449:139;11233:362;11185:410;;;;:::o;11601:180::-;11649:77;11646:1;11639:88;11746:4;11743:1;11736:15;11770:4;11767:1;11760:15;11787:185;11827:1;11844:20;11862:1;11844:20;:::i;:::-;11839:25;;11878:20;11896:1;11878:20;:::i;:::-;11873:25;;11917:1;11907:35;;11922:18;;:::i;:::-;11907:35;11964:1;11961;11957:9;11952:14;;11787:185;;;;:::o;11978:234::-;12118:34;12114:1;12106:6;12102:14;12095:58;12187:17;12182:2;12174:6;12170:15;12163:42;11978:234;:::o;12218:366::-;12360:3;12381:67;12445:2;12440:3;12381:67;:::i;:::-;12374:74;;12457:93;12546:3;12457:93;:::i;:::-;12575:2;12570:3;12566:12;12559:19;;12218:366;;;:::o;12590:419::-;12756:4;12794:2;12783:9;12779:18;12771:26;;12843:9;12837:4;12833:20;12829:1;12818:9;12814:17;12807:47;12871:131;12997:4;12871:131;:::i;:::-;12863:139;;12590:419;;;:::o;13015:191::-;13055:3;13074:20;13092:1;13074:20;:::i;:::-;13069:25;;13108:20;13126:1;13108:20;:::i;:::-;13103:25;;13151:1;13148;13144:9;13137:16;;13172:3;13169:1;13166:10;13163:36;;;13179:18;;:::i;:::-;13163:36;13015:191;;;;:::o;13212:180::-;13352:32;13348:1;13340:6;13336:14;13329:56;13212:180;:::o;13398:366::-;13540:3;13561:67;13625:2;13620:3;13561:67;:::i;:::-;13554:74;;13637:93;13726:3;13637:93;:::i;:::-;13755:2;13750:3;13746:12;13739:19;;13398:366;;;:::o;13770:419::-;13936:4;13974:2;13963:9;13959:18;13951:26;;14023:9;14017:4;14013:20;14009:1;13998:9;13994:17;13987:47;14051:131;14177:4;14051:131;:::i;:::-;14043:139;;13770:419;;;:::o;14195:244::-;14335:34;14331:1;14323:6;14319:14;14312:58;14404:27;14399:2;14391:6;14387:15;14380:52;14195:244;:::o;14445:366::-;14587:3;14608:67;14672:2;14667:3;14608:67;:::i;:::-;14601:74;;14684:93;14773:3;14684:93;:::i;:::-;14802:2;14797:3;14793:12;14786:19;;14445:366;;;:::o;14817:419::-;14983:4;15021:2;15010:9;15006:18;14998:26;;15070:9;15064:4;15060:20;15056:1;15045:9;15041:17;15034:47;15098:131;15224:4;15098:131;:::i;:::-;15090:139;;14817:419;;;:::o;15242:165::-;15382:17;15378:1;15370:6;15366:14;15359:41;15242:165;:::o;15413:366::-;15555:3;15576:67;15640:2;15635:3;15576:67;:::i;:::-;15569:74;;15652:93;15741:3;15652:93;:::i;:::-;15770:2;15765:3;15761:12;15754:19;;15413:366;;;:::o;15785:419::-;15951:4;15989:2;15978:9;15974:18;15966:26;;16038:9;16032:4;16028:20;16024:1;16013:9;16009:17;16002:47;16066:131;16192:4;16066:131;:::i;:::-;16058:139;;15785:419;;;:::o;16210:147::-;16311:11;16348:3;16333:18;;16210:147;;;;:::o;16363:114::-;;:::o;16483:398::-;16642:3;16663:83;16744:1;16739:3;16663:83;:::i;:::-;16656:90;;16755:93;16844:3;16755:93;:::i;:::-;16873:1;16868:3;16864:11;16857:18;;16483:398;;;:::o;16887:379::-;17071:3;17093:147;17236:3;17093:147;:::i;:::-;17086:154;;17257:3;17250:10;;16887:379;;;:::o;17272:180::-;17412:32;17408:1;17400:6;17396:14;17389:56;17272:180;:::o;17458:366::-;17600:3;17621:67;17685:2;17680:3;17621:67;:::i;:::-;17614:74;;17697:93;17786:3;17697:93;:::i;:::-;17815:2;17810:3;17806:12;17799:19;;17458:366;;;:::o;17830:419::-;17996:4;18034:2;18023:9;18019:18;18011:26;;18083:9;18077:4;18073:20;18069:1;18058:9;18054:17;18047:47;18111:131;18237:4;18111:131;:::i;:::-;18103:139;;17830:419;;;:::o;18255:223::-;18395:34;18391:1;18383:6;18379:14;18372:58;18464:6;18459:2;18451:6;18447:15;18440:31;18255:223;:::o;18484:366::-;18626:3;18647:67;18711:2;18706:3;18647:67;:::i;:::-;18640:74;;18723:93;18812:3;18723:93;:::i;:::-;18841:2;18836:3;18832:12;18825:19;;18484:366;;;:::o;18856:419::-;19022:4;19060:2;19049:9;19045:18;19037:26;;19109:9;19103:4;19099:20;19095:1;19084:9;19080:17;19073:47;19137:131;19263:4;19137:131;:::i;:::-;19129:139;;18856:419;;;:::o;19281:240::-;19421:34;19417:1;19409:6;19405:14;19398:58;19490:23;19485:2;19477:6;19473:15;19466:48;19281:240;:::o;19527:366::-;19669:3;19690:67;19754:2;19749:3;19690:67;:::i;:::-;19683:74;;19766:93;19855:3;19766:93;:::i;:::-;19884:2;19879:3;19875:12;19868:19;;19527:366;;;:::o;19899:419::-;20065:4;20103:2;20092:9;20088:18;20080:26;;20152:9;20146:4;20142:20;20138:1;20127:9;20123:17;20116:47;20180:131;20306:4;20180:131;:::i;:::-;20172:139;;19899:419;;;:::o;20324:239::-;20464:34;20460:1;20452:6;20448:14;20441:58;20533:22;20528:2;20520:6;20516:15;20509:47;20324:239;:::o;20569:366::-;20711:3;20732:67;20796:2;20791:3;20732:67;:::i;:::-;20725:74;;20808:93;20897:3;20808:93;:::i;:::-;20926:2;20921:3;20917:12;20910:19;;20569:366;;;:::o;20941:419::-;21107:4;21145:2;21134:9;21130:18;21122:26;;21194:9;21188:4;21184:20;21180:1;21169:9;21165:17;21158:47;21222:131;21348:4;21222:131;:::i;:::-;21214:139;;20941:419;;;:::o;21366:225::-;21506:34;21502:1;21494:6;21490:14;21483:58;21575:8;21570:2;21562:6;21558:15;21551:33;21366:225;:::o;21597:366::-;21739:3;21760:67;21824:2;21819:3;21760:67;:::i;:::-;21753:74;;21836:93;21925:3;21836:93;:::i;:::-;21954:2;21949:3;21945:12;21938:19;;21597:366;;;:::o;21969:419::-;22135:4;22173:2;22162:9;22158:18;22150:26;;22222:9;22216:4;22212:20;22208:1;22197:9;22193:17;22186:47;22250:131;22376:4;22250:131;:::i;:::-;22242:139;;21969:419;;;:::o;22394:223::-;22534:34;22530:1;22522:6;22518:14;22511:58;22603:6;22598:2;22590:6;22586:15;22579:31;22394:223;:::o;22623:366::-;22765:3;22786:67;22850:2;22845:3;22786:67;:::i;:::-;22779:74;;22862:93;22951:3;22862:93;:::i;:::-;22980:2;22975:3;22971:12;22964:19;;22623:366;;;:::o;22995:419::-;23161:4;23199:2;23188:9;23184:18;23176:26;;23248:9;23242:4;23238:20;23234:1;23223:9;23219:17;23212:47;23276:131;23402:4;23276:131;:::i;:::-;23268:139;;22995:419;;;:::o;23420:221::-;23560:34;23556:1;23548:6;23544:14;23537:58;23629:4;23624:2;23616:6;23612:15;23605:29;23420:221;:::o;23647:366::-;23789:3;23810:67;23874:2;23869:3;23810:67;:::i;:::-;23803:74;;23886:93;23975:3;23886:93;:::i;:::-;24004:2;23999:3;23995:12;23988:19;;23647:366;;;:::o;24019:419::-;24185:4;24223:2;24212:9;24208:18;24200:26;;24272:9;24266:4;24262:20;24258:1;24247:9;24243:17;24236:47;24300:131;24426:4;24300:131;:::i;:::-;24292:139;;24019:419;;;:::o;24444:224::-;24584:34;24580:1;24572:6;24568:14;24561:58;24653:7;24648:2;24640:6;24636:15;24629:32;24444:224;:::o;24674:366::-;24816:3;24837:67;24901:2;24896:3;24837:67;:::i;:::-;24830:74;;24913:93;25002:3;24913:93;:::i;:::-;25031:2;25026:3;25022:12;25015:19;;24674:366;;;:::o;25046:419::-;25212:4;25250:2;25239:9;25235:18;25227:26;;25299:9;25293:4;25289:20;25285:1;25274:9;25270:17;25263:47;25327:131;25453:4;25327:131;:::i;:::-;25319:139;;25046:419;;;:::o;25471:222::-;25611:34;25607:1;25599:6;25595:14;25588:58;25680:5;25675:2;25667:6;25663:15;25656:30;25471:222;:::o;25699:366::-;25841:3;25862:67;25926:2;25921:3;25862:67;:::i;:::-;25855:74;;25938:93;26027:3;25938:93;:::i;:::-;26056:2;26051:3;26047:12;26040:19;;25699:366;;;:::o;26071:419::-;26237:4;26275:2;26264:9;26260:18;26252:26;;26324:9;26318:4;26314:20;26310:1;26299:9;26295:17;26288:47;26352:131;26478:4;26352:131;:::i;:::-;26344:139;;26071:419;;;:::o;26496:236::-;26636:34;26632:1;26624:6;26620:14;26613:58;26705:19;26700:2;26692:6;26688:15;26681:44;26496:236;:::o;26738:366::-;26880:3;26901:67;26965:2;26960:3;26901:67;:::i;:::-;26894:74;;26977:93;27066:3;26977:93;:::i;:::-;27095:2;27090:3;27086:12;27079:19;;26738:366;;;:::o;27110:419::-;27276:4;27314:2;27303:9;27299:18;27291:26;;27363:9;27357:4;27353:20;27349:1;27338:9;27334:17;27327:47;27391:131;27517:4;27391:131;:::i;:::-;27383:139;;27110:419;;;:::o;27535:172::-;27675:24;27671:1;27663:6;27659:14;27652:48;27535:172;:::o;27713:366::-;27855:3;27876:67;27940:2;27935:3;27876:67;:::i;:::-;27869:74;;27952:93;28041:3;27952:93;:::i;:::-;28070:2;28065:3;28061:12;28054:19;;27713:366;;;:::o;28085:419::-;28251:4;28289:2;28278:9;28274:18;28266:26;;28338:9;28332:4;28328:20;28324:1;28313:9;28309:17;28302:47;28366:131;28492:4;28366:131;:::i;:::-;28358:139;;28085:419;;;:::o;28510:297::-;28650:34;28646:1;28638:6;28634:14;28627:58;28719:34;28714:2;28706:6;28702:15;28695:59;28788:11;28783:2;28775:6;28771:15;28764:36;28510:297;:::o;28813:366::-;28955:3;28976:67;29040:2;29035:3;28976:67;:::i;:::-;28969:74;;29052:93;29141:3;29052:93;:::i;:::-;29170:2;29165:3;29161:12;29154:19;;28813:366;;;:::o;29185:419::-;29351:4;29389:2;29378:9;29374:18;29366:26;;29438:9;29432:4;29428:20;29424:1;29413:9;29409:17;29402:47;29466:131;29592:4;29466:131;:::i;:::-;29458:139;;29185:419;;;:::o;29610:240::-;29750:34;29746:1;29738:6;29734:14;29727:58;29819:23;29814:2;29806:6;29802:15;29795:48;29610:240;:::o;29856:366::-;29998:3;30019:67;30083:2;30078:3;30019:67;:::i;:::-;30012:74;;30095:93;30184:3;30095:93;:::i;:::-;30213:2;30208:3;30204:12;30197:19;;29856:366;;;:::o;30228:419::-;30394:4;30432:2;30421:9;30417:18;30409:26;;30481:9;30475:4;30471:20;30467:1;30456:9;30452:17;30445:47;30509:131;30635:4;30509:131;:::i;:::-;30501:139;;30228:419;;;:::o;30653:169::-;30793:21;30789:1;30781:6;30777:14;30770:45;30653:169;:::o;30828:366::-;30970:3;30991:67;31055:2;31050:3;30991:67;:::i;:::-;30984:74;;31067:93;31156:3;31067:93;:::i;:::-;31185:2;31180:3;31176:12;31169:19;;30828:366;;;:::o;31200:419::-;31366:4;31404:2;31393:9;31389:18;31381:26;;31453:9;31447:4;31443:20;31439:1;31428:9;31424:17;31417:47;31481:131;31607:4;31481:131;:::i;:::-;31473:139;;31200:419;;;:::o;31625:241::-;31765:34;31761:1;31753:6;31749:14;31742:58;31834:24;31829:2;31821:6;31817:15;31810:49;31625:241;:::o;31872:366::-;32014:3;32035:67;32099:2;32094:3;32035:67;:::i;:::-;32028:74;;32111:93;32200:3;32111:93;:::i;:::-;32229:2;32224:3;32220:12;32213:19;;31872:366;;;:::o;32244:419::-;32410:4;32448:2;32437:9;32433:18;32425:26;;32497:9;32491:4;32487:20;32483:1;32472:9;32468:17;32461:47;32525:131;32651:4;32525:131;:::i;:::-;32517:139;;32244:419;;;:::o;32669:194::-;32709:4;32729:20;32747:1;32729:20;:::i;:::-;32724:25;;32763:20;32781:1;32763:20;:::i;:::-;32758:25;;32807:1;32804;32800:9;32792:17;;32831:1;32825:4;32822:11;32819:37;;;32836:18;;:::i;:::-;32819:37;32669:194;;;;:::o;32869:177::-;33009:29;33005:1;32997:6;32993:14;32986:53;32869:177;:::o;33052:366::-;33194:3;33215:67;33279:2;33274:3;33215:67;:::i;:::-;33208:74;;33291:93;33380:3;33291:93;:::i;:::-;33409:2;33404:3;33400:12;33393:19;;33052:366;;;:::o;33424:419::-;33590:4;33628:2;33617:9;33613:18;33605:26;;33677:9;33671:4;33667:20;33663:1;33652:9;33648:17;33641:47;33705:131;33831:4;33705:131;:::i;:::-;33697:139;;33424:419;;;:::o;33849:102::-;33891:8;33938:5;33935:1;33931:13;33910:34;;33849:102;;;:::o;33957:848::-;34018:5;34025:4;34049:6;34040:15;;34073:5;34064:14;;34087:712;34108:1;34098:8;34095:15;34087:712;;;34203:4;34198:3;34194:14;34188:4;34185:24;34182:50;;;34212:18;;:::i;:::-;34182:50;34262:1;34252:8;34248:16;34245:451;;;34677:4;34670:5;34666:16;34657:25;;34245:451;34727:4;34721;34717:15;34709:23;;34757:32;34780:8;34757:32;:::i;:::-;34745:44;;34087:712;;;33957:848;;;;;;;:::o;34811:1073::-;34865:5;35056:8;35046:40;;35077:1;35068:10;;35079:5;;35046:40;35105:4;35095:36;;35122:1;35113:10;;35124:5;;35095:36;35191:4;35239:1;35234:27;;;;35275:1;35270:191;;;;35184:277;;35234:27;35252:1;35243:10;;35254:5;;;35270:191;35315:3;35305:8;35302:17;35299:43;;;35322:18;;:::i;:::-;35299:43;35371:8;35368:1;35364:16;35355:25;;35406:3;35399:5;35396:14;35393:40;;;35413:18;;:::i;:::-;35393:40;35446:5;;;35184:277;;35570:2;35560:8;35557:16;35551:3;35545:4;35542:13;35538:36;35520:2;35510:8;35507:16;35502:2;35496:4;35493:12;35489:35;35473:111;35470:246;;;35626:8;35620:4;35616:19;35607:28;;35661:3;35654:5;35651:14;35648:40;;;35668:18;;:::i;:::-;35648:40;35701:5;;35470:246;35741:42;35779:3;35769:8;35763:4;35760:1;35741:42;:::i;:::-;35726:57;;;;35815:4;35810:3;35806:14;35799:5;35796:25;35793:51;;;35824:18;;:::i;:::-;35793:51;35873:4;35866:5;35862:16;35853:25;;34811:1073;;;;;;:::o;35890:281::-;35948:5;35972:23;35990:4;35972:23;:::i;:::-;35964:31;;36016:25;36032:8;36016:25;:::i;:::-;36004:37;;36060:104;36097:66;36087:8;36081:4;36060:104;:::i;:::-;36051:113;;35890:281;;;;:::o;36177:180::-;36225:77;36222:1;36215:88;36322:4;36319:1;36312:15;36346:4;36343:1;36336:15;36363:180;36411:77;36408:1;36401:88;36508:4;36505:1;36498:15;36532:4;36529:1;36522:15;36549:143;36606:5;36637:6;36631:13;36622:22;;36653:33;36680:5;36653:33;:::i;:::-;36549:143;;;;:::o;36698:351::-;36768:6;36817:2;36805:9;36796:7;36792:23;36788:32;36785:119;;;36823:79;;:::i;:::-;36785:119;36943:1;36968:64;37024:7;37015:6;37004:9;37000:22;36968:64;:::i;:::-;36958:74;;36914:128;36698:351;;;;:::o;37055:85::-;37100:7;37129:5;37118:16;;37055:85;;;:::o;37146:158::-;37204:9;37237:61;37255:42;37264:32;37290:5;37264:32;:::i;:::-;37255:42;:::i;:::-;37237:61;:::i;:::-;37224:74;;37146:158;;;:::o;37310:147::-;37405:45;37444:5;37405:45;:::i;:::-;37400:3;37393:58;37310:147;;:::o;37463:114::-;37530:6;37564:5;37558:12;37548:22;;37463:114;;;:::o;37583:184::-;37682:11;37716:6;37711:3;37704:19;37756:4;37751:3;37747:14;37732:29;;37583:184;;;;:::o;37773:132::-;37840:4;37863:3;37855:11;;37893:4;37888:3;37884:14;37876:22;;37773:132;;;:::o;37911:108::-;37988:24;38006:5;37988:24;:::i;:::-;37983:3;37976:37;37911:108;;:::o;38025:179::-;38094:10;38115:46;38157:3;38149:6;38115:46;:::i;:::-;38193:4;38188:3;38184:14;38170:28;;38025:179;;;;:::o;38210:113::-;38280:4;38312;38307:3;38303:14;38295:22;;38210:113;;;:::o;38359:732::-;38478:3;38507:54;38555:5;38507:54;:::i;:::-;38577:86;38656:6;38651:3;38577:86;:::i;:::-;38570:93;;38687:56;38737:5;38687:56;:::i;:::-;38766:7;38797:1;38782:284;38807:6;38804:1;38801:13;38782:284;;;38883:6;38877:13;38910:63;38969:3;38954:13;38910:63;:::i;:::-;38903:70;;38996:60;39049:6;38996:60;:::i;:::-;38986:70;;38842:224;38829:1;38826;38822:9;38817:14;;38782:284;;;38786:14;39082:3;39075:10;;38483:608;;;38359:732;;;;:::o;39097:831::-;39360:4;39398:3;39387:9;39383:19;39375:27;;39412:71;39480:1;39469:9;39465:17;39456:6;39412:71;:::i;:::-;39493:80;39569:2;39558:9;39554:18;39545:6;39493:80;:::i;:::-;39620:9;39614:4;39610:20;39605:2;39594:9;39590:18;39583:48;39648:108;39751:4;39742:6;39648:108;:::i;:::-;39640:116;;39766:72;39834:2;39823:9;39819:18;39810:6;39766:72;:::i;:::-;39848:73;39916:3;39905:9;39901:19;39892:6;39848:73;:::i;:::-;39097:831;;;;;;;;:::o;39934:442::-;40083:4;40121:2;40110:9;40106:18;40098:26;;40134:71;40202:1;40191:9;40187:17;40178:6;40134:71;:::i;:::-;40215:72;40283:2;40272:9;40268:18;40259:6;40215:72;:::i;:::-;40297;40365:2;40354:9;40350:18;40341:6;40297:72;:::i;:::-;39934:442;;;;;;:::o;40382:220::-;40522:34;40518:1;40510:6;40506:14;40499:58;40591:3;40586:2;40578:6;40574:15;40567:28;40382:220;:::o;40608:366::-;40750:3;40771:67;40835:2;40830:3;40771:67;:::i;:::-;40764:74;;40847:93;40936:3;40847:93;:::i;:::-;40965:2;40960:3;40956:12;40949:19;;40608:366;;;:::o;40980:419::-;41146:4;41184:2;41173:9;41169:18;41161:26;;41233:9;41227:4;41223:20;41219:1;41208:9;41204:17;41197:47;41261:131;41387:4;41261:131;:::i;:::-;41253:139;;40980:419;;;:::o;41405:807::-;41654:4;41692:3;41681:9;41677:19;41669:27;;41706:71;41774:1;41763:9;41759:17;41750:6;41706:71;:::i;:::-;41787:72;41855:2;41844:9;41840:18;41831:6;41787:72;:::i;:::-;41869:80;41945:2;41934:9;41930:18;41921:6;41869:80;:::i;:::-;41959;42035:2;42024:9;42020:18;42011:6;41959:80;:::i;:::-;42049:73;42117:3;42106:9;42102:19;42093:6;42049:73;:::i;:::-;42132;42200:3;42189:9;42185:19;42176:6;42132:73;:::i;:::-;41405:807;;;;;;;;;:::o;42218:143::-;42275:5;42306:6;42300:13;42291:22;;42322:33;42349:5;42322:33;:::i;:::-;42218:143;;;;:::o;42367:663::-;42455:6;42463;42471;42520:2;42508:9;42499:7;42495:23;42491:32;42488:119;;;42526:79;;:::i;:::-;42488:119;42646:1;42671:64;42727:7;42718:6;42707:9;42703:22;42671:64;:::i;:::-;42661:74;;42617:128;42784:2;42810:64;42866:7;42857:6;42846:9;42842:22;42810:64;:::i;:::-;42800:74;;42755:129;42923:2;42949:64;43005:7;42996:6;42985:9;42981:22;42949:64;:::i;:::-;42939:74;;42894:129;42367:663;;;;;:::o

Swarm Source

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