ETH Price: $3,282.25 (+0.08%)
Gas: 4 Gwei

Token

WCUP2022 (WCUP2022)
 

Overview

Max Total Supply

1,000,000,000,000 WCUP2022

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
880,000,000 WCUP2022

Value
$0.00
0x3f328e127a96d9df109654e103e561d416bcefe7
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:
WCUP2022

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-23
*/

/*
** WCUP2022
**
** https://www.wcup2022.xyz
** https://t.me/WorIdCup2022
** https://twitter.com/OurWorldCup2022
**
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    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 WCUP2022 is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
 
    bool private swapping;
 
    address public marketingWallet;
    address public devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
 
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
 
    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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("WCUP2022", "WCUP2022") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 6;
        uint256 _buyLiquidityFee = 3;
        uint256 _buyDevFee = 3;
 
        uint256 _sellMarketingFee = 9;
        uint256 _sellLiquidityFee = 4;
        uint256 _sellDevFee = 3;
 
        uint256 _earlySellLiquidityFee = 7;
        uint256 _earlySellMarketingFee = 15;
 
        uint256 totalSupply = 1 * 1e12 * 1e18;
 
        maxTransactionAmount = totalSupply * 1 / 1000; // 0.1% maxTransactionAmountTxn
        maxWallet = totalSupply * 5 / 1000; // .5% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
 
        marketingWallet = address(0xAEf6271aae6FD1c55aB04d8897D00A79783723d2); // set as marketing wallet
        devWallet = address(0x2495C88f34653c022fEFD4E06A831d534Fa9B468); // set as dev wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, 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;
        lastLpBurnTime = block.timestamp;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 12, "Must keep fees at 12% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 16, "Must keep fees at 16% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount(address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }

    function blacklistAccounts(address[] calldata accounts) public onlyOwner() {
        for (uint256 i = 0 ; i < accounts.length; i ++) {
            address account = accounts[i];
            if (_blacklist[account] || account == uniswapV2Pair) {
                continue;
            }

            _blacklist[account] = true;
        }
    }
 
    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 updateWallets(address _marketingWallet, address _devWallet) external onlyOwner {
        marketingWallet = _marketingWallet;
        devWallet = _devWallet;
    }
 
    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 != deadAddress &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (48 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 4;
                sellMarketingFee = 9;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 4;
                sellMarketingFee = 9;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        }
 
		uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){
            autoBurnLiquidityPairTokens();
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
        	amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");

         if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }

        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
 
    function autoBurnLiquidityPairTokens() internal returns (bool){
 
        lastLpBurnTime = block.timestamp;
 
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
 
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);
 
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, deadAddress, amountToBurn);
        }
 
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"blacklistAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601160036101000a81548160ff0219169083151502179055506001601560006101000a81548160ff021916908315150217905550348015620000c457600080fd5b506040518060400160405280600881526020017f57435550323032320000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f574355503230323200000000000000000000000000000000000000000000000081525081600390805190602001906200014992919062000c30565b5080600490805190602001906200016292919062000c30565b505050600062000177620006fc60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002428160016200070460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bd57600080fd5b505afa158015620002d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f8919062000d4a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035b57600080fd5b505afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000d4a565b6040518363ffffffff1660e01b8152600401620003b592919062000d8d565b602060405180830381600087803b158015620003d057600080fd5b505af1158015620003e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040b919062000d4a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200045360a05160016200070460201b60201c565b6200046860a05160016200080160201b60201c565b6000600690506000600390506000600390506000600990506000600490506000600390506000600790506000600f905060006c0c9f2c9cd04674edea4000000090506103e8600182620004bc919062000df3565b620004c8919062000e83565b6008819055506103e8600582620004e0919062000df3565b620004ec919062000e83565b600a8190555061271060058262000504919062000df3565b62000510919062000e83565b60098190555088601781905550876018819055508660198190555060195460185460175462000540919062000ebb565b6200054c919062000ebb565b60168190555085601b8190555084601c8190555083601d81905550601d54601c54601b546200057c919062000ebb565b62000588919062000ebb565b601a8190555082601e8190555081601f8190555073aef6271aae6fd1c55ab04d8897d00a79783723d2600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732495c88f34653c022fefd4e06a831d534fa9b468600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006686200065a620008a260201b60201c565b6001620008cc60201b60201c565b6200067b306001620008cc60201b60201c565b6200069061dead6001620008cc60201b60201c565b620006b2620006a4620008a260201b60201c565b60016200070460201b60201c565b620006c53060016200070460201b60201c565b620006da61dead60016200070460201b60201c565b620006ec338262000a1960201b60201c565b505050505050505050506200114c565b600033905090565b62000714620006fc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079d9062000f79565b60405180910390fd5b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008dc620006fc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200096e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009659062000f79565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a0d919062000fb8565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a839062001025565b60405180910390fd5b62000aa06000838362000bc860201b60201c565b62000abc8160025462000bcd60201b620028241790919060201c565b60028190555062000b1a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000bcd60201b620028241790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bbc919062001058565b60405180910390a35050565b505050565b600080828462000bde919062000ebb565b90508381101562000c26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1d90620010c5565b60405180910390fd5b8091505092915050565b82805462000c3e9062001116565b90600052602060002090601f01602090048101928262000c62576000855562000cae565b82601f1062000c7d57805160ff191683800117855562000cae565b8280016001018555821562000cae579182015b8281111562000cad57825182559160200191906001019062000c90565b5b50905062000cbd919062000cc1565b5090565b5b8082111562000cdc57600081600090555060010162000cc2565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d128262000ce5565b9050919050565b62000d248162000d05565b811462000d3057600080fd5b50565b60008151905062000d448162000d19565b92915050565b60006020828403121562000d635762000d6262000ce0565b5b600062000d738482850162000d33565b91505092915050565b62000d878162000d05565b82525050565b600060408201905062000da4600083018562000d7c565b62000db3602083018462000d7c565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e008262000dba565b915062000e0d8362000dba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e495762000e4862000dc4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e908262000dba565b915062000e9d8362000dba565b92508262000eb05762000eaf62000e54565b5b828204905092915050565b600062000ec88262000dba565b915062000ed58362000dba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f0d5762000f0c62000dc4565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f6160208362000f18565b915062000f6e8262000f29565b602082019050919050565b6000602082019050818103600083015262000f948162000f52565b9050919050565b60008115159050919050565b62000fb28162000f9b565b82525050565b600060208201905062000fcf600083018462000fa7565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200100d601f8362000f18565b91506200101a8262000fd5565b602082019050919050565b60006020820190508181036000830152620010408162000ffe565b9050919050565b620010528162000dba565b82525050565b60006020820190506200106f600083018462001047565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620010ad601b8362000f18565b9150620010ba8262001075565b602082019050919050565b60006020820190508181036000830152620010e0816200109e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200112f57607f821691505b60208210811415620011465762001145620010e7565b5b50919050565b60805160a051615f64620011d4600039600081816114cf0152818161159c01528181611d9501528181612ef0015281816133100152818161340d015281816142ec015281816143b401526143e1015260008181610f8f01528181612e980152818161464b0152818161473b01528181614762015281816147fe01526148250152615f646000f3fe6080604052600436106103bc5760003560e01c80638a8c523c116101f2578063b62496f51161010d578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610e15578063f637434214610e3e578063f8b45b0514610e69578063ff935af614610e94576103c3565b8063e2f4560514610d6b578063e884f26014610d96578063e8ba854f14610dc1578063f11a24d314610dea576103c3565b8063c876d0b9116100dc578063c876d0b914610cad578063c8c8ebe414610cd8578063d85ba06314610d03578063dd62ed3e14610d2e576103c3565b8063b62496f514610bf3578063bbc0c74214610c30578063c024666814610c5b578063c18bc19514610c84576103c3565b80639ec22c0e11610185578063a457c2d711610154578063a457c2d714610b23578063a4c82a0014610b60578063a4d15b6414610b8b578063a9059cbb14610bb6576103c3565b80639ec22c0e14610a795780639fccce3214610aa4578063a0d82dc514610acf578063a265777814610afa576103c3565b8063924de9b7116101c1578063924de9b7146109d157806395d89b41146109fa5780639a7a23d614610a255780639c3b4fdc14610a4e576103c3565b80638a8c523c146109395780638da5cb5b146109505780638ea5220f1461097b57806392136913146109a6576103c3565b80632e82f1a0116102e25780636ddd1713116102755780637571336a116102445780637571336a1461089157806375f0a874146108ba5780637bce5a04146108e55780638095d56414610910576103c3565b80636ddd1713146107e757806370a0823114610812578063715018a61461084f578063751039fc14610866576103c3565b806349bd5a5e116102b157806349bd5a5e1461073b5780634a62bb6514610766578063541a43cf146107915780636a486a8e146107bc576103c3565b80632e82f1a01461067f578063313ce567146106aa57806339509351146106d557806345a0b89114610712576103c3565b80631a8145bb1161035a57806327c8f8351161032957806327c8f835146105d55780632bf3d42d146106005780632c3e486c1461062b5780632d5a5d3414610656576103c3565b80631a8145bb146105195780631f3fed8f14610544578063203e727e1461056f57806323b872dd14610598576103c3565b80631694505e116103965780631694505e1461046d57806318160ddd14610498578063184c16c5146104c3578063199ffc72146104ee576103c3565b806306fdde03146103c8578063095ea7b3146103f357806310d5de5314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ebd565b6040516103ea91906149df565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614a9f565b610f4f565b6040516104279190614afa565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614b15565b610f6d565b6040516104649190614afa565b60405180910390f35b34801561047957600080fd5b50610482610f8d565b60405161048f9190614ba1565b60405180910390f35b3480156104a457600080fd5b506104ad610fb1565b6040516104ba9190614bcb565b60405180910390f35b3480156104cf57600080fd5b506104d8610fbb565b6040516104e59190614bcb565b60405180910390f35b3480156104fa57600080fd5b50610503610fc1565b6040516105109190614bcb565b60405180910390f35b34801561052557600080fd5b5061052e610fc7565b60405161053b9190614bcb565b60405180910390f35b34801561055057600080fd5b50610559610fcd565b6040516105669190614bcb565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190614be6565b610fd3565b005b3480156105a457600080fd5b506105bf60048036038101906105ba9190614c13565b6110fd565b6040516105cc9190614afa565b60405180910390f35b3480156105e157600080fd5b506105ea6111d6565b6040516105f79190614c75565b60405180910390f35b34801561060c57600080fd5b506106156111dc565b6040516106229190614bcb565b60405180910390f35b34801561063757600080fd5b506106406111e2565b60405161064d9190614bcb565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190614cbc565b6111e8565b005b34801561068b57600080fd5b506106946112da565b6040516106a19190614afa565b60405180910390f35b3480156106b657600080fd5b506106bf6112ed565b6040516106cc9190614d18565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f79190614a9f565b6112f6565b6040516107099190614afa565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190614d98565b6113a9565b005b34801561074757600080fd5b5061075061159a565b60405161075d9190614c75565b60405180910390f35b34801561077257600080fd5b5061077b6115be565b6040516107889190614afa565b60405180910390f35b34801561079d57600080fd5b506107a66115d1565b6040516107b39190614bcb565b60405180910390f35b3480156107c857600080fd5b506107d16115d7565b6040516107de9190614bcb565b60405180910390f35b3480156107f357600080fd5b506107fc6115dd565b6040516108099190614afa565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614b15565b6115f0565b6040516108469190614bcb565b60405180910390f35b34801561085b57600080fd5b50610864611638565b005b34801561087257600080fd5b5061087b611790565b6040516108889190614afa565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190614cbc565b61184b565b005b3480156108c657600080fd5b506108cf61193d565b6040516108dc9190614c75565b60405180910390f35b3480156108f157600080fd5b506108fa611963565b6040516109079190614bcb565b60405180910390f35b34801561091c57600080fd5b5061093760048036038101906109329190614de5565b611969565b005b34801561094557600080fd5b5061094e611a83565b005b34801561095c57600080fd5b50610965611b60565b6040516109729190614c75565b60405180910390f35b34801561098757600080fd5b50610990611b8a565b60405161099d9190614c75565b60405180910390f35b3480156109b257600080fd5b506109bb611bb0565b6040516109c89190614bcb565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f39190614e38565b611bb6565b005b348015610a0657600080fd5b50610a0f611c6a565b604051610a1c91906149df565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190614cbc565b611cfc565b005b348015610a5a57600080fd5b50610a63611e30565b604051610a709190614bcb565b60405180910390f35b348015610a8557600080fd5b50610a8e611e36565b604051610a9b9190614bcb565b60405180910390f35b348015610ab057600080fd5b50610ab9611e3c565b604051610ac69190614bcb565b60405180910390f35b348015610adb57600080fd5b50610ae4611e42565b604051610af19190614bcb565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614e38565b611e48565b005b348015610b2f57600080fd5b50610b4a6004803603810190610b459190614a9f565b611efc565b604051610b579190614afa565b60405180910390f35b348015610b6c57600080fd5b50610b75611fc9565b604051610b829190614bcb565b60405180910390f35b348015610b9757600080fd5b50610ba0611fcf565b604051610bad9190614afa565b60405180910390f35b348015610bc257600080fd5b50610bdd6004803603810190610bd89190614a9f565b611fe2565b604051610bea9190614afa565b60405180910390f35b348015610bff57600080fd5b50610c1a6004803603810190610c159190614b15565b612000565b604051610c279190614afa565b60405180910390f35b348015610c3c57600080fd5b50610c45612020565b604051610c529190614afa565b60405180910390f35b348015610c6757600080fd5b50610c826004803603810190610c7d9190614cbc565b612033565b005b348015610c9057600080fd5b50610cab6004803603810190610ca69190614be6565b612173565b005b348015610cb957600080fd5b50610cc261229d565b604051610ccf9190614afa565b60405180910390f35b348015610ce457600080fd5b50610ced6122b0565b604051610cfa9190614bcb565b60405180910390f35b348015610d0f57600080fd5b50610d186122b6565b604051610d259190614bcb565b60405180910390f35b348015610d3a57600080fd5b50610d556004803603810190610d509190614e65565b6122bc565b604051610d629190614bcb565b60405180910390f35b348015610d7757600080fd5b50610d80612343565b604051610d8d9190614bcb565b60405180910390f35b348015610da257600080fd5b50610dab612349565b604051610db89190614afa565b60405180910390f35b348015610dcd57600080fd5b50610de86004803603810190610de39190614e65565b612404565b005b348015610df657600080fd5b50610dff612521565b604051610e0c9190614bcb565b60405180910390f35b348015610e2157600080fd5b50610e3c6004803603810190610e379190614b15565b612527565b005b348015610e4a57600080fd5b50610e536126ee565b604051610e609190614bcb565b60405180910390f35b348015610e7557600080fd5b50610e7e6126f4565b604051610e8b9190614bcb565b60405180910390f35b348015610ea057600080fd5b50610ebb6004803603810190610eb69190614ea5565b6126fa565b005b606060038054610ecc90614f4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef890614f4f565b8015610f455780601f10610f1a57610100808354040283529160200191610f45565b820191906000526020600020905b815481529060010190602001808311610f2857829003601f168201915b5050505050905090565b6000610f63610f5c612882565b848461288a565b6001905092915050565b60256020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b60215481565b60205481565b610fdb612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190614fcd565b60405180910390fd5b670de0b6b3a76400006103e86001611080610fb1565b61108a919061501c565b61109491906150a5565b61109e91906150a5565b8110156110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790615148565b60405180910390fd5b670de0b6b3a7640000816110f4919061501c565b60088190555050565b600061110a848484612a55565b6111cb84611116612882565b6111c685604051806060016040528060288152602001615ee260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061117c612882565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c429092919063ffffffff16565b61288a565b600190509392505050565b61dead81565b601f5481565b600d5481565b6111f0612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614fcd565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b60006012905090565b600061139f611303612882565b8461139a8560016000611314612882565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282490919063ffffffff16565b61288a565b6001905092915050565b6113b1612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790614fcd565b60405180910390fd5b60005b8282905081101561159557600083838381811061146357611462615168565b5b90506020020160208101906114789190614b15565b9050601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061151d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156115285750611582565b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505b808061158d90615197565b915050611443565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b601e5481565b601a5481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611640612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690614fcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061179a612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182090614fcd565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611853612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990614fcd565b60405180910390fd5b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611971612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790614fcd565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611a2891906151e0565b611a3291906151e0565b601681905550600c6016541115611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590615282565b60405180910390fd5b505050565b611a8b612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614fcd565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602381905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611bbe612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614fcd565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611c7990614f4f565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca590614f4f565b8015611cf25780601f10611cc757610100808354040283529160200191611cf2565b820191906000526020600020905b815481529060010190602001808311611cd557829003601f168201915b5050505050905090565b611d04612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614fcd565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990615314565b60405180910390fd5b611e2c8282613ca6565b5050565b60195481565b60105481565b60225481565b601d5481565b611e50612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed690614fcd565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b6000611fbf611f09612882565b84611fba85604051806060016040528060258152602001615f0a6025913960016000611f33612882565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c429092919063ffffffff16565b61288a565b6001905092915050565b600e5481565b601160039054906101000a900460ff1681565b6000611ff6611fef612882565b8484612a55565b6001905092915050565b60266020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61203b612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190614fcd565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121679190614afa565b60405180910390a25050565b61217b612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461220a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220190614fcd565b60405180910390fd5b670de0b6b3a76400006103e86005612220610fb1565b61222a919061501c565b61223491906150a5565b61223e91906150a5565b811015612280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612277906153a6565b60405180910390fd5b670de0b6b3a764000081612294919061501c565b600a8190555050565b601560009054906101000a900460ff1681565b60085481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612353612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614fcd565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b61240c612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614fcd565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60185481565b61252f612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590614fcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561262e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262590615438565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600a5481565b612702612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278890614fcd565b60405180910390fd5b84601b8190555083601c8190555082601d8190555081601e8190555080601f81905550601d54601c54601b546127c791906151e0565b6127d191906151e0565b601a819055506010601a54111561281d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612814906154a4565b60405180910390fd5b5050505050565b600080828461283391906151e0565b905083811015612878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286f90615510565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f1906155a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296190615634565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a489190614bcb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc906156c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c90615758565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bd95750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f906157ea565b60405180910390fd5b6000811415612c3257612c2d83836000613d47565b613c3d565b601160009054906101000a900460ff16156132f557612c4f611b60565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cbd5750612c8d611b60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cf65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d30575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d495750600560149054906101000a900460ff16155b156132f457601160019054906101000a900460ff16612e4357602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e035750602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3990615856565b60405180910390fd5b5b601560009054906101000a900460ff161561300b57612e60611b60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ee757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f3f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561300a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc9061590e565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ae5750602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613155576008548111156130f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ef906159a0565b60405180910390fd5b600a54613104836115f0565b8261310f91906151e0565b1115613150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314790615a0c565b60405180910390fd5b6132f3565b602660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f85750602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324757600854811115613242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323990615a9e565b60405180910390fd5b6132f2565b602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132f157600a546132a4836115f0565b826132af91906151e0565b11156132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e790615a0c565b60405180910390fd5b5b5b5b5b5b600160235461330491906151e0565b431115801561335f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133ab5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613409576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156134765750601160039054906101000a900460ff165b15613590576000601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156135185750426202a300601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461351591906151e0565b10155b1561355757601e54601c81905550601f54601b81905550601d54601c54601b5461354291906151e0565b61354c91906151e0565b601a8190555061358b565b6004601c819055506009601b81905550601d54601c54601b5461357a91906151e0565b61358491906151e0565b601a819055505b613666565b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561361d5742601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160039054906101000a900460ff16613665576004601c819055506009601b81905550601d54601c54601b5461365491906151e0565b61365e91906151e0565b601a819055505b5b6000613671306115f0565b9050600060095482101590508080156136965750601160029054906101000a900460ff165b80156136af5750600560149054906101000a900460ff16155b80156137055750602660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561375b5750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137b15750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137f5576001600560146101000a81548160ff0219169083151502179055506137d9613fdc565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff1615801561385b5750602660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156138735750600c60009054906101000a900460ff165b801561388e5750600d54600e5461388a91906151e0565b4210155b80156138e45750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138f3576138f16142c3565b505b6000600560149054906101000a900460ff16159050602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806139a95750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156139b357600090505b60008115613c2c57602660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a1657506000601a54115b15613ae357613a436064613a35601a548961449890919063ffffffff16565b61451390919063ffffffff16565b9050601a54601c5482613a56919061501c565b613a6091906150a5565b60216000828254613a7191906151e0565b92505081905550601a54601d5482613a89919061501c565b613a9391906150a5565b60226000828254613aa491906151e0565b92505081905550601a54601b5482613abc919061501c565b613ac691906150a5565b60206000828254613ad791906151e0565b92505081905550613c08565b602660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b3e57506000601654115b15613c0757613b6b6064613b5d6016548961449890919063ffffffff16565b61451390919063ffffffff16565b905060165460185482613b7e919061501c565b613b8891906150a5565b60216000828254613b9991906151e0565b9250508190555060165460195482613bb1919061501c565b613bbb91906150a5565b60226000828254613bcc91906151e0565b9250508190555060165460175482613be4919061501c565b613bee91906150a5565b60206000828254613bff91906151e0565b925050819055505b5b6000811115613c1d57613c1c883083613d47565b5b8086613c299190615abe565b95505b613c37888888613d47565b50505050505b505050565b6000838311158290613c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8191906149df565b60405180910390fd5b5060008385613c999190615abe565b9050809150509392505050565b80602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dae906156c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1e90615758565b60405180910390fd5b613e3283838361455d565b613e9d81604051806060016040528060268152602001615ebc602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c429092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f30816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fcf9190614bcb565b60405180910390a3505050565b6000613fe7306115f0565b90506000602254602054602154613ffe91906151e0565b61400891906151e0565b905060008083148061401a5750600082145b15614027575050506142c1565b6014600954614036919061501c565b83111561404f57601460095461404c919061501c565b92505b600060028360215486614062919061501c565b61406c91906150a5565b61407691906150a5565b9050600061408d828661456290919063ffffffff16565b9050600047905061409d826145ac565b60006140b2824761456290919063ffffffff16565b905060006140dd876140cf6020548561449890919063ffffffff16565b61451390919063ffffffff16565b90506000614108886140fa6022548661449890919063ffffffff16565b61451390919063ffffffff16565b905060008183856141199190615abe565b6141239190615abe565b9050600060218190555060006020819055506000602281905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161418390615b23565b60006040518083038185875af1925050503d80600081146141c0576040519150601f19603f3d011682016040523d82523d6000602084013e6141c5565b606091505b5050809850506000871180156141db5750600081115b15614228576141ea87826147f8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260215460405161421f93929190615b38565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161426e90615b23565b60006040518083038185875af1925050503d80600081146142ab576040519150601f19603f3d011682016040523d82523d6000602084013e6142b0565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016143279190614c75565b60206040518083038186803b15801561433f57600080fd5b505afa158015614353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143779190615b84565b905060006143a4612710614396600b548561449890919063ffffffff16565b61451390919063ffffffff16565b905060008111156143dd576143dc7f000000000000000000000000000000000000000000000000000000000000000061dead83613d47565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561444a57600080fd5b505af115801561445e573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808314156144ab576000905061450d565b600082846144b9919061501c565b90508284826144c891906150a5565b14614508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ff90615c23565b60405180910390fd5b809150505b92915050565b600061455583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506148e3565b905092915050565b505050565b60006145a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c42565b905092915050565b6000600267ffffffffffffffff8111156145c9576145c8615c43565b5b6040519080825280602002602001820160405280156145f75781602001602082028036833780820191505090505b509050308160008151811061460f5761460e615168565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156146af57600080fd5b505afa1580156146c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e79190615c87565b816001815181106146fb576146fa615168565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614760307f00000000000000000000000000000000000000000000000000000000000000008461288a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016147c2959493929190615dad565b600060405180830381600087803b1580156147dc57600080fd5b505af11580156147f0573d6000803e3d6000fd5b505050505050565b614823307f00000000000000000000000000000000000000000000000000000000000000008461288a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161488a96959493929190615e07565b6060604051808303818588803b1580156148a357600080fd5b505af11580156148b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148dc9190615e68565b5050505050565b6000808311829061492a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161492191906149df565b60405180910390fd5b506000838561493991906150a5565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614980578082015181840152602081019050614965565b8381111561498f576000848401525b50505050565b6000601f19601f8301169050919050565b60006149b182614946565b6149bb8185614951565b93506149cb818560208601614962565b6149d481614995565b840191505092915050565b600060208201905081810360008301526149f981846149a6565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a3682614a0b565b9050919050565b614a4681614a2b565b8114614a5157600080fd5b50565b600081359050614a6381614a3d565b92915050565b6000819050919050565b614a7c81614a69565b8114614a8757600080fd5b50565b600081359050614a9981614a73565b92915050565b60008060408385031215614ab657614ab5614a01565b5b6000614ac485828601614a54565b9250506020614ad585828601614a8a565b9150509250929050565b60008115159050919050565b614af481614adf565b82525050565b6000602082019050614b0f6000830184614aeb565b92915050565b600060208284031215614b2b57614b2a614a01565b5b6000614b3984828501614a54565b91505092915050565b6000819050919050565b6000614b67614b62614b5d84614a0b565b614b42565b614a0b565b9050919050565b6000614b7982614b4c565b9050919050565b6000614b8b82614b6e565b9050919050565b614b9b81614b80565b82525050565b6000602082019050614bb66000830184614b92565b92915050565b614bc581614a69565b82525050565b6000602082019050614be06000830184614bbc565b92915050565b600060208284031215614bfc57614bfb614a01565b5b6000614c0a84828501614a8a565b91505092915050565b600080600060608486031215614c2c57614c2b614a01565b5b6000614c3a86828701614a54565b9350506020614c4b86828701614a54565b9250506040614c5c86828701614a8a565b9150509250925092565b614c6f81614a2b565b82525050565b6000602082019050614c8a6000830184614c66565b92915050565b614c9981614adf565b8114614ca457600080fd5b50565b600081359050614cb681614c90565b92915050565b60008060408385031215614cd357614cd2614a01565b5b6000614ce185828601614a54565b9250506020614cf285828601614ca7565b9150509250929050565b600060ff82169050919050565b614d1281614cfc565b82525050565b6000602082019050614d2d6000830184614d09565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614d5857614d57614d33565b5b8235905067ffffffffffffffff811115614d7557614d74614d38565b5b602083019150836020820283011115614d9157614d90614d3d565b5b9250929050565b60008060208385031215614daf57614dae614a01565b5b600083013567ffffffffffffffff811115614dcd57614dcc614a06565b5b614dd985828601614d42565b92509250509250929050565b600080600060608486031215614dfe57614dfd614a01565b5b6000614e0c86828701614a8a565b9350506020614e1d86828701614a8a565b9250506040614e2e86828701614a8a565b9150509250925092565b600060208284031215614e4e57614e4d614a01565b5b6000614e5c84828501614ca7565b91505092915050565b60008060408385031215614e7c57614e7b614a01565b5b6000614e8a85828601614a54565b9250506020614e9b85828601614a54565b9150509250929050565b600080600080600060a08688031215614ec157614ec0614a01565b5b6000614ecf88828901614a8a565b9550506020614ee088828901614a8a565b9450506040614ef188828901614a8a565b9350506060614f0288828901614a8a565b9250506080614f1388828901614a8a565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f6757607f821691505b60208210811415614f7b57614f7a614f20565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fb7602083614951565b9150614fc282614f81565b602082019050919050565b60006020820190508181036000830152614fe681614faa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061502782614a69565b915061503283614a69565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561506b5761506a614fed565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150b082614a69565b91506150bb83614a69565b9250826150cb576150ca615076565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000615132602f83614951565b915061513d826150d6565b604082019050919050565b6000602082019050818103600083015261516181615125565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151a282614a69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151d5576151d4614fed565b5b600182019050919050565b60006151eb82614a69565b91506151f683614a69565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561522b5761522a614fed565b5b828201905092915050565b7f4d757374206b656570206665657320617420313225206f72206c657373000000600082015250565b600061526c601d83614951565b915061527782615236565b602082019050919050565b6000602082019050818103600083015261529b8161525f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006152fe603983614951565b9150615309826152a2565b604082019050919050565b6000602082019050818103600083015261532d816152f1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000615390602483614951565b915061539b82615334565b604082019050919050565b600060208201905081810360008301526153bf81615383565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615422602683614951565b915061542d826153c6565b604082019050919050565b6000602082019050818103600083015261545181615415565b9050919050565b7f4d757374206b656570206665657320617420313625206f72206c657373000000600082015250565b600061548e601d83614951565b915061549982615458565b602082019050919050565b600060208201905081810360008301526154bd81615481565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006154fa601b83614951565b9150615505826154c4565b602082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061558c602483614951565b915061559782615530565b604082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061561e602283614951565b9150615629826155c2565b604082019050919050565b6000602082019050818103600083015261564d81615611565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156b0602583614951565b91506156bb82615654565b604082019050919050565b600060208201905081810360008301526156df816156a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615742602383614951565b915061574d826156e6565b604082019050919050565b6000602082019050818103600083015261577181615735565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006157d4603183614951565b91506157df82615778565b604082019050919050565b60006020820190508181036000830152615803816157c7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615840601683614951565b915061584b8261580a565b602082019050919050565b6000602082019050818103600083015261586f81615833565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158f8604983614951565b915061590382615876565b606082019050919050565b60006020820190508181036000830152615927816158eb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061598a603583614951565b91506159958261592e565b604082019050919050565b600060208201905081810360008301526159b98161597d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159f6601383614951565b9150615a01826159c0565b602082019050919050565b60006020820190508181036000830152615a25816159e9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a88603683614951565b9150615a9382615a2c565b604082019050919050565b60006020820190508181036000830152615ab781615a7b565b9050919050565b6000615ac982614a69565b9150615ad483614a69565b925082821015615ae757615ae6614fed565b5b828203905092915050565b600081905092915050565b50565b6000615b0d600083615af2565b9150615b1882615afd565b600082019050919050565b6000615b2e82615b00565b9150819050919050565b6000606082019050615b4d6000830186614bbc565b615b5a6020830185614bbc565b615b676040830184614bbc565b949350505050565b600081519050615b7e81614a73565b92915050565b600060208284031215615b9a57615b99614a01565b5b6000615ba884828501615b6f565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c0d602183614951565b9150615c1882615bb1565b604082019050919050565b60006020820190508181036000830152615c3c81615c00565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615c8181614a3d565b92915050565b600060208284031215615c9d57615c9c614a01565b5b6000615cab84828501615c72565b91505092915050565b6000819050919050565b6000615cd9615cd4615ccf84615cb4565b614b42565b614a69565b9050919050565b615ce981615cbe565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d2481614a2b565b82525050565b6000615d368383615d1b565b60208301905092915050565b6000602082019050919050565b6000615d5a82615cef565b615d648185615cfa565b9350615d6f83615d0b565b8060005b83811015615da0578151615d878882615d2a565b9750615d9283615d42565b925050600181019050615d73565b5085935050505092915050565b600060a082019050615dc26000830188614bbc565b615dcf6020830187615ce0565b8181036040830152615de18186615d4f565b9050615df06060830185614c66565b615dfd6080830184614bbc565b9695505050505050565b600060c082019050615e1c6000830189614c66565b615e296020830188614bbc565b615e366040830187615ce0565b615e436060830186615ce0565b615e506080830185614c66565b615e5d60a0830184614bbc565b979650505050505050565b600080600060608486031215615e8157615e80614a01565b5b6000615e8f86828701615b6f565b9350506020615ea086828701615b6f565b9250506040615eb186828701615b6f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203f6325248403bb58665e0673d95e965bde87b9f9e451a4c1aad969b158d0c63d64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80638a8c523c116101f2578063b62496f51161010d578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610e15578063f637434214610e3e578063f8b45b0514610e69578063ff935af614610e94576103c3565b8063e2f4560514610d6b578063e884f26014610d96578063e8ba854f14610dc1578063f11a24d314610dea576103c3565b8063c876d0b9116100dc578063c876d0b914610cad578063c8c8ebe414610cd8578063d85ba06314610d03578063dd62ed3e14610d2e576103c3565b8063b62496f514610bf3578063bbc0c74214610c30578063c024666814610c5b578063c18bc19514610c84576103c3565b80639ec22c0e11610185578063a457c2d711610154578063a457c2d714610b23578063a4c82a0014610b60578063a4d15b6414610b8b578063a9059cbb14610bb6576103c3565b80639ec22c0e14610a795780639fccce3214610aa4578063a0d82dc514610acf578063a265777814610afa576103c3565b8063924de9b7116101c1578063924de9b7146109d157806395d89b41146109fa5780639a7a23d614610a255780639c3b4fdc14610a4e576103c3565b80638a8c523c146109395780638da5cb5b146109505780638ea5220f1461097b57806392136913146109a6576103c3565b80632e82f1a0116102e25780636ddd1713116102755780637571336a116102445780637571336a1461089157806375f0a874146108ba5780637bce5a04146108e55780638095d56414610910576103c3565b80636ddd1713146107e757806370a0823114610812578063715018a61461084f578063751039fc14610866576103c3565b806349bd5a5e116102b157806349bd5a5e1461073b5780634a62bb6514610766578063541a43cf146107915780636a486a8e146107bc576103c3565b80632e82f1a01461067f578063313ce567146106aa57806339509351146106d557806345a0b89114610712576103c3565b80631a8145bb1161035a57806327c8f8351161032957806327c8f835146105d55780632bf3d42d146106005780632c3e486c1461062b5780632d5a5d3414610656576103c3565b80631a8145bb146105195780631f3fed8f14610544578063203e727e1461056f57806323b872dd14610598576103c3565b80631694505e116103965780631694505e1461046d57806318160ddd14610498578063184c16c5146104c3578063199ffc72146104ee576103c3565b806306fdde03146103c8578063095ea7b3146103f357806310d5de5314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ebd565b6040516103ea91906149df565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614a9f565b610f4f565b6040516104279190614afa565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614b15565b610f6d565b6040516104649190614afa565b60405180910390f35b34801561047957600080fd5b50610482610f8d565b60405161048f9190614ba1565b60405180910390f35b3480156104a457600080fd5b506104ad610fb1565b6040516104ba9190614bcb565b60405180910390f35b3480156104cf57600080fd5b506104d8610fbb565b6040516104e59190614bcb565b60405180910390f35b3480156104fa57600080fd5b50610503610fc1565b6040516105109190614bcb565b60405180910390f35b34801561052557600080fd5b5061052e610fc7565b60405161053b9190614bcb565b60405180910390f35b34801561055057600080fd5b50610559610fcd565b6040516105669190614bcb565b60405180910390f35b34801561057b57600080fd5b5061059660048036038101906105919190614be6565b610fd3565b005b3480156105a457600080fd5b506105bf60048036038101906105ba9190614c13565b6110fd565b6040516105cc9190614afa565b60405180910390f35b3480156105e157600080fd5b506105ea6111d6565b6040516105f79190614c75565b60405180910390f35b34801561060c57600080fd5b506106156111dc565b6040516106229190614bcb565b60405180910390f35b34801561063757600080fd5b506106406111e2565b60405161064d9190614bcb565b60405180910390f35b34801561066257600080fd5b5061067d60048036038101906106789190614cbc565b6111e8565b005b34801561068b57600080fd5b506106946112da565b6040516106a19190614afa565b60405180910390f35b3480156106b657600080fd5b506106bf6112ed565b6040516106cc9190614d18565b60405180910390f35b3480156106e157600080fd5b506106fc60048036038101906106f79190614a9f565b6112f6565b6040516107099190614afa565b60405180910390f35b34801561071e57600080fd5b5061073960048036038101906107349190614d98565b6113a9565b005b34801561074757600080fd5b5061075061159a565b60405161075d9190614c75565b60405180910390f35b34801561077257600080fd5b5061077b6115be565b6040516107889190614afa565b60405180910390f35b34801561079d57600080fd5b506107a66115d1565b6040516107b39190614bcb565b60405180910390f35b3480156107c857600080fd5b506107d16115d7565b6040516107de9190614bcb565b60405180910390f35b3480156107f357600080fd5b506107fc6115dd565b6040516108099190614afa565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614b15565b6115f0565b6040516108469190614bcb565b60405180910390f35b34801561085b57600080fd5b50610864611638565b005b34801561087257600080fd5b5061087b611790565b6040516108889190614afa565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190614cbc565b61184b565b005b3480156108c657600080fd5b506108cf61193d565b6040516108dc9190614c75565b60405180910390f35b3480156108f157600080fd5b506108fa611963565b6040516109079190614bcb565b60405180910390f35b34801561091c57600080fd5b5061093760048036038101906109329190614de5565b611969565b005b34801561094557600080fd5b5061094e611a83565b005b34801561095c57600080fd5b50610965611b60565b6040516109729190614c75565b60405180910390f35b34801561098757600080fd5b50610990611b8a565b60405161099d9190614c75565b60405180910390f35b3480156109b257600080fd5b506109bb611bb0565b6040516109c89190614bcb565b60405180910390f35b3480156109dd57600080fd5b506109f860048036038101906109f39190614e38565b611bb6565b005b348015610a0657600080fd5b50610a0f611c6a565b604051610a1c91906149df565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190614cbc565b611cfc565b005b348015610a5a57600080fd5b50610a63611e30565b604051610a709190614bcb565b60405180910390f35b348015610a8557600080fd5b50610a8e611e36565b604051610a9b9190614bcb565b60405180910390f35b348015610ab057600080fd5b50610ab9611e3c565b604051610ac69190614bcb565b60405180910390f35b348015610adb57600080fd5b50610ae4611e42565b604051610af19190614bcb565b60405180910390f35b348015610b0657600080fd5b50610b216004803603810190610b1c9190614e38565b611e48565b005b348015610b2f57600080fd5b50610b4a6004803603810190610b459190614a9f565b611efc565b604051610b579190614afa565b60405180910390f35b348015610b6c57600080fd5b50610b75611fc9565b604051610b829190614bcb565b60405180910390f35b348015610b9757600080fd5b50610ba0611fcf565b604051610bad9190614afa565b60405180910390f35b348015610bc257600080fd5b50610bdd6004803603810190610bd89190614a9f565b611fe2565b604051610bea9190614afa565b60405180910390f35b348015610bff57600080fd5b50610c1a6004803603810190610c159190614b15565b612000565b604051610c279190614afa565b60405180910390f35b348015610c3c57600080fd5b50610c45612020565b604051610c529190614afa565b60405180910390f35b348015610c6757600080fd5b50610c826004803603810190610c7d9190614cbc565b612033565b005b348015610c9057600080fd5b50610cab6004803603810190610ca69190614be6565b612173565b005b348015610cb957600080fd5b50610cc261229d565b604051610ccf9190614afa565b60405180910390f35b348015610ce457600080fd5b50610ced6122b0565b604051610cfa9190614bcb565b60405180910390f35b348015610d0f57600080fd5b50610d186122b6565b604051610d259190614bcb565b60405180910390f35b348015610d3a57600080fd5b50610d556004803603810190610d509190614e65565b6122bc565b604051610d629190614bcb565b60405180910390f35b348015610d7757600080fd5b50610d80612343565b604051610d8d9190614bcb565b60405180910390f35b348015610da257600080fd5b50610dab612349565b604051610db89190614afa565b60405180910390f35b348015610dcd57600080fd5b50610de86004803603810190610de39190614e65565b612404565b005b348015610df657600080fd5b50610dff612521565b604051610e0c9190614bcb565b60405180910390f35b348015610e2157600080fd5b50610e3c6004803603810190610e379190614b15565b612527565b005b348015610e4a57600080fd5b50610e536126ee565b604051610e609190614bcb565b60405180910390f35b348015610e7557600080fd5b50610e7e6126f4565b604051610e8b9190614bcb565b60405180910390f35b348015610ea057600080fd5b50610ebb6004803603810190610eb69190614ea5565b6126fa565b005b606060038054610ecc90614f4f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef890614f4f565b8015610f455780601f10610f1a57610100808354040283529160200191610f45565b820191906000526020600020905b815481529060010190602001808311610f2857829003601f168201915b5050505050905090565b6000610f63610f5c612882565b848461288a565b6001905092915050565b60256020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b60215481565b60205481565b610fdb612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190614fcd565b60405180910390fd5b670de0b6b3a76400006103e86001611080610fb1565b61108a919061501c565b61109491906150a5565b61109e91906150a5565b8110156110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d790615148565b60405180910390fd5b670de0b6b3a7640000816110f4919061501c565b60088190555050565b600061110a848484612a55565b6111cb84611116612882565b6111c685604051806060016040528060288152602001615ee260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061117c612882565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c429092919063ffffffff16565b61288a565b600190509392505050565b61dead81565b601f5481565b600d5481565b6111f0612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614fcd565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b60006012905090565b600061139f611303612882565b8461139a8560016000611314612882565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282490919063ffffffff16565b61288a565b6001905092915050565b6113b1612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143790614fcd565b60405180910390fd5b60005b8282905081101561159557600083838381811061146357611462615168565b5b90506020020160208101906114789190614b15565b9050601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061151d57507f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a68173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b156115285750611582565b6001601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505b808061158d90615197565b915050611443565b505050565b7f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a68181565b601160009054906101000a900460ff1681565b601e5481565b601a5481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611640612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690614fcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061179a612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182090614fcd565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611853612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d990614fcd565b60405180910390fd5b80602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611971612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790614fcd565b60405180910390fd5b826017819055508160188190555080601981905550601954601854601754611a2891906151e0565b611a3291906151e0565b601681905550600c6016541115611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590615282565b60405180910390fd5b505050565b611a8b612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1190614fcd565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e8190555043602381905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611bbe612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4490614fcd565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611c7990614f4f565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca590614f4f565b8015611cf25780601f10611cc757610100808354040283529160200191611cf2565b820191906000526020600020905b815481529060010190602001808311611cd557829003601f168201915b5050505050905090565b611d04612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614fcd565b60405180910390fd5b7f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a68173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990615314565b60405180910390fd5b611e2c8282613ca6565b5050565b60195481565b60105481565b60225481565b601d5481565b611e50612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed690614fcd565b60405180910390fd5b80601160036101000a81548160ff02191690831515021790555050565b6000611fbf611f09612882565b84611fba85604051806060016040528060258152602001615f0a6025913960016000611f33612882565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c429092919063ffffffff16565b61288a565b6001905092915050565b600e5481565b601160039054906101000a900460ff1681565b6000611ff6611fef612882565b8484612a55565b6001905092915050565b60266020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61203b612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190614fcd565b60405180910390fd5b80602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121679190614afa565b60405180910390a25050565b61217b612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461220a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220190614fcd565b60405180910390fd5b670de0b6b3a76400006103e86005612220610fb1565b61222a919061501c565b61223491906150a5565b61223e91906150a5565b811015612280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612277906153a6565b60405180910390fd5b670de0b6b3a764000081612294919061501c565b600a8190555050565b601560009054906101000a900460ff1681565b60085481565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000612353612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990614fcd565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b61240c612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461249b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249290614fcd565b60405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60185481565b61252f612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b590614fcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561262e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262590615438565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b600a5481565b612702612882565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278890614fcd565b60405180910390fd5b84601b8190555083601c8190555082601d8190555081601e8190555080601f81905550601d54601c54601b546127c791906151e0565b6127d191906151e0565b601a819055506010601a54111561281d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612814906154a4565b60405180910390fd5b5050505050565b600080828461283391906151e0565b905083811015612878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286f90615510565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f1906155a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561296a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296190615634565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a489190614bcb565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abc906156c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2c90615758565b60405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bd95750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0f906157ea565b60405180910390fd5b6000811415612c3257612c2d83836000613d47565b613c3d565b601160009054906101000a900460ff16156132f557612c4f611b60565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cbd5750612c8d611b60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cf65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d30575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d495750600560149054906101000a900460ff16155b156132f457601160019054906101000a900460ff16612e4357602460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e035750602460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3990615856565b60405180910390fd5b5b601560009054906101000a900460ff161561300b57612e60611b60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ee757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f3f57507f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a68173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561300a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc9061590e565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130ae5750602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613155576008548111156130f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ef906159a0565b60405180910390fd5b600a54613104836115f0565b8261310f91906151e0565b1115613150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314790615a0c565b60405180910390fd5b6132f3565b602660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f85750602560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561324757600854811115613242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323990615a9e565b60405180910390fd5b6132f2565b602560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132f157600a546132a4836115f0565b826132af91906151e0565b11156132f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e790615a0c565b60405180910390fd5b5b5b5b5b5b600160235461330491906151e0565b431115801561335f57507f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a68173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133ab5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613409576001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a68173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156134765750601160039054906101000a900460ff165b15613590576000601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141580156135185750426202a300601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461351591906151e0565b10155b1561355757601e54601c81905550601f54601b81905550601d54601c54601b5461354291906151e0565b61354c91906151e0565b601a8190555061358b565b6004601c819055506009601b81905550601d54601c54601b5461357a91906151e0565b61358491906151e0565b601a819055505b613666565b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561361d5742601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160039054906101000a900460ff16613665576004601c819055506009601b81905550601d54601c54601b5461365491906151e0565b61365e91906151e0565b601a819055505b5b6000613671306115f0565b9050600060095482101590508080156136965750601160029054906101000a900460ff165b80156136af5750600560149054906101000a900460ff16155b80156137055750602660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561375b5750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137b15750602460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137f5576001600560146101000a81548160ff0219169083151502179055506137d9613fdc565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff1615801561385b5750602660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156138735750600c60009054906101000a900460ff165b801561388e5750600d54600e5461388a91906151e0565b4210155b80156138e45750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138f3576138f16142c3565b505b6000600560149054906101000a900460ff16159050602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806139a95750602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156139b357600090505b60008115613c2c57602660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a1657506000601a54115b15613ae357613a436064613a35601a548961449890919063ffffffff16565b61451390919063ffffffff16565b9050601a54601c5482613a56919061501c565b613a6091906150a5565b60216000828254613a7191906151e0565b92505081905550601a54601d5482613a89919061501c565b613a9391906150a5565b60226000828254613aa491906151e0565b92505081905550601a54601b5482613abc919061501c565b613ac691906150a5565b60206000828254613ad791906151e0565b92505081905550613c08565b602660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b3e57506000601654115b15613c0757613b6b6064613b5d6016548961449890919063ffffffff16565b61451390919063ffffffff16565b905060165460185482613b7e919061501c565b613b8891906150a5565b60216000828254613b9991906151e0565b9250508190555060165460195482613bb1919061501c565b613bbb91906150a5565b60226000828254613bcc91906151e0565b9250508190555060165460175482613be4919061501c565b613bee91906150a5565b60206000828254613bff91906151e0565b925050819055505b5b6000811115613c1d57613c1c883083613d47565b5b8086613c299190615abe565b95505b613c37888888613d47565b50505050505b505050565b6000838311158290613c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8191906149df565b60405180910390fd5b5060008385613c999190615abe565b9050809150509392505050565b80602660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dae906156c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1e90615758565b60405180910390fd5b613e3283838361455d565b613e9d81604051806060016040528060268152602001615ebc602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c429092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f30816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461282490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fcf9190614bcb565b60405180910390a3505050565b6000613fe7306115f0565b90506000602254602054602154613ffe91906151e0565b61400891906151e0565b905060008083148061401a5750600082145b15614027575050506142c1565b6014600954614036919061501c565b83111561404f57601460095461404c919061501c565b92505b600060028360215486614062919061501c565b61406c91906150a5565b61407691906150a5565b9050600061408d828661456290919063ffffffff16565b9050600047905061409d826145ac565b60006140b2824761456290919063ffffffff16565b905060006140dd876140cf6020548561449890919063ffffffff16565b61451390919063ffffffff16565b90506000614108886140fa6022548661449890919063ffffffff16565b61451390919063ffffffff16565b905060008183856141199190615abe565b6141239190615abe565b9050600060218190555060006020819055506000602281905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161418390615b23565b60006040518083038185875af1925050503d80600081146141c0576040519150601f19603f3d011682016040523d82523d6000602084013e6141c5565b606091505b5050809850506000871180156141db5750600081115b15614228576141ea87826147f8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260215460405161421f93929190615b38565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161426e90615b23565b60006040518083038185875af1925050503d80600081146142ab576040519150601f19603f3d011682016040523d82523d6000602084013e6142b0565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a6816040518263ffffffff1660e01b81526004016143279190614c75565b60206040518083038186803b15801561433f57600080fd5b505afa158015614353573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143779190615b84565b905060006143a4612710614396600b548561449890919063ffffffff16565b61451390919063ffffffff16565b905060008111156143dd576143dc7f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a68161dead83613d47565b5b60007f0000000000000000000000000ac6b2cfc0b721fbe832f776c6d8a370e1c1a68190508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561444a57600080fd5b505af115801561445e573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000808314156144ab576000905061450d565b600082846144b9919061501c565b90508284826144c891906150a5565b14614508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ff90615c23565b60405180910390fd5b809150505b92915050565b600061455583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506148e3565b905092915050565b505050565b60006145a483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c42565b905092915050565b6000600267ffffffffffffffff8111156145c9576145c8615c43565b5b6040519080825280602002602001820160405280156145f75781602001602082028036833780820191505090505b509050308160008151811061460f5761460e615168565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156146af57600080fd5b505afa1580156146c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e79190615c87565b816001815181106146fb576146fa615168565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614760307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461288a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016147c2959493929190615dad565b600060405180830381600087803b1580156147dc57600080fd5b505af11580156147f0573d6000803e3d6000fd5b505050505050565b614823307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461288a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161488a96959493929190615e07565b6060604051808303818588803b1580156148a357600080fd5b505af11580156148b7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148dc9190615e68565b5050505050565b6000808311829061492a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161492191906149df565b60405180910390fd5b506000838561493991906150a5565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614980578082015181840152602081019050614965565b8381111561498f576000848401525b50505050565b6000601f19601f8301169050919050565b60006149b182614946565b6149bb8185614951565b93506149cb818560208601614962565b6149d481614995565b840191505092915050565b600060208201905081810360008301526149f981846149a6565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a3682614a0b565b9050919050565b614a4681614a2b565b8114614a5157600080fd5b50565b600081359050614a6381614a3d565b92915050565b6000819050919050565b614a7c81614a69565b8114614a8757600080fd5b50565b600081359050614a9981614a73565b92915050565b60008060408385031215614ab657614ab5614a01565b5b6000614ac485828601614a54565b9250506020614ad585828601614a8a565b9150509250929050565b60008115159050919050565b614af481614adf565b82525050565b6000602082019050614b0f6000830184614aeb565b92915050565b600060208284031215614b2b57614b2a614a01565b5b6000614b3984828501614a54565b91505092915050565b6000819050919050565b6000614b67614b62614b5d84614a0b565b614b42565b614a0b565b9050919050565b6000614b7982614b4c565b9050919050565b6000614b8b82614b6e565b9050919050565b614b9b81614b80565b82525050565b6000602082019050614bb66000830184614b92565b92915050565b614bc581614a69565b82525050565b6000602082019050614be06000830184614bbc565b92915050565b600060208284031215614bfc57614bfb614a01565b5b6000614c0a84828501614a8a565b91505092915050565b600080600060608486031215614c2c57614c2b614a01565b5b6000614c3a86828701614a54565b9350506020614c4b86828701614a54565b9250506040614c5c86828701614a8a565b9150509250925092565b614c6f81614a2b565b82525050565b6000602082019050614c8a6000830184614c66565b92915050565b614c9981614adf565b8114614ca457600080fd5b50565b600081359050614cb681614c90565b92915050565b60008060408385031215614cd357614cd2614a01565b5b6000614ce185828601614a54565b9250506020614cf285828601614ca7565b9150509250929050565b600060ff82169050919050565b614d1281614cfc565b82525050565b6000602082019050614d2d6000830184614d09565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614d5857614d57614d33565b5b8235905067ffffffffffffffff811115614d7557614d74614d38565b5b602083019150836020820283011115614d9157614d90614d3d565b5b9250929050565b60008060208385031215614daf57614dae614a01565b5b600083013567ffffffffffffffff811115614dcd57614dcc614a06565b5b614dd985828601614d42565b92509250509250929050565b600080600060608486031215614dfe57614dfd614a01565b5b6000614e0c86828701614a8a565b9350506020614e1d86828701614a8a565b9250506040614e2e86828701614a8a565b9150509250925092565b600060208284031215614e4e57614e4d614a01565b5b6000614e5c84828501614ca7565b91505092915050565b60008060408385031215614e7c57614e7b614a01565b5b6000614e8a85828601614a54565b9250506020614e9b85828601614a54565b9150509250929050565b600080600080600060a08688031215614ec157614ec0614a01565b5b6000614ecf88828901614a8a565b9550506020614ee088828901614a8a565b9450506040614ef188828901614a8a565b9350506060614f0288828901614a8a565b9250506080614f1388828901614a8a565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f6757607f821691505b60208210811415614f7b57614f7a614f20565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614fb7602083614951565b9150614fc282614f81565b602082019050919050565b60006020820190508181036000830152614fe681614faa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061502782614a69565b915061503283614a69565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561506b5761506a614fed565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150b082614a69565b91506150bb83614a69565b9250826150cb576150ca615076565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000615132602f83614951565b915061513d826150d6565b604082019050919050565b6000602082019050818103600083015261516181615125565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151a282614a69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151d5576151d4614fed565b5b600182019050919050565b60006151eb82614a69565b91506151f683614a69565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561522b5761522a614fed565b5b828201905092915050565b7f4d757374206b656570206665657320617420313225206f72206c657373000000600082015250565b600061526c601d83614951565b915061527782615236565b602082019050919050565b6000602082019050818103600083015261529b8161525f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006152fe603983614951565b9150615309826152a2565b604082019050919050565b6000602082019050818103600083015261532d816152f1565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000615390602483614951565b915061539b82615334565b604082019050919050565b600060208201905081810360008301526153bf81615383565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615422602683614951565b915061542d826153c6565b604082019050919050565b6000602082019050818103600083015261545181615415565b9050919050565b7f4d757374206b656570206665657320617420313625206f72206c657373000000600082015250565b600061548e601d83614951565b915061549982615458565b602082019050919050565b600060208201905081810360008301526154bd81615481565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006154fa601b83614951565b9150615505826154c4565b602082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061558c602483614951565b915061559782615530565b604082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061561e602283614951565b9150615629826155c2565b604082019050919050565b6000602082019050818103600083015261564d81615611565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156b0602583614951565b91506156bb82615654565b604082019050919050565b600060208201905081810360008301526156df816156a3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615742602383614951565b915061574d826156e6565b604082019050919050565b6000602082019050818103600083015261577181615735565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006157d4603183614951565b91506157df82615778565b604082019050919050565b60006020820190508181036000830152615803816157c7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615840601683614951565b915061584b8261580a565b602082019050919050565b6000602082019050818103600083015261586f81615833565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158f8604983614951565b915061590382615876565b606082019050919050565b60006020820190508181036000830152615927816158eb565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061598a603583614951565b91506159958261592e565b604082019050919050565b600060208201905081810360008301526159b98161597d565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159f6601383614951565b9150615a01826159c0565b602082019050919050565b60006020820190508181036000830152615a25816159e9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a88603683614951565b9150615a9382615a2c565b604082019050919050565b60006020820190508181036000830152615ab781615a7b565b9050919050565b6000615ac982614a69565b9150615ad483614a69565b925082821015615ae757615ae6614fed565b5b828203905092915050565b600081905092915050565b50565b6000615b0d600083615af2565b9150615b1882615afd565b600082019050919050565b6000615b2e82615b00565b9150819050919050565b6000606082019050615b4d6000830186614bbc565b615b5a6020830185614bbc565b615b676040830184614bbc565b949350505050565b600081519050615b7e81614a73565b92915050565b600060208284031215615b9a57615b99614a01565b5b6000615ba884828501615b6f565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c0d602183614951565b9150615c1882615bb1565b604082019050919050565b60006020820190508181036000830152615c3c81615c00565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615c8181614a3d565b92915050565b600060208284031215615c9d57615c9c614a01565b5b6000615cab84828501615c72565b91505092915050565b6000819050919050565b6000615cd9615cd4615ccf84615cb4565b614b42565b614a69565b9050919050565b615ce981615cbe565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d2481614a2b565b82525050565b6000615d368383615d1b565b60208301905092915050565b6000602082019050919050565b6000615d5a82615cef565b615d648185615cfa565b9350615d6f83615d0b565b8060005b83811015615da0578151615d878882615d2a565b9750615d9283615d42565b925050600181019050615d73565b5085935050505092915050565b600060a082019050615dc26000830188614bbc565b615dcf6020830187615ce0565b8181036040830152615de18186615d4f565b9050615df06060830185614c66565b615dfd6080830184614bbc565b9695505050505050565b600060c082019050615e1c6000830189614c66565b615e296020830188614bbc565b615e366040830187615ce0565b615e436060830186615ce0565b615e506080830185614c66565b615e5d60a0830184614bbc565b979650505050505050565b600080600060608486031215615e8157615e80614a01565b5b6000615e8f86828701615b6f565b9350506020615ea086828701615b6f565b9250506040615eb186828701615b6f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203f6325248403bb58665e0673d95e965bde87b9f9e451a4c1aad969b158d0c63d64736f6c63430008090033

Deployed Bytecode Sourcemap

29532:18190:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7630:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9804:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31542:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29611:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8753:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30181:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29995:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31256:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31216;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35502:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10456:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29714:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31170:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30090:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37454:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30051:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8594:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11221:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37596:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29669:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30280:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31127:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30981:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30360:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8925:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22132:148;;;;;;;;;;;;;:::i;:::-;;35066:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35969:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29808:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30873;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36320:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34822:191;;;;;;;;;;;;;:::i;:::-;;21488:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29845:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31016:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36210:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7850:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37955:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30947:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30235:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31296:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31092:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35391:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11943:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30142:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30398:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9266:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31765:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30320:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37263:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35745:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30790:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29879:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30839:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9505:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29921:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35248:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38407:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30910:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22436:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31054:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29961:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36698:556;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7630:100;7684:13;7717:5;7710:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7630:100;:::o;9804:169::-;9887:4;9904:39;9913:12;:10;:12::i;:::-;9927:7;9936:6;9904:8;:39::i;:::-;9961:4;9954:11;;9804:169;;;;:::o;31542:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29611:51::-;;;:::o;8753:108::-;8814:7;8841:12;;8834:19;;8753:108;:::o;30181:47::-;;;;:::o;29995:36::-;;;;:::o;31256:33::-;;;;:::o;31216:::-;;;;:::o;35502:234::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35621:4:::1;35615;35611:1;35595:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35594:31;;;;:::i;:::-;35584:6;:41;;35576:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35721:6;35711;:17;;;;:::i;:::-;35688:20;:40;;;;35502:234:::0;:::o;10456:355::-;10596:4;10613:36;10623:6;10631:9;10642:6;10613:9;:36::i;:::-;10660:121;10669:6;10677:12;:10;:12::i;:::-;10691:89;10729:6;10691:89;;;;;;;;;;;;;;;;;:11;:19;10703:6;10691:19;;;;;;;;;;;;;;;:33;10711:12;:10;:12::i;:::-;10691:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10660:8;:121::i;:::-;10799:4;10792:11;;10456:355;;;;;:::o;29714:53::-;29760:6;29714:53;:::o;31170:36::-;;;;:::o;30090:45::-;;;;:::o;37454:134::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37567:13:::1;37545:10;:19;37556:7;37545:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37454:134:::0;;:::o;30051:32::-;;;;;;;;;;;;;:::o;8594:93::-;8652:5;8677:2;8670:9;;8594:93;:::o;11221:218::-;11309:4;11326:83;11335:12;:10;:12::i;:::-;11349:7;11358:50;11397:10;11358:11;:25;11370:12;:10;:12::i;:::-;11358:25;;;;;;;;;;;;;;;:34;11384:7;11358:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11326:8;:83::i;:::-;11427:4;11420:11;;11221:218;;;;:::o;37596:350::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37687:9:::1;37682:257;37707:8;;:15;;37703:1;:19;37682:257;;;37745:15;37763:8;;37772:1;37763:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37745:29;;37793:10;:19;37804:7;37793:19;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;37827:13;37816:24;;:7;:24;;;37793:47;37789:96;;;37861:8;;;37789:96;37923:4;37901:10;:19;37912:7;37901:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;37730:209;37682:257;37724:4;;;;;:::i;:::-;;;;37682:257;;;;37596:350:::0;;:::o;29669:38::-;;;:::o;30280:33::-;;;;;;;;;;;;;:::o;31127:36::-;;;;:::o;30981:28::-;;;;:::o;30360:31::-;;;;;;;;;;;;;:::o;8925:127::-;8999:7;9026:9;:18;9036:7;9026:18;;;;;;;;;;;;;;;;9019:25;;8925:127;;;:::o;22132:148::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22239:1:::1;22202:40;;22223:6;;;;;;;;;;;22202:40;;;;;;;;;;;;22270:1;22253:6;;:19;;;;;;;;;;;;;;;;;;22132:148::o:0;35066:120::-;35118:4;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35151:5:::1;35134:14;;:22;;;;;;;;;;;;;;;;;;35174:4;35167:11;;35066:120:::0;:::o;35969:144::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36101:4:::1;36059:31;:39;36091:6;36059:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35969:144:::0;;:::o;29808:30::-;;;;;;;;;;;;;:::o;30873:::-;;;;:::o;36320:369::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36454:13:::1;36436:15;:31;;;;36496:13;36478:15;:31;;;;36532:7;36520:9;:19;;;;36601:9;;36583:15;;36565;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36550:12;:60;;;;36645:2;36629:12;;:18;;36621:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36320:369:::0;;;:::o;34822:191::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34893:4:::1;34877:13;;:20;;;;;;;;;;;;;;;;;;34922:4;34908:11;;:18;;;;;;;;;;;;;;;;;;34954:15;34937:14;:32;;;;34993:12;34980:10;:25;;;;34822:191::o:0;21488:79::-;21526:7;21553:6;;;;;;;;;;;21546:13;;21488:79;:::o;29845:24::-;;;;;;;;;;;;;:::o;31016:31::-;;;;:::o;36210:101::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36296:7:::1;36282:11;;:21;;;;;;;;;;;;;;;;;;36210:101:::0;:::o;7850:104::-;7906:13;7939:7;7932:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7850:104;:::o;37955:245::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38062:13:::1;38054:21;;:4;:21;;;;38046:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;38151:41;38180:4;38186:5;38151:28;:41::i;:::-;37955:245:::0;;:::o;30947:24::-;;;;:::o;30235:35::-;;;;:::o;31296:27::-;;;;:::o;31092:25::-;;;;:::o;35391:102::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35480:5:::1;35459:18;;:26;;;;;;;;;;;;;;;;;;35391:102:::0;:::o;11943:269::-;12036:4;12053:129;12062:12;:10;:12::i;:::-;12076:7;12085:96;12124:15;12085:96;;;;;;;;;;;;;;;;;:11;:25;12097:12;:10;:12::i;:::-;12085:25;;;;;;;;;;;;;;;:34;12111:7;12085:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12053:8;:129::i;:::-;12200:4;12193:11;;11943:269;;;;:::o;30142:29::-;;;;:::o;30398:37::-;;;;;;;;;;;;;:::o;9266:175::-;9352:4;9369:42;9379:12;:10;:12::i;:::-;9393:9;9404:6;9369:9;:42::i;:::-;9429:4;9422:11;;9266:175;;;;:::o;31765:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30320:33::-;;;;;;;;;;;;;:::o;37263:182::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37379:8:::1;37348:19;:28;37368:7;37348:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37419:7;37403:34;;;37428:8;37403:34;;;;;;:::i;:::-;;;;;;;;37263:182:::0;;:::o;35745:215::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35867:4:::1;35861;35857:1;35841:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35840:31;;;;:::i;:::-;35830:6;:41;;35822:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35945:6;35935;:17;;;;:::i;:::-;35923:9;:29;;;;35745:215:::0;:::o;30790:39::-;;;;;;;;;;;;;:::o;29879:35::-;;;;:::o;30839:27::-;;;;:::o;9505:151::-;9594:7;9621:11;:18;9633:5;9621:18;;;;;;;;;;;;;;;:27;9640:7;9621:27;;;;;;;;;;;;;;;;9614:34;;9505:151;;;;:::o;29921:33::-;;;;:::o;35248:134::-;35308:4;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35347:5:::1;35324:20;;:28;;;;;;;;;;;;;;;;;;35370:4;35363:11;;35248:134:::0;:::o;38407:174::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38524:16:::1;38506:15;;:34;;;;;;;;;;;;;;;;;;38563:10;38551:9;;:22;;;;;;;;;;;;;;;;;;38407:174:::0;;:::o;30910:30::-;;;;:::o;22436:244::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22545:1:::1;22525:22;;:8;:22;;;;22517:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22635:8;22606:38;;22627:6;;;;;;;;;;;22606:38;;;;;;;;;;;;22664:8;22655:6;;:17;;;;;;;;;;;;;;;;;;22436:244:::0;:::o;31054:31::-;;;;:::o;29961:24::-;;;;:::o;36698:556::-;21711:12;:10;:12::i;:::-;21701:22;;:6;;;;;;;;;;;:22;;;21693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36898:13:::1;36879:16;:32;;;;36941:13;36922:16;:32;;;;36978:7;36965:10;:20;;;;37020:22;36996:21;:46;;;;37077:22;37053:21;:46;;;;37164:10;;37145:16;;37126;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37110:13;:64;;;;37210:2;37193:13;;:19;;37185:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36698:556:::0;;;;;:::o;16520:182::-;16578:7;16598:9;16614:1;16610;:5;;;;:::i;:::-;16598:17;;16639:1;16634;:6;;16626:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16693:1;16686:8;;;16520:182;;;;:::o;232:98::-;285:7;312:10;305:17;;232:98;:::o;15139:381::-;15292:1;15275:19;;:5;:19;;;;15267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15373:1;15354:21;;:7;:21;;;;15346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15458:6;15428:11;:18;15440:5;15428:18;;;;;;;;;;;;;;;:27;15447:7;15428:27;;;;;;;;;;;;;;;:36;;;;15496:7;15480:32;;15489:5;15480:32;;;15505:6;15480:32;;;;;;:::i;:::-;;;;;;;;15139:381;;;:::o;38590:5649::-;38738:1;38722:18;;:4;:18;;;;38714:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38815:1;38801:16;;:2;:16;;;;38793:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38877:10;:14;38888:2;38877:14;;;;;;;;;;;;;;;;;;;;;;;;;38876:15;:36;;;;;38896:10;:16;38907:4;38896:16;;;;;;;;;;;;;;;;;;;;;;;;;38895:17;38876:36;38868:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38991:1;38981:6;:11;38978:92;;;39009:28;39025:4;39031:2;39035:1;39009:15;:28::i;:::-;39052:7;;38978:92;39086:14;;;;;;;;;;;39083:1807;;;39146:7;:5;:7::i;:::-;39138:15;;:4;:15;;;;:49;;;;;39180:7;:5;:7::i;:::-;39174:13;;:2;:13;;;;39138:49;:86;;;;;39222:1;39208:16;;:2;:16;;;;39138:86;:124;;;;;29760:6;39245:17;;:2;:17;;;;39138:124;:154;;;;;39284:8;;;;;;;;;;;39283:9;39138:154;39116:1763;;;39330:13;;;;;;;;;;;39326:148;;39375:19;:25;39395:4;39375:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39404:19;:23;39424:2;39404:23;;;;;;;;;;;;;;;;;;;;;;;;;39375:52;39367:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39326:148;39633:20;;;;;;;;;;;39629:423;;;39687:7;:5;:7::i;:::-;39681:13;;:2;:13;;;;:47;;;;;39712:15;39698:30;;:2;:30;;;;39681:47;:79;;;;;39746:13;39732:28;;:2;:28;;;;39681:79;39677:356;;;39838:12;39796:28;:39;39825:9;39796:39;;;;;;;;;;;;;;;;:54;39788:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39997:12;39955:28;:39;39984:9;39955:39;;;;;;;;;;;;;;;:54;;;;39677:356;39629:423;40105:25;:31;40131:4;40105:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40141:31;:35;40173:2;40141:35;;;;;;;;;;;;;;;;;;;;;;;;;40140:36;40105:71;40101:763;;;40223:20;;40213:6;:30;;40205:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40362:9;;40345:13;40355:2;40345:9;:13::i;:::-;40336:6;:22;;;;:::i;:::-;:35;;40328:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40101:763;;;40474:25;:29;40500:2;40474:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40508:31;:37;40540:4;40508:37;;;;;;;;;;;;;;;;;;;;;;;;;40507:38;40474:71;40470:394;;;40592:20;;40582:6;:30;;40574:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40470:394;;;40718:31;:35;40750:2;40718:35;;;;;;;;;;;;;;;;;;;;;;;;;40714:150;;40811:9;;40794:13;40804:2;40794:9;:13::i;:::-;40785:6;:22;;;;:::i;:::-;:35;;40777:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40714:150;40470:394;40101:763;39116:1763;39083:1807;40964:1;40951:10;;:14;;;;:::i;:::-;40934:12;:32;;:73;;;;;40994:13;40988:19;;:2;:19;;;;40934:73;:152;;;;;41043:42;41029:57;;:2;:57;;;;40934:152;40930:221;;;41135:4;41118:10;:14;41129:2;41118:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40930:221;41193:10;41214:13;41206:21;;:4;:21;;;41193:34;;41243:5;41242:6;:28;;;;;41252:18;;;;;;;;;;;41242:28;41238:958;;;41325:1;41291:24;:30;41316:4;41291:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41395:15;41382:8;41348:24;:30;41373:4;41348:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;41291:120;41287:527;;;41452:21;;41433:16;:40;;;;41511:21;;41492:16;:40;;;;41605:10;;41586:16;;41567;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41551:13;:64;;;;41287:527;;;41675:1;41656:16;:20;;;;41714:1;41695:16;:20;;;;41788:10;;41769:16;;41750;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41734:13;:64;;;;41287:527;41238:958;;;41882:1;41850:24;:28;41875:2;41850:28;;;;;;;;;;;;;;;;:33;41846:120;;;41935:15;41904:24;:28;41929:2;41904:28;;;;;;;;;;;;;;;:46;;;;41846:120;41988:18;;;;;;;;;;;41983:202;;42046:1;42027:16;:20;;;;42085:1;42066:16;:20;;;;42159:10;;42140:16;;42121;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;42105:13;:64;;;;41983:202;41238:958;42203:28;42234:24;42252:4;42234:9;:24::i;:::-;42203:55;;42272:12;42311:18;;42287:20;:42;;42272:57;;42361:7;:35;;;;;42385:11;;;;;;;;;;;42361:35;:61;;;;;42414:8;;;;;;;;;;;42413:9;42361:61;:110;;;;;42440:25;:31;42466:4;42440:31;;;;;;;;;;;;;;;;;;;;;;;;;42439:32;42361:110;:153;;;;;42489:19;:25;42509:4;42489:25;;;;;;;;;;;;;;;;;;;;;;;;;42488:26;42361:153;:194;;;;;42532:19;:23;42552:2;42532:23;;;;;;;;;;;;;;;;;;;;;;;;;42531:24;42361:194;42343:328;;;42593:4;42582:8;;:15;;;;;;;;;;;;;;;;;;42615:10;:8;:10::i;:::-;42654:5;42643:8;;:16;;;;;;;;;;;;;;;;;;42343:328;42688:8;;;;;;;;;;;42687:9;:42;;;;;42700:25;:29;42726:2;42700:29;;;;;;;;;;;;;;;;;;;;;;;;;42687:42;:59;;;;;42733:13;;;;;;;;;;;42687:59;:114;;;;;42786:15;;42769:14;;:32;;;;:::i;:::-;42750:15;:51;;42687:114;:144;;;;;42806:19;:25;42826:4;42806:25;;;;;;;;;;;;;;;;;;;;;;;;;42805:26;42687:144;42684:204;;;42847:29;:27;:29::i;:::-;;42684:204;42901:12;42917:8;;;;;;;;;;;42916:9;42901:24;;43027:19;:25;43047:4;43027:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43056:19;:23;43076:2;43056:23;;;;;;;;;;;;;;;;;;;;;;;;;43027:52;43024:99;;;43106:5;43096:15;;43024:99;43136:12;43240:7;43237:948;;;43291:25;:29;43317:2;43291:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43340:1;43324:13;;:17;43291:50;43287:748;;;43368:34;43398:3;43368:25;43379:13;;43368:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43361:41;;43469:13;;43450:16;;43443:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43421:18;;:61;;;;;;;:::i;:::-;;;;;;;;43537:13;;43524:10;;43517:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;43501:12;;:49;;;;;;;:::i;:::-;;;;;;;;43617:13;;43598:16;;43591:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43569:18;;:61;;;;;;;:::i;:::-;;;;;;;;43287:748;;;43691:25;:31;43717:4;43691:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43741:1;43726:12;;:16;43691:51;43688:347;;;43767:33;43796:3;43767:24;43778:12;;43767:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43760:40;;43863:12;;43845:15;;43838:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43816:18;;:59;;;;;;;:::i;:::-;;;;;;;;43929:12;;43917:9;;43910:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43894:12;;:47;;;;;;;:::i;:::-;;;;;;;;44007:12;;43989:15;;43982:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43960:18;;:59;;;;;;;:::i;:::-;;;;;;;;43688:347;43287:748;44062:1;44055:4;:8;44052:93;;;44087:42;44103:4;44117;44124;44087:15;:42::i;:::-;44052:93;44169:4;44159:14;;;;;:::i;:::-;;;43237:948;44198:33;44214:4;44220:2;44224:6;44198:15;:33::i;:::-;38703:5536;;;;;38590:5649;;;;:::o;17426:193::-;17512:7;17545:1;17540;:6;;17548:12;17532:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17572:9;17588:1;17584;:5;;;;:::i;:::-;17572:17;;17610:1;17603:8;;;17426:193;;;;;:::o;38209:189::-;38326:5;38292:25;:31;38318:4;38292:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38384:5;38350:40;;38378:4;38350:40;;;;;;;;;;;;38209:189;;:::o;12703:575::-;12861:1;12843:20;;:6;:20;;;;12835:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12945:1;12924:23;;:9;:23;;;;12916:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13001:47;13022:6;13030:9;13041:6;13001:20;:47::i;:::-;13082:71;13104:6;13082:71;;;;;;;;;;;;;;;;;:9;:17;13092:6;13082:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13062:9;:17;13072:6;13062:17;;;;;;;;;;;;;;;:91;;;;13187:32;13212:6;13187:9;:20;13197:9;13187:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13164:9;:20;13174:9;13164:20;;;;;;;;;;;;;;;:55;;;;13252:9;13235:35;;13244:6;13235:35;;;13263:6;13235:35;;;;;;:::i;:::-;;;;;;;;12703:575;;;:::o;45381:1564::-;45420:23;45446:24;45464:4;45446:9;:24::i;:::-;45420:50;;45481:25;45551:12;;45530:18;;45509;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45481:82;;45574:12;45622:1;45603:15;:20;:46;;;;45648:1;45627:17;:22;45603:46;45600:60;;;45652:7;;;;;45600:60;45715:2;45694:18;;:23;;;;:::i;:::-;45676:15;:41;45673:111;;;45770:2;45749:18;;:23;;;;:::i;:::-;45731:41;;45673:111;45846:23;45931:1;45911:17;45890:18;;45872:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45846:86;;45943:26;45972:36;45992:15;45972;:19;;:36;;;;:::i;:::-;45943:65;;46022:25;46050:21;46022:49;;46085:36;46102:18;46085:16;:36::i;:::-;46136:18;46157:44;46183:17;46157:21;:25;;:44;;;;:::i;:::-;46136:65;;46215:23;46241:57;46280:17;46241:34;46256:18;;46241:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;46215:83;;46309:17;46329:51;46362:17;46329:28;46344:12;;46329:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;46309:71;;46391:23;46448:9;46430:15;46417:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;46391:66;;46492:1;46471:18;:22;;;;46525:1;46504:18;:22;;;;46552:1;46537:12;:16;;;;46588:9;;;;;;;;;;;46580:23;;46611:9;46580:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46567:58;;;;;46660:1;46642:15;:19;:42;;;;;46683:1;46665:15;:19;46642:42;46639:210;;;46700:46;46713:15;46730;46700:12;:46::i;:::-;46766:71;46781:18;46801:15;46818:18;;46766:71;;;;;;;;:::i;:::-;;;;;;;;46639:210;46882:15;;;;;;;;;;;46874:29;;46911:21;46874:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46861:76;;;;;45409:1536;;;;;;;;;;45381:1564;:::o;46954:765::-;47011:4;47047:15;47030:14;:32;;;;47118:28;47149:4;:14;;;47164:13;47149:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47118:60;;47229:20;47252:53;47299:5;47252:42;47277:16;;47252:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;47229:76;;47426:1;47411:12;:16;47407:105;;;47443:57;47459:13;29760:6;47487:12;47443:15;:57::i;:::-;47407:105;47588:19;47625:13;47588:51;;47650:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47677:12;;;;;;;;;;47707:4;47700:11;;;;;46954:765;:::o;17879:473::-;17937:7;18187:1;18182;:6;18178:47;;;18212:1;18205:8;;;;18178:47;18238:9;18254:1;18250;:5;;;;:::i;:::-;18238:17;;18283:1;18278;18274;:5;;;;:::i;:::-;:10;18266:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18343:1;18336:8;;;17879:473;;;;;:::o;18829:132::-;18887:7;18914:39;18918:1;18921;18914:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18907:46;;18829:132;;;;:::o;16124:125::-;;;;:::o;16986:136::-;17044:7;17071:43;17075:1;17078;17071:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17064:50;;16986:136;;;;:::o;44248:597::-;44377:21;44415:1;44401:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44377:40;;44446:4;44428;44433:1;44428:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44472:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44462:4;44467:1;44462:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44508:62;44525:4;44540:15;44558:11;44508:8;:62::i;:::-;44610:15;:66;;;44691:11;44717:1;44761:4;44788;44808:15;44610:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44303:542;44248:597;:::o;44854:518::-;45002:62;45019:4;45034:15;45052:11;45002:8;:62::i;:::-;45108:15;:31;;;45147:9;45180:4;45200:11;45226:1;45269;29760:6;45338:15;45108:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44854:518;;:::o;19458:279::-;19544:7;19576:1;19572;:5;19579:12;19564:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19603:9;19619:1;19615;:5;;;;:::i;:::-;19603:17;;19728:1;19721:8;;;19458:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:116::-;6541:21;6556:5;6541:21;:::i;:::-;6534:5;6531:32;6521:60;;6577:1;6574;6567:12;6521:60;6471:116;:::o;6593:133::-;6636:5;6674:6;6661:20;6652:29;;6690:30;6714:5;6690:30;:::i;:::-;6593:133;;;;:::o;6732:468::-;6797:6;6805;6854:2;6842:9;6833:7;6829:23;6825:32;6822:119;;;6860:79;;:::i;:::-;6822:119;6980:1;7005:53;7050:7;7041:6;7030:9;7026:22;7005:53;:::i;:::-;6995:63;;6951:117;7107:2;7133:50;7175:7;7166:6;7155:9;7151:22;7133:50;:::i;:::-;7123:60;;7078:115;6732:468;;;;;:::o;7206:86::-;7241:7;7281:4;7274:5;7270:16;7259:27;;7206:86;;;:::o;7298:112::-;7381:22;7397:5;7381:22;:::i;:::-;7376:3;7369:35;7298:112;;:::o;7416:214::-;7505:4;7543:2;7532:9;7528:18;7520:26;;7556:67;7620:1;7609:9;7605:17;7596:6;7556:67;:::i;:::-;7416:214;;;;:::o;7636:117::-;7745:1;7742;7735:12;7759:117;7868:1;7865;7858:12;7882:117;7991:1;7988;7981:12;8022:568;8095:8;8105:6;8155:3;8148:4;8140:6;8136:17;8132:27;8122:122;;8163:79;;:::i;:::-;8122:122;8276:6;8263:20;8253:30;;8306:18;8298:6;8295:30;8292:117;;;8328:79;;:::i;:::-;8292:117;8442:4;8434:6;8430:17;8418:29;;8496:3;8488:4;8480:6;8476:17;8466:8;8462:32;8459:41;8456:128;;;8503:79;;:::i;:::-;8456:128;8022:568;;;;;:::o;8596:559::-;8682:6;8690;8739:2;8727:9;8718:7;8714:23;8710:32;8707:119;;;8745:79;;:::i;:::-;8707:119;8893:1;8882:9;8878:17;8865:31;8923:18;8915:6;8912:30;8909:117;;;8945:79;;:::i;:::-;8909:117;9058:80;9130:7;9121:6;9110:9;9106:22;9058:80;:::i;:::-;9040:98;;;;8836:312;8596:559;;;;;:::o;9161:619::-;9238:6;9246;9254;9303:2;9291:9;9282:7;9278:23;9274:32;9271:119;;;9309:79;;:::i;:::-;9271:119;9429:1;9454:53;9499:7;9490:6;9479:9;9475:22;9454:53;:::i;:::-;9444:63;;9400:117;9556:2;9582:53;9627:7;9618:6;9607:9;9603:22;9582:53;:::i;:::-;9572:63;;9527:118;9684:2;9710:53;9755:7;9746:6;9735:9;9731:22;9710:53;:::i;:::-;9700:63;;9655:118;9161:619;;;;;:::o;9786:323::-;9842:6;9891:2;9879:9;9870:7;9866:23;9862:32;9859:119;;;9897:79;;:::i;:::-;9859:119;10017:1;10042:50;10084:7;10075:6;10064:9;10060:22;10042:50;:::i;:::-;10032:60;;9988:114;9786:323;;;;:::o;10115:474::-;10183:6;10191;10240:2;10228:9;10219:7;10215:23;10211:32;10208:119;;;10246:79;;:::i;:::-;10208:119;10366:1;10391:53;10436:7;10427:6;10416:9;10412:22;10391:53;:::i;:::-;10381:63;;10337:117;10493:2;10519:53;10564:7;10555:6;10544:9;10540:22;10519:53;:::i;:::-;10509:63;;10464:118;10115:474;;;;;:::o;10595:911::-;10690:6;10698;10706;10714;10722;10771:3;10759:9;10750:7;10746:23;10742:33;10739:120;;;10778:79;;:::i;:::-;10739:120;10898:1;10923:53;10968:7;10959:6;10948:9;10944:22;10923:53;:::i;:::-;10913:63;;10869:117;11025:2;11051:53;11096:7;11087:6;11076:9;11072:22;11051:53;:::i;:::-;11041:63;;10996:118;11153:2;11179:53;11224:7;11215:6;11204:9;11200:22;11179:53;:::i;:::-;11169:63;;11124:118;11281:2;11307:53;11352:7;11343:6;11332:9;11328:22;11307:53;:::i;:::-;11297:63;;11252:118;11409:3;11436:53;11481:7;11472:6;11461:9;11457:22;11436:53;:::i;:::-;11426:63;;11380:119;10595:911;;;;;;;;:::o;11512:180::-;11560:77;11557:1;11550:88;11657:4;11654:1;11647:15;11681:4;11678:1;11671:15;11698:320;11742:6;11779:1;11773:4;11769:12;11759:22;;11826:1;11820:4;11816:12;11847:18;11837:81;;11903:4;11895:6;11891:17;11881:27;;11837:81;11965:2;11957:6;11954:14;11934:18;11931:38;11928:84;;;11984:18;;:::i;:::-;11928:84;11749:269;11698:320;;;:::o;12024:182::-;12164:34;12160:1;12152:6;12148:14;12141:58;12024:182;:::o;12212:366::-;12354:3;12375:67;12439:2;12434:3;12375:67;:::i;:::-;12368:74;;12451:93;12540:3;12451:93;:::i;:::-;12569:2;12564:3;12560:12;12553:19;;12212:366;;;:::o;12584:419::-;12750:4;12788:2;12777:9;12773:18;12765:26;;12837:9;12831:4;12827:20;12823:1;12812:9;12808:17;12801:47;12865:131;12991:4;12865:131;:::i;:::-;12857:139;;12584:419;;;:::o;13009:180::-;13057:77;13054:1;13047:88;13154:4;13151:1;13144:15;13178:4;13175:1;13168:15;13195:348;13235:7;13258:20;13276:1;13258:20;:::i;:::-;13253:25;;13292:20;13310:1;13292:20;:::i;:::-;13287:25;;13480:1;13412:66;13408:74;13405:1;13402:81;13397:1;13390:9;13383:17;13379:105;13376:131;;;13487:18;;:::i;:::-;13376:131;13535:1;13532;13528:9;13517:20;;13195:348;;;;:::o;13549:180::-;13597:77;13594:1;13587:88;13694:4;13691:1;13684:15;13718:4;13715:1;13708:15;13735:185;13775:1;13792:20;13810:1;13792:20;:::i;:::-;13787:25;;13826:20;13844:1;13826:20;:::i;:::-;13821:25;;13865:1;13855:35;;13870:18;;:::i;:::-;13855:35;13912:1;13909;13905:9;13900:14;;13735:185;;;;:::o;13926:234::-;14066:34;14062:1;14054:6;14050:14;14043:58;14135:17;14130:2;14122:6;14118:15;14111:42;13926:234;:::o;14166:366::-;14308:3;14329:67;14393:2;14388:3;14329:67;:::i;:::-;14322:74;;14405:93;14494:3;14405:93;:::i;:::-;14523:2;14518:3;14514:12;14507:19;;14166:366;;;:::o;14538:419::-;14704:4;14742:2;14731:9;14727:18;14719:26;;14791:9;14785:4;14781:20;14777:1;14766:9;14762:17;14755:47;14819:131;14945:4;14819:131;:::i;:::-;14811:139;;14538:419;;;:::o;14963:180::-;15011:77;15008:1;15001:88;15108:4;15105:1;15098:15;15132:4;15129:1;15122:15;15149:233;15188:3;15211:24;15229:5;15211:24;:::i;:::-;15202:33;;15257:66;15250:5;15247:77;15244:103;;;15327:18;;:::i;:::-;15244:103;15374:1;15367:5;15363:13;15356:20;;15149:233;;;:::o;15388:305::-;15428:3;15447:20;15465:1;15447:20;:::i;:::-;15442:25;;15481:20;15499:1;15481:20;:::i;:::-;15476:25;;15635:1;15567:66;15563:74;15560:1;15557:81;15554:107;;;15641:18;;:::i;:::-;15554:107;15685:1;15682;15678:9;15671:16;;15388:305;;;;:::o;15699:179::-;15839:31;15835:1;15827:6;15823:14;15816:55;15699:179;:::o;15884:366::-;16026:3;16047:67;16111:2;16106:3;16047:67;:::i;:::-;16040:74;;16123:93;16212:3;16123:93;:::i;:::-;16241:2;16236:3;16232:12;16225:19;;15884:366;;;:::o;16256:419::-;16422:4;16460:2;16449:9;16445:18;16437:26;;16509:9;16503:4;16499:20;16495:1;16484:9;16480:17;16473:47;16537:131;16663:4;16537:131;:::i;:::-;16529:139;;16256:419;;;:::o;16681:244::-;16821:34;16817:1;16809:6;16805:14;16798:58;16890:27;16885:2;16877:6;16873:15;16866:52;16681:244;:::o;16931:366::-;17073:3;17094:67;17158:2;17153:3;17094:67;:::i;:::-;17087:74;;17170:93;17259:3;17170:93;:::i;:::-;17288:2;17283:3;17279:12;17272:19;;16931:366;;;:::o;17303:419::-;17469:4;17507:2;17496:9;17492:18;17484:26;;17556:9;17550:4;17546:20;17542:1;17531:9;17527:17;17520:47;17584:131;17710:4;17584:131;:::i;:::-;17576:139;;17303:419;;;:::o;17728:223::-;17868:34;17864:1;17856:6;17852:14;17845:58;17937:6;17932:2;17924:6;17920:15;17913:31;17728:223;:::o;17957:366::-;18099:3;18120:67;18184:2;18179:3;18120:67;:::i;:::-;18113:74;;18196:93;18285:3;18196:93;:::i;:::-;18314:2;18309:3;18305:12;18298:19;;17957:366;;;:::o;18329:419::-;18495:4;18533:2;18522:9;18518:18;18510:26;;18582:9;18576:4;18572:20;18568:1;18557:9;18553:17;18546:47;18610:131;18736:4;18610:131;:::i;:::-;18602:139;;18329:419;;;:::o;18754:225::-;18894:34;18890:1;18882:6;18878:14;18871:58;18963:8;18958:2;18950:6;18946:15;18939:33;18754:225;:::o;18985:366::-;19127:3;19148:67;19212:2;19207:3;19148:67;:::i;:::-;19141:74;;19224:93;19313:3;19224:93;:::i;:::-;19342:2;19337:3;19333:12;19326:19;;18985:366;;;:::o;19357:419::-;19523:4;19561:2;19550:9;19546:18;19538:26;;19610:9;19604:4;19600:20;19596:1;19585:9;19581:17;19574:47;19638:131;19764:4;19638:131;:::i;:::-;19630:139;;19357:419;;;:::o;19782:179::-;19922:31;19918:1;19910:6;19906:14;19899:55;19782:179;:::o;19967:366::-;20109:3;20130:67;20194:2;20189:3;20130:67;:::i;:::-;20123:74;;20206:93;20295:3;20206:93;:::i;:::-;20324:2;20319:3;20315:12;20308:19;;19967:366;;;:::o;20339:419::-;20505:4;20543:2;20532:9;20528:18;20520:26;;20592:9;20586:4;20582:20;20578:1;20567:9;20563:17;20556:47;20620:131;20746:4;20620:131;:::i;:::-;20612:139;;20339:419;;;:::o;20764:177::-;20904:29;20900:1;20892:6;20888:14;20881:53;20764:177;:::o;20947:366::-;21089:3;21110:67;21174:2;21169:3;21110:67;:::i;:::-;21103:74;;21186:93;21275:3;21186:93;:::i;:::-;21304:2;21299:3;21295:12;21288:19;;20947:366;;;:::o;21319:419::-;21485:4;21523:2;21512:9;21508:18;21500:26;;21572:9;21566:4;21562:20;21558:1;21547:9;21543:17;21536:47;21600:131;21726:4;21600:131;:::i;:::-;21592:139;;21319:419;;;:::o;21744:223::-;21884:34;21880:1;21872:6;21868:14;21861:58;21953:6;21948:2;21940:6;21936:15;21929:31;21744:223;:::o;21973:366::-;22115:3;22136:67;22200:2;22195:3;22136:67;:::i;:::-;22129:74;;22212:93;22301:3;22212:93;:::i;:::-;22330:2;22325:3;22321:12;22314:19;;21973:366;;;:::o;22345:419::-;22511:4;22549:2;22538:9;22534:18;22526:26;;22598:9;22592:4;22588:20;22584:1;22573:9;22569:17;22562:47;22626:131;22752:4;22626:131;:::i;:::-;22618:139;;22345:419;;;:::o;22770:221::-;22910:34;22906:1;22898:6;22894:14;22887:58;22979:4;22974:2;22966:6;22962:15;22955:29;22770:221;:::o;22997:366::-;23139:3;23160:67;23224:2;23219:3;23160:67;:::i;:::-;23153:74;;23236:93;23325:3;23236:93;:::i;:::-;23354:2;23349:3;23345:12;23338:19;;22997:366;;;:::o;23369:419::-;23535:4;23573:2;23562:9;23558:18;23550:26;;23622:9;23616:4;23612:20;23608:1;23597:9;23593:17;23586:47;23650:131;23776:4;23650:131;:::i;:::-;23642:139;;23369:419;;;:::o;23794:224::-;23934:34;23930:1;23922:6;23918:14;23911:58;24003:7;23998:2;23990:6;23986:15;23979:32;23794:224;:::o;24024:366::-;24166:3;24187:67;24251:2;24246:3;24187:67;:::i;:::-;24180:74;;24263:93;24352:3;24263:93;:::i;:::-;24381:2;24376:3;24372:12;24365:19;;24024:366;;;:::o;24396:419::-;24562:4;24600:2;24589:9;24585:18;24577:26;;24649:9;24643:4;24639:20;24635:1;24624:9;24620:17;24613:47;24677:131;24803:4;24677:131;:::i;:::-;24669:139;;24396:419;;;:::o;24821:222::-;24961:34;24957:1;24949:6;24945:14;24938:58;25030:5;25025:2;25017:6;25013:15;25006:30;24821:222;:::o;25049:366::-;25191:3;25212:67;25276:2;25271:3;25212:67;:::i;:::-;25205:74;;25288:93;25377:3;25288:93;:::i;:::-;25406:2;25401:3;25397:12;25390:19;;25049:366;;;:::o;25421:419::-;25587:4;25625:2;25614:9;25610:18;25602:26;;25674:9;25668:4;25664:20;25660:1;25649:9;25645:17;25638:47;25702:131;25828:4;25702:131;:::i;:::-;25694:139;;25421:419;;;:::o;25846:236::-;25986:34;25982:1;25974:6;25970:14;25963:58;26055:19;26050:2;26042:6;26038:15;26031:44;25846:236;:::o;26088:366::-;26230:3;26251:67;26315:2;26310:3;26251:67;:::i;:::-;26244:74;;26327:93;26416:3;26327:93;:::i;:::-;26445:2;26440:3;26436:12;26429:19;;26088:366;;;:::o;26460:419::-;26626:4;26664:2;26653:9;26649:18;26641:26;;26713:9;26707:4;26703:20;26699:1;26688:9;26684:17;26677:47;26741:131;26867:4;26741:131;:::i;:::-;26733:139;;26460:419;;;:::o;26885:172::-;27025:24;27021:1;27013:6;27009:14;27002:48;26885:172;:::o;27063:366::-;27205:3;27226:67;27290:2;27285:3;27226:67;:::i;:::-;27219:74;;27302:93;27391:3;27302:93;:::i;:::-;27420:2;27415:3;27411:12;27404:19;;27063:366;;;:::o;27435:419::-;27601:4;27639:2;27628:9;27624:18;27616:26;;27688:9;27682:4;27678:20;27674:1;27663:9;27659:17;27652:47;27716:131;27842:4;27716:131;:::i;:::-;27708:139;;27435:419;;;:::o;27860:297::-;28000:34;27996:1;27988:6;27984:14;27977:58;28069:34;28064:2;28056:6;28052:15;28045:59;28138:11;28133:2;28125:6;28121:15;28114:36;27860:297;:::o;28163:366::-;28305:3;28326:67;28390:2;28385:3;28326:67;:::i;:::-;28319:74;;28402:93;28491:3;28402:93;:::i;:::-;28520:2;28515:3;28511:12;28504:19;;28163:366;;;:::o;28535:419::-;28701:4;28739:2;28728:9;28724:18;28716:26;;28788:9;28782:4;28778:20;28774:1;28763:9;28759:17;28752:47;28816:131;28942:4;28816:131;:::i;:::-;28808:139;;28535:419;;;:::o;28960:240::-;29100:34;29096:1;29088:6;29084:14;29077:58;29169:23;29164:2;29156:6;29152:15;29145:48;28960:240;:::o;29206:366::-;29348:3;29369:67;29433:2;29428:3;29369:67;:::i;:::-;29362:74;;29445:93;29534:3;29445:93;:::i;:::-;29563:2;29558:3;29554:12;29547:19;;29206:366;;;:::o;29578:419::-;29744:4;29782:2;29771:9;29767:18;29759:26;;29831:9;29825:4;29821:20;29817:1;29806:9;29802:17;29795:47;29859:131;29985:4;29859:131;:::i;:::-;29851:139;;29578:419;;;:::o;30003:169::-;30143:21;30139:1;30131:6;30127:14;30120:45;30003:169;:::o;30178:366::-;30320:3;30341:67;30405:2;30400:3;30341:67;:::i;:::-;30334:74;;30417:93;30506:3;30417:93;:::i;:::-;30535:2;30530:3;30526:12;30519:19;;30178:366;;;:::o;30550:419::-;30716:4;30754:2;30743:9;30739:18;30731:26;;30803:9;30797:4;30793:20;30789:1;30778:9;30774:17;30767:47;30831:131;30957:4;30831:131;:::i;:::-;30823:139;;30550:419;;;:::o;30975:241::-;31115:34;31111:1;31103:6;31099:14;31092:58;31184:24;31179:2;31171:6;31167:15;31160:49;30975:241;:::o;31222:366::-;31364:3;31385:67;31449:2;31444:3;31385:67;:::i;:::-;31378:74;;31461:93;31550:3;31461:93;:::i;:::-;31579:2;31574:3;31570:12;31563:19;;31222:366;;;:::o;31594:419::-;31760:4;31798:2;31787:9;31783:18;31775:26;;31847:9;31841:4;31837:20;31833:1;31822:9;31818:17;31811:47;31875:131;32001:4;31875:131;:::i;:::-;31867:139;;31594:419;;;:::o;32019:191::-;32059:4;32079:20;32097:1;32079:20;:::i;:::-;32074:25;;32113:20;32131:1;32113:20;:::i;:::-;32108:25;;32152:1;32149;32146:8;32143:34;;;32157:18;;:::i;:::-;32143:34;32202:1;32199;32195:9;32187:17;;32019:191;;;;:::o;32216:147::-;32317:11;32354:3;32339:18;;32216:147;;;;:::o;32369:114::-;;:::o;32489:398::-;32648:3;32669:83;32750:1;32745:3;32669:83;:::i;:::-;32662:90;;32761:93;32850:3;32761:93;:::i;:::-;32879:1;32874:3;32870:11;32863:18;;32489:398;;;:::o;32893:379::-;33077:3;33099:147;33242:3;33099:147;:::i;:::-;33092:154;;33263:3;33256:10;;32893:379;;;:::o;33278:442::-;33427:4;33465:2;33454:9;33450:18;33442:26;;33478:71;33546:1;33535:9;33531:17;33522:6;33478:71;:::i;:::-;33559:72;33627:2;33616:9;33612:18;33603:6;33559:72;:::i;:::-;33641;33709:2;33698:9;33694:18;33685:6;33641:72;:::i;:::-;33278:442;;;;;;:::o;33726:143::-;33783:5;33814:6;33808:13;33799:22;;33830:33;33857:5;33830:33;:::i;:::-;33726:143;;;;:::o;33875:351::-;33945:6;33994:2;33982:9;33973:7;33969:23;33965:32;33962:119;;;34000:79;;:::i;:::-;33962:119;34120:1;34145:64;34201:7;34192:6;34181:9;34177:22;34145:64;:::i;:::-;34135:74;;34091:128;33875:351;;;;:::o;34232:220::-;34372:34;34368:1;34360:6;34356:14;34349:58;34441:3;34436:2;34428:6;34424:15;34417:28;34232:220;:::o;34458:366::-;34600:3;34621:67;34685:2;34680:3;34621:67;:::i;:::-;34614:74;;34697:93;34786:3;34697:93;:::i;:::-;34815:2;34810:3;34806:12;34799:19;;34458:366;;;:::o;34830:419::-;34996:4;35034:2;35023:9;35019:18;35011:26;;35083:9;35077:4;35073:20;35069:1;35058:9;35054:17;35047:47;35111:131;35237:4;35111:131;:::i;:::-;35103:139;;34830:419;;;:::o;35255:180::-;35303:77;35300:1;35293:88;35400:4;35397:1;35390:15;35424:4;35421:1;35414:15;35441:143;35498:5;35529:6;35523:13;35514:22;;35545:33;35572:5;35545:33;:::i;:::-;35441:143;;;;:::o;35590:351::-;35660:6;35709:2;35697:9;35688:7;35684:23;35680:32;35677:119;;;35715:79;;:::i;:::-;35677:119;35835:1;35860:64;35916:7;35907:6;35896:9;35892:22;35860:64;:::i;:::-;35850:74;;35806:128;35590:351;;;;:::o;35947:85::-;35992:7;36021:5;36010:16;;35947:85;;;:::o;36038:158::-;36096:9;36129:61;36147:42;36156:32;36182:5;36156:32;:::i;:::-;36147:42;:::i;:::-;36129:61;:::i;:::-;36116:74;;36038:158;;;:::o;36202:147::-;36297:45;36336:5;36297:45;:::i;:::-;36292:3;36285:58;36202:147;;:::o;36355:114::-;36422:6;36456:5;36450:12;36440:22;;36355:114;;;:::o;36475:184::-;36574:11;36608:6;36603:3;36596:19;36648:4;36643:3;36639:14;36624:29;;36475:184;;;;:::o;36665:132::-;36732:4;36755:3;36747:11;;36785:4;36780:3;36776:14;36768:22;;36665:132;;;:::o;36803:108::-;36880:24;36898:5;36880:24;:::i;:::-;36875:3;36868:37;36803:108;;:::o;36917:179::-;36986:10;37007:46;37049:3;37041:6;37007:46;:::i;:::-;37085:4;37080:3;37076:14;37062:28;;36917:179;;;;:::o;37102:113::-;37172:4;37204;37199:3;37195:14;37187:22;;37102:113;;;:::o;37251:732::-;37370:3;37399:54;37447:5;37399:54;:::i;:::-;37469:86;37548:6;37543:3;37469:86;:::i;:::-;37462:93;;37579:56;37629:5;37579:56;:::i;:::-;37658:7;37689:1;37674:284;37699:6;37696:1;37693:13;37674:284;;;37775:6;37769:13;37802:63;37861:3;37846:13;37802:63;:::i;:::-;37795:70;;37888:60;37941:6;37888:60;:::i;:::-;37878:70;;37734:224;37721:1;37718;37714:9;37709:14;;37674:284;;;37678:14;37974:3;37967:10;;37375:608;;;37251:732;;;;:::o;37989:831::-;38252:4;38290:3;38279:9;38275:19;38267:27;;38304:71;38372:1;38361:9;38357:17;38348:6;38304:71;:::i;:::-;38385:80;38461:2;38450:9;38446:18;38437:6;38385:80;:::i;:::-;38512:9;38506:4;38502:20;38497:2;38486:9;38482:18;38475:48;38540:108;38643:4;38634:6;38540:108;:::i;:::-;38532:116;;38658:72;38726:2;38715:9;38711:18;38702:6;38658:72;:::i;:::-;38740:73;38808:3;38797:9;38793:19;38784:6;38740:73;:::i;:::-;37989:831;;;;;;;;:::o;38826:807::-;39075:4;39113:3;39102:9;39098:19;39090:27;;39127:71;39195:1;39184:9;39180:17;39171:6;39127:71;:::i;:::-;39208:72;39276:2;39265:9;39261:18;39252:6;39208:72;:::i;:::-;39290:80;39366:2;39355:9;39351:18;39342:6;39290:80;:::i;:::-;39380;39456:2;39445:9;39441:18;39432:6;39380:80;:::i;:::-;39470:73;39538:3;39527:9;39523:19;39514:6;39470:73;:::i;:::-;39553;39621:3;39610:9;39606:19;39597:6;39553:73;:::i;:::-;38826:807;;;;;;;;;:::o;39639:663::-;39727:6;39735;39743;39792:2;39780:9;39771:7;39767:23;39763:32;39760:119;;;39798:79;;:::i;:::-;39760:119;39918:1;39943:64;39999:7;39990:6;39979:9;39975:22;39943:64;:::i;:::-;39933:74;;39889:128;40056:2;40082:64;40138:7;40129:6;40118:9;40114:22;40082:64;:::i;:::-;40072:74;;40027:129;40195:2;40221:64;40277:7;40268:6;40257:9;40253:22;40221:64;:::i;:::-;40211:74;;40166:129;39639:663;;;;;:::o

Swarm Source

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