ETH Price: $2,995.80 (-0.57%)
Gas: 6 Gwei

Token

CHEW (CHEW)
 

Overview

Max Total Supply

1,000,000,000 CHEW

Holders

362

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
484,469.363315543339530875 CHEW

Value
$0.00
0x74e4f76aa097a5d81704e232a4ed15a0ac4d8a78
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:
CHEW

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-06
*/

/**
 * SPDX-License-Identifier: MIT
 */
pragma solidity >=0.8.16;
pragma experimental ABIEncoderV2;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        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] + 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

contract CHEW 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;
    address public lpWallet;

    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;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("CHEW", "CHEW") {
        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 = 8;
        uint256 _buyLiquidityFee = 2;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 9;
        uint256 _sellLiquidityFee = 6;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1000000000 * 1e18;

        maxTransactionAmount = (totalSupply) / 100;
        maxWallet = (totalSupply) / 100;
        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;

        marketingWallet = address(0xdA2572efd681921f3B266b7a808791DeB6038BaC); 
        devWallet = address(0xf3FF20903Ff771a8109C308ecf5925329A37f908);
        lpWallet = msg.sender;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, 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;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 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 <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 20, "Must keep fees at  20% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        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
            lpWallet,
            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 setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    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, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        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":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600c556001600d60006101000a81548160ff021916908315150217905550610e10600e556107086010556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600481526020017f43484557000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4348455700000000000000000000000000000000000000000000000000000000815250816003908162000127919062000e31565b50806004908162000139919062000e31565b5050506200015c620001506200067860201b60201c565b6200068060201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001888160016200074660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000208573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022e919062000f82565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000f82565b6040518363ffffffff1660e01b8152600401620002db92919062000fc5565b6020604051808303816000875af1158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f82565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200036960a05160016200074660201b60201c565b6200037e60a05160016200083060201b60201c565b600060089050600060029050600080600990506000600690506000806b033b2e3c9fd0803ce80000009050606481620003b8919062001050565b600981905550606481620003cd919062001050565b600b81905550612710600582620003e5919062001088565b620003f1919062001050565b600a81905550866016819055508560178190555084601881905550601854601754601654620004219190620010d3565b6200042d9190620010d3565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a546200045d9190620010d3565b620004699190620010d3565b60198190555073da2572efd681921f3b266b7a808791deb6038bac600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f3ff20903ff771a8109c308ecf5925329a37f908600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057c6200056e620008d160201b60201c565b6001620008fb60201b60201c565b6200058f306001620008fb60201b60201c565b620005a461dead6001620008fb60201b60201c565b620005d9600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008fb60201b60201c565b620005fb620005ed620008d160201b60201c565b60016200074660201b60201c565b6200060e3060016200074660201b60201c565b6200062361dead60016200074660201b60201c565b62000658600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074660201b60201c565b6200066a338262000a3560201b60201c565b50505050505050506200126b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007566200067860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200077c620008d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007cc906200116f565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200090b6200067860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000931620008d160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200098a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000981906200116f565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a299190620011ae565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9e906200121b565b60405180910390fd5b62000abb6000838362000bad60201b60201c565b806002600082825462000acf9190620010d3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b269190620010d3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b8d91906200124e565b60405180910390a362000ba96000838362000bb260201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c3957607f821691505b60208210810362000c4f5762000c4e62000bf1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cb97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c7a565b62000cc5868362000c7a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d1262000d0c62000d068462000cdd565b62000ce7565b62000cdd565b9050919050565b6000819050919050565b62000d2e8362000cf1565b62000d4662000d3d8262000d19565b84845462000c87565b825550505050565b600090565b62000d5d62000d4e565b62000d6a81848462000d23565b505050565b5b8181101562000d925762000d8660008262000d53565b60018101905062000d70565b5050565b601f82111562000de15762000dab8162000c55565b62000db68462000c6a565b8101602085101562000dc6578190505b62000dde62000dd58562000c6a565b83018262000d6f565b50505b505050565b600082821c905092915050565b600062000e066000198460080262000de6565b1980831691505092915050565b600062000e21838362000df3565b9150826002028217905092915050565b62000e3c8262000bb7565b67ffffffffffffffff81111562000e585762000e5762000bc2565b5b62000e64825462000c20565b62000e7182828562000d96565b600060209050601f83116001811462000ea9576000841562000e94578287015190505b62000ea0858262000e13565b86555062000f10565b601f19841662000eb98662000c55565b60005b8281101562000ee35784890151825560018201915060208501945060208101905062000ebc565b8683101562000f03578489015162000eff601f89168262000df3565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f4a8262000f1d565b9050919050565b62000f5c8162000f3d565b811462000f6857600080fd5b50565b60008151905062000f7c8162000f51565b92915050565b60006020828403121562000f9b5762000f9a62000f18565b5b600062000fab8482850162000f6b565b91505092915050565b62000fbf8162000f3d565b82525050565b600060408201905062000fdc600083018562000fb4565b62000feb602083018462000fb4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200105d8262000cdd565b91506200106a8362000cdd565b9250826200107d576200107c62000ff2565b5b828204905092915050565b6000620010958262000cdd565b9150620010a28362000cdd565b9250828202620010b28162000cdd565b91508282048414831517620010cc57620010cb62001021565b5b5092915050565b6000620010e08262000cdd565b9150620010ed8362000cdd565b925082820190508082111562001108576200110762001021565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011576020836200110e565b915062001164826200111f565b602082019050919050565b600060208201905081810360008301526200118a8162001148565b9050919050565b60008115159050919050565b620011a88162001191565b82525050565b6000602082019050620011c560008301846200119d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001203601f836200110e565b91506200121082620011cb565b602082019050919050565b600060208201905081810360008301526200123681620011f4565b9050919050565b620012488162000cdd565b82525050565b60006020820190506200126560008301846200123d565b92915050565b60805160a051615d04620012f36000396000818161145801528181611c8e015281816128960152818161294d0152818161297a01528181612f8d0152818161408f015281816141480152614175015260008181610ffb01528181612f35015281816142bf015281816143a0015281816143c701528181614463015261448a0152615d046000f3fe6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e6d578063f8b45b0514610e98578063fbc10c5514610ec3578063fe72b27a14610eec576103ce565b8063e2f4560514610dc3578063e884f26014610dee578063f11a24d314610e19578063f2fde38b14610e44576103ce565b8063c8c8ebe4116100dc578063c8c8ebe414610cf3578063d257b34f14610d1e578063d85ba06314610d5b578063dd62ed3e14610d86576103ce565b8063c024666814610c4d578063c17b5b8c14610c76578063c18bc19514610c9f578063c876d0b914610cc8576103ce565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b7f578063aacebbe314610bbc578063b62496f514610be5578063bbc0c74214610c22576103ce565b80639fccce3214610ac1578063a0d82dc514610aec578063a457c2d714610b17578063a4c82a0014610b54576103ce565b806395d89b41116101c157806395d89b4114610a175780639a7a23d614610a425780639c3b4fdc14610a6b5780639ec22c0e14610a96576103ce565b80638da5cb5b1461096d5780638ea5220f1461099857806392136913146109c3578063924de9b7146109ee576103ce565b806339509351116102e2578063715018a61161027557806375f0a8741161024457806375f0a874146108d75780637bce5a04146109025780638095d5641461092d5780638a8c523c14610956576103ce565b8063715018a614610843578063730c18881461085a578063751039fc146108835780637571336a146108ae576103ce565b80636303516c116102b15780636303516c146107855780636a486a8e146107b05780636ddd1713146107db57806370a0823114610806576103ce565b806339509351146106b557806349bd5a5e146106f25780634a62bb651461071d5780634fbee19314610748576103ce565b80631a8145bb1161035a57806327c8f8351161032957806327c8f835146106095780632c3e486c146106345780632e82f1a01461065f578063313ce5671461068a576103ce565b80631a8145bb1461054d5780631f3fed8f14610578578063203e727e146105a357806323b872dd146105cc576103ce565b806318160ddd1161039657806318160ddd146104a35780631816467f146104ce578063184c16c5146104f7578063199ffc7214610522576103ce565b806306fdde03146103d3578063095ea7b3146103fe57806310d5de531461043b5780631694505e14610478576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f29565b6040516103f591906145e9565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906146a4565b610fbb565b60405161043291906146ff565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d919061471a565b610fd9565b60405161046f91906146ff565b60405180910390f35b34801561048457600080fd5b5061048d610ff9565b60405161049a91906147a6565b60405180910390f35b3480156104af57600080fd5b506104b861101d565b6040516104c591906147d0565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f0919061471a565b611027565b005b34801561050357600080fd5b5061050c611163565b60405161051991906147d0565b60405180910390f35b34801561052e57600080fd5b50610537611169565b60405161054491906147d0565b60405180910390f35b34801561055957600080fd5b5061056261116f565b60405161056f91906147d0565b60405180910390f35b34801561058457600080fd5b5061058d611175565b60405161059a91906147d0565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c591906147eb565b61117b565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190614818565b61128a565b60405161060091906146ff565b60405180910390f35b34801561061557600080fd5b5061061e611382565b60405161062b919061487a565b60405180910390f35b34801561064057600080fd5b50610649611388565b60405161065691906147d0565b60405180910390f35b34801561066b57600080fd5b5061067461138e565b60405161068191906146ff565b60405180910390f35b34801561069657600080fd5b5061069f6113a1565b6040516106ac91906148b1565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d791906146a4565b6113aa565b6040516106e991906146ff565b60405180910390f35b3480156106fe57600080fd5b50610707611456565b604051610714919061487a565b60405180910390f35b34801561072957600080fd5b5061073261147a565b60405161073f91906146ff565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a919061471a565b61148d565b60405161077c91906146ff565b60405180910390f35b34801561079157600080fd5b5061079a6114e3565b6040516107a7919061487a565b60405180910390f35b3480156107bc57600080fd5b506107c5611509565b6040516107d291906147d0565b60405180910390f35b3480156107e757600080fd5b506107f061150f565b6040516107fd91906146ff565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061471a565b611522565b60405161083a91906147d0565b60405180910390f35b34801561084f57600080fd5b5061085861156a565b005b34801561086657600080fd5b50610881600480360381019061087c91906148f8565b6115f2565b005b34801561088f57600080fd5b50610898611732565b6040516108a591906146ff565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d0919061494b565b6117d2565b005b3480156108e357600080fd5b506108ec6118a9565b6040516108f9919061487a565b60405180910390f35b34801561090e57600080fd5b506109176118cf565b60405161092491906147d0565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f919061498b565b6118d5565b005b34801561096257600080fd5b5061096b6119d4565b005b34801561097957600080fd5b50610982611a8f565b60405161098f919061487a565b60405180910390f35b3480156109a457600080fd5b506109ad611ab9565b6040516109ba919061487a565b60405180910390f35b3480156109cf57600080fd5b506109d8611adf565b6040516109e591906147d0565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a1091906149de565b611ae5565b005b348015610a2357600080fd5b50610a2c611b7e565b604051610a3991906145e9565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a64919061494b565b611c10565b005b348015610a7757600080fd5b50610a80611d28565b604051610a8d91906147d0565b60405180910390f35b348015610aa257600080fd5b50610aab611d2e565b604051610ab891906147d0565b60405180910390f35b348015610acd57600080fd5b50610ad6611d34565b604051610ae391906147d0565b60405180910390f35b348015610af857600080fd5b50610b01611d3a565b604051610b0e91906147d0565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b3991906146a4565b611d40565b604051610b4b91906146ff565b60405180910390f35b348015610b6057600080fd5b50610b69611e2b565b604051610b7691906147d0565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba191906146a4565b611e31565b604051610bb391906146ff565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde919061471a565b611e4f565b005b348015610bf157600080fd5b50610c0c6004803603810190610c07919061471a565b611f8b565b604051610c1991906146ff565b60405180910390f35b348015610c2e57600080fd5b50610c37611fab565b604051610c4491906146ff565b60405180910390f35b348015610c5957600080fd5b50610c746004803603810190610c6f919061494b565b611fbe565b005b348015610c8257600080fd5b50610c9d6004803603810190610c98919061498b565b6120e3565b005b348015610cab57600080fd5b50610cc66004803603810190610cc191906147eb565b6121e2565b005b348015610cd457600080fd5b50610cdd6122f1565b604051610cea91906146ff565b60405180910390f35b348015610cff57600080fd5b50610d08612304565b604051610d1591906147d0565b60405180910390f35b348015610d2a57600080fd5b50610d456004803603810190610d4091906147eb565b61230a565b604051610d5291906146ff565b60405180910390f35b348015610d6757600080fd5b50610d7061245f565b604051610d7d91906147d0565b60405180910390f35b348015610d9257600080fd5b50610dad6004803603810190610da89190614a0b565b612465565b604051610dba91906147d0565b60405180910390f35b348015610dcf57600080fd5b50610dd86124ec565b604051610de591906147d0565b60405180910390f35b348015610dfa57600080fd5b50610e036124f2565b604051610e1091906146ff565b60405180910390f35b348015610e2557600080fd5b50610e2e612592565b604051610e3b91906147d0565b60405180910390f35b348015610e5057600080fd5b50610e6b6004803603810190610e66919061471a565b612598565b005b348015610e7957600080fd5b50610e8261268f565b604051610e8f91906147d0565b60405180910390f35b348015610ea457600080fd5b50610ead612695565b604051610eba91906147d0565b60405180910390f35b348015610ecf57600080fd5b50610eea6004803603810190610ee5919061471a565b61269b565b005b348015610ef857600080fd5b50610f136004803603810190610f0e91906147eb565b61275b565b604051610f2091906146ff565b60405180910390f35b606060038054610f3890614a7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6490614a7a565b8015610fb15780601f10610f8657610100808354040283529160200191610fb1565b820191906000526020600020905b815481529060010190602001808311610f9457829003601f168201915b5050505050905090565b6000610fcf610fc8612a07565b8484612a0f565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b61102f612a07565b73ffffffffffffffffffffffffffffffffffffffff1661104d611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614af7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600c5481565b601e5481565b601d5481565b611183612a07565b73ffffffffffffffffffffffffffffffffffffffff166111a1611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90614af7565b60405180910390fd5b670de0b6b3a76400006103e8600161120d61101d565b6112179190614b46565b6112219190614bb7565b61122b9190614bb7565b81101561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614c5a565b60405180910390fd5b670de0b6b3a7640000816112819190614b46565b60098190555050565b6000611297848484612bd8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e2612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614cec565b60405180910390fd5b6113768561136e612a07565b858403612a0f565b60019150509392505050565b61dead81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b600061144c6113b7612a07565b8484600160006113c5612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114479190614d0c565b612a0f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611572612a07565b73ffffffffffffffffffffffffffffffffffffffff16611590611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90614af7565b60405180910390fd5b6115f0600061396d565b565b6115fa612a07565b73ffffffffffffffffffffffffffffffffffffffff16611618611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614af7565b60405180910390fd5b6102588310156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90614db2565b60405180910390fd5b6103e882111580156116c6575060008210155b611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc90614e44565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b600061173c612a07565b73ffffffffffffffffffffffffffffffffffffffff1661175a611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614af7565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6117da612a07565b73ffffffffffffffffffffffffffffffffffffffff166117f8611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184590614af7565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6118dd612a07565b73ffffffffffffffffffffffffffffffffffffffff166118fb611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614af7565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546119799190614d0c565b6119839190614d0c565b601581905550601460155411156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614eb0565b60405180910390fd5b505050565b6119dc612a07565b73ffffffffffffffffffffffffffffffffffffffff166119fa611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790614af7565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611aed612a07565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890614af7565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611b8d90614a7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb990614a7a565b8015611c065780601f10611bdb57610100808354040283529160200191611c06565b820191906000526020600020905b815481529060010190602001808311611be957829003601f168201915b5050505050905090565b611c18612a07565b73ffffffffffffffffffffffffffffffffffffffff16611c36611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8390614af7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190614f42565b60405180910390fd5b611d248282613a33565b5050565b60185481565b60115481565b601f5481565b601c5481565b60008060016000611d4f612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390614fd4565b60405180910390fd5b611e20611e17612a07565b85858403612a0f565b600191505092915050565b600f5481565b6000611e45611e3e612a07565b8484612bd8565b6001905092915050565b611e57612a07565b73ffffffffffffffffffffffffffffffffffffffff16611e75611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614af7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b611fc6612a07565b73ffffffffffffffffffffffffffffffffffffffff16611fe4611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614af7565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120d791906146ff565b60405180910390a25050565b6120eb612a07565b73ffffffffffffffffffffffffffffffffffffffff16612109611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614af7565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546121879190614d0c565b6121919190614d0c565b601981905550601460195411156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490615040565b60405180910390fd5b505050565b6121ea612a07565b73ffffffffffffffffffffffffffffffffffffffff16612208611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614af7565b60405180910390fd5b670de0b6b3a76400006103e8600561227461101d565b61227e9190614b46565b6122889190614bb7565b6122929190614bb7565b8110156122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb906150d2565b60405180910390fd5b670de0b6b3a7640000816122e89190614b46565b600b8190555050565b601460009054906101000a900460ff1681565b60095481565b6000612314612a07565b73ffffffffffffffffffffffffffffffffffffffff16612332611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614af7565b60405180910390fd5b620186a0600161239661101d565b6123a09190614b46565b6123aa9190614bb7565b8210156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e390615164565b60405180910390fd5b6103e860056123f961101d565b6124039190614b46565b61240d9190614bb7565b82111561244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906151f6565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006124fc612a07565b73ffffffffffffffffffffffffffffffffffffffff1661251a611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614af7565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b6125a0612a07565b73ffffffffffffffffffffffffffffffffffffffff166125be611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614af7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a90615288565b60405180910390fd5b61268c8161396d565b50565b601b5481565b600b5481565b6126a3612a07565b73ffffffffffffffffffffffffffffffffffffffff166126c1611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90614af7565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612765612a07565b73ffffffffffffffffffffffffffffffffffffffff16612783611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614af7565b60405180910390fd5b6010546011546127e99190614d0c565b421161282a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612821906152f4565b60405180910390fd5b6103e882111561286f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286690615386565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016128d1919061487a565b602060405180830381865afa1580156128ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291291906153bb565b9050600061293d61271061292f8685613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000811115612976576129757f000000000000000000000000000000000000000000000000000000000000000061dead83613b00565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129e357600080fd5b505af11580156129f7573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a759061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae4906154ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bcb91906147d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e9061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cad90615610565b60405180910390fd5b60008103612ccf57612cca83836000613b00565b613968565b601260009054906101000a900460ff161561339257612cec611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d5a5750612d2a611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d935750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dcd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612de65750600560149054906101000a900460ff16155b1561339157601260019054906101000a900460ff16612ee057602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ea05750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed69061567c565b60405180910390fd5b5b601460009054906101000a900460ff16156130a857612efd611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f8457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fdc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130a75743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305990615734565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561314b5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f257600954811115613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c906157c6565b60405180910390fd5b600b546131a183611522565b826131ac9190614d0c565b11156131ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e490615832565b60405180910390fd5b613390565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132955750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132e4576009548111156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d6906158c4565b60405180910390fd5b61338f565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661338e57600b5461334183611522565b8261334c9190614d0c565b111561338d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338490615832565b60405180910390fd5b5b5b5b5b5b600061339d30611522565b90506000600a5482101590508080156133c25750601260029054906101000a900460ff165b80156133db5750600560149054906101000a900460ff16155b80156134315750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134875750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134dd5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613521576001600560146101000a81548160ff021916908315150217905550613505613d7f565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135875750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561359f5750600d60009054906101000a900460ff165b80156135ba5750600e54600f546135b69190614d0c565b4210155b80156136105750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561361f5761361d614066565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136d55750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136df57600090505b6000811561395857602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561374257506000601954115b1561380f5761376f606461376160195488613ad490919063ffffffff16565b613aea90919063ffffffff16565b9050601954601b54826137829190614b46565b61378c9190614bb7565b601e600082825461379d9190614d0c565b92505081905550601954601c54826137b59190614b46565b6137bf9190614bb7565b601f60008282546137d09190614d0c565b92505081905550601954601a54826137e89190614b46565b6137f29190614bb7565b601d60008282546138039190614d0c565b92505081905550613934565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386a57506000601554115b1561393357613897606461388960155488613ad490919063ffffffff16565b613aea90919063ffffffff16565b9050601554601754826138aa9190614b46565b6138b49190614bb7565b601e60008282546138c59190614d0c565b92505081905550601554601854826138dd9190614b46565b6138e79190614bb7565b601f60008282546138f89190614d0c565b92505081905550601554601654826139109190614b46565b61391a9190614bb7565b601d600082825461392b9190614d0c565b925050819055505b5b600081111561394957613948873083613b00565b5b808561395591906158e4565b94505b613963878787613b00565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613ae29190614b46565b905092915050565b60008183613af89190614bb7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b669061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd590615610565b60405180910390fd5b613be9838383614200565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c669061598a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d029190614d0c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6691906147d0565b60405180910390a3613d79848484614205565b50505050565b6000613d8a30611522565b90506000601f54601d54601e54613da19190614d0c565b613dab9190614d0c565b9050600080831480613dbd5750600082145b15613dca57505050614064565b6014600a54613dd99190614b46565b831115613df2576014600a54613def9190614b46565b92505b6000600283601e5486613e059190614b46565b613e0f9190614bb7565b613e199190614bb7565b90506000613e30828661420a90919063ffffffff16565b90506000479050613e4082614220565b6000613e55824761420a90919063ffffffff16565b90506000613e8087613e72601d5485613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000613eab88613e9d601f5486613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000818385613ebc91906158e4565b613ec691906158e4565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f26906159db565b60006040518083038185875af1925050503d8060008114613f63576040519150601f19603f3d011682016040523d82523d6000602084013e613f68565b606091505b505080985050600087118015613f7e5750600081115b15613fcb57613f8d878261445d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e54604051613fc2939291906159f0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614011906159db565b60006040518083038185875af1925050503d806000811461404e576040519150601f19603f3d011682016040523d82523d6000602084013e614053565b606091505b505080985050505050505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016140ca919061487a565b602060405180830381865afa1580156140e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410b91906153bb565b9050600061413861271061412a600c5485613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000811115614171576141707f000000000000000000000000000000000000000000000000000000000000000061dead83613b00565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141de57600080fd5b505af11580156141f2573d6000803e3d6000fd5b505050506001935050505090565b505050565b505050565b6000818361421891906158e4565b905092915050565b6000600267ffffffffffffffff81111561423d5761423c615a27565b5b60405190808252806020026020018201604052801561426b5781602001602082028036833780820191505090505b509050308160008151811061428357614282615a56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434c9190615a9a565b816001815181106143605761435f615a56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c5307f000000000000000000000000000000000000000000000000000000000000000084612a0f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614427959493929190615bc0565b600060405180830381600087803b15801561444157600080fd5b505af1158015614455573d6000803e3d6000fd5b505050505050565b614488307f000000000000000000000000000000000000000000000000000000000000000084612a0f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161450f96959493929190615c1a565b60606040518083038185885af115801561452d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145529190615c7b565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614593578082015181840152602081019050614578565b60008484015250505050565b6000601f19601f8301169050919050565b60006145bb82614559565b6145c58185614564565b93506145d5818560208601614575565b6145de8161459f565b840191505092915050565b6000602082019050818103600083015261460381846145b0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061463b82614610565b9050919050565b61464b81614630565b811461465657600080fd5b50565b60008135905061466881614642565b92915050565b6000819050919050565b6146818161466e565b811461468c57600080fd5b50565b60008135905061469e81614678565b92915050565b600080604083850312156146bb576146ba61460b565b5b60006146c985828601614659565b92505060206146da8582860161468f565b9150509250929050565b60008115159050919050565b6146f9816146e4565b82525050565b600060208201905061471460008301846146f0565b92915050565b6000602082840312156147305761472f61460b565b5b600061473e84828501614659565b91505092915050565b6000819050919050565b600061476c61476761476284614610565b614747565b614610565b9050919050565b600061477e82614751565b9050919050565b600061479082614773565b9050919050565b6147a081614785565b82525050565b60006020820190506147bb6000830184614797565b92915050565b6147ca8161466e565b82525050565b60006020820190506147e560008301846147c1565b92915050565b6000602082840312156148015761480061460b565b5b600061480f8482850161468f565b91505092915050565b6000806000606084860312156148315761483061460b565b5b600061483f86828701614659565b935050602061485086828701614659565b92505060406148618682870161468f565b9150509250925092565b61487481614630565b82525050565b600060208201905061488f600083018461486b565b92915050565b600060ff82169050919050565b6148ab81614895565b82525050565b60006020820190506148c660008301846148a2565b92915050565b6148d5816146e4565b81146148e057600080fd5b50565b6000813590506148f2816148cc565b92915050565b6000806000606084860312156149115761491061460b565b5b600061491f8682870161468f565b93505060206149308682870161468f565b9250506040614941868287016148e3565b9150509250925092565b600080604083850312156149625761496161460b565b5b600061497085828601614659565b9250506020614981858286016148e3565b9150509250929050565b6000806000606084860312156149a4576149a361460b565b5b60006149b28682870161468f565b93505060206149c38682870161468f565b92505060406149d48682870161468f565b9150509250925092565b6000602082840312156149f4576149f361460b565b5b6000614a02848285016148e3565b91505092915050565b60008060408385031215614a2257614a2161460b565b5b6000614a3085828601614659565b9250506020614a4185828601614659565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a9257607f821691505b602082108103614aa557614aa4614a4b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ae1602083614564565b9150614aec82614aab565b602082019050919050565b60006020820190508181036000830152614b1081614ad4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b518261466e565b9150614b5c8361466e565b9250828202614b6a8161466e565b91508282048414831517614b8157614b80614b17565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc28261466e565b9150614bcd8361466e565b925082614bdd57614bdc614b88565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c44602f83614564565b9150614c4f82614be8565b604082019050919050565b60006020820190508181036000830152614c7381614c37565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614cd6602883614564565b9150614ce182614c7a565b604082019050919050565b60006020820190508181036000830152614d0581614cc9565b9050919050565b6000614d178261466e565b9150614d228361466e565b9250828201905080821115614d3a57614d39614b17565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614d9c603383614564565b9150614da782614d40565b604082019050919050565b60006020820190508181036000830152614dcb81614d8f565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614e2e603083614564565b9150614e3982614dd2565b604082019050919050565b60006020820190508181036000830152614e5d81614e21565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e9a601d83614564565b9150614ea582614e64565b602082019050919050565b60006020820190508181036000830152614ec981614e8d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f2c603983614564565b9150614f3782614ed0565b604082019050919050565b60006020820190508181036000830152614f5b81614f1f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fbe602583614564565b9150614fc982614f62565b604082019050919050565b60006020820190508181036000830152614fed81614fb1565b9050919050565b7f4d757374206b65657020666565732061742020323025206f72206c6573730000600082015250565b600061502a601e83614564565b915061503582614ff4565b602082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006150bc602483614564565b91506150c782615060565b604082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061514e603583614564565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006151e0603483614564565b91506151eb82615184565b604082019050919050565b6000602082019050818103600083015261520f816151d3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615272602683614564565b915061527d82615216565b604082019050919050565b600060208201905081810360008301526152a181615265565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006152de602083614564565b91506152e9826152a8565b602082019050919050565b6000602082019050818103600083015261530d816152d1565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615370602a83614564565b915061537b82615314565b604082019050919050565b6000602082019050818103600083015261539f81615363565b9050919050565b6000815190506153b581614678565b92915050565b6000602082840312156153d1576153d061460b565b5b60006153df848285016153a6565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615444602483614564565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d6602283614564565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615568602583614564565b91506155738261550c565b604082019050919050565b600060208201905081810360008301526155978161555b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155fa602383614564565b91506156058261559e565b604082019050919050565b60006020820190508181036000830152615629816155ed565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615666601683614564565b915061567182615630565b602082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061571e604983614564565b91506157298261569c565b606082019050919050565b6000602082019050818103600083015261574d81615711565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157b0603583614564565b91506157bb82615754565b604082019050919050565b600060208201905081810360008301526157df816157a3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061581c601383614564565b9150615827826157e6565b602082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006158ae603683614564565b91506158b982615852565b604082019050919050565b600060208201905081810360008301526158dd816158a1565b9050919050565b60006158ef8261466e565b91506158fa8361466e565b925082820390508181111561591257615911614b17565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615974602683614564565b915061597f82615918565b604082019050919050565b600060208201905081810360008301526159a381615967565b9050919050565b600081905092915050565b50565b60006159c56000836159aa565b91506159d0826159b5565b600082019050919050565b60006159e6826159b8565b9150819050919050565b6000606082019050615a0560008301866147c1565b615a1260208301856147c1565b615a1f60408301846147c1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615a9481614642565b92915050565b600060208284031215615ab057615aaf61460b565b5b6000615abe84828501615a85565b91505092915050565b6000819050919050565b6000615aec615ae7615ae284615ac7565b614747565b61466e565b9050919050565b615afc81615ad1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b3781614630565b82525050565b6000615b498383615b2e565b60208301905092915050565b6000602082019050919050565b6000615b6d82615b02565b615b778185615b0d565b9350615b8283615b1e565b8060005b83811015615bb3578151615b9a8882615b3d565b9750615ba583615b55565b925050600181019050615b86565b5085935050505092915050565b600060a082019050615bd560008301886147c1565b615be26020830187615af3565b8181036040830152615bf48186615b62565b9050615c03606083018561486b565b615c1060808301846147c1565b9695505050505050565b600060c082019050615c2f600083018961486b565b615c3c60208301886147c1565b615c496040830187615af3565b615c566060830186615af3565b615c63608083018561486b565b615c7060a08301846147c1565b979650505050505050565b600080600060608486031215615c9457615c9361460b565b5b6000615ca2868287016153a6565b9350506020615cb3868287016153a6565b9250506040615cc4868287016153a6565b915050925092509256fea264697066735822122064102cacc0e1c30c4826f7a2949decf8822c295c087f0d42125fbc54524a84fe64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638da5cb5b116101f2578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e6d578063f8b45b0514610e98578063fbc10c5514610ec3578063fe72b27a14610eec576103ce565b8063e2f4560514610dc3578063e884f26014610dee578063f11a24d314610e19578063f2fde38b14610e44576103ce565b8063c8c8ebe4116100dc578063c8c8ebe414610cf3578063d257b34f14610d1e578063d85ba06314610d5b578063dd62ed3e14610d86576103ce565b8063c024666814610c4d578063c17b5b8c14610c76578063c18bc19514610c9f578063c876d0b914610cc8576103ce565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b7f578063aacebbe314610bbc578063b62496f514610be5578063bbc0c74214610c22576103ce565b80639fccce3214610ac1578063a0d82dc514610aec578063a457c2d714610b17578063a4c82a0014610b54576103ce565b806395d89b41116101c157806395d89b4114610a175780639a7a23d614610a425780639c3b4fdc14610a6b5780639ec22c0e14610a96576103ce565b80638da5cb5b1461096d5780638ea5220f1461099857806392136913146109c3578063924de9b7146109ee576103ce565b806339509351116102e2578063715018a61161027557806375f0a8741161024457806375f0a874146108d75780637bce5a04146109025780638095d5641461092d5780638a8c523c14610956576103ce565b8063715018a614610843578063730c18881461085a578063751039fc146108835780637571336a146108ae576103ce565b80636303516c116102b15780636303516c146107855780636a486a8e146107b05780636ddd1713146107db57806370a0823114610806576103ce565b806339509351146106b557806349bd5a5e146106f25780634a62bb651461071d5780634fbee19314610748576103ce565b80631a8145bb1161035a57806327c8f8351161032957806327c8f835146106095780632c3e486c146106345780632e82f1a01461065f578063313ce5671461068a576103ce565b80631a8145bb1461054d5780631f3fed8f14610578578063203e727e146105a357806323b872dd146105cc576103ce565b806318160ddd1161039657806318160ddd146104a35780631816467f146104ce578063184c16c5146104f7578063199ffc7214610522576103ce565b806306fdde03146103d3578063095ea7b3146103fe57806310d5de531461043b5780631694505e14610478576103ce565b366103ce57005b600080fd5b3480156103df57600080fd5b506103e8610f29565b6040516103f591906145e9565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906146a4565b610fbb565b60405161043291906146ff565b60405180910390f35b34801561044757600080fd5b50610462600480360381019061045d919061471a565b610fd9565b60405161046f91906146ff565b60405180910390f35b34801561048457600080fd5b5061048d610ff9565b60405161049a91906147a6565b60405180910390f35b3480156104af57600080fd5b506104b861101d565b6040516104c591906147d0565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f0919061471a565b611027565b005b34801561050357600080fd5b5061050c611163565b60405161051991906147d0565b60405180910390f35b34801561052e57600080fd5b50610537611169565b60405161054491906147d0565b60405180910390f35b34801561055957600080fd5b5061056261116f565b60405161056f91906147d0565b60405180910390f35b34801561058457600080fd5b5061058d611175565b60405161059a91906147d0565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c591906147eb565b61117b565b005b3480156105d857600080fd5b506105f360048036038101906105ee9190614818565b61128a565b60405161060091906146ff565b60405180910390f35b34801561061557600080fd5b5061061e611382565b60405161062b919061487a565b60405180910390f35b34801561064057600080fd5b50610649611388565b60405161065691906147d0565b60405180910390f35b34801561066b57600080fd5b5061067461138e565b60405161068191906146ff565b60405180910390f35b34801561069657600080fd5b5061069f6113a1565b6040516106ac91906148b1565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d791906146a4565b6113aa565b6040516106e991906146ff565b60405180910390f35b3480156106fe57600080fd5b50610707611456565b604051610714919061487a565b60405180910390f35b34801561072957600080fd5b5061073261147a565b60405161073f91906146ff565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a919061471a565b61148d565b60405161077c91906146ff565b60405180910390f35b34801561079157600080fd5b5061079a6114e3565b6040516107a7919061487a565b60405180910390f35b3480156107bc57600080fd5b506107c5611509565b6040516107d291906147d0565b60405180910390f35b3480156107e757600080fd5b506107f061150f565b6040516107fd91906146ff565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061471a565b611522565b60405161083a91906147d0565b60405180910390f35b34801561084f57600080fd5b5061085861156a565b005b34801561086657600080fd5b50610881600480360381019061087c91906148f8565b6115f2565b005b34801561088f57600080fd5b50610898611732565b6040516108a591906146ff565b60405180910390f35b3480156108ba57600080fd5b506108d560048036038101906108d0919061494b565b6117d2565b005b3480156108e357600080fd5b506108ec6118a9565b6040516108f9919061487a565b60405180910390f35b34801561090e57600080fd5b506109176118cf565b60405161092491906147d0565b60405180910390f35b34801561093957600080fd5b50610954600480360381019061094f919061498b565b6118d5565b005b34801561096257600080fd5b5061096b6119d4565b005b34801561097957600080fd5b50610982611a8f565b60405161098f919061487a565b60405180910390f35b3480156109a457600080fd5b506109ad611ab9565b6040516109ba919061487a565b60405180910390f35b3480156109cf57600080fd5b506109d8611adf565b6040516109e591906147d0565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a1091906149de565b611ae5565b005b348015610a2357600080fd5b50610a2c611b7e565b604051610a3991906145e9565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a64919061494b565b611c10565b005b348015610a7757600080fd5b50610a80611d28565b604051610a8d91906147d0565b60405180910390f35b348015610aa257600080fd5b50610aab611d2e565b604051610ab891906147d0565b60405180910390f35b348015610acd57600080fd5b50610ad6611d34565b604051610ae391906147d0565b60405180910390f35b348015610af857600080fd5b50610b01611d3a565b604051610b0e91906147d0565b60405180910390f35b348015610b2357600080fd5b50610b3e6004803603810190610b3991906146a4565b611d40565b604051610b4b91906146ff565b60405180910390f35b348015610b6057600080fd5b50610b69611e2b565b604051610b7691906147d0565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba191906146a4565b611e31565b604051610bb391906146ff565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde919061471a565b611e4f565b005b348015610bf157600080fd5b50610c0c6004803603810190610c07919061471a565b611f8b565b604051610c1991906146ff565b60405180910390f35b348015610c2e57600080fd5b50610c37611fab565b604051610c4491906146ff565b60405180910390f35b348015610c5957600080fd5b50610c746004803603810190610c6f919061494b565b611fbe565b005b348015610c8257600080fd5b50610c9d6004803603810190610c98919061498b565b6120e3565b005b348015610cab57600080fd5b50610cc66004803603810190610cc191906147eb565b6121e2565b005b348015610cd457600080fd5b50610cdd6122f1565b604051610cea91906146ff565b60405180910390f35b348015610cff57600080fd5b50610d08612304565b604051610d1591906147d0565b60405180910390f35b348015610d2a57600080fd5b50610d456004803603810190610d4091906147eb565b61230a565b604051610d5291906146ff565b60405180910390f35b348015610d6757600080fd5b50610d7061245f565b604051610d7d91906147d0565b60405180910390f35b348015610d9257600080fd5b50610dad6004803603810190610da89190614a0b565b612465565b604051610dba91906147d0565b60405180910390f35b348015610dcf57600080fd5b50610dd86124ec565b604051610de591906147d0565b60405180910390f35b348015610dfa57600080fd5b50610e036124f2565b604051610e1091906146ff565b60405180910390f35b348015610e2557600080fd5b50610e2e612592565b604051610e3b91906147d0565b60405180910390f35b348015610e5057600080fd5b50610e6b6004803603810190610e66919061471a565b612598565b005b348015610e7957600080fd5b50610e8261268f565b604051610e8f91906147d0565b60405180910390f35b348015610ea457600080fd5b50610ead612695565b604051610eba91906147d0565b60405180910390f35b348015610ecf57600080fd5b50610eea6004803603810190610ee5919061471a565b61269b565b005b348015610ef857600080fd5b50610f136004803603810190610f0e91906147eb565b61275b565b604051610f2091906146ff565b60405180910390f35b606060038054610f3890614a7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6490614a7a565b8015610fb15780601f10610f8657610100808354040283529160200191610fb1565b820191906000526020600020905b815481529060010190602001808311610f9457829003601f168201915b5050505050905090565b6000610fcf610fc8612a07565b8484612a0f565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61102f612a07565b73ffffffffffffffffffffffffffffffffffffffff1661104d611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614af7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600c5481565b601e5481565b601d5481565b611183612a07565b73ffffffffffffffffffffffffffffffffffffffff166111a1611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee90614af7565b60405180910390fd5b670de0b6b3a76400006103e8600161120d61101d565b6112179190614b46565b6112219190614bb7565b61122b9190614bb7565b81101561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614c5a565b60405180910390fd5b670de0b6b3a7640000816112819190614b46565b60098190555050565b6000611297848484612bd8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112e2612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614cec565b60405180910390fd5b6113768561136e612a07565b858403612a0f565b60019150509392505050565b61dead81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b600061144c6113b7612a07565b8484600160006113c5612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114479190614d0c565b612a0f565b6001905092915050565b7f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f81565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611572612a07565b73ffffffffffffffffffffffffffffffffffffffff16611590611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90614af7565b60405180910390fd5b6115f0600061396d565b565b6115fa612a07565b73ffffffffffffffffffffffffffffffffffffffff16611618611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590614af7565b60405180910390fd5b6102588310156116b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116aa90614db2565b60405180910390fd5b6103e882111580156116c6575060008210155b611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc90614e44565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b600061173c612a07565b73ffffffffffffffffffffffffffffffffffffffff1661175a611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146117b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a790614af7565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6117da612a07565b73ffffffffffffffffffffffffffffffffffffffff166117f8611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184590614af7565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b6118dd612a07565b73ffffffffffffffffffffffffffffffffffffffff166118fb611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611951576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194890614af7565b60405180910390fd5b8260168190555081601781905550806018819055506018546017546016546119799190614d0c565b6119839190614d0c565b601581905550601460155411156119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690614eb0565b60405180910390fd5b505050565b6119dc612a07565b73ffffffffffffffffffffffffffffffffffffffff166119fa611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790614af7565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611aed612a07565b73ffffffffffffffffffffffffffffffffffffffff16611b0b611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890614af7565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611b8d90614a7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb990614a7a565b8015611c065780601f10611bdb57610100808354040283529160200191611c06565b820191906000526020600020905b815481529060010190602001808311611be957829003601f168201915b5050505050905090565b611c18612a07565b73ffffffffffffffffffffffffffffffffffffffff16611c36611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8390614af7565b60405180910390fd5b7f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190614f42565b60405180910390fd5b611d248282613a33565b5050565b60185481565b60115481565b601f5481565b601c5481565b60008060016000611d4f612a07565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390614fd4565b60405180910390fd5b611e20611e17612a07565b85858403612a0f565b600191505092915050565b600f5481565b6000611e45611e3e612a07565b8484612bd8565b6001905092915050565b611e57612a07565b73ffffffffffffffffffffffffffffffffffffffff16611e75611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec290614af7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b611fc6612a07565b73ffffffffffffffffffffffffffffffffffffffff16611fe4611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203190614af7565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120d791906146ff565b60405180910390a25050565b6120eb612a07565b73ffffffffffffffffffffffffffffffffffffffff16612109611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461215f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215690614af7565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a546121879190614d0c565b6121919190614d0c565b601981905550601460195411156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490615040565b60405180910390fd5b505050565b6121ea612a07565b73ffffffffffffffffffffffffffffffffffffffff16612208611a8f565b73ffffffffffffffffffffffffffffffffffffffff161461225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225590614af7565b60405180910390fd5b670de0b6b3a76400006103e8600561227461101d565b61227e9190614b46565b6122889190614bb7565b6122929190614bb7565b8110156122d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cb906150d2565b60405180910390fd5b670de0b6b3a7640000816122e89190614b46565b600b8190555050565b601460009054906101000a900460ff1681565b60095481565b6000612314612a07565b73ffffffffffffffffffffffffffffffffffffffff16612332611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90614af7565b60405180910390fd5b620186a0600161239661101d565b6123a09190614b46565b6123aa9190614bb7565b8210156123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e390615164565b60405180910390fd5b6103e860056123f961101d565b6124039190614b46565b61240d9190614bb7565b82111561244f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612446906151f6565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006124fc612a07565b73ffffffffffffffffffffffffffffffffffffffff1661251a611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256790614af7565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b60175481565b6125a0612a07565b73ffffffffffffffffffffffffffffffffffffffff166125be611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614af7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a90615288565b60405180910390fd5b61268c8161396d565b50565b601b5481565b600b5481565b6126a3612a07565b73ffffffffffffffffffffffffffffffffffffffff166126c1611a8f565b73ffffffffffffffffffffffffffffffffffffffff1614612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270e90614af7565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612765612a07565b73ffffffffffffffffffffffffffffffffffffffff16612783611a8f565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614af7565b60405180910390fd5b6010546011546127e99190614d0c565b421161282a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612821906152f4565b60405180910390fd5b6103e882111561286f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286690615386565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f6040518263ffffffff1660e01b81526004016128d1919061487a565b602060405180830381865afa1580156128ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291291906153bb565b9050600061293d61271061292f8685613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000811115612976576129757f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f61dead83613b00565b5b60007f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129e357600080fd5b505af11580156129f7573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a759061545a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae4906154ec565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bcb91906147d0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3e9061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cad90615610565b60405180910390fd5b60008103612ccf57612cca83836000613b00565b613968565b601260009054906101000a900460ff161561339257612cec611a8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d5a5750612d2a611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d935750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dcd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612de65750600560149054906101000a900460ff16155b1561339157601260019054906101000a900460ff16612ee057602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ea05750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed69061567c565b60405180910390fd5b5b601460009054906101000a900460ff16156130a857612efd611a8f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f8457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fdc57507f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130a75743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305990615734565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561314b5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f257600954811115613195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318c906157c6565b60405180910390fd5b600b546131a183611522565b826131ac9190614d0c565b11156131ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e490615832565b60405180910390fd5b613390565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132955750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132e4576009548111156132df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d6906158c4565b60405180910390fd5b61338f565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661338e57600b5461334183611522565b8261334c9190614d0c565b111561338d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338490615832565b60405180910390fd5b5b5b5b5b5b600061339d30611522565b90506000600a5482101590508080156133c25750601260029054906101000a900460ff165b80156133db5750600560149054906101000a900460ff16155b80156134315750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134875750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134dd5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613521576001600560146101000a81548160ff021916908315150217905550613505613d7f565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135875750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561359f5750600d60009054906101000a900460ff165b80156135ba5750600e54600f546135b69190614d0c565b4210155b80156136105750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561361f5761361d614066565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136d55750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136df57600090505b6000811561395857602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561374257506000601954115b1561380f5761376f606461376160195488613ad490919063ffffffff16565b613aea90919063ffffffff16565b9050601954601b54826137829190614b46565b61378c9190614bb7565b601e600082825461379d9190614d0c565b92505081905550601954601c54826137b59190614b46565b6137bf9190614bb7565b601f60008282546137d09190614d0c565b92505081905550601954601a54826137e89190614b46565b6137f29190614bb7565b601d60008282546138039190614d0c565b92505081905550613934565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386a57506000601554115b1561393357613897606461388960155488613ad490919063ffffffff16565b613aea90919063ffffffff16565b9050601554601754826138aa9190614b46565b6138b49190614bb7565b601e60008282546138c59190614d0c565b92505081905550601554601854826138dd9190614b46565b6138e79190614bb7565b601f60008282546138f89190614d0c565b92505081905550601554601654826139109190614b46565b61391a9190614bb7565b601d600082825461392b9190614d0c565b925050819055505b5b600081111561394957613948873083613b00565b5b808561395591906158e4565b94505b613963878787613b00565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613ae29190614b46565b905092915050565b60008183613af89190614bb7565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b669061557e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd590615610565b60405180910390fd5b613be9838383614200565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c669061598a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d029190614d0c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d6691906147d0565b60405180910390a3613d79848484614205565b50505050565b6000613d8a30611522565b90506000601f54601d54601e54613da19190614d0c565b613dab9190614d0c565b9050600080831480613dbd5750600082145b15613dca57505050614064565b6014600a54613dd99190614b46565b831115613df2576014600a54613def9190614b46565b92505b6000600283601e5486613e059190614b46565b613e0f9190614bb7565b613e199190614bb7565b90506000613e30828661420a90919063ffffffff16565b90506000479050613e4082614220565b6000613e55824761420a90919063ffffffff16565b90506000613e8087613e72601d5485613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000613eab88613e9d601f5486613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000818385613ebc91906158e4565b613ec691906158e4565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f26906159db565b60006040518083038185875af1925050503d8060008114613f63576040519150601f19603f3d011682016040523d82523d6000602084013e613f68565b606091505b505080985050600087118015613f7e5750600081115b15613fcb57613f8d878261445d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e54604051613fc2939291906159f0565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614011906159db565b60006040518083038185875af1925050503d806000811461404e576040519150601f19603f3d011682016040523d82523d6000602084013e614053565b606091505b505080985050505050505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f6040518263ffffffff1660e01b81526004016140ca919061487a565b602060405180830381865afa1580156140e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061410b91906153bb565b9050600061413861271061412a600c5485613ad490919063ffffffff16565b613aea90919063ffffffff16565b90506000811115614171576141707f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f61dead83613b00565b5b60007f000000000000000000000000f9b6992c749aab3781a00765a7088bc3568f743f90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141de57600080fd5b505af11580156141f2573d6000803e3d6000fd5b505050506001935050505090565b505050565b505050565b6000818361421891906158e4565b905092915050565b6000600267ffffffffffffffff81111561423d5761423c615a27565b5b60405190808252806020026020018201604052801561426b5781602001602082028036833780820191505090505b509050308160008151811061428357614282615a56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061434c9190615a9a565b816001815181106143605761435f615a56565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a0f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614427959493929190615bc0565b600060405180830381600087803b15801561444157600080fd5b505af1158015614455573d6000803e3d6000fd5b505050505050565b614488307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a0f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161450f96959493929190615c1a565b60606040518083038185885af115801561452d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145529190615c7b565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614593578082015181840152602081019050614578565b60008484015250505050565b6000601f19601f8301169050919050565b60006145bb82614559565b6145c58185614564565b93506145d5818560208601614575565b6145de8161459f565b840191505092915050565b6000602082019050818103600083015261460381846145b0565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061463b82614610565b9050919050565b61464b81614630565b811461465657600080fd5b50565b60008135905061466881614642565b92915050565b6000819050919050565b6146818161466e565b811461468c57600080fd5b50565b60008135905061469e81614678565b92915050565b600080604083850312156146bb576146ba61460b565b5b60006146c985828601614659565b92505060206146da8582860161468f565b9150509250929050565b60008115159050919050565b6146f9816146e4565b82525050565b600060208201905061471460008301846146f0565b92915050565b6000602082840312156147305761472f61460b565b5b600061473e84828501614659565b91505092915050565b6000819050919050565b600061476c61476761476284614610565b614747565b614610565b9050919050565b600061477e82614751565b9050919050565b600061479082614773565b9050919050565b6147a081614785565b82525050565b60006020820190506147bb6000830184614797565b92915050565b6147ca8161466e565b82525050565b60006020820190506147e560008301846147c1565b92915050565b6000602082840312156148015761480061460b565b5b600061480f8482850161468f565b91505092915050565b6000806000606084860312156148315761483061460b565b5b600061483f86828701614659565b935050602061485086828701614659565b92505060406148618682870161468f565b9150509250925092565b61487481614630565b82525050565b600060208201905061488f600083018461486b565b92915050565b600060ff82169050919050565b6148ab81614895565b82525050565b60006020820190506148c660008301846148a2565b92915050565b6148d5816146e4565b81146148e057600080fd5b50565b6000813590506148f2816148cc565b92915050565b6000806000606084860312156149115761491061460b565b5b600061491f8682870161468f565b93505060206149308682870161468f565b9250506040614941868287016148e3565b9150509250925092565b600080604083850312156149625761496161460b565b5b600061497085828601614659565b9250506020614981858286016148e3565b9150509250929050565b6000806000606084860312156149a4576149a361460b565b5b60006149b28682870161468f565b93505060206149c38682870161468f565b92505060406149d48682870161468f565b9150509250925092565b6000602082840312156149f4576149f361460b565b5b6000614a02848285016148e3565b91505092915050565b60008060408385031215614a2257614a2161460b565b5b6000614a3085828601614659565b9250506020614a4185828601614659565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a9257607f821691505b602082108103614aa557614aa4614a4b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ae1602083614564565b9150614aec82614aab565b602082019050919050565b60006020820190508181036000830152614b1081614ad4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b518261466e565b9150614b5c8361466e565b9250828202614b6a8161466e565b91508282048414831517614b8157614b80614b17565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc28261466e565b9150614bcd8361466e565b925082614bdd57614bdc614b88565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c44602f83614564565b9150614c4f82614be8565b604082019050919050565b60006020820190508181036000830152614c7381614c37565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614cd6602883614564565b9150614ce182614c7a565b604082019050919050565b60006020820190508181036000830152614d0581614cc9565b9050919050565b6000614d178261466e565b9150614d228361466e565b9250828201905080821115614d3a57614d39614b17565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614d9c603383614564565b9150614da782614d40565b604082019050919050565b60006020820190508181036000830152614dcb81614d8f565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614e2e603083614564565b9150614e3982614dd2565b604082019050919050565b60006020820190508181036000830152614e5d81614e21565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e9a601d83614564565b9150614ea582614e64565b602082019050919050565b60006020820190508181036000830152614ec981614e8d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f2c603983614564565b9150614f3782614ed0565b604082019050919050565b60006020820190508181036000830152614f5b81614f1f565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614fbe602583614564565b9150614fc982614f62565b604082019050919050565b60006020820190508181036000830152614fed81614fb1565b9050919050565b7f4d757374206b65657020666565732061742020323025206f72206c6573730000600082015250565b600061502a601e83614564565b915061503582614ff4565b602082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006150bc602483614564565b91506150c782615060565b604082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061514e603583614564565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006151e0603483614564565b91506151eb82615184565b604082019050919050565b6000602082019050818103600083015261520f816151d3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615272602683614564565b915061527d82615216565b604082019050919050565b600060208201905081810360008301526152a181615265565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006152de602083614564565b91506152e9826152a8565b602082019050919050565b6000602082019050818103600083015261530d816152d1565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615370602a83614564565b915061537b82615314565b604082019050919050565b6000602082019050818103600083015261539f81615363565b9050919050565b6000815190506153b581614678565b92915050565b6000602082840312156153d1576153d061460b565b5b60006153df848285016153a6565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615444602483614564565b915061544f826153e8565b604082019050919050565b6000602082019050818103600083015261547381615437565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154d6602283614564565b91506154e18261547a565b604082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615568602583614564565b91506155738261550c565b604082019050919050565b600060208201905081810360008301526155978161555b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155fa602383614564565b91506156058261559e565b604082019050919050565b60006020820190508181036000830152615629816155ed565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615666601683614564565b915061567182615630565b602082019050919050565b6000602082019050818103600083015261569581615659565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061571e604983614564565b91506157298261569c565b606082019050919050565b6000602082019050818103600083015261574d81615711565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157b0603583614564565b91506157bb82615754565b604082019050919050565b600060208201905081810360008301526157df816157a3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061581c601383614564565b9150615827826157e6565b602082019050919050565b6000602082019050818103600083015261584b8161580f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006158ae603683614564565b91506158b982615852565b604082019050919050565b600060208201905081810360008301526158dd816158a1565b9050919050565b60006158ef8261466e565b91506158fa8361466e565b925082820390508181111561591257615911614b17565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615974602683614564565b915061597f82615918565b604082019050919050565b600060208201905081810360008301526159a381615967565b9050919050565b600081905092915050565b50565b60006159c56000836159aa565b91506159d0826159b5565b600082019050919050565b60006159e6826159b8565b9150819050919050565b6000606082019050615a0560008301866147c1565b615a1260208301856147c1565b615a1f60408301846147c1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615a9481614642565b92915050565b600060208284031215615ab057615aaf61460b565b5b6000615abe84828501615a85565b91505092915050565b6000819050919050565b6000615aec615ae7615ae284615ac7565b614747565b61466e565b9050919050565b615afc81615ad1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b3781614630565b82525050565b6000615b498383615b2e565b60208301905092915050565b6000602082019050919050565b6000615b6d82615b02565b615b778185615b0d565b9350615b8283615b1e565b8060005b83811015615bb3578151615b9a8882615b3d565b9750615ba583615b55565b925050600181019050615b86565b5085935050505092915050565b600060a082019050615bd560008301886147c1565b615be26020830187615af3565b8181036040830152615bf48186615b62565b9050615c03606083018561486b565b615c1060808301846147c1565b9695505050505050565b600060c082019050615c2f600083018961486b565b615c3c60208301886147c1565b615c496040830187615af3565b615c566060830186615af3565b615c63608083018561486b565b615c7060a08301846147c1565b979650505050505050565b600080600060608486031215615c9457615c9361460b565b5b6000615ca2868287016153a6565b9350506020615cb3868287016153a6565b9250506040615cc4868287016153a6565b915050925092509256fea264697066735822122064102cacc0e1c30c4826f7a2949decf8822c295c087f0d42125fbc54524a84fe64736f6c63430008120033

Deployed Bytecode Sourcemap

32055:19497:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8883:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11050:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33710:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32129:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10003:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40941:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32724:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32539:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33494:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33454;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38118:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11701:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32232:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32634:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32595:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9845:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12602:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32187:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32822:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41106:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32392:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33309:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32902:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10174:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2118:103;;;;;;;;;;;;;:::i;:::-;;49192:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37226:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38665:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32324:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33202;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39036:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37019:155;;;;;;;;;;;;;:::i;:::-;;1467:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32361:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33344:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38928:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9102:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40058:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33276:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32778:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33534:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33420:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13320:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32686:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10514:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40566:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33931:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32862:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39868:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39447:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38401:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33120:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32424:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37613:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33168:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10752:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32466:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37408:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33239:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2376:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33382:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32506:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40805:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50523:1026;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8883:100;8937:13;8970:5;8963:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8883:100;:::o;11050:169::-;11133:4;11150:39;11159:12;:10;:12::i;:::-;11173:7;11182:6;11150:8;:39::i;:::-;11207:4;11200:11;;11050:169;;;;:::o;33710:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32129:51::-;;;:::o;10003:108::-;10064:7;10091:12;;10084:19;;10003:108;:::o;40941:157::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:9:::1;;;;;;;;;;;41020:38;;41037:9;41020:38;;;;;;;;;;;;41081:9;41069;;:21;;;;;;;;;;;;;;;;;;40941:157:::0;:::o;32724:47::-;;;;:::o;32539:36::-;;;;:::o;33494:33::-;;;;:::o;33454:::-;;;;:::o;38118:275::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38255:4:::1;38247;38242:1;38226:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38225:26;;;;:::i;:::-;38224:35;;;;:::i;:::-;38214:6;:45;;38192:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38378:6;38368;:17;;;;:::i;:::-;38345:20;:40;;;;38118:275:::0;:::o;11701:492::-;11841:4;11858:36;11868:6;11876:9;11887:6;11858:9;:36::i;:::-;11907:24;11934:11;:19;11946:6;11934:19;;;;;;;;;;;;;;;:33;11954:12;:10;:12::i;:::-;11934:33;;;;;;;;;;;;;;;;11907:60;;12006:6;11986:16;:26;;11978:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12093:57;12102:6;12110:12;:10;:12::i;:::-;12143:6;12124:16;:25;12093:8;:57::i;:::-;12181:4;12174:11;;;11701:492;;;;;:::o;32232:53::-;32278:6;32232:53;:::o;32634:45::-;;;;:::o;32595:32::-;;;;;;;;;;;;;:::o;9845:93::-;9903:5;9928:2;9921:9;;9845:93;:::o;12602:215::-;12690:4;12707:80;12716:12;:10;:12::i;:::-;12730:7;12776:10;12739:11;:25;12751:12;:10;:12::i;:::-;12739:25;;;;;;;;;;;;;;;:34;12765:7;12739:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12707:8;:80::i;:::-;12805:4;12798:11;;12602:215;;;;:::o;32187:38::-;;;:::o;32822:33::-;;;;;;;;;;;;;:::o;41106:126::-;41172:4;41196:19;:28;41216:7;41196:28;;;;;;;;;;;;;;;;;;;;;;;;;41189:35;;41106:126;;;:::o;32392:23::-;;;;;;;;;;;;;:::o;33309:28::-;;;;:::o;32902:31::-;;;;;;;;;;;;;:::o;10174:127::-;10248:7;10275:9;:18;10285:7;10275:18;;;;;;;;;;;;;;;;10268:25;;10174:127;;;:::o;2118:103::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2183:30:::1;2210:1;2183:18;:30::i;:::-;2118:103::o:0;49192:555::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49394:3:::1;49371:19;:26;;49349:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;49521:4;49509:8;:16;;:33;;;;;49541:1;49529:8;:13;;49509:33;49487:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;49647:19;49629:15;:37;;;;49696:8;49677:16;:27;;;;49731:8;49715:13;;:24;;;;;;;;;;;;;;;;;;49192:555:::0;;;:::o;37226:121::-;37278:4;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37312:5:::1;37295:14;;:22;;;;;;;;;;;;;;;;;;37335:4;37328:11;;37226:121:::0;:::o;38665:167::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38820:4:::1;38778:31;:39;38810:6;38778:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38665:167:::0;;:::o;32324:30::-;;;;;;;;;;;;;:::o;33202:::-;;;;:::o;39036:403::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39204:13:::1;39186:15;:31;;;;39246:13;39228:15;:31;;;;39282:7;39270:9;:19;;;;39351:9;;39333:15;;39315;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;39300:12;:60;;;;39395:2;39379:12;;:18;;39371:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39036:403:::0;;;:::o;37019:155::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37090:4:::1;37074:13;;:20;;;;;;;;;;;;;;;;;;37119:4;37105:11;;:18;;;;;;;;;;;;;;;;;;37151:15;37134:14;:32;;;;37019:155::o:0;1467:87::-;1513:7;1540:6;;;;;;;;;;;1533:13;;1467:87;:::o;32361:24::-;;;;;;;;;;;;;:::o;33344:31::-;;;;:::o;38928:100::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39013:7:::1;38999:11;;:21;;;;;;;;;;;;;;;;;;38928:100:::0;:::o;9102:104::-;9158:13;9191:7;9184:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9102:104;:::o;40058:304::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40202:13:::1;40194:21;;:4;:21;;::::0;40172:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40313:41;40342:4;40348:5;40313:28;:41::i;:::-;40058:304:::0;;:::o;33276:24::-;;;;:::o;32778:35::-;;;;:::o;33534:27::-;;;;:::o;33420:25::-;;;;:::o;13320:413::-;13413:4;13430:24;13457:11;:25;13469:12;:10;:12::i;:::-;13457:25;;;;;;;;;;;;;;;:34;13483:7;13457:34;;;;;;;;;;;;;;;;13430:61;;13530:15;13510:16;:35;;13502:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13623:67;13632:12;:10;:12::i;:::-;13646:7;13674:15;13655:16;:34;13623:8;:67::i;:::-;13721:4;13714:11;;;13320:413;;;;:::o;32686:29::-;;;;:::o;10514:175::-;10600:4;10617:42;10627:12;:10;:12::i;:::-;10641:9;10652:6;10617:9;:42::i;:::-;10677:4;10670:11;;10514:175;;;;:::o;40566:231::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40726:15:::1;;;;;;;;;;;40683:59;;40706:18;40683:59;;;;;;;;;;;;40771:18;40753:15;;:36;;;;;;;;;;;;;;;;;;40566:231:::0;:::o;33931:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32862:33::-;;;;;;;;;;;;;:::o;39868:182::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39984:8:::1;39953:19;:28;39973:7;39953:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40024:7;40008:34;;;40033:8;40008:34;;;;;;:::i;:::-;;;;;;;;39868:182:::0;;:::o;39447:413::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39617:13:::1;39598:16;:32;;;;39660:13;39641:16;:32;;;;39697:7;39684:10;:20;;;;39769:10;;39750:16;;39731;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;39715:13;:64;;;;39815:2;39798:13;;:19;;39790:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39447:413:::0;;;:::o;38401:256::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38541:4:::1;38533;38528:1;38512:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38511:26;;;;:::i;:::-;38510:35;;;;:::i;:::-;38500:6;:45;;38478:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38642:6;38632;:17;;;;:::i;:::-;38620:9;:29;;;;38401:256:::0;:::o;33120:39::-;;;;;;;;;;;;;:::o;32424:35::-;;;;:::o;37613:497::-;37721:4;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37800:6:::1;37795:1;37779:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37778:28;;;;:::i;:::-;37765:9;:41;;37743:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37955:4;37950:1;37934:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37933:26;;;;:::i;:::-;37920:9;:39;;37898:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38071:9;38050:18;:30;;;;38098:4;38091:11;;37613:497:::0;;;:::o;33168:27::-;;;;:::o;10752:151::-;10841:7;10868:11;:18;10880:5;10868:18;;;;;;;;;;;;;;;:27;10887:7;10868:27;;;;;;;;;;;;;;;;10861:34;;10752:151;;;;:::o;32466:33::-;;;;:::o;37408:135::-;37468:4;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37508:5:::1;37485:20;;:28;;;;;;;;;;;;;;;;;;37531:4;37524:11;;37408:135:::0;:::o;33239:30::-;;;;:::o;2376:201::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2485:1:::1;2465:22;;:8;:22;;::::0;2457:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2541:28;2560:8;2541:18;:28::i;:::-;2376:201:::0;:::o;33382:31::-;;;;:::o;32506:24::-;;;;:::o;40805:128::-;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40914:11:::1;40903:8;;:22;;;;;;;;;;;;;;;;;;40805:128:::0;:::o;50523:1026::-;50634:4;1698:12;:10;:12::i;:::-;1687:23;;:7;:5;:7::i;:::-;:23;;;1679:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50719:19:::1;;50696:20;;:42;;;;:::i;:::-;50678:15;:60;50656:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;50828:4;50817:7;:15;;50809:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50913:15;50890:20;:38;;;;50983:28;51014:4;:14;;;51029:13;51014:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50983:60;;51093:20;51116:44;51154:5;51116:33;51141:7;51116:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;51093:67;;51280:1;51265:12;:16;51261:110;;;51298:61;51314:13;51337:6;51346:12;51298:15;:61::i;:::-;51261:110;51446:19;51483:13;51446:51;;51508:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51537:4;51530:11;;;;;50523:1026:::0;;;:::o;140:98::-;193:7;220:10;213:17;;140:98;:::o;17004:380::-;17157:1;17140:19;;:5;:19;;;17132:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17238:1;17219:21;;:7;:21;;;17211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17322:6;17292:11;:18;17304:5;17292:18;;;;;;;;;;;;;;;:27;17311:7;17292:27;;;;;;;;;;;;;;;:36;;;;17360:7;17344:32;;17353:5;17344:32;;;17369:6;17344:32;;;;;;:::i;:::-;;;;;;;;17004:380;;;:::o;41290:5011::-;41438:1;41422:18;;:4;:18;;;41414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41515:1;41501:16;;:2;:16;;;41493:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41584:1;41574:6;:11;41570:93;;41602:28;41618:4;41624:2;41628:1;41602:15;:28::i;:::-;41645:7;;41570:93;41679:14;;;;;;;;;;;41675:2487;;;41740:7;:5;:7::i;:::-;41732:15;;:4;:15;;;;:49;;;;;41774:7;:5;:7::i;:::-;41768:13;;:2;:13;;;;41732:49;:86;;;;;41816:1;41802:16;;:2;:16;;;;41732:86;:128;;;;;41853:6;41839:21;;:2;:21;;;;41732:128;:158;;;;;41882:8;;;;;;;;;;;41881:9;41732:158;41710:2441;;;41930:13;;;;;;;;;;;41925:223;;42002:19;:25;42022:4;42002:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42031:19;:23;42051:2;42031:23;;;;;;;;;;;;;;;;;;;;;;;;;42002:52;41968:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;41925:223;42304:20;;;;;;;;;;;42300:641;;;42385:7;:5;:7::i;:::-;42379:13;;:2;:13;;;;:72;;;;;42435:15;42421:30;;:2;:30;;;;42379:72;:129;;;;;42494:13;42480:28;;:2;:28;;;;42379:129;42349:573;;;42672:12;42597:28;:39;42626:9;42597:39;;;;;;;;;;;;;;;;:87;42559:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42886:12;42844:28;:39;42873:9;42844:39;;;;;;;;;;;;;;;:54;;;;42349:573;42300:641;43015:25;:31;43041:4;43015:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43072:31;:35;43104:2;43072:35;;;;;;;;;;;;;;;;;;;;;;;;;43071:36;43015:92;42989:1147;;;43194:20;;43184:6;:30;;43150:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;43402:9;;43385:13;43395:2;43385:9;:13::i;:::-;43376:6;:22;;;;:::i;:::-;:35;;43342:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42989:1147;;;43580:25;:29;43606:2;43580:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;43635:31;:37;43667:4;43635:37;;;;;;;;;;;;;;;;;;;;;;;;;43634:38;43580:92;43554:582;;;43759:20;;43749:6;:30;;43715:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;43554:582;;;43916:31;:35;43948:2;43916:35;;;;;;;;;;;;;;;;;;;;;;;;;43911:225;;44036:9;;44019:13;44029:2;44019:9;:13::i;:::-;44010:6;:22;;;;:::i;:::-;:35;;43976:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43911:225;43554:582;42989:1147;41710:2441;41675:2487;44174:28;44205:24;44223:4;44205:9;:24::i;:::-;44174:55;;44242:12;44281:18;;44257:20;:42;;44242:57;;44330:7;:35;;;;;44354:11;;;;;;;;;;;44330:35;:61;;;;;44383:8;;;;;;;;;;;44382:9;44330:61;:110;;;;;44409:25;:31;44435:4;44409:31;;;;;;;;;;;;;;;;;;;;;;;;;44408:32;44330:110;:153;;;;;44458:19;:25;44478:4;44458:25;;;;;;;;;;;;;;;;;;;;;;;;;44457:26;44330:153;:194;;;;;44501:19;:23;44521:2;44501:23;;;;;;;;;;;;;;;;;;;;;;;;;44500:24;44330:194;44312:326;;;44562:4;44551:8;;:15;;;;;;;;;;;;;;;;;;44583:10;:8;:10::i;:::-;44621:5;44610:8;;:16;;;;;;;;;;;;;;;;;;44312:326;44669:8;;;;;;;;;;;44668:9;:55;;;;;44694:25;:29;44720:2;44694:29;;;;;;;;;;;;;;;;;;;;;;;;;44668:55;:85;;;;;44740:13;;;;;;;;;;;44668:85;:153;;;;;44806:15;;44789:14;;:32;;;;:::i;:::-;44770:15;:51;;44668:153;:196;;;;;44839:19;:25;44859:4;44839:25;;;;;;;;;;;;;;;;;;;;;;;;;44838:26;44668:196;44650:282;;;44891:29;:27;:29::i;:::-;;44650:282;44944:12;44960:8;;;;;;;;;;;44959:9;44944:24;;45070:19;:25;45090:4;45070:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45099:19;:23;45119:2;45099:23;;;;;;;;;;;;;;;;;;;;;;;;;45070:52;45066:100;;;45149:5;45139:15;;45066:100;45178:12;45283:7;45279:969;;;45335:25;:29;45361:2;45335:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45384:1;45368:13;;:17;45335:50;45331:768;;;45413:34;45443:3;45413:25;45424:13;;45413:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45406:41;;45516:13;;45496:16;;45489:4;:23;;;;:::i;:::-;45488:41;;;;:::i;:::-;45466:18;;:63;;;;;;;:::i;:::-;;;;;;;;45586:13;;45572:10;;45565:4;:17;;;;:::i;:::-;45564:35;;;;:::i;:::-;45548:12;;:51;;;;;;;:::i;:::-;;;;;;;;45668:13;;45648:16;;45641:4;:23;;;;:::i;:::-;45640:41;;;;:::i;:::-;45618:18;;:63;;;;;;;:::i;:::-;;;;;;;;45331:768;;;45743:25;:31;45769:4;45743:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;45793:1;45778:12;;:16;45743:51;45739:360;;;45822:33;45851:3;45822:24;45833:12;;45822:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45815:40;;45923:12;;45904:15;;45897:4;:22;;;;:::i;:::-;45896:39;;;;:::i;:::-;45874:18;;:61;;;;;;;:::i;:::-;;;;;;;;45991:12;;45978:9;;45971:4;:16;;;;:::i;:::-;45970:33;;;;:::i;:::-;45954:12;;:49;;;;;;;:::i;:::-;;;;;;;;46071:12;;46052:15;;46045:4;:22;;;;:::i;:::-;46044:39;;;;:::i;:::-;46022:18;;:61;;;;;;;:::i;:::-;;;;;;;;45739:360;45331:768;46126:1;46119:4;:8;46115:91;;;46148:42;46164:4;46178;46185;46148:15;:42::i;:::-;46115:91;46232:4;46222:14;;;;;:::i;:::-;;;45279:969;46260:33;46276:4;46282:2;46286:6;46260:15;:33::i;:::-;41403:4898;;;;41290:5011;;;;:::o;2737:191::-;2811:16;2830:6;;;;;;;;;;;2811:25;;2856:8;2847:6;;:17;;;;;;;;;;;;;;;;;;2911:8;2880:40;;2901:8;2880:40;;;;;;;;;;;;2800:128;2737:191;:::o;40370:188::-;40487:5;40453:25;:31;40479:4;40453:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40544:5;40510:40;;40538:4;40510:40;;;;;;;;;;;;40370:188;;:::o;22457:98::-;22515:7;22546:1;22542;:5;;;;:::i;:::-;22535:12;;22457:98;;;;:::o;22856:::-;22914:7;22945:1;22941;:5;;;;:::i;:::-;22934:12;;22856:98;;;;:::o;14223:733::-;14381:1;14363:20;;:6;:20;;;14355:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14465:1;14444:23;;:9;:23;;;14436:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14520:47;14541:6;14549:9;14560:6;14520:20;:47::i;:::-;14580:21;14604:9;:17;14614:6;14604:17;;;;;;;;;;;;;;;;14580:41;;14657:6;14640:13;:23;;14632:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14778:6;14762:13;:22;14742:9;:17;14752:6;14742:17;;;;;;;;;;;;;;;:42;;;;14830:6;14806:9;:20;14816:9;14806:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14871:9;14854:35;;14863:6;14854:35;;;14882:6;14854:35;;;;;;:::i;:::-;;;;;;;;14902:46;14922:6;14930:9;14941:6;14902:19;:46::i;:::-;14344:612;14223:733;;;:::o;47428:1756::-;47467:23;47493:24;47511:4;47493:9;:24::i;:::-;47467:50;;47528:25;47624:12;;47590:18;;47556;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;47528:108;;47647:12;47695:1;47676:15;:20;:46;;;;47721:1;47700:17;:22;47676:46;47672:85;;;47739:7;;;;;47672:85;47812:2;47791:18;;:23;;;;:::i;:::-;47773:15;:41;47769:115;;;47870:2;47849:18;;:23;;;;:::i;:::-;47831:41;;47769:115;47945:23;48058:1;48025:17;47990:18;;47972:15;:36;;;;:::i;:::-;47971:71;;;;:::i;:::-;:88;;;;:::i;:::-;47945:114;;48070:26;48099:36;48119:15;48099;:19;;:36;;;;:::i;:::-;48070:65;;48148:25;48176:21;48148:49;;48210:36;48227:18;48210:16;:36::i;:::-;48259:18;48280:44;48306:17;48280:21;:25;;:44;;;;:::i;:::-;48259:65;;48337:23;48363:81;48416:17;48363:34;48378:18;;48363:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;48337:107;;48455:17;48475:51;48508:17;48475:28;48490:12;;48475:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;48455:71;;48539:23;48596:9;48578:15;48565:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;48539:66;;48639:1;48618:18;:22;;;;48672:1;48651:18;:22;;;;48699:1;48684:12;:16;;;;48735:9;;;;;;;;;;;48727:23;;48758:9;48727:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48713:59;;;;;48807:1;48789:15;:19;:42;;;;;48830:1;48812:15;:19;48789:42;48785:278;;;48848:46;48861:15;48878;48848:12;:46::i;:::-;48914:137;48947:18;48984:15;49018:18;;48914:137;;;;;;;;:::i;:::-;;;;;;;;48785:278;49097:15;;;;;;;;;;;49089:29;;49140:21;49089:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49075:101;;;;;47456:1728;;;;;;;;;;47428:1756;:::o;49755:760::-;49812:4;49846:15;49829:14;:32;;;;49916:28;49947:4;:14;;;49962:13;49947:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49916:60;;50026:20;50049:77;50110:5;50049:42;50074:16;;50049:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;50026:100;;50246:1;50231:12;:16;50227:110;;;50264:61;50280:13;50303:6;50312:12;50264:15;:61::i;:::-;50227:110;50412:19;50449:13;50412:51;;50474:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50503:4;50496:11;;;;;49755:760;:::o;17984:125::-;;;;:::o;18713:124::-;;;;:::o;22100:98::-;22158:7;22189:1;22185;:5;;;;:::i;:::-;22178:12;;22100:98;;;;:::o;46309:589::-;46435:21;46473:1;46459:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46435:40;;46504:4;46486;46491:1;46486:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46530:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46520:4;46525:1;46520:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46565:62;46582:4;46597:15;46615:11;46565:8;:62::i;:::-;46666:15;:66;;;46747:11;46773:1;46817:4;46844;46864:15;46666:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46364:534;46309:589;:::o;46906:514::-;47054:62;47071:4;47086:15;47104:11;47054:8;:62::i;:::-;47159:15;:31;;;47198:9;47231:4;47251:11;47277:1;47320;47363:8;;;;;;;;;;;47386:15;47159:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46906:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:613::-;7188:6;7196;7204;7253:2;7241:9;7232:7;7228:23;7224:32;7221:119;;;7259:79;;:::i;:::-;7221:119;7379:1;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7350:117;7506:2;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7477:118;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7114:613;;;;;:::o;7733:468::-;7798:6;7806;7855:2;7843:9;7834:7;7830:23;7826:32;7823:119;;;7861:79;;:::i;:::-;7823:119;7981:1;8006:53;8051:7;8042:6;8031:9;8027:22;8006:53;:::i;:::-;7996:63;;7952:117;8108:2;8134:50;8176:7;8167:6;8156:9;8152:22;8134:50;:::i;:::-;8124:60;;8079:115;7733:468;;;;;:::o;8207:619::-;8284:6;8292;8300;8349:2;8337:9;8328:7;8324:23;8320:32;8317:119;;;8355:79;;:::i;:::-;8317:119;8475:1;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8446:117;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8730:2;8756:53;8801:7;8792:6;8781:9;8777:22;8756:53;:::i;:::-;8746:63;;8701:118;8207:619;;;;;:::o;8832:323::-;8888:6;8937:2;8925:9;8916:7;8912:23;8908:32;8905:119;;;8943:79;;:::i;:::-;8905:119;9063:1;9088:50;9130:7;9121:6;9110:9;9106:22;9088:50;:::i;:::-;9078:60;;9034:114;8832:323;;;;:::o;9161:474::-;9229:6;9237;9286:2;9274:9;9265:7;9261:23;9257:32;9254:119;;;9292:79;;:::i;:::-;9254:119;9412:1;9437:53;9482:7;9473:6;9462:9;9458:22;9437:53;:::i;:::-;9427:63;;9383:117;9539:2;9565:53;9610:7;9601:6;9590:9;9586:22;9565:53;:::i;:::-;9555:63;;9510:118;9161:474;;;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:320;9871:6;9908:1;9902:4;9898:12;9888:22;;9955:1;9949:4;9945:12;9976:18;9966:81;;10032:4;10024:6;10020:17;10010:27;;9966:81;10094:2;10086:6;10083:14;10063:18;10060:38;10057:84;;10113:18;;:::i;:::-;10057:84;9878:269;9827:320;;;:::o;10153:182::-;10293:34;10289:1;10281:6;10277:14;10270:58;10153:182;:::o;10341:366::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:419::-;10879:4;10917:2;10906:9;10902:18;10894:26;;10966:9;10960:4;10956:20;10952:1;10941:9;10937:17;10930:47;10994:131;11120:4;10994:131;:::i;:::-;10986:139;;10713:419;;;:::o;11138:180::-;11186:77;11183:1;11176:88;11283:4;11280:1;11273:15;11307:4;11304:1;11297:15;11324:410;11364:7;11387:20;11405:1;11387:20;:::i;:::-;11382:25;;11421:20;11439:1;11421:20;:::i;:::-;11416:25;;11476:1;11473;11469:9;11498:30;11516:11;11498:30;:::i;:::-;11487:41;;11677:1;11668:7;11664:15;11661:1;11658:22;11638:1;11631:9;11611:83;11588:139;;11707:18;;:::i;:::-;11588:139;11372:362;11324:410;;;;:::o;11740:180::-;11788:77;11785:1;11778:88;11885:4;11882:1;11875:15;11909:4;11906:1;11899:15;11926:185;11966:1;11983:20;12001:1;11983:20;:::i;:::-;11978:25;;12017:20;12035:1;12017:20;:::i;:::-;12012:25;;12056:1;12046:35;;12061:18;;:::i;:::-;12046:35;12103:1;12100;12096:9;12091:14;;11926:185;;;;:::o;12117:234::-;12257:34;12253:1;12245:6;12241:14;12234:58;12326:17;12321:2;12313:6;12309:15;12302:42;12117:234;:::o;12357:366::-;12499:3;12520:67;12584:2;12579:3;12520:67;:::i;:::-;12513:74;;12596:93;12685:3;12596:93;:::i;:::-;12714:2;12709:3;12705:12;12698:19;;12357:366;;;:::o;12729:419::-;12895:4;12933:2;12922:9;12918:18;12910:26;;12982:9;12976:4;12972:20;12968:1;12957:9;12953:17;12946:47;13010:131;13136:4;13010:131;:::i;:::-;13002:139;;12729:419;;;:::o;13154:227::-;13294:34;13290:1;13282:6;13278:14;13271:58;13363:10;13358:2;13350:6;13346:15;13339:35;13154:227;:::o;13387:366::-;13529:3;13550:67;13614:2;13609:3;13550:67;:::i;:::-;13543:74;;13626:93;13715:3;13626:93;:::i;:::-;13744:2;13739:3;13735:12;13728:19;;13387:366;;;:::o;13759:419::-;13925:4;13963:2;13952:9;13948:18;13940:26;;14012:9;14006:4;14002:20;13998:1;13987:9;13983:17;13976:47;14040:131;14166:4;14040:131;:::i;:::-;14032:139;;13759:419;;;:::o;14184:191::-;14224:3;14243:20;14261:1;14243:20;:::i;:::-;14238:25;;14277:20;14295:1;14277:20;:::i;:::-;14272:25;;14320:1;14317;14313:9;14306:16;;14341:3;14338:1;14335:10;14332:36;;;14348:18;;:::i;:::-;14332:36;14184:191;;;;:::o;14381:238::-;14521:34;14517:1;14509:6;14505:14;14498:58;14590:21;14585:2;14577:6;14573:15;14566:46;14381:238;:::o;14625:366::-;14767:3;14788:67;14852:2;14847:3;14788:67;:::i;:::-;14781:74;;14864:93;14953:3;14864:93;:::i;:::-;14982:2;14977:3;14973:12;14966:19;;14625:366;;;:::o;14997:419::-;15163:4;15201:2;15190:9;15186:18;15178:26;;15250:9;15244:4;15240:20;15236:1;15225:9;15221:17;15214:47;15278:131;15404:4;15278:131;:::i;:::-;15270:139;;14997:419;;;:::o;15422:235::-;15562:34;15558:1;15550:6;15546:14;15539:58;15631:18;15626:2;15618:6;15614:15;15607:43;15422:235;:::o;15663:366::-;15805:3;15826:67;15890:2;15885:3;15826:67;:::i;:::-;15819:74;;15902:93;15991:3;15902:93;:::i;:::-;16020:2;16015:3;16011:12;16004:19;;15663:366;;;:::o;16035:419::-;16201:4;16239:2;16228:9;16224:18;16216:26;;16288:9;16282:4;16278:20;16274:1;16263:9;16259:17;16252:47;16316:131;16442:4;16316:131;:::i;:::-;16308:139;;16035:419;;;:::o;16460:179::-;16600:31;16596:1;16588:6;16584:14;16577:55;16460:179;:::o;16645:366::-;16787:3;16808:67;16872:2;16867:3;16808:67;:::i;:::-;16801:74;;16884:93;16973:3;16884:93;:::i;:::-;17002:2;16997:3;16993:12;16986:19;;16645:366;;;:::o;17017:419::-;17183:4;17221:2;17210:9;17206:18;17198:26;;17270:9;17264:4;17260:20;17256:1;17245:9;17241:17;17234:47;17298:131;17424:4;17298:131;:::i;:::-;17290:139;;17017:419;;;:::o;17442:244::-;17582:34;17578:1;17570:6;17566:14;17559:58;17651:27;17646:2;17638:6;17634:15;17627:52;17442:244;:::o;17692:366::-;17834:3;17855:67;17919:2;17914:3;17855:67;:::i;:::-;17848:74;;17931:93;18020:3;17931:93;:::i;:::-;18049:2;18044:3;18040:12;18033:19;;17692:366;;;:::o;18064:419::-;18230:4;18268:2;18257:9;18253:18;18245:26;;18317:9;18311:4;18307:20;18303:1;18292:9;18288:17;18281:47;18345:131;18471:4;18345:131;:::i;:::-;18337:139;;18064:419;;;:::o;18489:224::-;18629:34;18625:1;18617:6;18613:14;18606:58;18698:7;18693:2;18685:6;18681:15;18674:32;18489:224;:::o;18719:366::-;18861:3;18882:67;18946:2;18941:3;18882:67;:::i;:::-;18875:74;;18958:93;19047:3;18958:93;:::i;:::-;19076:2;19071:3;19067:12;19060:19;;18719:366;;;:::o;19091:419::-;19257:4;19295:2;19284:9;19280:18;19272:26;;19344:9;19338:4;19334:20;19330:1;19319:9;19315:17;19308:47;19372:131;19498:4;19372:131;:::i;:::-;19364:139;;19091:419;;;:::o;19516:180::-;19656:32;19652:1;19644:6;19640:14;19633:56;19516:180;:::o;19702:366::-;19844:3;19865:67;19929:2;19924:3;19865:67;:::i;:::-;19858:74;;19941:93;20030:3;19941:93;:::i;:::-;20059:2;20054:3;20050:12;20043:19;;19702:366;;;:::o;20074:419::-;20240:4;20278:2;20267:9;20263:18;20255:26;;20327:9;20321:4;20317:20;20313:1;20302:9;20298:17;20291:47;20355:131;20481:4;20355:131;:::i;:::-;20347:139;;20074:419;;;:::o;20499:223::-;20639:34;20635:1;20627:6;20623:14;20616:58;20708:6;20703:2;20695:6;20691:15;20684:31;20499:223;:::o;20728:366::-;20870:3;20891:67;20955:2;20950:3;20891:67;:::i;:::-;20884:74;;20967:93;21056:3;20967:93;:::i;:::-;21085:2;21080:3;21076:12;21069:19;;20728:366;;;:::o;21100:419::-;21266:4;21304:2;21293:9;21289:18;21281:26;;21353:9;21347:4;21343:20;21339:1;21328:9;21324:17;21317:47;21381:131;21507:4;21381:131;:::i;:::-;21373:139;;21100:419;;;:::o;21525:240::-;21665:34;21661:1;21653:6;21649:14;21642:58;21734:23;21729:2;21721:6;21717:15;21710:48;21525:240;:::o;21771:366::-;21913:3;21934:67;21998:2;21993:3;21934:67;:::i;:::-;21927:74;;22010:93;22099:3;22010:93;:::i;:::-;22128:2;22123:3;22119:12;22112:19;;21771:366;;;:::o;22143:419::-;22309:4;22347:2;22336:9;22332:18;22324:26;;22396:9;22390:4;22386:20;22382:1;22371:9;22367:17;22360:47;22424:131;22550:4;22424:131;:::i;:::-;22416:139;;22143:419;;;:::o;22568:239::-;22708:34;22704:1;22696:6;22692:14;22685:58;22777:22;22772:2;22764:6;22760:15;22753:47;22568:239;:::o;22813:366::-;22955:3;22976:67;23040:2;23035:3;22976:67;:::i;:::-;22969:74;;23052:93;23141:3;23052:93;:::i;:::-;23170:2;23165:3;23161:12;23154:19;;22813:366;;;:::o;23185:419::-;23351:4;23389:2;23378:9;23374:18;23366:26;;23438:9;23432:4;23428:20;23424:1;23413:9;23409:17;23402:47;23466:131;23592:4;23466:131;:::i;:::-;23458:139;;23185:419;;;:::o;23610:225::-;23750:34;23746:1;23738:6;23734:14;23727:58;23819:8;23814:2;23806:6;23802:15;23795:33;23610:225;:::o;23841:366::-;23983:3;24004:67;24068:2;24063:3;24004:67;:::i;:::-;23997:74;;24080:93;24169:3;24080:93;:::i;:::-;24198:2;24193:3;24189:12;24182:19;;23841:366;;;:::o;24213:419::-;24379:4;24417:2;24406:9;24402:18;24394:26;;24466:9;24460:4;24456:20;24452:1;24441:9;24437:17;24430:47;24494:131;24620:4;24494:131;:::i;:::-;24486:139;;24213:419;;;:::o;24638:182::-;24778:34;24774:1;24766:6;24762:14;24755:58;24638:182;:::o;24826:366::-;24968:3;24989:67;25053:2;25048:3;24989:67;:::i;:::-;24982:74;;25065:93;25154:3;25065:93;:::i;:::-;25183:2;25178:3;25174:12;25167:19;;24826:366;;;:::o;25198:419::-;25364:4;25402:2;25391:9;25387:18;25379:26;;25451:9;25445:4;25441:20;25437:1;25426:9;25422:17;25415:47;25479:131;25605:4;25479:131;:::i;:::-;25471:139;;25198:419;;;:::o;25623:229::-;25763:34;25759:1;25751:6;25747:14;25740:58;25832:12;25827:2;25819:6;25815:15;25808:37;25623:229;:::o;25858:366::-;26000:3;26021:67;26085:2;26080:3;26021:67;:::i;:::-;26014:74;;26097:93;26186:3;26097:93;:::i;:::-;26215:2;26210:3;26206:12;26199:19;;25858:366;;;:::o;26230:419::-;26396:4;26434:2;26423:9;26419:18;26411:26;;26483:9;26477:4;26473:20;26469:1;26458:9;26454:17;26447:47;26511:131;26637:4;26511:131;:::i;:::-;26503:139;;26230:419;;;:::o;26655:143::-;26712:5;26743:6;26737:13;26728:22;;26759:33;26786:5;26759:33;:::i;:::-;26655:143;;;;:::o;26804:351::-;26874:6;26923:2;26911:9;26902:7;26898:23;26894:32;26891:119;;;26929:79;;:::i;:::-;26891:119;27049:1;27074:64;27130:7;27121:6;27110:9;27106:22;27074:64;:::i;:::-;27064:74;;27020:128;26804:351;;;;:::o;27161:223::-;27301:34;27297:1;27289:6;27285:14;27278:58;27370:6;27365:2;27357:6;27353:15;27346:31;27161:223;:::o;27390:366::-;27532:3;27553:67;27617:2;27612:3;27553:67;:::i;:::-;27546:74;;27629:93;27718:3;27629:93;:::i;:::-;27747:2;27742:3;27738:12;27731:19;;27390:366;;;:::o;27762:419::-;27928:4;27966:2;27955:9;27951:18;27943:26;;28015:9;28009:4;28005:20;28001:1;27990:9;27986:17;27979:47;28043:131;28169:4;28043:131;:::i;:::-;28035:139;;27762:419;;;:::o;28187:221::-;28327:34;28323:1;28315:6;28311:14;28304:58;28396:4;28391:2;28383:6;28379:15;28372:29;28187:221;:::o;28414:366::-;28556:3;28577:67;28641:2;28636:3;28577:67;:::i;:::-;28570:74;;28653:93;28742:3;28653:93;:::i;:::-;28771:2;28766:3;28762:12;28755:19;;28414:366;;;:::o;28786:419::-;28952:4;28990:2;28979:9;28975:18;28967:26;;29039:9;29033:4;29029:20;29025:1;29014:9;29010:17;29003:47;29067:131;29193:4;29067:131;:::i;:::-;29059:139;;28786:419;;;:::o;29211:224::-;29351:34;29347:1;29339:6;29335:14;29328:58;29420:7;29415:2;29407:6;29403:15;29396:32;29211:224;:::o;29441:366::-;29583:3;29604:67;29668:2;29663:3;29604:67;:::i;:::-;29597:74;;29680:93;29769:3;29680:93;:::i;:::-;29798:2;29793:3;29789:12;29782:19;;29441:366;;;:::o;29813:419::-;29979:4;30017:2;30006:9;30002:18;29994:26;;30066:9;30060:4;30056:20;30052:1;30041:9;30037:17;30030:47;30094:131;30220:4;30094:131;:::i;:::-;30086:139;;29813:419;;;:::o;30238:222::-;30378:34;30374:1;30366:6;30362:14;30355:58;30447:5;30442:2;30434:6;30430:15;30423:30;30238:222;:::o;30466:366::-;30608:3;30629:67;30693:2;30688:3;30629:67;:::i;:::-;30622:74;;30705:93;30794:3;30705:93;:::i;:::-;30823:2;30818:3;30814:12;30807:19;;30466:366;;;:::o;30838:419::-;31004:4;31042:2;31031:9;31027:18;31019:26;;31091:9;31085:4;31081:20;31077:1;31066:9;31062:17;31055:47;31119:131;31245:4;31119:131;:::i;:::-;31111:139;;30838:419;;;:::o;31263:172::-;31403:24;31399:1;31391:6;31387:14;31380:48;31263:172;:::o;31441:366::-;31583:3;31604:67;31668:2;31663:3;31604:67;:::i;:::-;31597:74;;31680:93;31769:3;31680:93;:::i;:::-;31798:2;31793:3;31789:12;31782:19;;31441:366;;;:::o;31813:419::-;31979:4;32017:2;32006:9;32002:18;31994:26;;32066:9;32060:4;32056:20;32052:1;32041:9;32037:17;32030:47;32094:131;32220:4;32094:131;:::i;:::-;32086:139;;31813:419;;;:::o;32238:297::-;32378:34;32374:1;32366:6;32362:14;32355:58;32447:34;32442:2;32434:6;32430:15;32423:59;32516:11;32511:2;32503:6;32499:15;32492:36;32238:297;:::o;32541:366::-;32683:3;32704:67;32768:2;32763:3;32704:67;:::i;:::-;32697:74;;32780:93;32869:3;32780:93;:::i;:::-;32898:2;32893:3;32889:12;32882:19;;32541:366;;;:::o;32913:419::-;33079:4;33117:2;33106:9;33102:18;33094:26;;33166:9;33160:4;33156:20;33152:1;33141:9;33137:17;33130:47;33194:131;33320:4;33194:131;:::i;:::-;33186:139;;32913:419;;;:::o;33338:240::-;33478:34;33474:1;33466:6;33462:14;33455:58;33547:23;33542:2;33534:6;33530:15;33523:48;33338:240;:::o;33584:366::-;33726:3;33747:67;33811:2;33806:3;33747:67;:::i;:::-;33740:74;;33823:93;33912:3;33823:93;:::i;:::-;33941:2;33936:3;33932:12;33925:19;;33584:366;;;:::o;33956:419::-;34122:4;34160:2;34149:9;34145:18;34137:26;;34209:9;34203:4;34199:20;34195:1;34184:9;34180:17;34173:47;34237:131;34363:4;34237:131;:::i;:::-;34229:139;;33956:419;;;:::o;34381:169::-;34521:21;34517:1;34509:6;34505:14;34498:45;34381:169;:::o;34556:366::-;34698:3;34719:67;34783:2;34778:3;34719:67;:::i;:::-;34712:74;;34795:93;34884:3;34795:93;:::i;:::-;34913:2;34908:3;34904:12;34897:19;;34556:366;;;:::o;34928:419::-;35094:4;35132:2;35121:9;35117:18;35109:26;;35181:9;35175:4;35171:20;35167:1;35156:9;35152:17;35145:47;35209:131;35335:4;35209:131;:::i;:::-;35201:139;;34928:419;;;:::o;35353:241::-;35493:34;35489:1;35481:6;35477:14;35470:58;35562:24;35557:2;35549:6;35545:15;35538:49;35353:241;:::o;35600:366::-;35742:3;35763:67;35827:2;35822:3;35763:67;:::i;:::-;35756:74;;35839:93;35928:3;35839:93;:::i;:::-;35957:2;35952:3;35948:12;35941:19;;35600:366;;;:::o;35972:419::-;36138:4;36176:2;36165:9;36161:18;36153:26;;36225:9;36219:4;36215:20;36211:1;36200:9;36196:17;36189:47;36253:131;36379:4;36253:131;:::i;:::-;36245:139;;35972:419;;;:::o;36397:194::-;36437:4;36457:20;36475:1;36457:20;:::i;:::-;36452:25;;36491:20;36509:1;36491:20;:::i;:::-;36486:25;;36535:1;36532;36528:9;36520:17;;36559:1;36553:4;36550:11;36547:37;;;36564:18;;:::i;:::-;36547:37;36397:194;;;;:::o;36597:225::-;36737:34;36733:1;36725:6;36721:14;36714:58;36806:8;36801:2;36793:6;36789:15;36782:33;36597:225;:::o;36828:366::-;36970:3;36991:67;37055:2;37050:3;36991:67;:::i;:::-;36984:74;;37067:93;37156:3;37067:93;:::i;:::-;37185:2;37180:3;37176:12;37169:19;;36828:366;;;:::o;37200:419::-;37366:4;37404:2;37393:9;37389:18;37381:26;;37453:9;37447:4;37443:20;37439:1;37428:9;37424:17;37417:47;37481:131;37607:4;37481:131;:::i;:::-;37473:139;;37200:419;;;:::o;37625:147::-;37726:11;37763:3;37748:18;;37625:147;;;;:::o;37778:114::-;;:::o;37898:398::-;38057:3;38078:83;38159:1;38154:3;38078:83;:::i;:::-;38071:90;;38170:93;38259:3;38170:93;:::i;:::-;38288:1;38283:3;38279:11;38272:18;;37898:398;;;:::o;38302:379::-;38486:3;38508:147;38651:3;38508:147;:::i;:::-;38501:154;;38672:3;38665:10;;38302:379;;;:::o;38687:442::-;38836:4;38874:2;38863:9;38859:18;38851:26;;38887:71;38955:1;38944:9;38940:17;38931:6;38887:71;:::i;:::-;38968:72;39036:2;39025:9;39021:18;39012:6;38968:72;:::i;:::-;39050;39118:2;39107:9;39103:18;39094:6;39050:72;:::i;:::-;38687:442;;;;;;:::o;39135:180::-;39183:77;39180:1;39173:88;39280:4;39277:1;39270:15;39304:4;39301:1;39294:15;39321:180;39369:77;39366:1;39359:88;39466:4;39463:1;39456:15;39490:4;39487:1;39480:15;39507:143;39564:5;39595:6;39589:13;39580:22;;39611:33;39638:5;39611:33;:::i;:::-;39507:143;;;;:::o;39656:351::-;39726:6;39775:2;39763:9;39754:7;39750:23;39746:32;39743:119;;;39781:79;;:::i;:::-;39743:119;39901:1;39926:64;39982:7;39973:6;39962:9;39958:22;39926:64;:::i;:::-;39916:74;;39872:128;39656:351;;;;:::o;40013:85::-;40058:7;40087:5;40076:16;;40013:85;;;:::o;40104:158::-;40162:9;40195:61;40213:42;40222:32;40248:5;40222:32;:::i;:::-;40213:42;:::i;:::-;40195:61;:::i;:::-;40182:74;;40104:158;;;:::o;40268:147::-;40363:45;40402:5;40363:45;:::i;:::-;40358:3;40351:58;40268:147;;:::o;40421:114::-;40488:6;40522:5;40516:12;40506:22;;40421:114;;;:::o;40541:184::-;40640:11;40674:6;40669:3;40662:19;40714:4;40709:3;40705:14;40690:29;;40541:184;;;;:::o;40731:132::-;40798:4;40821:3;40813:11;;40851:4;40846:3;40842:14;40834:22;;40731:132;;;:::o;40869:108::-;40946:24;40964:5;40946:24;:::i;:::-;40941:3;40934:37;40869:108;;:::o;40983:179::-;41052:10;41073:46;41115:3;41107:6;41073:46;:::i;:::-;41151:4;41146:3;41142:14;41128:28;;40983:179;;;;:::o;41168:113::-;41238:4;41270;41265:3;41261:14;41253:22;;41168:113;;;:::o;41317:732::-;41436:3;41465:54;41513:5;41465:54;:::i;:::-;41535:86;41614:6;41609:3;41535:86;:::i;:::-;41528:93;;41645:56;41695:5;41645:56;:::i;:::-;41724:7;41755:1;41740:284;41765:6;41762:1;41759:13;41740:284;;;41841:6;41835:13;41868:63;41927:3;41912:13;41868:63;:::i;:::-;41861:70;;41954:60;42007:6;41954:60;:::i;:::-;41944:70;;41800:224;41787:1;41784;41780:9;41775:14;;41740:284;;;41744:14;42040:3;42033:10;;41441:608;;;41317:732;;;;:::o;42055:831::-;42318:4;42356:3;42345:9;42341:19;42333:27;;42370:71;42438:1;42427:9;42423:17;42414:6;42370:71;:::i;:::-;42451:80;42527:2;42516:9;42512:18;42503:6;42451:80;:::i;:::-;42578:9;42572:4;42568:20;42563:2;42552:9;42548:18;42541:48;42606:108;42709:4;42700:6;42606:108;:::i;:::-;42598:116;;42724:72;42792:2;42781:9;42777:18;42768:6;42724:72;:::i;:::-;42806:73;42874:3;42863:9;42859:19;42850:6;42806:73;:::i;:::-;42055:831;;;;;;;;:::o;42892:807::-;43141:4;43179:3;43168:9;43164:19;43156:27;;43193:71;43261:1;43250:9;43246:17;43237:6;43193:71;:::i;:::-;43274:72;43342:2;43331:9;43327:18;43318:6;43274:72;:::i;:::-;43356:80;43432:2;43421:9;43417:18;43408:6;43356:80;:::i;:::-;43446;43522:2;43511:9;43507:18;43498:6;43446:80;:::i;:::-;43536:73;43604:3;43593:9;43589:19;43580:6;43536:73;:::i;:::-;43619;43687:3;43676:9;43672:19;43663:6;43619:73;:::i;:::-;42892:807;;;;;;;;;:::o;43705:663::-;43793:6;43801;43809;43858:2;43846:9;43837:7;43833:23;43829:32;43826:119;;;43864:79;;:::i;:::-;43826:119;43984:1;44009:64;44065:7;44056:6;44045:9;44041:22;44009:64;:::i;:::-;43999:74;;43955:128;44122:2;44148:64;44204:7;44195:6;44184:9;44180:22;44148:64;:::i;:::-;44138:74;;44093:129;44261:2;44287:64;44343:7;44334:6;44323:9;44319:22;44287:64;:::i;:::-;44277:74;;44232:129;43705:663;;;;;:::o

Swarm Source

ipfs://64102cacc0e1c30c4826f7a2949decf8822c295c087f0d42125fbc54524a84fe
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.