ETH Price: $3,420.69 (-1.60%)
Gas: 8 Gwei

Token

BOUNTY (BOUNTY)
 

Overview

Max Total Supply

100,000,000,000 BOUNTY

Holders

111

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
wen69420.eth
Balance
936,655,151.551040474779784266 BOUNTY

Value
$0.00
0xd5c68609fa5b0b835a79739105ae041deff36999
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:
Bounty

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-13
*/

// SPDX-License-Identifier: MIT

/*

 Website: https://bountyerc.com
 Telegram: https://t.me/bountyerc
 Twitter: https://twitter.com/bountyerc

⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜
⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜
⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛🟨🟨🟨🟨🟨🟨🟨⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜
⬜⬛⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛⬛🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨⬛⬛⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬛⬜
⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛
⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬛
⬜⬛⬛⬜⬛⬜⬜⬜⬛⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛⬜⬜⬜⬛⬜⬛⬛⬜
⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜
⬜⬜⬛🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨🟨⬛⬜⬜
⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬛⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬛⬜⬛⬜⬛⬛⬛⬛⬛⬛⬛⬛⬛⬜⬛⬜⬛⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬛⬛⬜⬜⬜⬛⬜⬜⬜⬛⬛⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬛⬛⬜⬛⬜⬜⬜⬛⬛⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬛⬛⬜⬜⬜⬛⬜⬛⬛⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬛⬛⬛⬛⬛⬛⬛⬜⬜⬜⬛⬜⬛⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜
⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬛⬛⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬛⬛⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜
 
*/

pragma solidity 0.8.20;
pragma experimental ABIEncoderV2;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

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

/**
 * @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 {}
}

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

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;
}

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;
}

contract Bounty 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 bonusWallet;
    address public teamWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    bool public blacklistRenounced = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => bool) blacklisted;

    uint256 public buyTotalFees;
    uint256 public buyBonusFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTeamFee;

    uint256 public sellTotalFees;
    uint256 public sellBonusFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTeamFee;

    uint256 public tokensForBonus;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTeam;

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

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

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

  

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    constructor() ERC20("BOUNTY", "BOUNTY") {
        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 _buyBonusFee = 1; 
        uint256 _buyLiquidityFee = 1; 
        uint256 _buyTeamFee = 1; 

        uint256 _sellBonusFee = 1;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellTeamFee = 1;

        uint256 totalSupply = 100_000_000_000 * 1e18;  // 100 billion

        maxTransactionAmount = totalSupply / 100;  // 1% of 100 billion
        maxWallet = totalSupply / 100;  // 1% of 100 billion
        swapTokensAtAmount = (totalSupply * 5) / 10000;  // 0.05% of 100 billion


        buyBonusFee = _buyBonusFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTeamFee = _buyTeamFee;
        buyTotalFees = buyBonusFee + buyLiquidityFee + buyTeamFee;

        sellBonusFee = _sellBonusFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTeamFee = _sellTeamFee;
        sellTotalFees = sellBonusFee + sellLiquidityFee + sellTeamFee;

        bonusWallet = address(0xC165130CadE1Cd4d3560D13bFBdC0C8b299bb059); // set as Bounty Bonus wallet
        teamWallet = owner(); // set as Team wallet

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

      

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
      
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = 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() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 10) / 1000) / 1e18,
            "Cannot set maxWallet lower than 1.0%"
        );
        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 _bonusFee,
        uint256 _liquidityFee,
        uint256 _teamFee
    ) external onlyOwner {
        buyBonusFee = _bonusFee;
        buyLiquidityFee = _liquidityFee;
        buyTeamFee = _teamFee;
        buyTotalFees = buyBonusFee + buyLiquidityFee + buyTeamFee;
        require(buyTotalFees <= 50, "Buy fees must be <= 50.");
    }

    function updateSellFees(
        uint256 _bonusFee,
        uint256 _liquidityFee,
        uint256 _teamFee
    ) external onlyOwner {
        sellBonusFee = _bonusFee;
        sellLiquidityFee = _liquidityFee;
        sellTeamFee = _teamFee;
        sellTotalFees = sellBonusFee + sellLiquidityFee + sellTeamFee;
        require(sellTotalFees <= 5, "Sell fees must be <= 5.");
    }

    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 updateBonusWallet(address newBonusWallet) external onlyOwner {
        emit bonusWalletUpdated(newBonusWallet, bonusWallet);
        bonusWallet = newBonusWallet;
    }

    function updateTeamWallet(address newWallet) external onlyOwner {
        emit teamWalletUpdated(newWallet, teamWallet);
        teamWallet = newWallet;
    }

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

    function isBlacklisted(address account) public view returns (bool) {
        return blacklisted[account];
    }

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

        
        

        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."
                    );
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForTeam += (fees * sellTeamFee) / sellTotalFees;
                tokensForBonus += (fees * sellBonusFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForTeam += (fees * buyTeamFee) / buyTotalFees;
                tokensForBonus += (fees * buyBonusFee) / 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
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForBonus +
            tokensForTeam;
        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 ethForBonus = ethBalance.mul(tokensForBonus).div(totalTokensToSwap - (tokensForLiquidity / 2));
        
        uint256 ethForTeam = ethBalance.mul(tokensForTeam).div(totalTokensToSwap - (tokensForLiquidity / 2));

        uint256 ethForLiquidity = ethBalance - ethForBonus - ethForTeam;

        tokensForLiquidity = 0;
        tokensForBonus = 0;
        tokensForTeam = 0;

        (success, ) = address(teamWallet).call{value: ethForTeam}("");

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

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

    function withdrawStuckUnibot() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawStuckToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

    function withdrawStuckEth(address toAddr) external onlyOwner {
        (bool success, ) = toAddr.call{
            value: address(this).balance
        } ("");
        require(success);
    }

    // @dev team renounce blacklist commands
    function renounceBlacklist() public onlyOwner {
        blacklistRenounced = true;
    }

    function blacklist(address _addr) public onlyOwner {
        require(!blacklistRenounced, "Team has revoked blacklist rights");
        require(
            _addr != address(uniswapV2Pair) && _addr != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D), 
            "Cannot blacklist token's v2 router or v2 pool."
        );
        blacklisted[_addr] = true;
    }

    // @dev blacklist v3 pools; can unblacklist() down the road to suit project and community
    function blacklistLiquidityPool(address lpAddress) public onlyOwner {
        require(!blacklistRenounced, "Team has revoked blacklist rights");
        require(
            lpAddress != address(uniswapV2Pair) && lpAddress != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D), 
            "Cannot blacklist token's v2 router or v2 pool."
        );
        blacklisted[lpAddress] = true;
    }

    // @dev unblacklist address; not affected by blacklistRenounced incase team wants to unblacklist v3 pools down the road
    function unblacklist(address _addr) public onlyOwner {
        blacklisted[_addr] = false;
    }
}

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":"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":"bonusWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"}],"name":"blacklistLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blacklistRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBonusFee","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":"buyTeamFee","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":"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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBonusFee","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":"sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBonus","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":"tokensForTeam","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":[{"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":[{"internalType":"address","name":"_addr","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newBonusWallet","type":"address"}],"name":"updateBonusWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bonusFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bonusFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckUnibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055505f600b60036101000a81548160ff02191690831515021790555034801562000078575f80fd5b506040518060400160405280600681526020017f424f554e545900000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f424f554e545900000000000000000000000000000000000000000000000000008152508160039081620000f6919062000d1d565b50806004908162000108919062000d1d565b5050506200012b6200011f6200059160201b60201c565b6200059860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001568160016200065b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fa919062000e66565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000260573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000286919062000e66565b6040518363ffffffff1660e01b8152600401620002a592919062000ea7565b6020604051808303815f875af1158015620002c2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000e66565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033060a05160016200065b60201b60201c565b6200034560a05160016200074260201b60201c565b5f600190505f600190505f600190505f600190505f600190505f600190505f6c01431e0fae6d7217caa0000000905060648162000383919062000f2c565b60088190555060648162000398919062000f2c565b600a81905550612710600582620003b0919062000f63565b620003bc919062000f2c565b60098190555086600e8190555085600f8190555084601081905550601054600f54600e54620003ec919062000fad565b620003f8919062000fad565b600d8190555083601281905550826013819055508160148190555060145460135460125462000428919062000fad565b62000434919062000fad565b60118190555073c165130cade1cd4d3560d13bfbdc0c8b299bb05960065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200049e620007e060201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004ff620004f1620007e060201b60201c565b60016200080860201b60201c565b620005123060016200080860201b60201c565b6200052761dead60016200080860201b60201c565b620005496200053b620007e060201b60201c565b60016200065b60201b60201c565b6200055c3060016200065b60201b60201c565b6200057161dead60016200065b60201b60201c565b6200058333826200093f60201b60201c565b505050505050505062001136565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200066b6200059160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000691620007e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e19062001045565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008186200059160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200083e620007e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000897576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088e9062001045565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000933919062001081565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a790620010ea565b60405180910390fd5b620009c35f838362000aaf60201b60201c565b8060025f828254620009d6919062000fad565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a2a919062000fad565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a9091906200111b565b60405180910390a362000aab5f838362000ab460201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b3557607f821691505b60208210810362000b4b5762000b4a62000af0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000baf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b72565b62000bbb868362000b72565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c0562000bff62000bf98462000bd3565b62000bdc565b62000bd3565b9050919050565b5f819050919050565b62000c208362000be5565b62000c3862000c2f8262000c0c565b84845462000b7e565b825550505050565b5f90565b62000c4e62000c40565b62000c5b81848462000c15565b505050565b5b8181101562000c825762000c765f8262000c44565b60018101905062000c61565b5050565b601f82111562000cd15762000c9b8162000b51565b62000ca68462000b63565b8101602085101562000cb6578190505b62000cce62000cc58562000b63565b83018262000c60565b50505b505050565b5f82821c905092915050565b5f62000cf35f198460080262000cd6565b1980831691505092915050565b5f62000d0d838362000ce2565b9150826002028217905092915050565b62000d288262000ab9565b67ffffffffffffffff81111562000d445762000d4362000ac3565b5b62000d50825462000b1d565b62000d5d82828562000c86565b5f60209050601f83116001811462000d93575f841562000d7e578287015190505b62000d8a858262000d00565b86555062000df9565b601f19841662000da38662000b51565b5f5b8281101562000dcc5784890151825560018201915060208501945060208101905062000da5565b8683101562000dec578489015162000de8601f89168262000ce2565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e308262000e05565b9050919050565b62000e428162000e24565b811462000e4d575f80fd5b50565b5f8151905062000e608162000e37565b92915050565b5f6020828403121562000e7e5762000e7d62000e01565b5b5f62000e8d8482850162000e50565b91505092915050565b62000ea18162000e24565b82525050565b5f60408201905062000ebc5f83018562000e96565b62000ecb602083018462000e96565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f388262000bd3565b915062000f458362000bd3565b92508262000f585762000f5762000ed2565b5b828204905092915050565b5f62000f6f8262000bd3565b915062000f7c8362000bd3565b925082820262000f8c8162000bd3565b9150828204841483151762000fa65762000fa562000eff565b5b5092915050565b5f62000fb98262000bd3565b915062000fc68362000bd3565b925082820190508082111562000fe15762000fe062000eff565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200102d60208362000fe7565b91506200103a8262000ff7565b602082019050919050565b5f6020820190508181035f8301526200105e816200101f565b9050919050565b5f8115159050919050565b6200107b8162001065565b82525050565b5f602082019050620010965f83018462001070565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010d2601f8362000fe7565b9150620010df826200109c565b602082019050919050565b5f6020820190508181035f8301526200110381620010c4565b9050919050565b620011158162000bd3565b82525050565b5f602082019050620011305f8301846200110a565b92915050565b60805160a051615b83620011905f395f818161120d01528181611ded0152818161278c0152612bd301525f8181610eec01528181614287015281816143660152818161438d01528181614423015261444a0152615b835ff3fe6080604052600436106103a5575f3560e01c80638095d564116101e6578063c18bc1951161010c578063f11a24d31161009f578063f8b45b051161006e578063f8b45b0514610d62578063f9f92be414610d8c578063fde83a3414610db4578063fe575a8714610dde576103ac565b8063f11a24d314610cbe578063f216165c14610ce8578063f2fde38b14610d10578063f637434214610d38576103ac565b8063d85ba063116100db578063d85ba06314610c06578063dd62ed3e14610c30578063e19b282314610c6c578063e2f4560514610c94576103ac565b8063c18bc19514610b4e578063c8c8ebe414610b76578063d257b34f14610ba0578063d729715f14610bdc576103ac565b80639c2e4ac611610184578063bbc0c74211610153578063bbc0c74214610aac578063bc205ad314610ad6578063c024666814610afe578063c17b5b8c14610b26576103ac565b80639c2e4ac6146109ce578063a457c2d7146109f8578063a9059cbb14610a34578063b62496f514610a70576103ac565b8063900ed8e6116101c0578063900ed8e61461092a578063924de9b71461095457806395d89b411461097c5780639a7a23d6146109a6576103ac565b80638095d564146108c25780638a8c523c146108ea5780638da5cb5b14610900576103ac565b80634a62bb65116102cb5780636ddd1713116102695780637571336a116102385780637571336a1461082257806375e3661e1461084a5780637ca8448a146108725780637cb332bb1461089a576103ac565b80636ddd17131461077c57806370a08231146107a6578063715018a6146107e2578063751039fc146107f8576103ac565b80635ea92ddd116102a55780635ea92ddd146106fc5780635f189361146107125780636a486a8e146107285780636bcc311c14610752576103ac565b80634a62bb651461066c5780634fbee1931461069657806359927044146106d2576103ac565b80631a8145bb11610343578063313ce56711610312578063313ce567146105b257806339509351146105dc5780633dc599ff1461061857806349bd5a5e14610642576103ac565b80631a8145bb146104fa578063203e727e1461052457806323b872dd1461054c57806327c8f83514610588576103ac565b806310d5de531161037f57806310d5de53146104405780631694505e1461047c57806318160ddd146104a657806318c1d9b2146104d0576103ac565b806306fdde03146103b0578063095ea7b3146103da5780630c01377c14610416576103ac565b366103ac57005b5f80fd5b3480156103bb575f80fd5b506103c4610e1a565b6040516103d19190614585565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb9190614636565b610eaa565b60405161040d919061468e565b60405180910390f35b348015610421575f80fd5b5061042a610ec7565b60405161043791906146b6565b60405180910390f35b34801561044b575f80fd5b50610466600480360381019061046191906146cf565b610ecd565b604051610473919061468e565b60405180910390f35b348015610487575f80fd5b50610490610eea565b60405161049d9190614755565b60405180910390f35b3480156104b1575f80fd5b506104ba610f0e565b6040516104c791906146b6565b60405180910390f35b3480156104db575f80fd5b506104e4610f17565b6040516104f1919061477d565b60405180910390f35b348015610505575f80fd5b5061050e610f3c565b60405161051b91906146b6565b60405180910390f35b34801561052f575f80fd5b5061054a60048036038101906105459190614796565b610f42565b005b348015610557575f80fd5b50610572600480360381019061056d91906147c1565b611051565b60405161057f919061468e565b60405180910390f35b348015610593575f80fd5b5061059c611143565b6040516105a9919061477d565b60405180910390f35b3480156105bd575f80fd5b506105c6611149565b6040516105d3919061482c565b60405180910390f35b3480156105e7575f80fd5b5061060260048036038101906105fd9190614636565b611151565b60405161060f919061468e565b60405180910390f35b348015610623575f80fd5b5061062c6111f8565b604051610639919061468e565b60405180910390f35b34801561064d575f80fd5b5061065661120b565b604051610663919061477d565b60405180910390f35b348015610677575f80fd5b5061068061122f565b60405161068d919061468e565b60405180910390f35b3480156106a1575f80fd5b506106bc60048036038101906106b791906146cf565b611241565b6040516106c9919061468e565b60405180910390f35b3480156106dd575f80fd5b506106e6611293565b6040516106f3919061477d565b60405180910390f35b348015610707575f80fd5b506107106112b8565b005b34801561071d575f80fd5b50610726611472565b005b348015610733575f80fd5b5061073c61150b565b60405161074991906146b6565b60405180910390f35b34801561075d575f80fd5b50610766611511565b60405161077391906146b6565b60405180910390f35b348015610787575f80fd5b50610790611517565b60405161079d919061468e565b60405180910390f35b3480156107b1575f80fd5b506107cc60048036038101906107c791906146cf565b61152a565b6040516107d991906146b6565b60405180910390f35b3480156107ed575f80fd5b506107f661156f565b005b348015610803575f80fd5b5061080c6115f6565b604051610819919061468e565b60405180910390f35b34801561082d575f80fd5b506108486004803603810190610843919061486f565b611693565b005b348015610855575f80fd5b50610870600480360381019061086b91906146cf565b611767565b005b34801561087d575f80fd5b50610898600480360381019061089391906146cf565b61183a565b005b3480156108a5575f80fd5b506108c060048036038101906108bb91906146cf565b61192b565b005b3480156108cd575f80fd5b506108e860048036038101906108e391906148ad565b611a65565b005b3480156108f5575f80fd5b506108fe611b64565b005b34801561090b575f80fd5b50610914611c18565b604051610921919061477d565b60405180910390f35b348015610935575f80fd5b5061093e611c40565b60405161094b91906146b6565b60405180910390f35b34801561095f575f80fd5b5061097a600480360381019061097591906148fd565b611c46565b005b348015610987575f80fd5b50610990611cdf565b60405161099d9190614585565b60405180910390f35b3480156109b1575f80fd5b506109cc60048036038101906109c7919061486f565b611d6f565b005b3480156109d9575f80fd5b506109e2611e87565b6040516109ef91906146b6565b60405180910390f35b348015610a03575f80fd5b50610a1e6004803603810190610a199190614636565b611e8d565b604051610a2b919061468e565b60405180910390f35b348015610a3f575f80fd5b50610a5a6004803603810190610a559190614636565b611f73565b604051610a67919061468e565b60405180910390f35b348015610a7b575f80fd5b50610a966004803603810190610a9191906146cf565b611f90565b604051610aa3919061468e565b60405180910390f35b348015610ab7575f80fd5b50610ac0611fad565b604051610acd919061468e565b60405180910390f35b348015610ae1575f80fd5b50610afc6004803603810190610af79190614928565b611fc0565b005b348015610b09575f80fd5b50610b246004803603810190610b1f919061486f565b6121a6565b005b348015610b31575f80fd5b50610b4c6004803603810190610b4791906148ad565b6122c8565b005b348015610b59575f80fd5b50610b746004803603810190610b6f9190614796565b6123c7565b005b348015610b81575f80fd5b50610b8a6124d6565b604051610b9791906146b6565b60405180910390f35b348015610bab575f80fd5b50610bc66004803603810190610bc19190614796565b6124dc565b604051610bd3919061468e565b60405180910390f35b348015610be7575f80fd5b50610bf0612630565b604051610bfd91906146b6565b60405180910390f35b348015610c11575f80fd5b50610c1a612636565b604051610c2791906146b6565b60405180910390f35b348015610c3b575f80fd5b50610c566004803603810190610c519190614928565b61263c565b604051610c6391906146b6565b60405180910390f35b348015610c77575f80fd5b50610c926004803603810190610c8d91906146cf565b6126be565b005b348015610c9f575f80fd5b50610ca86128bd565b604051610cb591906146b6565b60405180910390f35b348015610cc9575f80fd5b50610cd26128c3565b604051610cdf91906146b6565b60405180910390f35b348015610cf3575f80fd5b50610d0e6004803603810190610d0991906146cf565b6128c9565b005b348015610d1b575f80fd5b50610d366004803603810190610d3191906146cf565b612a03565b005b348015610d43575f80fd5b50610d4c612af9565b604051610d5991906146b6565b60405180910390f35b348015610d6d575f80fd5b50610d76612aff565b604051610d8391906146b6565b60405180910390f35b348015610d97575f80fd5b50610db26004803603810190610dad91906146cf565b612b05565b005b348015610dbf575f80fd5b50610dc8612d04565b604051610dd591906146b6565b60405180910390f35b348015610de9575f80fd5b50610e046004803603810190610dff91906146cf565b612d0a565b604051610e11919061468e565b60405180910390f35b606060038054610e2990614993565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5590614993565b8015610ea05780601f10610e7757610100808354040283529160200191610ea0565b820191905f5260205f20905b815481529060010190602001808311610e8357829003601f168201915b5050505050905090565b5f610ebd610eb6612d5c565b8484612d63565b6001905092915050565b60125481565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b610f4a612d5c565b73ffffffffffffffffffffffffffffffffffffffff16610f68611c18565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590614a0d565b60405180910390fd5b670de0b6b3a76400006103e86005610fd4610f0e565b610fde9190614a58565b610fe89190614ac6565b610ff29190614ac6565b811015611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90614b66565b60405180910390fd5b670de0b6b3a7640000816110489190614a58565b60088190555050565b5f61105d848484612f26565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110a4612d5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a90614bf4565b60405180910390fd5b6111378561112f612d5c565b858403612d63565b60019150509392505050565b61dead81565b5f6012905090565b5f6111ee61115d612d5c565b848460015f61116a612d5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e99190614c12565b612d63565b6001905092915050565b600b60039054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112c0612d5c565b73ffffffffffffffffffffffffffffffffffffffff166112de611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90614a0d565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161136e919061477d565b602060405180830381865afa158015611389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ad9190614c59565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016113ea929190614c84565b6020604051808303815f875af1158015611406573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142a9190614cbf565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561146e573d5f803e3d5ffd5b5050565b61147a612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611498611c18565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614a0d565b60405180910390fd5b6001600b60036101000a81548160ff021916908315150217905550565b60115481565b60155481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611577612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611595611c18565b73ffffffffffffffffffffffffffffffffffffffff16146115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290614a0d565b60405180910390fd5b6115f45f613aca565b565b5f6115ff612d5c565b73ffffffffffffffffffffffffffffffffffffffff1661161d611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90614a0d565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b61169b612d5c565b73ffffffffffffffffffffffffffffffffffffffff166116b9611c18565b73ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690614a0d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61176f612d5c565b73ffffffffffffffffffffffffffffffffffffffff1661178d611c18565b73ffffffffffffffffffffffffffffffffffffffff16146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90614a0d565b60405180910390fd5b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611842612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611860611c18565b73ffffffffffffffffffffffffffffffffffffffff16146118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90614a0d565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16476040516118db90614d17565b5f6040518083038185875af1925050503d805f8114611915576040519150601f19603f3d011682016040523d82523d5f602084013e61191a565b606091505b5050905080611927575f80fd5b5050565b611933612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611951611c18565b73ffffffffffffffffffffffffffffffffffffffff16146119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90614a0d565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a6d612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611a8b611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890614a0d565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611b099190614c12565b611b139190614c12565b600d819055506032600d541115611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690614d75565b60405180910390fd5b505050565b611b6c612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611b8a611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd790614a0d565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b611c4e612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611c6c611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990614a0d565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611cee90614993565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1a90614993565b8015611d655780601f10611d3c57610100808354040283529160200191611d65565b820191905f5260205f20905b815481529060010190602001808311611d4857829003601f168201915b5050505050905090565b611d77612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611d95611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614a0d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090614e03565b60405180910390fd5b611e838282613b8d565b5050565b60105481565b5f8060015f611e9a612d5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90614e91565b60405180910390fd5b611f68611f5f612d5c565b85858403612d63565b600191505092915050565b5f611f86611f7f612d5c565b8484612f26565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611fc8612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611fe6611c18565b73ffffffffffffffffffffffffffffffffffffffff161461203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203390614a0d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a190614ef9565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120e4919061477d565b602060405180830381865afa1580156120ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121239190614c59565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612160929190614c84565b6020604051808303815f875af115801561217c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121a09190614cbf565b50505050565b6121ae612d5c565b73ffffffffffffffffffffffffffffffffffffffff166121cc611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990614a0d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122bc919061468e565b60405180910390a25050565b6122d0612d5c565b73ffffffffffffffffffffffffffffffffffffffff166122ee611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b90614a0d565b60405180910390fd5b82601281905550816013819055508060148190555060145460135460125461236c9190614c12565b6123769190614c12565b601181905550600560115411156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614f61565b60405180910390fd5b505050565b6123cf612d5c565b73ffffffffffffffffffffffffffffffffffffffff166123ed611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614a0d565b60405180910390fd5b670de0b6b3a76400006103e8600a612459610f0e565b6124639190614a58565b61246d9190614ac6565b6124779190614ac6565b8110156124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090614fef565b60405180910390fd5b670de0b6b3a7640000816124cd9190614a58565b600a8190555050565b60085481565b5f6124e5612d5c565b73ffffffffffffffffffffffffffffffffffffffff16612503611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255090614a0d565b60405180910390fd5b620186a06001612567610f0e565b6125719190614a58565b61257b9190614ac6565b8210156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b49061507d565b60405180910390fd5b6103e860056125ca610f0e565b6125d49190614a58565b6125de9190614ac6565b821115612620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126179061510b565b60405180910390fd5b8160098190555060019050919050565b60145481565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6126c6612d5c565b73ffffffffffffffffffffffffffffffffffffffff166126e4611c18565b73ffffffffffffffffffffffffffffffffffffffff161461273a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190614a0d565b60405180910390fd5b600b60039054906101000a900460ff161561278a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278190615199565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128265750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90615227565b60405180910390fd5b6001600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60095481565b600f5481565b6128d1612d5c565b73ffffffffffffffffffffffffffffffffffffffff166128ef611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c90614a0d565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5dcb236e11a2357f4720113e64ae69451bb7bbf745535a1a75ba25ca46473e2d60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a0b612d5c565b73ffffffffffffffffffffffffffffffffffffffff16612a29611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7690614a0d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae4906152b5565b60405180910390fd5b612af681613aca565b50565b60135481565b600a5481565b612b0d612d5c565b73ffffffffffffffffffffffffffffffffffffffff16612b2b611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7890614a0d565b60405180910390fd5b600b60039054906101000a900460ff1615612bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc890615199565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612c6d5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca390615227565b60405180910390fd5b6001600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60175481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc890615343565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e36906153d1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f1991906146b6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b9061545f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff9906154ed565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561308c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308390615555565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310d906155bd565b60405180910390fd5b5f810361312d5761312883835f613c2b565b613ac5565b600b5f9054906101000a900460ff161561361157613149611c18565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131b75750613187611c18565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131ef57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613229575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132425750600560149054906101000a900460ff16155b1561361057600b60019054906101000a900460ff166133365760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132f6575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b613335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332c90615625565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133d3575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561347a5760085481111561341d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613414906156b3565b60405180910390fd5b600a546134298361152a565b826134349190614c12565b1115613475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346c9061571b565b60405180910390fd5b61360f565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613517575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561356657600854811115613561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613558906157a9565b60405180910390fd5b61360e565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661360d57600a546135c08361152a565b826135cb9190614c12565b111561360c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136039061571b565b60405180910390fd5b5b5b5b5b5b5f61361b3061152a565b90505f600954821015905080801561363f5750600b60029054906101000a900460ff165b80156136585750600560149054906101000a900460ff16155b80156136ab5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156136fe575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613751575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613794576001600560146101000a81548160ff021916908315150217905550613779613ea0565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613843575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561384c575f90505b5f8115613ab557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156138aa57505f601154115b15613974576138d760646138c9601154886141a190919063ffffffff16565b6141b690919063ffffffff16565b9050601154601354826138ea9190614a58565b6138f49190614ac6565b60165f8282546139049190614c12565b925050819055506011546014548261391c9190614a58565b6139269190614ac6565b60175f8282546139369190614c12565b925050819055506011546012548261394e9190614a58565b6139589190614ac6565b60155f8282546139689190614c12565b92505081905550613a92565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156139cb57505f600d54115b15613a91576139f860646139ea600d54886141a190919063ffffffff16565b6141b690919063ffffffff16565b9050600d54600f5482613a0b9190614a58565b613a159190614ac6565b60165f828254613a259190614c12565b92505081905550600d5460105482613a3d9190614a58565b613a479190614ac6565b60175f828254613a579190614c12565b92505081905550600d54600e5482613a6f9190614a58565b613a799190614ac6565b60155f828254613a899190614c12565b925050819055505b5b5f811115613aa657613aa5873083613c2b565b5b8085613ab291906157c7565b94505b613ac0878787613c2b565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c909061545f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cfe906154ed565b60405180910390fd5b613d128383836141cb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8c9061586a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613e239190614c12565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e8791906146b6565b60405180910390a3613e9a8484846141d0565b50505050565b5f613eaa3061152a565b90505f601754601554601654613ec09190614c12565b613eca9190614c12565b90505f80831480613eda57505f82145b15613ee75750505061419f565b6014600954613ef69190614a58565b831115613f0f576014600954613f0c9190614a58565b92505b5f60028360165486613f219190614a58565b613f2b9190614ac6565b613f359190614ac6565b90505f613f4b82866141d590919063ffffffff16565b90505f479050613f5a826141ea565b5f613f6e82476141d590919063ffffffff16565b90505f613fb16002601654613f839190614ac6565b88613f8e91906157c7565b613fa3601554856141a190919063ffffffff16565b6141b690919063ffffffff16565b90505f613ff46002601654613fc69190614ac6565b89613fd191906157c7565b613fe6601754866141a190919063ffffffff16565b6141b690919063ffffffff16565b90505f81838561400491906157c7565b61400e91906157c7565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406a90614d17565b5f6040518083038185875af1925050503d805f81146140a4576040519150601f19603f3d011682016040523d82523d5f602084013e6140a9565b606091505b5050809850505f871180156140bd57505f81115b1561410a576140cc878261441d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161410193929190615888565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161414f90614d17565b5f6040518083038185875af1925050503d805f8114614189576040519150601f19603f3d011682016040523d82523d5f602084013e61418e565b606091505b505080985050505050505050505050505b565b5f81836141ae9190614a58565b905092915050565b5f81836141c39190614ac6565b905092915050565b505050565b505050565b5f81836141e291906157c7565b905092915050565b5f600267ffffffffffffffff811115614206576142056158bd565b5b6040519080825280602002602001820160405280156142345781602001602082028036833780820191505090505b50905030815f8151811061424b5761424a6158ea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614312919061592b565b81600181518110614326576143256158ea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061438b307f000000000000000000000000000000000000000000000000000000000000000084612d63565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016143ec959493929190615a46565b5f604051808303815f87803b158015614403575f80fd5b505af1158015614415573d5f803e3d5ffd5b505050505050565b614448307f000000000000000000000000000000000000000000000000000000000000000084612d63565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80614491611c18565b426040518863ffffffff1660e01b81526004016144b396959493929190615a9e565b60606040518083038185885af11580156144cf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906144f49190615afd565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614532578082015181840152602081019050614517565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614557826144fb565b6145618185614505565b9350614571818560208601614515565b61457a8161453d565b840191505092915050565b5f6020820190508181035f83015261459d818461454d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6145d2826145a9565b9050919050565b6145e2816145c8565b81146145ec575f80fd5b50565b5f813590506145fd816145d9565b92915050565b5f819050919050565b61461581614603565b811461461f575f80fd5b50565b5f813590506146308161460c565b92915050565b5f806040838503121561464c5761464b6145a5565b5b5f614659858286016145ef565b925050602061466a85828601614622565b9150509250929050565b5f8115159050919050565b61468881614674565b82525050565b5f6020820190506146a15f83018461467f565b92915050565b6146b081614603565b82525050565b5f6020820190506146c95f8301846146a7565b92915050565b5f602082840312156146e4576146e36145a5565b5b5f6146f1848285016145ef565b91505092915050565b5f819050919050565b5f61471d614718614713846145a9565b6146fa565b6145a9565b9050919050565b5f61472e82614703565b9050919050565b5f61473f82614724565b9050919050565b61474f81614735565b82525050565b5f6020820190506147685f830184614746565b92915050565b614777816145c8565b82525050565b5f6020820190506147905f83018461476e565b92915050565b5f602082840312156147ab576147aa6145a5565b5b5f6147b884828501614622565b91505092915050565b5f805f606084860312156147d8576147d76145a5565b5b5f6147e5868287016145ef565b93505060206147f6868287016145ef565b925050604061480786828701614622565b9150509250925092565b5f60ff82169050919050565b61482681614811565b82525050565b5f60208201905061483f5f83018461481d565b92915050565b61484e81614674565b8114614858575f80fd5b50565b5f8135905061486981614845565b92915050565b5f8060408385031215614885576148846145a5565b5b5f614892858286016145ef565b92505060206148a38582860161485b565b9150509250929050565b5f805f606084860312156148c4576148c36145a5565b5b5f6148d186828701614622565b93505060206148e286828701614622565b92505060406148f386828701614622565b9150509250925092565b5f60208284031215614912576149116145a5565b5b5f61491f8482850161485b565b91505092915050565b5f806040838503121561493e5761493d6145a5565b5b5f61494b858286016145ef565b925050602061495c858286016145ef565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806149aa57607f821691505b6020821081036149bd576149bc614966565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6149f7602083614505565b9150614a02826149c3565b602082019050919050565b5f6020820190508181035f830152614a24816149eb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614a6282614603565b9150614a6d83614603565b9250828202614a7b81614603565b91508282048414831517614a9257614a91614a2b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614ad082614603565b9150614adb83614603565b925082614aeb57614aea614a99565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614b50602f83614505565b9150614b5b82614af6565b604082019050919050565b5f6020820190508181035f830152614b7d81614b44565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614bde602883614505565b9150614be982614b84565b604082019050919050565b5f6020820190508181035f830152614c0b81614bd2565b9050919050565b5f614c1c82614603565b9150614c2783614603565b9250828201905080821115614c3f57614c3e614a2b565b5b92915050565b5f81519050614c538161460c565b92915050565b5f60208284031215614c6e57614c6d6145a5565b5b5f614c7b84828501614c45565b91505092915050565b5f604082019050614c975f83018561476e565b614ca460208301846146a7565b9392505050565b5f81519050614cb981614845565b92915050565b5f60208284031215614cd457614cd36145a5565b5b5f614ce184828501614cab565b91505092915050565b5f81905092915050565b50565b5f614d025f83614cea565b9150614d0d82614cf4565b5f82019050919050565b5f614d2182614cf7565b9150819050919050565b7f4275792066656573206d757374206265203c3d2035302e0000000000000000005f82015250565b5f614d5f601783614505565b9150614d6a82614d2b565b602082019050919050565b5f6020820190508181035f830152614d8c81614d53565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614ded603983614505565b9150614df882614d93565b604082019050919050565b5f6020820190508181035f830152614e1a81614de1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614e7b602583614505565b9150614e8682614e21565b604082019050919050565b5f6020820190508181035f830152614ea881614e6f565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f614ee3601a83614505565b9150614eee82614eaf565b602082019050919050565b5f6020820190508181035f830152614f1081614ed7565b9050919050565b7f53656c6c2066656573206d757374206265203c3d20352e0000000000000000005f82015250565b5f614f4b601783614505565b9150614f5682614f17565b602082019050919050565b5f6020820190508181035f830152614f7881614f3f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614fd9602483614505565b9150614fe482614f7f565b604082019050919050565b5f6020820190508181035f83015261500681614fcd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f615067603583614505565b91506150728261500d565b604082019050919050565b5f6020820190508181035f8301526150948161505b565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6150f5603483614505565b91506151008261509b565b604082019050919050565b5f6020820190508181035f830152615122816150e9565b9050919050565b7f5465616d20686173207265766f6b656420626c61636b6c6973742072696768745f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f615183602183614505565b915061518e82615129565b604082019050919050565b5f6020820190508181035f8301526151b081615177565b9050919050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f615211602e83614505565b915061521c826151b7565b604082019050919050565b5f6020820190508181035f83015261523e81615205565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61529f602683614505565b91506152aa82615245565b604082019050919050565b5f6020820190508181035f8301526152cc81615293565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61532d602483614505565b9150615338826152d3565b604082019050919050565b5f6020820190508181035f83015261535a81615321565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6153bb602283614505565b91506153c682615361565b604082019050919050565b5f6020820190508181035f8301526153e8816153af565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f615449602583614505565b9150615454826153ef565b604082019050919050565b5f6020820190508181035f8301526154768161543d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6154d7602383614505565b91506154e28261547d565b604082019050919050565b5f6020820190508181035f830152615504816154cb565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f61553f601283614505565b915061554a8261550b565b602082019050919050565b5f6020820190508181035f83015261556c81615533565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f6155a7601483614505565b91506155b282615573565b602082019050919050565b5f6020820190508181035f8301526155d48161559b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61560f601683614505565b915061561a826155db565b602082019050919050565b5f6020820190508181035f83015261563c81615603565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61569d603583614505565b91506156a882615643565b604082019050919050565b5f6020820190508181035f8301526156ca81615691565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f615705601383614505565b9150615710826156d1565b602082019050919050565b5f6020820190508181035f830152615732816156f9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615793603683614505565b915061579e82615739565b604082019050919050565b5f6020820190508181035f8301526157c081615787565b9050919050565b5f6157d182614603565b91506157dc83614603565b92508282039050818111156157f4576157f3614a2b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615854602683614505565b915061585f826157fa565b604082019050919050565b5f6020820190508181035f83015261588181615848565b9050919050565b5f60608201905061589b5f8301866146a7565b6158a860208301856146a7565b6158b560408301846146a7565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050615925816145d9565b92915050565b5f602082840312156159405761593f6145a5565b5b5f61594d84828501615917565b91505092915050565b5f819050919050565b5f61597961597461596f84615956565b6146fa565b614603565b9050919050565b6159898161595f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6159c1816145c8565b82525050565b5f6159d283836159b8565b60208301905092915050565b5f602082019050919050565b5f6159f48261598f565b6159fe8185615999565b9350615a09836159a9565b805f5b83811015615a39578151615a2088826159c7565b9750615a2b836159de565b925050600181019050615a0c565b5085935050505092915050565b5f60a082019050615a595f8301886146a7565b615a666020830187615980565b8181036040830152615a7881866159ea565b9050615a87606083018561476e565b615a9460808301846146a7565b9695505050505050565b5f60c082019050615ab15f83018961476e565b615abe60208301886146a7565b615acb6040830187615980565b615ad86060830186615980565b615ae5608083018561476e565b615af260a08301846146a7565b979650505050505050565b5f805f60608486031215615b1457615b136145a5565b5b5f615b2186828701614c45565b9350506020615b3286828701614c45565b9250506040615b4386828701614c45565b915050925092509256fea26469706673582212203b48f751cab73f4fdde5b50b59b0460f3fc9143be434d7f361e6742c7738aeea64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106103a5575f3560e01c80638095d564116101e6578063c18bc1951161010c578063f11a24d31161009f578063f8b45b051161006e578063f8b45b0514610d62578063f9f92be414610d8c578063fde83a3414610db4578063fe575a8714610dde576103ac565b8063f11a24d314610cbe578063f216165c14610ce8578063f2fde38b14610d10578063f637434214610d38576103ac565b8063d85ba063116100db578063d85ba06314610c06578063dd62ed3e14610c30578063e19b282314610c6c578063e2f4560514610c94576103ac565b8063c18bc19514610b4e578063c8c8ebe414610b76578063d257b34f14610ba0578063d729715f14610bdc576103ac565b80639c2e4ac611610184578063bbc0c74211610153578063bbc0c74214610aac578063bc205ad314610ad6578063c024666814610afe578063c17b5b8c14610b26576103ac565b80639c2e4ac6146109ce578063a457c2d7146109f8578063a9059cbb14610a34578063b62496f514610a70576103ac565b8063900ed8e6116101c0578063900ed8e61461092a578063924de9b71461095457806395d89b411461097c5780639a7a23d6146109a6576103ac565b80638095d564146108c25780638a8c523c146108ea5780638da5cb5b14610900576103ac565b80634a62bb65116102cb5780636ddd1713116102695780637571336a116102385780637571336a1461082257806375e3661e1461084a5780637ca8448a146108725780637cb332bb1461089a576103ac565b80636ddd17131461077c57806370a08231146107a6578063715018a6146107e2578063751039fc146107f8576103ac565b80635ea92ddd116102a55780635ea92ddd146106fc5780635f189361146107125780636a486a8e146107285780636bcc311c14610752576103ac565b80634a62bb651461066c5780634fbee1931461069657806359927044146106d2576103ac565b80631a8145bb11610343578063313ce56711610312578063313ce567146105b257806339509351146105dc5780633dc599ff1461061857806349bd5a5e14610642576103ac565b80631a8145bb146104fa578063203e727e1461052457806323b872dd1461054c57806327c8f83514610588576103ac565b806310d5de531161037f57806310d5de53146104405780631694505e1461047c57806318160ddd146104a657806318c1d9b2146104d0576103ac565b806306fdde03146103b0578063095ea7b3146103da5780630c01377c14610416576103ac565b366103ac57005b5f80fd5b3480156103bb575f80fd5b506103c4610e1a565b6040516103d19190614585565b60405180910390f35b3480156103e5575f80fd5b5061040060048036038101906103fb9190614636565b610eaa565b60405161040d919061468e565b60405180910390f35b348015610421575f80fd5b5061042a610ec7565b60405161043791906146b6565b60405180910390f35b34801561044b575f80fd5b50610466600480360381019061046191906146cf565b610ecd565b604051610473919061468e565b60405180910390f35b348015610487575f80fd5b50610490610eea565b60405161049d9190614755565b60405180910390f35b3480156104b1575f80fd5b506104ba610f0e565b6040516104c791906146b6565b60405180910390f35b3480156104db575f80fd5b506104e4610f17565b6040516104f1919061477d565b60405180910390f35b348015610505575f80fd5b5061050e610f3c565b60405161051b91906146b6565b60405180910390f35b34801561052f575f80fd5b5061054a60048036038101906105459190614796565b610f42565b005b348015610557575f80fd5b50610572600480360381019061056d91906147c1565b611051565b60405161057f919061468e565b60405180910390f35b348015610593575f80fd5b5061059c611143565b6040516105a9919061477d565b60405180910390f35b3480156105bd575f80fd5b506105c6611149565b6040516105d3919061482c565b60405180910390f35b3480156105e7575f80fd5b5061060260048036038101906105fd9190614636565b611151565b60405161060f919061468e565b60405180910390f35b348015610623575f80fd5b5061062c6111f8565b604051610639919061468e565b60405180910390f35b34801561064d575f80fd5b5061065661120b565b604051610663919061477d565b60405180910390f35b348015610677575f80fd5b5061068061122f565b60405161068d919061468e565b60405180910390f35b3480156106a1575f80fd5b506106bc60048036038101906106b791906146cf565b611241565b6040516106c9919061468e565b60405180910390f35b3480156106dd575f80fd5b506106e6611293565b6040516106f3919061477d565b60405180910390f35b348015610707575f80fd5b506107106112b8565b005b34801561071d575f80fd5b50610726611472565b005b348015610733575f80fd5b5061073c61150b565b60405161074991906146b6565b60405180910390f35b34801561075d575f80fd5b50610766611511565b60405161077391906146b6565b60405180910390f35b348015610787575f80fd5b50610790611517565b60405161079d919061468e565b60405180910390f35b3480156107b1575f80fd5b506107cc60048036038101906107c791906146cf565b61152a565b6040516107d991906146b6565b60405180910390f35b3480156107ed575f80fd5b506107f661156f565b005b348015610803575f80fd5b5061080c6115f6565b604051610819919061468e565b60405180910390f35b34801561082d575f80fd5b506108486004803603810190610843919061486f565b611693565b005b348015610855575f80fd5b50610870600480360381019061086b91906146cf565b611767565b005b34801561087d575f80fd5b50610898600480360381019061089391906146cf565b61183a565b005b3480156108a5575f80fd5b506108c060048036038101906108bb91906146cf565b61192b565b005b3480156108cd575f80fd5b506108e860048036038101906108e391906148ad565b611a65565b005b3480156108f5575f80fd5b506108fe611b64565b005b34801561090b575f80fd5b50610914611c18565b604051610921919061477d565b60405180910390f35b348015610935575f80fd5b5061093e611c40565b60405161094b91906146b6565b60405180910390f35b34801561095f575f80fd5b5061097a600480360381019061097591906148fd565b611c46565b005b348015610987575f80fd5b50610990611cdf565b60405161099d9190614585565b60405180910390f35b3480156109b1575f80fd5b506109cc60048036038101906109c7919061486f565b611d6f565b005b3480156109d9575f80fd5b506109e2611e87565b6040516109ef91906146b6565b60405180910390f35b348015610a03575f80fd5b50610a1e6004803603810190610a199190614636565b611e8d565b604051610a2b919061468e565b60405180910390f35b348015610a3f575f80fd5b50610a5a6004803603810190610a559190614636565b611f73565b604051610a67919061468e565b60405180910390f35b348015610a7b575f80fd5b50610a966004803603810190610a9191906146cf565b611f90565b604051610aa3919061468e565b60405180910390f35b348015610ab7575f80fd5b50610ac0611fad565b604051610acd919061468e565b60405180910390f35b348015610ae1575f80fd5b50610afc6004803603810190610af79190614928565b611fc0565b005b348015610b09575f80fd5b50610b246004803603810190610b1f919061486f565b6121a6565b005b348015610b31575f80fd5b50610b4c6004803603810190610b4791906148ad565b6122c8565b005b348015610b59575f80fd5b50610b746004803603810190610b6f9190614796565b6123c7565b005b348015610b81575f80fd5b50610b8a6124d6565b604051610b9791906146b6565b60405180910390f35b348015610bab575f80fd5b50610bc66004803603810190610bc19190614796565b6124dc565b604051610bd3919061468e565b60405180910390f35b348015610be7575f80fd5b50610bf0612630565b604051610bfd91906146b6565b60405180910390f35b348015610c11575f80fd5b50610c1a612636565b604051610c2791906146b6565b60405180910390f35b348015610c3b575f80fd5b50610c566004803603810190610c519190614928565b61263c565b604051610c6391906146b6565b60405180910390f35b348015610c77575f80fd5b50610c926004803603810190610c8d91906146cf565b6126be565b005b348015610c9f575f80fd5b50610ca86128bd565b604051610cb591906146b6565b60405180910390f35b348015610cc9575f80fd5b50610cd26128c3565b604051610cdf91906146b6565b60405180910390f35b348015610cf3575f80fd5b50610d0e6004803603810190610d0991906146cf565b6128c9565b005b348015610d1b575f80fd5b50610d366004803603810190610d3191906146cf565b612a03565b005b348015610d43575f80fd5b50610d4c612af9565b604051610d5991906146b6565b60405180910390f35b348015610d6d575f80fd5b50610d76612aff565b604051610d8391906146b6565b60405180910390f35b348015610d97575f80fd5b50610db26004803603810190610dad91906146cf565b612b05565b005b348015610dbf575f80fd5b50610dc8612d04565b604051610dd591906146b6565b60405180910390f35b348015610de9575f80fd5b50610e046004803603810190610dff91906146cf565b612d0a565b604051610e11919061468e565b60405180910390f35b606060038054610e2990614993565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5590614993565b8015610ea05780601f10610e7757610100808354040283529160200191610ea0565b820191905f5260205f20905b815481529060010190602001808311610e8357829003601f168201915b5050505050905090565b5f610ebd610eb6612d5c565b8484612d63565b6001905092915050565b60125481565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b610f4a612d5c565b73ffffffffffffffffffffffffffffffffffffffff16610f68611c18565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590614a0d565b60405180910390fd5b670de0b6b3a76400006103e86005610fd4610f0e565b610fde9190614a58565b610fe89190614ac6565b610ff29190614ac6565b811015611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90614b66565b60405180910390fd5b670de0b6b3a7640000816110489190614a58565b60088190555050565b5f61105d848484612f26565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110a4612d5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111a90614bf4565b60405180910390fd5b6111378561112f612d5c565b858403612d63565b60019150509392505050565b61dead81565b5f6012905090565b5f6111ee61115d612d5c565b848460015f61116a612d5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111e99190614c12565b612d63565b6001905092915050565b600b60039054906101000a900460ff1681565b7f000000000000000000000000dbb8e6d9d10c751ad840f38cf37df10ccee2ed4281565b600b5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112c0612d5c565b73ffffffffffffffffffffffffffffffffffffffff166112de611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90614a0d565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161136e919061477d565b602060405180830381865afa158015611389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ad9190614c59565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016113ea929190614c84565b6020604051808303815f875af1158015611406573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142a9190614cbf565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561146e573d5f803e3d5ffd5b5050565b61147a612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611498611c18565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614a0d565b60405180910390fd5b6001600b60036101000a81548160ff021916908315150217905550565b60115481565b60155481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611577612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611595611c18565b73ffffffffffffffffffffffffffffffffffffffff16146115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e290614a0d565b60405180910390fd5b6115f45f613aca565b565b5f6115ff612d5c565b73ffffffffffffffffffffffffffffffffffffffff1661161d611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166a90614a0d565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b61169b612d5c565b73ffffffffffffffffffffffffffffffffffffffff166116b9611c18565b73ffffffffffffffffffffffffffffffffffffffff161461170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690614a0d565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b61176f612d5c565b73ffffffffffffffffffffffffffffffffffffffff1661178d611c18565b73ffffffffffffffffffffffffffffffffffffffff16146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90614a0d565b60405180910390fd5b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611842612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611860611c18565b73ffffffffffffffffffffffffffffffffffffffff16146118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90614a0d565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16476040516118db90614d17565b5f6040518083038185875af1925050503d805f8114611915576040519150601f19603f3d011682016040523d82523d5f602084013e61191a565b606091505b5050905080611927575f80fd5b5050565b611933612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611951611c18565b73ffffffffffffffffffffffffffffffffffffffff16146119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90614a0d565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611a6d612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611a8b611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad890614a0d565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611b099190614c12565b611b139190614c12565b600d819055506032600d541115611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5690614d75565b60405180910390fd5b505050565b611b6c612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611b8a611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611be0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd790614a0d565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b611c4e612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611c6c611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990614a0d565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611cee90614993565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1a90614993565b8015611d655780601f10611d3c57610100808354040283529160200191611d65565b820191905f5260205f20905b815481529060010190602001808311611d4857829003601f168201915b5050505050905090565b611d77612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611d95611c18565b73ffffffffffffffffffffffffffffffffffffffff1614611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de290614a0d565b60405180910390fd5b7f000000000000000000000000dbb8e6d9d10c751ad840f38cf37df10ccee2ed4273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7090614e03565b60405180910390fd5b611e838282613b8d565b5050565b60105481565b5f8060015f611e9a612d5c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4b90614e91565b60405180910390fd5b611f68611f5f612d5c565b85858403612d63565b600191505092915050565b5f611f86611f7f612d5c565b8484612f26565b6001905092915050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611fc8612d5c565b73ffffffffffffffffffffffffffffffffffffffff16611fe6611c18565b73ffffffffffffffffffffffffffffffffffffffff161461203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203390614a0d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a190614ef9565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120e4919061477d565b602060405180830381865afa1580156120ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121239190614c59565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612160929190614c84565b6020604051808303815f875af115801561217c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121a09190614cbf565b50505050565b6121ae612d5c565b73ffffffffffffffffffffffffffffffffffffffff166121cc611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990614a0d565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122bc919061468e565b60405180910390a25050565b6122d0612d5c565b73ffffffffffffffffffffffffffffffffffffffff166122ee611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233b90614a0d565b60405180910390fd5b82601281905550816013819055508060148190555060145460135460125461236c9190614c12565b6123769190614c12565b601181905550600560115411156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614f61565b60405180910390fd5b505050565b6123cf612d5c565b73ffffffffffffffffffffffffffffffffffffffff166123ed611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614a0d565b60405180910390fd5b670de0b6b3a76400006103e8600a612459610f0e565b6124639190614a58565b61246d9190614ac6565b6124779190614ac6565b8110156124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090614fef565b60405180910390fd5b670de0b6b3a7640000816124cd9190614a58565b600a8190555050565b60085481565b5f6124e5612d5c565b73ffffffffffffffffffffffffffffffffffffffff16612503611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255090614a0d565b60405180910390fd5b620186a06001612567610f0e565b6125719190614a58565b61257b9190614ac6565b8210156125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b49061507d565b60405180910390fd5b6103e860056125ca610f0e565b6125d49190614a58565b6125de9190614ac6565b821115612620576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126179061510b565b60405180910390fd5b8160098190555060019050919050565b60145481565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6126c6612d5c565b73ffffffffffffffffffffffffffffffffffffffff166126e4611c18565b73ffffffffffffffffffffffffffffffffffffffff161461273a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273190614a0d565b60405180910390fd5b600b60039054906101000a900460ff161561278a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278190615199565b60405180910390fd5b7f000000000000000000000000dbb8e6d9d10c751ad840f38cf37df10ccee2ed4273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128265750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285c90615227565b60405180910390fd5b6001600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60095481565b600f5481565b6128d1612d5c565b73ffffffffffffffffffffffffffffffffffffffff166128ef611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c90614a0d565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5dcb236e11a2357f4720113e64ae69451bb7bbf745535a1a75ba25ca46473e2d60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612a0b612d5c565b73ffffffffffffffffffffffffffffffffffffffff16612a29611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7690614a0d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae4906152b5565b60405180910390fd5b612af681613aca565b50565b60135481565b600a5481565b612b0d612d5c565b73ffffffffffffffffffffffffffffffffffffffff16612b2b611c18565b73ffffffffffffffffffffffffffffffffffffffff1614612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7890614a0d565b60405180910390fd5b600b60039054906101000a900460ff1615612bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc890615199565b60405180910390fd5b7f000000000000000000000000dbb8e6d9d10c751ad840f38cf37df10ccee2ed4273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612c6d5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca390615227565b60405180910390fd5b6001600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60175481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc890615343565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e36906153d1565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f1991906146b6565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b9061545f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff9906154ed565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561308c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308390615555565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310d906155bd565b60405180910390fd5b5f810361312d5761312883835f613c2b565b613ac5565b600b5f9054906101000a900460ff161561361157613149611c18565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131b75750613187611c18565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131ef57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613229575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132425750600560149054906101000a900460ff16155b1561361057600b60019054906101000a900460ff166133365760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132f6575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b613335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332c90615625565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156133d3575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561347a5760085481111561341d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613414906156b3565b60405180910390fd5b600a546134298361152a565b826134349190614c12565b1115613475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346c9061571b565b60405180910390fd5b61360f565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613517575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561356657600854811115613561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613558906157a9565b60405180910390fd5b61360e565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661360d57600a546135c08361152a565b826135cb9190614c12565b111561360c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136039061571b565b60405180910390fd5b5b5b5b5b5b5f61361b3061152a565b90505f600954821015905080801561363f5750600b60029054906101000a900460ff165b80156136585750600560149054906101000a900460ff16155b80156136ab5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156136fe575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613751575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613794576001600560146101000a81548160ff021916908315150217905550613779613ea0565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613843575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561384c575f90505b5f8115613ab557601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156138aa57505f601154115b15613974576138d760646138c9601154886141a190919063ffffffff16565b6141b690919063ffffffff16565b9050601154601354826138ea9190614a58565b6138f49190614ac6565b60165f8282546139049190614c12565b925050819055506011546014548261391c9190614a58565b6139269190614ac6565b60175f8282546139369190614c12565b925050819055506011546012548261394e9190614a58565b6139589190614ac6565b60155f8282546139689190614c12565b92505081905550613a92565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156139cb57505f600d54115b15613a91576139f860646139ea600d54886141a190919063ffffffff16565b6141b690919063ffffffff16565b9050600d54600f5482613a0b9190614a58565b613a159190614ac6565b60165f828254613a259190614c12565b92505081905550600d5460105482613a3d9190614a58565b613a479190614ac6565b60175f828254613a579190614c12565b92505081905550600d54600e5482613a6f9190614a58565b613a799190614ac6565b60155f828254613a899190614c12565b925050819055505b5b5f811115613aa657613aa5873083613c2b565b5b8085613ab291906157c7565b94505b613ac0878787613c2b565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c909061545f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cfe906154ed565b60405180910390fd5b613d128383836141cb565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8c9061586a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613e239190614c12565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e8791906146b6565b60405180910390a3613e9a8484846141d0565b50505050565b5f613eaa3061152a565b90505f601754601554601654613ec09190614c12565b613eca9190614c12565b90505f80831480613eda57505f82145b15613ee75750505061419f565b6014600954613ef69190614a58565b831115613f0f576014600954613f0c9190614a58565b92505b5f60028360165486613f219190614a58565b613f2b9190614ac6565b613f359190614ac6565b90505f613f4b82866141d590919063ffffffff16565b90505f479050613f5a826141ea565b5f613f6e82476141d590919063ffffffff16565b90505f613fb16002601654613f839190614ac6565b88613f8e91906157c7565b613fa3601554856141a190919063ffffffff16565b6141b690919063ffffffff16565b90505f613ff46002601654613fc69190614ac6565b89613fd191906157c7565b613fe6601754866141a190919063ffffffff16565b6141b690919063ffffffff16565b90505f81838561400491906157c7565b61400e91906157c7565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161406a90614d17565b5f6040518083038185875af1925050503d805f81146140a4576040519150601f19603f3d011682016040523d82523d5f602084013e6140a9565b606091505b5050809850505f871180156140bd57505f81115b1561410a576140cc878261441d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161410193929190615888565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161414f90614d17565b5f6040518083038185875af1925050503d805f8114614189576040519150601f19603f3d011682016040523d82523d5f602084013e61418e565b606091505b505080985050505050505050505050505b565b5f81836141ae9190614a58565b905092915050565b5f81836141c39190614ac6565b905092915050565b505050565b505050565b5f81836141e291906157c7565b905092915050565b5f600267ffffffffffffffff811115614206576142056158bd565b5b6040519080825280602002602001820160405280156142345781602001602082028036833780820191505090505b50905030815f8151811061424b5761424a6158ea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614312919061592b565b81600181518110614326576143256158ea565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061438b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612d63565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016143ec959493929190615a46565b5f604051808303815f87803b158015614403575f80fd5b505af1158015614415573d5f803e3d5ffd5b505050505050565b614448307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612d63565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80614491611c18565b426040518863ffffffff1660e01b81526004016144b396959493929190615a9e565b60606040518083038185885af11580156144cf573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906144f49190615afd565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614532578082015181840152602081019050614517565b5f8484015250505050565b5f601f19601f8301169050919050565b5f614557826144fb565b6145618185614505565b9350614571818560208601614515565b61457a8161453d565b840191505092915050565b5f6020820190508181035f83015261459d818461454d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6145d2826145a9565b9050919050565b6145e2816145c8565b81146145ec575f80fd5b50565b5f813590506145fd816145d9565b92915050565b5f819050919050565b61461581614603565b811461461f575f80fd5b50565b5f813590506146308161460c565b92915050565b5f806040838503121561464c5761464b6145a5565b5b5f614659858286016145ef565b925050602061466a85828601614622565b9150509250929050565b5f8115159050919050565b61468881614674565b82525050565b5f6020820190506146a15f83018461467f565b92915050565b6146b081614603565b82525050565b5f6020820190506146c95f8301846146a7565b92915050565b5f602082840312156146e4576146e36145a5565b5b5f6146f1848285016145ef565b91505092915050565b5f819050919050565b5f61471d614718614713846145a9565b6146fa565b6145a9565b9050919050565b5f61472e82614703565b9050919050565b5f61473f82614724565b9050919050565b61474f81614735565b82525050565b5f6020820190506147685f830184614746565b92915050565b614777816145c8565b82525050565b5f6020820190506147905f83018461476e565b92915050565b5f602082840312156147ab576147aa6145a5565b5b5f6147b884828501614622565b91505092915050565b5f805f606084860312156147d8576147d76145a5565b5b5f6147e5868287016145ef565b93505060206147f6868287016145ef565b925050604061480786828701614622565b9150509250925092565b5f60ff82169050919050565b61482681614811565b82525050565b5f60208201905061483f5f83018461481d565b92915050565b61484e81614674565b8114614858575f80fd5b50565b5f8135905061486981614845565b92915050565b5f8060408385031215614885576148846145a5565b5b5f614892858286016145ef565b92505060206148a38582860161485b565b9150509250929050565b5f805f606084860312156148c4576148c36145a5565b5b5f6148d186828701614622565b93505060206148e286828701614622565b92505060406148f386828701614622565b9150509250925092565b5f60208284031215614912576149116145a5565b5b5f61491f8482850161485b565b91505092915050565b5f806040838503121561493e5761493d6145a5565b5b5f61494b858286016145ef565b925050602061495c858286016145ef565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806149aa57607f821691505b6020821081036149bd576149bc614966565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6149f7602083614505565b9150614a02826149c3565b602082019050919050565b5f6020820190508181035f830152614a24816149eb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614a6282614603565b9150614a6d83614603565b9250828202614a7b81614603565b91508282048414831517614a9257614a91614a2b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614ad082614603565b9150614adb83614603565b925082614aeb57614aea614a99565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614b50602f83614505565b9150614b5b82614af6565b604082019050919050565b5f6020820190508181035f830152614b7d81614b44565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614bde602883614505565b9150614be982614b84565b604082019050919050565b5f6020820190508181035f830152614c0b81614bd2565b9050919050565b5f614c1c82614603565b9150614c2783614603565b9250828201905080821115614c3f57614c3e614a2b565b5b92915050565b5f81519050614c538161460c565b92915050565b5f60208284031215614c6e57614c6d6145a5565b5b5f614c7b84828501614c45565b91505092915050565b5f604082019050614c975f83018561476e565b614ca460208301846146a7565b9392505050565b5f81519050614cb981614845565b92915050565b5f60208284031215614cd457614cd36145a5565b5b5f614ce184828501614cab565b91505092915050565b5f81905092915050565b50565b5f614d025f83614cea565b9150614d0d82614cf4565b5f82019050919050565b5f614d2182614cf7565b9150819050919050565b7f4275792066656573206d757374206265203c3d2035302e0000000000000000005f82015250565b5f614d5f601783614505565b9150614d6a82614d2b565b602082019050919050565b5f6020820190508181035f830152614d8c81614d53565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614ded603983614505565b9150614df882614d93565b604082019050919050565b5f6020820190508181035f830152614e1a81614de1565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614e7b602583614505565b9150614e8682614e21565b604082019050919050565b5f6020820190508181035f830152614ea881614e6f565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f614ee3601a83614505565b9150614eee82614eaf565b602082019050919050565b5f6020820190508181035f830152614f1081614ed7565b9050919050565b7f53656c6c2066656573206d757374206265203c3d20352e0000000000000000005f82015250565b5f614f4b601783614505565b9150614f5682614f17565b602082019050919050565b5f6020820190508181035f830152614f7881614f3f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614fd9602483614505565b9150614fe482614f7f565b604082019050919050565b5f6020820190508181035f83015261500681614fcd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f615067603583614505565b91506150728261500d565b604082019050919050565b5f6020820190508181035f8301526150948161505b565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6150f5603483614505565b91506151008261509b565b604082019050919050565b5f6020820190508181035f830152615122816150e9565b9050919050565b7f5465616d20686173207265766f6b656420626c61636b6c6973742072696768745f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f615183602183614505565b915061518e82615129565b604082019050919050565b5f6020820190508181035f8301526151b081615177565b9050919050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f615211602e83614505565b915061521c826151b7565b604082019050919050565b5f6020820190508181035f83015261523e81615205565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61529f602683614505565b91506152aa82615245565b604082019050919050565b5f6020820190508181035f8301526152cc81615293565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61532d602483614505565b9150615338826152d3565b604082019050919050565b5f6020820190508181035f83015261535a81615321565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6153bb602283614505565b91506153c682615361565b604082019050919050565b5f6020820190508181035f8301526153e8816153af565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f615449602583614505565b9150615454826153ef565b604082019050919050565b5f6020820190508181035f8301526154768161543d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6154d7602383614505565b91506154e28261547d565b604082019050919050565b5f6020820190508181035f830152615504816154cb565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f61553f601283614505565b915061554a8261550b565b602082019050919050565b5f6020820190508181035f83015261556c81615533565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f6155a7601483614505565b91506155b282615573565b602082019050919050565b5f6020820190508181035f8301526155d48161559b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f61560f601683614505565b915061561a826155db565b602082019050919050565b5f6020820190508181035f83015261563c81615603565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61569d603583614505565b91506156a882615643565b604082019050919050565b5f6020820190508181035f8301526156ca81615691565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f615705601383614505565b9150615710826156d1565b602082019050919050565b5f6020820190508181035f830152615732816156f9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615793603683614505565b915061579e82615739565b604082019050919050565b5f6020820190508181035f8301526157c081615787565b9050919050565b5f6157d182614603565b91506157dc83614603565b92508282039050818111156157f4576157f3614a2b565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615854602683614505565b915061585f826157fa565b604082019050919050565b5f6020820190508181035f83015261588181615848565b9050919050565b5f60608201905061589b5f8301866146a7565b6158a860208301856146a7565b6158b560408301846146a7565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050615925816145d9565b92915050565b5f602082840312156159405761593f6145a5565b5b5f61594d84828501615917565b91505092915050565b5f819050919050565b5f61597961597461596f84615956565b6146fa565b614603565b9050919050565b6159898161595f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6159c1816145c8565b82525050565b5f6159d283836159b8565b60208301905092915050565b5f602082019050919050565b5f6159f48261598f565b6159fe8185615999565b9350615a09836159a9565b805f5b83811015615a39578151615a2088826159c7565b9750615a2b836159de565b925050600181019050615a0c565b5085935050505092915050565b5f60a082019050615a595f8301886146a7565b615a666020830187615980565b8181036040830152615a7881866159ea565b9050615a87606083018561476e565b615a9460808301846146a7565b9695505050505050565b5f60c082019050615ab15f83018961476e565b615abe60208301886146a7565b615acb6040830187615980565b615ad86060830186615980565b615ae5608083018561476e565b615af260a08301846146a7565b979650505050505050565b5f805f60608486031215615b1457615b136145a5565b5b5f615b2186828701614c45565b9350506020615b3286828701614c45565b9250506040615b4386828701614c45565b915050925092509256fea26469706673582212203b48f751cab73f4fdde5b50b59b0460f3fc9143be434d7f361e6742c7738aeea64736f6c63430008140033

Deployed Bytecode Sourcemap

35821:17344:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13780:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15947:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36714:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37074:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35897:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14900:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36092:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36857:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41178:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16598:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36000:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14742:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17499:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36394:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35955;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36274:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43946:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36125:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51142:257;;;;;;;;;;;;;:::i;:::-;;51953:90;;;;;;;;;;;;;:::i;:::-;;36679:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36821:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36354:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15071:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7297:103;;;;;;;;;;;;;:::i;:::-;;40482:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41726:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53064:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51703:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43777:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42097:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40310:120;;;;;;;;;;;;;:::i;:::-;;6646:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36575:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41989:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13999:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43081:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36645:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18217:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15411:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37295:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36314:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51407:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42891:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42490:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41461:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36159:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40673:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36786:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36541:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15649:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52528:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36201:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36608:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43589:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7555:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36748:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36241:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52051:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36897:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44080:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13780:100;13834:13;13867:5;13860:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13780:100;:::o;15947:169::-;16030:4;16047:39;16056:12;:10;:12::i;:::-;16070:7;16079:6;16047:8;:39::i;:::-;16104:4;16097:11;;15947:169;;;;:::o;36714:27::-;;;;:::o;37074:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;35897:51::-;;;:::o;14900:108::-;14961:7;14988:12;;14981:19;;14900:108;:::o;36092:26::-;;;;;;;;;;;;;:::o;36857:33::-;;;;:::o;41178:275::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41315:4:::1;41307;41302:1;41286:13;:11;:13::i;:::-;:17;;;;:::i;:::-;41285:26;;;;:::i;:::-;41284:35;;;;:::i;:::-;41274:6;:45;;41252:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;41438:6;41428;:17;;;;:::i;:::-;41405:20;:40;;;;41178:275:::0;:::o;16598:492::-;16738:4;16755:36;16765:6;16773:9;16784:6;16755:9;:36::i;:::-;16804:24;16831:11;:19;16843:6;16831:19;;;;;;;;;;;;;;;:33;16851:12;:10;:12::i;:::-;16831:33;;;;;;;;;;;;;;;;16804:60;;16903:6;16883:16;:26;;16875:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16990:57;16999:6;17007:12;:10;:12::i;:::-;17040:6;17021:16;:25;16990:8;:57::i;:::-;17078:4;17071:11;;;16598:492;;;;;:::o;36000:53::-;36046:6;36000:53;:::o;14742:93::-;14800:5;14825:2;14818:9;;14742:93;:::o;17499:215::-;17587:4;17604:80;17613:12;:10;:12::i;:::-;17627:7;17673:10;17636:11;:25;17648:12;:10;:12::i;:::-;17636:25;;;;;;;;;;;;;;;:34;17662:7;17636:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;17604:8;:80::i;:::-;17702:4;17695:11;;17499:215;;;;:::o;36394:38::-;;;;;;;;;;;;;:::o;35955:::-;;;:::o;36274:33::-;;;;;;;;;;;;;:::o;43946:126::-;44012:4;44036:19;:28;44056:7;44036:28;;;;;;;;;;;;;;;;;;;;;;;;;44029:35;;43946:126;;;:::o;36125:25::-;;;;;;;;;;;;;:::o;51142:257::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51203:15:::1;51236:4;51221:31;;;51261:4;51221:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51203:64;;51293:4;51278:30;;;51309:10;51321:7;51278:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51348:10;51340:28;;:51;51369:21;51340:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51192:207;51142:257::o:0;51953:90::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52031:4:::1;52010:18;;:25;;;;;;;;;;;;;;;;;;51953:90::o:0;36679:28::-;;;;:::o;36821:29::-;;;;:::o;36354:31::-;;;;;;;;;;;;;:::o;15071:127::-;15145:7;15172:9;:18;15182:7;15172:18;;;;;;;;;;;;;;;;15165:25;;15071:127;;;:::o;7297:103::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7362:30:::1;7389:1;7362:18;:30::i;:::-;7297:103::o:0;40482:121::-;40534:4;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40568:5:::1;40551:14;;:22;;;;;;;;;;;;;;;;;;40591:4;40584:11;;40482:121:::0;:::o;41726:167::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41881:4:::1;41839:31;:39;41871:6;41839:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41726:167:::0;;:::o;53064:98::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53149:5:::1;53128:11;:18;53140:5;53128:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;53064:98:::0;:::o;51703:196::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51776:12:::1;51794:6;:11;;51827:21;51794:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51775:89;;;51883:7;51875:16;;;::::0;::::1;;51764:135;51703:196:::0;:::o;43777:161::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43886:10:::1;;;;;;;;;;;43857:40;;43875:9;43857:40;;;;;;;;;;;;43921:9;43908:10;;:22;;;;;;;;;;;;;;;;;;43777:161:::0;:::o;42097:385::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42258:9:::1;42244:11;:23;;;;42296:13;42278:15;:31;;;;42333:8;42320:10;:21;;;;42399:10;;42381:15;;42367:11;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;42352:12;:57;;;;42444:2;42428:12;;:18;;42420:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;42097:385:::0;;;:::o;40310:120::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40381:4:::1;40365:13;;:20;;;;;;;;;;;;;;;;;;40410:4;40396:11;;:18;;;;;;;;;;;;;;;;;;40310:120::o:0;6646:87::-;6692:7;6719:6;;;;;;;;;;;6712:13;;6646:87;:::o;36575:26::-;;;;:::o;41989:100::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42074:7:::1;42060:11;;:21;;;;;;;;;;;;;;;;;;41989:100:::0;:::o;13999:104::-;14055:13;14088:7;14081:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13999:104;:::o;43081:304::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43225:13:::1;43217:21;;:4;:21;;::::0;43195:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43336:41;43365:4;43371:5;43336:28;:41::i;:::-;43081:304:::0;;:::o;36645:25::-;;;;:::o;18217:413::-;18310:4;18327:24;18354:11;:25;18366:12;:10;:12::i;:::-;18354:25;;;;;;;;;;;;;;;:34;18380:7;18354:34;;;;;;;;;;;;;;;;18327:61;;18427:15;18407:16;:35;;18399:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18520:67;18529:12;:10;:12::i;:::-;18543:7;18571:15;18552:16;:34;18520:8;:67::i;:::-;18618:4;18611:11;;;18217:413;;;;:::o;15411:175::-;15497:4;15514:42;15524:12;:10;:12::i;:::-;15538:9;15549:6;15514:9;:42::i;:::-;15574:4;15567:11;;15411:175;;;;:::o;37295:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;36314:33::-;;;;;;;;;;;;;:::o;51407:288::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51520:1:::1;51502:20;;:6;:20;;::::0;51494:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;51564:24;51598:6;51591:24;;;51624:4;51591:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51564:66;;51648:6;51641:23;;;51665:3;51670:16;51641:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;51483:212;51407:288:::0;;:::o;42891:182::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43007:8:::1;42976:19;:28;42996:7;42976:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43047:7;43031:34;;;43056:8;43031:34;;;;;;:::i;:::-;;;;;;;;42891:182:::0;;:::o;42490:393::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42653:9:::1;42638:12;:24;;;;42692:13;42673:16;:32;;;;42730:8;42716:11;:22;;;;42799:11;;42780:16;;42765:12;;:31;;;;:::i;:::-;:45;;;;:::i;:::-;42749:13;:61;;;;42846:1;42829:13;;:18;;42821:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;42490:393:::0;;;:::o;41461:257::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41602:4:::1;41594;41588:2;41572:13;:11;:13::i;:::-;:18;;;;:::i;:::-;41571:27;;;;:::i;:::-;41570:36;;;;:::i;:::-;41560:6;:46;;41538:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;41703:6;41693;:17;;;;:::i;:::-;41681:9;:29;;;;41461:257:::0;:::o;36159:35::-;;;;:::o;40673:497::-;40781:4;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40860:6:::1;40855:1;40839:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40838:28;;;;:::i;:::-;40825:9;:41;;40803:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;41015:4;41010:1;40994:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40993:26;;;;:::i;:::-;40980:9;:39;;40958:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;41131:9;41110:18;:30;;;;41158:4;41151:11;;40673:497:::0;;;:::o;36786:26::-;;;;:::o;36541:27::-;;;;:::o;15649:151::-;15738:7;15765:11;:18;15777:5;15765:18;;;;;;;;;;;;;;;:27;15784:7;15765:27;;;;;;;;;;;;;;;;15758:34;;15649:151;;;;:::o;52528:403::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52616:18:::1;;;;;;;;;;;52615:19;52607:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;52726:13;52705:35;;:9;:35;;;;:103;;;;;52765:42;52744:64;;:9;:64;;;;52705:103;52683:200;;;;;;;;;;;;:::i;:::-;;;;;;;;;52919:4;52894:11;:22;52906:9;52894:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;52528:403:::0;:::o;36201:33::-;;;;:::o;36608:30::-;;;;:::o;43589:180::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43710:11:::1;;;;;;;;;;;43675:47;;43694:14;43675:47;;;;;;;;;;;;43747:14;43733:11;;:28;;;;;;;;;;;;;;;;;;43589:180:::0;:::o;7555:201::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7664:1:::1;7644:22;;:8;:22;;::::0;7636:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7720:28;7739:8;7720:18;:28::i;:::-;7555:201:::0;:::o;36748:31::-;;;;:::o;36241:24::-;;;;:::o;52051:374::-;6877:12;:10;:12::i;:::-;6866:23;;:7;:5;:7::i;:::-;:23;;;6858:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52122:18:::1;;;;;;;;;;;52121:19;52113:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;52228:13;52211:31;;:5;:31;;;;:95;;;;;52263:42;52246:60;;:5;:60;;;;52211:95;52189:192;;;;;;;;;;;;:::i;:::-;;;;;;;;;52413:4;52392:11;:18;52404:5;52392:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;52051:374:::0;:::o;36897:28::-;;;;:::o;44080:113::-;44141:4;44165:11;:20;44177:7;44165:20;;;;;;;;;;;;;;;;;;;;;;;;;44158:27;;44080:113;;;:::o;5513:98::-;5566:7;5593:10;5586:17;;5513:98;:::o;21901:380::-;22054:1;22037:19;;:5;:19;;;22029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22135:1;22116:21;;:7;:21;;;22108:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22219:6;22189:11;:18;22201:5;22189:18;;;;;;;;;;;;;;;:27;22208:7;22189:27;;;;;;;;;;;;;;;:36;;;;22257:7;22241:32;;22250:5;22241:32;;;22266:6;22241:32;;;;;;:::i;:::-;;;;;;;;21901:380;;;:::o;44201:4052::-;44349:1;44333:18;;:4;:18;;;44325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44426:1;44412:16;;:2;:16;;;44404:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44488:11;:17;44500:4;44488:17;;;;;;;;;;;;;;;;;;;;;;;;;44487:18;44479:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44547:11;:15;44559:2;44547:15;;;;;;;;;;;;;;;;;;;;;;;;;44546:16;44538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44635:1;44625:6;:11;44621:93;;44653:28;44669:4;44675:2;44679:1;44653:15;:28::i;:::-;44696:7;;44621:93;44730:14;;;;;;;;;;;44726:1694;;;44791:7;:5;:7::i;:::-;44783:15;;:4;:15;;;;:49;;;;;44825:7;:5;:7::i;:::-;44819:13;;:2;:13;;;;44783:49;:86;;;;;44867:1;44853:16;;:2;:16;;;;44783:86;:128;;;;;44904:6;44890:21;;:2;:21;;;;44783:128;:158;;;;;44933:8;;;;;;;;;;;44932:9;44783:158;44761:1648;;;44981:13;;;;;;;;;;;44976:223;;45053:19;:25;45073:4;45053:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;45082:19;:23;45102:2;45082:23;;;;;;;;;;;;;;;;;;;;;;;;;45053:52;45019:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;44976:223;45273:25;:31;45299:4;45273:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;45330:31;:35;45362:2;45330:35;;;;;;;;;;;;;;;;;;;;;;;;;45329:36;45273:92;45247:1147;;;45452:20;;45442:6;:30;;45408:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;45660:9;;45643:13;45653:2;45643:9;:13::i;:::-;45634:6;:22;;;;:::i;:::-;:35;;45600:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45247:1147;;;45838:25;:29;45864:2;45838:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;45893:31;:37;45925:4;45893:37;;;;;;;;;;;;;;;;;;;;;;;;;45892:38;45838:92;45812:582;;;46017:20;;46007:6;:30;;45973:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;45812:582;;;46174:31;:35;46206:2;46174:35;;;;;;;;;;;;;;;;;;;;;;;;;46169:225;;46294:9;;46277:13;46287:2;46277:9;:13::i;:::-;46268:6;:22;;;;:::i;:::-;:35;;46234:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;46169:225;45812:582;45247:1147;44761:1648;44726:1694;46432:28;46463:24;46481:4;46463:9;:24::i;:::-;46432:55;;46500:12;46539:18;;46515:20;:42;;46500:57;;46588:7;:35;;;;;46612:11;;;;;;;;;;;46588:35;:61;;;;;46641:8;;;;;;;;;;;46640:9;46588:61;:110;;;;;46667:25;:31;46693:4;46667:31;;;;;;;;;;;;;;;;;;;;;;;;;46666:32;46588:110;:153;;;;;46716:19;:25;46736:4;46716:25;;;;;;;;;;;;;;;;;;;;;;;;;46715:26;46588:153;:194;;;;;46759:19;:23;46779:2;46759:23;;;;;;;;;;;;;;;;;;;;;;;;;46758:24;46588:194;46570:326;;;46820:4;46809:8;;:15;;;;;;;;;;;;;;;;;;46841:10;:8;:10::i;:::-;46879:5;46868:8;;:16;;;;;;;;;;;;;;;;;;46570:326;46908:12;46924:8;;;;;;;;;;;46923:9;46908:24;;47034:19;:25;47054:4;47034:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;47063:19;:23;47083:2;47063:23;;;;;;;;;;;;;;;;;;;;;;;;;47034:52;47030:100;;;47113:5;47103:15;;47030:100;47142:12;47247:7;47243:957;;;47299:25;:29;47325:2;47299:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;47348:1;47332:13;;:17;47299:50;47295:756;;;47377:34;47407:3;47377:25;47388:13;;47377:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;47370:41;;47480:13;;47460:16;;47453:4;:23;;;;:::i;:::-;47452:41;;;;:::i;:::-;47430:18;;:63;;;;;;;:::i;:::-;;;;;;;;47552:13;;47537:11;;47530:4;:18;;;;:::i;:::-;47529:36;;;;:::i;:::-;47512:13;;:53;;;;;;;:::i;:::-;;;;;;;;47626:13;;47610:12;;47603:4;:19;;;;:::i;:::-;47602:37;;;;:::i;:::-;47584:14;;:55;;;;;;;:::i;:::-;;;;;;;;47295:756;;;47701:25;:31;47727:4;47701:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;47751:1;47736:12;;:16;47701:51;47697:354;;;47780:33;47809:3;47780:24;47791:12;;47780:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;47773:40;;47881:12;;47862:15;;47855:4;:22;;;;:::i;:::-;47854:39;;;;:::i;:::-;47832:18;;:61;;;;;;;:::i;:::-;;;;;;;;47951:12;;47937:10;;47930:4;:17;;;;:::i;:::-;47929:34;;;;:::i;:::-;47912:13;;:51;;;;;;;:::i;:::-;;;;;;;;48023:12;;48008:11;;48001:4;:18;;;;:::i;:::-;48000:35;;;;:::i;:::-;47982:14;;:53;;;;;;;:::i;:::-;;;;;;;;47697:354;47295:756;48078:1;48071:4;:8;48067:91;;;48100:42;48116:4;48130;48137;48100:15;:42::i;:::-;48067:91;48184:4;48174:14;;;;;:::i;:::-;;;47243:957;48212:33;48228:4;48234:2;48238:6;48212:15;:33::i;:::-;44314:3939;;;;44201:4052;;;;:::o;7916:191::-;7990:16;8009:6;;;;;;;;;;;7990:25;;8035:8;8026:6;;:17;;;;;;;;;;;;;;;;;;8090:8;8059:40;;8080:8;8059:40;;;;;;;;;;;;7979:128;7916:191;:::o;43393:188::-;43510:5;43476:25;:31;43502:4;43476:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43567:5;43533:40;;43561:4;43533:40;;;;;;;;;;;;43393:188;;:::o;19120:733::-;19278:1;19260:20;;:6;:20;;;19252:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;19362:1;19341:23;;:9;:23;;;19333:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19417:47;19438:6;19446:9;19457:6;19417:20;:47::i;:::-;19477:21;19501:9;:17;19511:6;19501:17;;;;;;;;;;;;;;;;19477:41;;19554:6;19537:13;:23;;19529:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;19675:6;19659:13;:22;19639:9;:17;19649:6;19639:17;;;;;;;;;;;;;;;:42;;;;19727:6;19703:9;:20;19713:9;19703:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;19768:9;19751:35;;19760:6;19751:35;;;19779:6;19751:35;;;;;;:::i;:::-;;;;;;;;19799:46;19819:6;19827:9;19838:6;19799:19;:46::i;:::-;19241:612;19120:733;;;:::o;49379:1755::-;49418:23;49444:24;49462:4;49444:9;:24::i;:::-;49418:50;;49479:25;49571:13;;49541:14;;49507:18;;:48;;;;:::i;:::-;:77;;;;:::i;:::-;49479:105;;49595:12;49643:1;49624:15;:20;:46;;;;49669:1;49648:17;:22;49624:46;49620:85;;;49687:7;;;;;49620:85;49760:2;49739:18;;:23;;;;:::i;:::-;49721:15;:41;49717:115;;;49818:2;49797:18;;:23;;;;:::i;:::-;49779:41;;49717:115;49893:23;50006:1;49973:17;49938:18;;49920:15;:36;;;;:::i;:::-;49919:71;;;;:::i;:::-;:88;;;;:::i;:::-;49893:114;;50018:26;50047:36;50067:15;50047;:19;;:36;;;;:::i;:::-;50018:65;;50096:25;50124:21;50096:49;;50158:36;50175:18;50158:16;:36::i;:::-;50207:18;50228:44;50254:17;50228:21;:25;;:44;;;;:::i;:::-;50207:65;;50285:19;50307:80;50384:1;50363:18;;:22;;;;:::i;:::-;50342:17;:44;;;;:::i;:::-;50307:30;50322:14;;50307:10;:14;;:30;;;;:::i;:::-;:34;;:80;;;;:::i;:::-;50285:102;;50408:18;50429:79;50505:1;50484:18;;:22;;;;:::i;:::-;50463:17;:44;;;;:::i;:::-;50429:29;50444:13;;50429:10;:14;;:29;;;;:::i;:::-;:33;;:79;;;;:::i;:::-;50408:100;;50521:23;50574:10;50560:11;50547:10;:24;;;;:::i;:::-;:37;;;;:::i;:::-;50521:63;;50618:1;50597:18;:22;;;;50647:1;50630:14;:18;;;;50675:1;50659:13;:17;;;;50711:10;;;;;;;;;;;50703:24;;50735:10;50703:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50689:61;;;;;50785:1;50767:15;:19;:42;;;;;50808:1;50790:15;:19;50767:42;50763:278;;;50826:46;50839:15;50856;50826:12;:46::i;:::-;50892:137;50925:18;50962:15;50996:18;;50892:137;;;;;;;;:::i;:::-;;;;;;;;50763:278;51075:11;;;;;;;;;;;51067:25;;51100:21;51067:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51053:73;;;;;49407:1727;;;;;;;;;;49379:1755;:::o;27033:98::-;27091:7;27122:1;27118;:5;;;;:::i;:::-;27111:12;;27033:98;;;;:::o;27432:::-;27490:7;27521:1;27517;:5;;;;:::i;:::-;27510:12;;27432:98;;;;:::o;22881:125::-;;;;:::o;23610:124::-;;;;:::o;26676:98::-;26734:7;26765:1;26761;:5;;;;:::i;:::-;26754:12;;26676:98;;;;:::o;48261:589::-;48387:21;48425:1;48411:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48387:40;;48456:4;48438;48443:1;48438:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48482:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48472:4;48477:1;48472:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48517:62;48534:4;48549:15;48567:11;48517:8;:62::i;:::-;48618:15;:66;;;48699:11;48725:1;48769:4;48796;48816:15;48618:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48316:534;48261:589;:::o;48858:513::-;49006:62;49023:4;49038:15;49056:11;49006:8;:62::i;:::-;49111:15;:31;;;49150:9;49183:4;49203:11;49229:1;49272;49315:7;:5;:7::i;:::-;49337:15;49111:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48858:513;;:::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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:118::-;5198:24;5216:5;5198:24;:::i;:::-;5193:3;5186:37;5111:118;;:::o;5235:222::-;5328:4;5366:2;5355:9;5351:18;5343:26;;5379:71;5447:1;5436:9;5432:17;5423:6;5379:71;:::i;:::-;5235:222;;;;:::o;5463:329::-;5522:6;5571:2;5559:9;5550:7;5546:23;5542:32;5539:119;;;5577:79;;:::i;:::-;5539:119;5697:1;5722:53;5767:7;5758:6;5747:9;5743:22;5722:53;:::i;:::-;5712:63;;5668:117;5463:329;;;;:::o;5798:619::-;5875:6;5883;5891;5940:2;5928:9;5919:7;5915:23;5911:32;5908:119;;;5946:79;;:::i;:::-;5908:119;6066:1;6091:53;6136:7;6127:6;6116:9;6112:22;6091:53;:::i;:::-;6081:63;;6037:117;6193:2;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6164:118;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;5798:619;;;;;:::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:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:227::-;12675:34;12671:1;12663:6;12659:14;12652:58;12744:10;12739:2;12731:6;12727:15;12720:35;12535:227;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:143::-;13819:5;13850:6;13844:13;13835:22;;13866:33;13893:5;13866:33;:::i;:::-;13762:143;;;;:::o;13911:351::-;13981:6;14030:2;14018:9;14009:7;14005:23;14001:32;13998:119;;;14036:79;;:::i;:::-;13998:119;14156:1;14181:64;14237:7;14228:6;14217:9;14213:22;14181:64;:::i;:::-;14171:74;;14127:128;13911:351;;;;:::o;14268:332::-;14389:4;14427:2;14416:9;14412:18;14404:26;;14440:71;14508:1;14497:9;14493:17;14484:6;14440:71;:::i;:::-;14521:72;14589:2;14578:9;14574:18;14565:6;14521:72;:::i;:::-;14268:332;;;;;:::o;14606:137::-;14660:5;14691:6;14685:13;14676:22;;14707:30;14731:5;14707:30;:::i;:::-;14606:137;;;;:::o;14749:345::-;14816:6;14865:2;14853:9;14844:7;14840:23;14836:32;14833:119;;;14871:79;;:::i;:::-;14833:119;14991:1;15016:61;15069:7;15060:6;15049:9;15045:22;15016:61;:::i;:::-;15006:71;;14962:125;14749:345;;;;:::o;15100:147::-;15201:11;15238:3;15223:18;;15100:147;;;;:::o;15253:114::-;;:::o;15373:398::-;15532:3;15553:83;15634:1;15629:3;15553:83;:::i;:::-;15546:90;;15645:93;15734:3;15645:93;:::i;:::-;15763:1;15758:3;15754:11;15747:18;;15373:398;;;:::o;15777:379::-;15961:3;15983:147;16126:3;15983:147;:::i;:::-;15976:154;;16147:3;16140:10;;15777:379;;;:::o;16162:173::-;16302:25;16298:1;16290:6;16286:14;16279:49;16162:173;:::o;16341:366::-;16483:3;16504:67;16568:2;16563:3;16504:67;:::i;:::-;16497:74;;16580:93;16669:3;16580:93;:::i;:::-;16698:2;16693:3;16689:12;16682:19;;16341:366;;;:::o;16713:419::-;16879:4;16917:2;16906:9;16902:18;16894:26;;16966:9;16960:4;16956:20;16952:1;16941:9;16937:17;16930:47;16994:131;17120:4;16994:131;:::i;:::-;16986:139;;16713:419;;;:::o;17138:244::-;17278:34;17274:1;17266:6;17262:14;17255:58;17347:27;17342:2;17334:6;17330:15;17323:52;17138:244;:::o;17388:366::-;17530:3;17551:67;17615:2;17610:3;17551:67;:::i;:::-;17544:74;;17627:93;17716:3;17627:93;:::i;:::-;17745:2;17740:3;17736:12;17729:19;;17388:366;;;:::o;17760:419::-;17926:4;17964:2;17953:9;17949:18;17941:26;;18013:9;18007:4;18003:20;17999:1;17988:9;17984:17;17977:47;18041:131;18167:4;18041:131;:::i;:::-;18033:139;;17760:419;;;:::o;18185:224::-;18325:34;18321:1;18313:6;18309:14;18302:58;18394:7;18389:2;18381:6;18377:15;18370:32;18185:224;:::o;18415:366::-;18557:3;18578:67;18642:2;18637:3;18578:67;:::i;:::-;18571:74;;18654:93;18743:3;18654:93;:::i;:::-;18772:2;18767:3;18763:12;18756:19;;18415:366;;;:::o;18787:419::-;18953:4;18991:2;18980:9;18976:18;18968:26;;19040:9;19034:4;19030:20;19026:1;19015:9;19011:17;19004:47;19068:131;19194:4;19068:131;:::i;:::-;19060:139;;18787:419;;;:::o;19212:176::-;19352:28;19348:1;19340:6;19336:14;19329:52;19212:176;:::o;19394:366::-;19536:3;19557:67;19621:2;19616:3;19557:67;:::i;:::-;19550:74;;19633:93;19722:3;19633:93;:::i;:::-;19751:2;19746:3;19742:12;19735:19;;19394:366;;;:::o;19766:419::-;19932:4;19970:2;19959:9;19955:18;19947:26;;20019:9;20013:4;20009:20;20005:1;19994:9;19990:17;19983:47;20047:131;20173:4;20047:131;:::i;:::-;20039:139;;19766:419;;;:::o;20191:173::-;20331:25;20327:1;20319:6;20315:14;20308:49;20191:173;:::o;20370:366::-;20512:3;20533:67;20597:2;20592:3;20533:67;:::i;:::-;20526:74;;20609:93;20698:3;20609:93;:::i;:::-;20727:2;20722:3;20718:12;20711:19;;20370:366;;;:::o;20742:419::-;20908:4;20946:2;20935:9;20931:18;20923:26;;20995:9;20989:4;20985:20;20981:1;20970:9;20966:17;20959:47;21023:131;21149:4;21023:131;:::i;:::-;21015:139;;20742:419;;;:::o;21167:223::-;21307:34;21303:1;21295:6;21291:14;21284:58;21376:6;21371:2;21363:6;21359:15;21352:31;21167:223;:::o;21396:366::-;21538:3;21559:67;21623:2;21618:3;21559:67;:::i;:::-;21552:74;;21635:93;21724:3;21635:93;:::i;:::-;21753:2;21748:3;21744:12;21737:19;;21396:366;;;:::o;21768:419::-;21934:4;21972:2;21961:9;21957:18;21949:26;;22021:9;22015:4;22011:20;22007:1;21996:9;21992:17;21985:47;22049:131;22175:4;22049:131;:::i;:::-;22041:139;;21768:419;;;:::o;22193:240::-;22333:34;22329:1;22321:6;22317:14;22310:58;22402:23;22397:2;22389:6;22385:15;22378:48;22193:240;:::o;22439:366::-;22581:3;22602:67;22666:2;22661:3;22602:67;:::i;:::-;22595:74;;22678:93;22767:3;22678:93;:::i;:::-;22796:2;22791:3;22787:12;22780:19;;22439:366;;;:::o;22811:419::-;22977:4;23015:2;23004:9;23000:18;22992:26;;23064:9;23058:4;23054:20;23050:1;23039:9;23035:17;23028:47;23092:131;23218:4;23092:131;:::i;:::-;23084:139;;22811:419;;;:::o;23236:239::-;23376:34;23372:1;23364:6;23360:14;23353:58;23445:22;23440:2;23432:6;23428:15;23421:47;23236:239;:::o;23481:366::-;23623:3;23644:67;23708:2;23703:3;23644:67;:::i;:::-;23637:74;;23720:93;23809:3;23720:93;:::i;:::-;23838:2;23833:3;23829:12;23822:19;;23481:366;;;:::o;23853:419::-;24019:4;24057:2;24046:9;24042:18;24034:26;;24106:9;24100:4;24096:20;24092:1;24081:9;24077:17;24070:47;24134:131;24260:4;24134:131;:::i;:::-;24126:139;;23853:419;;;:::o;24278:220::-;24418:34;24414:1;24406:6;24402:14;24395:58;24487:3;24482:2;24474:6;24470:15;24463:28;24278:220;:::o;24504:366::-;24646:3;24667:67;24731:2;24726:3;24667:67;:::i;:::-;24660:74;;24743:93;24832:3;24743:93;:::i;:::-;24861:2;24856:3;24852:12;24845:19;;24504:366;;;:::o;24876:419::-;25042:4;25080:2;25069:9;25065:18;25057:26;;25129:9;25123:4;25119:20;25115:1;25104:9;25100:17;25093:47;25157:131;25283:4;25157:131;:::i;:::-;25149:139;;24876:419;;;:::o;25301:233::-;25441:34;25437:1;25429:6;25425:14;25418:58;25510:16;25505:2;25497:6;25493:15;25486:41;25301:233;:::o;25540:366::-;25682:3;25703:67;25767:2;25762:3;25703:67;:::i;:::-;25696:74;;25779:93;25868:3;25779:93;:::i;:::-;25897:2;25892:3;25888:12;25881:19;;25540:366;;;:::o;25912:419::-;26078:4;26116:2;26105:9;26101:18;26093:26;;26165:9;26159:4;26155:20;26151:1;26140:9;26136:17;26129:47;26193:131;26319:4;26193:131;:::i;:::-;26185:139;;25912:419;;;:::o;26337:225::-;26477:34;26473:1;26465:6;26461:14;26454:58;26546:8;26541:2;26533:6;26529:15;26522:33;26337:225;:::o;26568:366::-;26710:3;26731:67;26795:2;26790:3;26731:67;:::i;:::-;26724:74;;26807:93;26896:3;26807:93;:::i;:::-;26925:2;26920:3;26916:12;26909:19;;26568:366;;;:::o;26940:419::-;27106:4;27144:2;27133:9;27129:18;27121:26;;27193:9;27187:4;27183:20;27179:1;27168:9;27164:17;27157:47;27221:131;27347:4;27221:131;:::i;:::-;27213:139;;26940:419;;;:::o;27365:223::-;27505:34;27501:1;27493:6;27489:14;27482:58;27574:6;27569:2;27561:6;27557:15;27550:31;27365:223;:::o;27594:366::-;27736:3;27757:67;27821:2;27816:3;27757:67;:::i;:::-;27750:74;;27833:93;27922:3;27833:93;:::i;:::-;27951:2;27946:3;27942:12;27935:19;;27594:366;;;:::o;27966:419::-;28132:4;28170:2;28159:9;28155:18;28147:26;;28219:9;28213:4;28209:20;28205:1;28194:9;28190:17;28183:47;28247:131;28373:4;28247:131;:::i;:::-;28239:139;;27966:419;;;:::o;28391:221::-;28531:34;28527:1;28519:6;28515:14;28508:58;28600:4;28595:2;28587:6;28583:15;28576:29;28391:221;:::o;28618:366::-;28760:3;28781:67;28845:2;28840:3;28781:67;:::i;:::-;28774:74;;28857:93;28946:3;28857:93;:::i;:::-;28975:2;28970:3;28966:12;28959:19;;28618:366;;;:::o;28990:419::-;29156:4;29194:2;29183:9;29179:18;29171:26;;29243:9;29237:4;29233:20;29229:1;29218:9;29214:17;29207:47;29271:131;29397:4;29271:131;:::i;:::-;29263:139;;28990:419;;;:::o;29415:224::-;29555:34;29551:1;29543:6;29539:14;29532:58;29624:7;29619:2;29611:6;29607:15;29600:32;29415:224;:::o;29645:366::-;29787:3;29808:67;29872:2;29867:3;29808:67;:::i;:::-;29801:74;;29884:93;29973:3;29884:93;:::i;:::-;30002:2;29997:3;29993:12;29986:19;;29645:366;;;:::o;30017:419::-;30183:4;30221:2;30210:9;30206:18;30198:26;;30270:9;30264:4;30260:20;30256:1;30245:9;30241:17;30234:47;30298:131;30424:4;30298:131;:::i;:::-;30290:139;;30017:419;;;:::o;30442:222::-;30582:34;30578:1;30570:6;30566:14;30559:58;30651:5;30646:2;30638:6;30634:15;30627:30;30442:222;:::o;30670:366::-;30812:3;30833:67;30897:2;30892:3;30833:67;:::i;:::-;30826:74;;30909:93;30998:3;30909:93;:::i;:::-;31027:2;31022:3;31018:12;31011:19;;30670:366;;;:::o;31042:419::-;31208:4;31246:2;31235:9;31231:18;31223:26;;31295:9;31289:4;31285:20;31281:1;31270:9;31266:17;31259:47;31323:131;31449:4;31323:131;:::i;:::-;31315:139;;31042:419;;;:::o;31467:168::-;31607:20;31603:1;31595:6;31591:14;31584:44;31467:168;:::o;31641:366::-;31783:3;31804:67;31868:2;31863:3;31804:67;:::i;:::-;31797:74;;31880:93;31969:3;31880:93;:::i;:::-;31998:2;31993:3;31989:12;31982:19;;31641:366;;;:::o;32013:419::-;32179:4;32217:2;32206:9;32202:18;32194:26;;32266:9;32260:4;32256:20;32252:1;32241:9;32237:17;32230:47;32294:131;32420:4;32294:131;:::i;:::-;32286:139;;32013:419;;;:::o;32438:170::-;32578:22;32574:1;32566:6;32562:14;32555:46;32438:170;:::o;32614:366::-;32756:3;32777:67;32841:2;32836:3;32777:67;:::i;:::-;32770:74;;32853:93;32942:3;32853:93;:::i;:::-;32971:2;32966:3;32962:12;32955:19;;32614:366;;;:::o;32986:419::-;33152:4;33190:2;33179:9;33175:18;33167:26;;33239:9;33233:4;33229:20;33225:1;33214:9;33210:17;33203:47;33267:131;33393:4;33267:131;:::i;:::-;33259:139;;32986:419;;;:::o;33411:172::-;33551:24;33547:1;33539:6;33535:14;33528:48;33411:172;:::o;33589:366::-;33731:3;33752:67;33816:2;33811:3;33752:67;:::i;:::-;33745:74;;33828:93;33917:3;33828:93;:::i;:::-;33946:2;33941:3;33937:12;33930:19;;33589:366;;;:::o;33961:419::-;34127:4;34165:2;34154:9;34150:18;34142:26;;34214:9;34208:4;34204:20;34200:1;34189:9;34185:17;34178:47;34242:131;34368:4;34242:131;:::i;:::-;34234:139;;33961:419;;;:::o;34386:240::-;34526:34;34522:1;34514:6;34510:14;34503:58;34595:23;34590:2;34582:6;34578:15;34571:48;34386:240;:::o;34632:366::-;34774:3;34795:67;34859:2;34854:3;34795:67;:::i;:::-;34788:74;;34871:93;34960:3;34871:93;:::i;:::-;34989:2;34984:3;34980:12;34973:19;;34632:366;;;:::o;35004:419::-;35170:4;35208:2;35197:9;35193:18;35185:26;;35257:9;35251:4;35247:20;35243:1;35232:9;35228:17;35221:47;35285:131;35411:4;35285:131;:::i;:::-;35277:139;;35004:419;;;:::o;35429:169::-;35569:21;35565:1;35557:6;35553:14;35546:45;35429:169;:::o;35604:366::-;35746:3;35767:67;35831:2;35826:3;35767:67;:::i;:::-;35760:74;;35843:93;35932:3;35843:93;:::i;:::-;35961:2;35956:3;35952:12;35945:19;;35604:366;;;:::o;35976:419::-;36142:4;36180:2;36169:9;36165:18;36157:26;;36229:9;36223:4;36219:20;36215:1;36204:9;36200:17;36193:47;36257:131;36383:4;36257:131;:::i;:::-;36249:139;;35976:419;;;:::o;36401:241::-;36541:34;36537:1;36529:6;36525:14;36518:58;36610:24;36605:2;36597:6;36593:15;36586:49;36401:241;:::o;36648:366::-;36790:3;36811:67;36875:2;36870:3;36811:67;:::i;:::-;36804:74;;36887:93;36976:3;36887:93;:::i;:::-;37005:2;37000:3;36996:12;36989:19;;36648:366;;;:::o;37020:419::-;37186:4;37224:2;37213:9;37209:18;37201:26;;37273:9;37267:4;37263:20;37259:1;37248:9;37244:17;37237:47;37301:131;37427:4;37301:131;:::i;:::-;37293:139;;37020:419;;;:::o;37445:194::-;37485:4;37505:20;37523:1;37505:20;:::i;:::-;37500:25;;37539:20;37557:1;37539:20;:::i;:::-;37534:25;;37583:1;37580;37576:9;37568:17;;37607:1;37601:4;37598:11;37595:37;;;37612:18;;:::i;:::-;37595:37;37445:194;;;;:::o;37645:225::-;37785:34;37781:1;37773:6;37769:14;37762:58;37854:8;37849:2;37841:6;37837:15;37830:33;37645:225;:::o;37876:366::-;38018:3;38039:67;38103:2;38098:3;38039:67;:::i;:::-;38032:74;;38115:93;38204:3;38115:93;:::i;:::-;38233:2;38228:3;38224:12;38217:19;;37876:366;;;:::o;38248:419::-;38414:4;38452:2;38441:9;38437:18;38429:26;;38501:9;38495:4;38491:20;38487:1;38476:9;38472:17;38465:47;38529:131;38655:4;38529:131;:::i;:::-;38521:139;;38248:419;;;:::o;38673:442::-;38822:4;38860:2;38849:9;38845:18;38837:26;;38873:71;38941:1;38930:9;38926:17;38917:6;38873:71;:::i;:::-;38954:72;39022:2;39011:9;39007:18;38998:6;38954:72;:::i;:::-;39036;39104:2;39093:9;39089:18;39080:6;39036:72;:::i;:::-;38673:442;;;;;;:::o;39121:180::-;39169:77;39166:1;39159:88;39266:4;39263:1;39256:15;39290:4;39287:1;39280:15;39307:180;39355:77;39352:1;39345:88;39452:4;39449:1;39442:15;39476:4;39473:1;39466:15;39493:143;39550:5;39581:6;39575:13;39566:22;;39597:33;39624:5;39597:33;:::i;:::-;39493:143;;;;:::o;39642:351::-;39712:6;39761:2;39749:9;39740:7;39736:23;39732:32;39729:119;;;39767:79;;:::i;:::-;39729:119;39887:1;39912:64;39968:7;39959:6;39948:9;39944:22;39912:64;:::i;:::-;39902:74;;39858:128;39642:351;;;;:::o;39999:85::-;40044:7;40073:5;40062:16;;39999:85;;;:::o;40090:158::-;40148:9;40181:61;40199:42;40208:32;40234:5;40208:32;:::i;:::-;40199:42;:::i;:::-;40181:61;:::i;:::-;40168:74;;40090:158;;;:::o;40254:147::-;40349:45;40388:5;40349:45;:::i;:::-;40344:3;40337:58;40254:147;;:::o;40407:114::-;40474:6;40508:5;40502:12;40492:22;;40407:114;;;:::o;40527:184::-;40626:11;40660:6;40655:3;40648:19;40700:4;40695:3;40691:14;40676:29;;40527:184;;;;:::o;40717:132::-;40784:4;40807:3;40799:11;;40837:4;40832:3;40828:14;40820:22;;40717:132;;;:::o;40855:108::-;40932:24;40950:5;40932:24;:::i;:::-;40927:3;40920:37;40855:108;;:::o;40969:179::-;41038:10;41059:46;41101:3;41093:6;41059:46;:::i;:::-;41137:4;41132:3;41128:14;41114:28;;40969:179;;;;:::o;41154:113::-;41224:4;41256;41251:3;41247:14;41239:22;;41154:113;;;:::o;41303:732::-;41422:3;41451:54;41499:5;41451:54;:::i;:::-;41521:86;41600:6;41595:3;41521:86;:::i;:::-;41514:93;;41631:56;41681:5;41631:56;:::i;:::-;41710:7;41741:1;41726:284;41751:6;41748:1;41745:13;41726:284;;;41827:6;41821:13;41854:63;41913:3;41898:13;41854:63;:::i;:::-;41847:70;;41940:60;41993:6;41940:60;:::i;:::-;41930:70;;41786:224;41773:1;41770;41766:9;41761:14;;41726:284;;;41730:14;42026:3;42019:10;;41427:608;;;41303:732;;;;:::o;42041:831::-;42304:4;42342:3;42331:9;42327:19;42319:27;;42356:71;42424:1;42413:9;42409:17;42400:6;42356:71;:::i;:::-;42437:80;42513:2;42502:9;42498:18;42489:6;42437:80;:::i;:::-;42564:9;42558:4;42554:20;42549:2;42538:9;42534:18;42527:48;42592:108;42695:4;42686:6;42592:108;:::i;:::-;42584:116;;42710:72;42778:2;42767:9;42763:18;42754:6;42710:72;:::i;:::-;42792:73;42860:3;42849:9;42845:19;42836:6;42792:73;:::i;:::-;42041:831;;;;;;;;:::o;42878:807::-;43127:4;43165:3;43154:9;43150:19;43142:27;;43179:71;43247:1;43236:9;43232:17;43223:6;43179:71;:::i;:::-;43260:72;43328:2;43317:9;43313:18;43304:6;43260:72;:::i;:::-;43342:80;43418:2;43407:9;43403:18;43394:6;43342:80;:::i;:::-;43432;43508:2;43497:9;43493:18;43484:6;43432:80;:::i;:::-;43522:73;43590:3;43579:9;43575:19;43566:6;43522:73;:::i;:::-;43605;43673:3;43662:9;43658:19;43649:6;43605:73;:::i;:::-;42878:807;;;;;;;;;:::o;43691:663::-;43779:6;43787;43795;43844:2;43832:9;43823:7;43819:23;43815:32;43812:119;;;43850:79;;:::i;:::-;43812:119;43970:1;43995:64;44051:7;44042:6;44031:9;44027:22;43995:64;:::i;:::-;43985:74;;43941:128;44108:2;44134:64;44190:7;44181:6;44170:9;44166:22;44134:64;:::i;:::-;44124:74;;44079:129;44247:2;44273:64;44329:7;44320:6;44309:9;44305:22;44273:64;:::i;:::-;44263:74;;44218:129;43691:663;;;;;:::o

Swarm Source

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