ETH Price: $2,525.31 (-4.27%)

Token

BARFIGHT (BFIGHT)
 

Overview

Max Total Supply

100,000,000,000 BFIGHT

Holders

4 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
10,000,000,000 BFIGHT

Value
$0.00
0x393d8d86e8b5ab2d653a3a94364fc40f9db97a65
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:
BFIGHT

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-20
*/

// SPDX-License-Identifier: MIT
/**
██████  ███████ ██  ██████  ██   ██ ████████ 
██   ██ ██      ██ ██       ██   ██    ██    
██████  █████   ██ ██   ███ ███████    ██    
██   ██ ██      ██ ██    ██ ██   ██    ██    
██████  ██      ██  ██████  ██   ██    ██    
                                          
**/
// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}



// File: @openzeppelin/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;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/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);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




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




// File: contracts/BFIGHT.sol


pragma solidity ^0.8.10;


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

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


    struct BuyFee {
       
        uint16 marketingFee;
        uint16 liquidityFee;
       
    }

    struct SellFee {
       
        uint16 marketingFee;
        uint16 liquidityFee;
        
    }

    bool private swapping;

    BuyFee public buyFee;
    SellFee public sellFee;

    

    uint256 public swapTokensAtAmount = 2 * 10**5 * (10**9); 

    uint256 public maxBuyAmount = 1 * 10**9 * 10**9; // 1% of the supply
    uint256 public maxSellAmount = 1 * 10**9 * 10**9; // 1% of the supply
    uint256 public maxWalletAmount = 2 * 10**9 * 10**9; // 2% of the supply

    uint16 private totalBuyFee;
    uint16 private totalSellFee;

    bool public swapEnabled;
   

    address payable marketingWallet = payable(address(0x393d8d86E8b5aB2D653A3A94364FC40f9DB97a65)); //  MARKETING WALLET

    
   

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromLimit;
    mapping(address => bool) public _isBlackListed;
    bool isTradingEnabled;

    // 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 ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

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


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

   

    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    constructor() ERC20("BARFIGHT", "BFIGHT") {
       
        buyFee.marketingFee = 2;
        buyFee.liquidityFee = 3;
        totalBuyFee = 5;

        
        sellFee.marketingFee = 2;
        sellFee.liquidityFee = 3;
        totalSellFee = 5;

        

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D// Uniswap Router
        );
        // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

       

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

        swapEnabled = true;
        isTradingEnabled = false;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), 1 * 10**11 * (10**9)); // 100,000,000,000 Tokens
    }

    receive() external payable {}

    function decimals() public pure override returns (uint8) {
        return 9;
    }


   
    function updateRouter(address newAddress) external onlyOwner {
       require(newAddress != address(uniswapV2Router), "TOKEN: The router already has that address");
            uniswapV2Router = IUniswapV2Router02(newAddress);
         address get_pair =
            IUniswapV2Factory(uniswapV2Router.factory()).getPair(address(this),
            uniswapV2Router.WETH());
        if (get_pair == address(0)) {
          uniswapV2Pair =
            IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this),
             uniswapV2Router.WETH());
    } else {
        uniswapV2Pair = get_pair;
        }
     
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Token: Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function claimStuckTokens(address _token) external onlyOwner {
        require(_token != address(this), "No rugs");
        if (_token == address(0x0)) {
            payable(owner()).transfer(address(this).balance);
            return;
        }
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }

    function excludefromLimit(address account, bool excluded)
        external
        onlyOwner
    {
        _isExcludedFromLimit[account] = excluded;
    }

    function setBlackList(address addr, bool value) external onlyOwner {
        _isBlackListed[addr] = value;
    }

    

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Token: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

      
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    

    function setBuyFees(
    
       uint16 marketing,
       uint16 liquidity
       
    ) external onlyOwner {
       
        buyFee.marketingFee = marketing;
       buyFee.liquidityFee = liquidity;
        
        totalBuyFee = marketing + liquidity;
        require (totalBuyFee <= 5, "max fees should be less than equal to 5%");
    }


     function setSellFees(
    
       uint16 marketing,
       uint16 liquidity
       
    ) external onlyOwner {
       
        sellFee.marketingFee = marketing;
       sellFee.liquidityFee = liquidity;
        
        totalSellFee = marketing + liquidity;
        require (totalSellFee <= 5, "max fees should be less than equal to 5%");
    }

    function enableTrading () external onlyOwner {
        isTradingEnabled = true;
    }

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


    function setMarketingWallet(address newWallet) external onlyOwner {
        require (newWallet != (address(0)), "marketing wallet can't be a zero address");
        marketingWallet = payable(newWallet);
    }

    function setSwapEnabled(bool value) external onlyOwner {
        swapEnabled = value;
    }

    function setMaxWallet(uint256 amount) external onlyOwner {
        maxWalletAmount = amount * 10**9;
    }

    function setMaxBuyAmount(uint256 amount) external onlyOwner {
        maxBuyAmount = amount * 10**9;
    }

    function setMaxSellAmount(uint256 amount) external onlyOwner {
        maxSellAmount = amount * 10**9;
    }

   function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
       swapTokensAtAmount =  amount * 10**9;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "Token: transfer from the zero address");
        require(to != address(0), "Token: transfer to the zero address");
        require(
            !_isBlackListed[from] && !_isBlackListed[to],
            "Account is blacklisted"
        );

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >=
            swapTokensAtAmount;

        if (
            swapEnabled &&
            !swapping &&
            from != uniswapV2Pair &&
            overMinimumTokenBalance
        ) {
            contractTokenBalance = swapTokensAtAmount;
            uint16 totalFee = totalBuyFee + totalSellFee;
            uint256 swapTokens = contractTokenBalance.mul(buyFee.liquidityFee + sellFee.liquidityFee).div(totalFee);
                                  swapAndLiquify(swapTokens);
            uint256 marketingTokens = contractTokenBalance - swapTokens;
             swapAndSendToMarketing(marketingTokens);
        }

        bool takeFee = true;

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

        if (takeFee) {
            require (isTradingEnabled, "Trading is not enabled yet");
            uint256 fees;

          

            if (automatedMarketMakerPairs[to]) {
                fees = totalSellFee;
            } else if (automatedMarketMakerPairs[from]) {
                fees = totalBuyFee;
            }

            if (!_isExcludedFromLimit[from] && !_isExcludedFromLimit[to]) {
                if (automatedMarketMakerPairs[to]) {
                    require(amount <= maxSellAmount, "Sell exceeds limit");
                } else if (automatedMarketMakerPairs[from]) {
                    require(amount <= maxBuyAmount, "Buy exceeds limit");
                }

                if (!automatedMarketMakerPairs[to]) {
                    require(
                        balanceOf(to) + amount <= maxWalletAmount,
                        "Balance exceeds limit"
                    );
                }
            }

            uint256 feeAmount = amount.mul(fees).div(100);
            amount = amount.sub(feeAmount);

            super._transfer(from, address(this), feeAmount);
        }

        super._transfer(from, to, amount);

       
    }

    function swapAndSendToMarketing(uint256 tokens) private lockTheSwap {
        uint256 oldbalance = address(this).balance;
         swapTokensForEth(tokens);
        uint256 newBalance = address(this).balance - oldbalance;
        (bool mw, ) = payable(marketingWallet).call{value: newBalance}("");
    require(mw);
    }

    
   function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    
    function 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
        );
    }

   
   
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":"tokensIntoLiqudity","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlackListed","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":"buyFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludefromLimit","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":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"liquidityFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405265b5e620f48000600a55670de0b6b3a7640000600b55670de0b6b3a7640000600c55671bc16d674ec80000600d5573393d8d86e8b5ab2d653a3a94364fc40f9db97a65600e60056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009457600080fd5b506040518060400160405280600881526020017f42415246494748540000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4246494748540000000000000000000000000000000000000000000000000000815250816003908162000112919062000cdb565b50806004908162000124919062000cdb565b505050620001476200013b620004e260201b60201c565b620004ea60201b60201c565b6002600860000160006101000a81548161ffff021916908361ffff1602179055506003600860000160026101000a81548161ffff021916908361ffff1602179055506005600e60006101000a81548161ffff021916908361ffff1602179055506002600960000160006101000a81548161ffff021916908361ffff1602179055506003600960000160026101000a81548161ffff021916908361ffff1602179055506005600e60026101000a81548161ffff021916908361ffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000294919062000e2c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000322919062000e2c565b6040518363ffffffff1660e01b81526004016200034192919062000e6f565b6020604051808303816000875af115801562000361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000387919062000e2c565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200041e816001620005b060201b60201c565b6200044062000432620006e660201b60201c565b60016200071060201b60201c565b620004677392af0309fd6492a572c8159618d0cd161919623e60016200071060201b60201c565b6200047a3060016200071060201b60201c565b6001600e60046101000a81548160ff0219169083151502179055506000601260006101000a81548160ff021916908315150217905550620004da620004c4620006e660201b60201c565b68056bc75e2d63100000620008df60201b60201c565b505062001193565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000645576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063c9062000f23565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000720620004e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000746620006e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200079f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007969062000f95565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000834576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082b906200102d565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008d391906200106c565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200094890620010d9565b60405180910390fd5b620009656000838362000a5760201b60201c565b80600260008282546200097991906200112a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009d091906200112a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a37919062001176565b60405180910390a362000a536000838362000a5c60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ae357607f821691505b60208210810362000af95762000af862000a9b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b24565b62000b6f868362000b24565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bbc62000bb662000bb08462000b87565b62000b91565b62000b87565b9050919050565b6000819050919050565b62000bd88362000b9b565b62000bf062000be78262000bc3565b84845462000b31565b825550505050565b600090565b62000c0762000bf8565b62000c1481848462000bcd565b505050565b5b8181101562000c3c5762000c3060008262000bfd565b60018101905062000c1a565b5050565b601f82111562000c8b5762000c558162000aff565b62000c608462000b14565b8101602085101562000c70578190505b62000c8862000c7f8562000b14565b83018262000c19565b50505b505050565b600082821c905092915050565b600062000cb06000198460080262000c90565b1980831691505092915050565b600062000ccb838362000c9d565b9150826002028217905092915050565b62000ce68262000a61565b67ffffffffffffffff81111562000d025762000d0162000a6c565b5b62000d0e825462000aca565b62000d1b82828562000c40565b600060209050601f83116001811462000d53576000841562000d3e578287015190505b62000d4a858262000cbd565b86555062000dba565b601f19841662000d638662000aff565b60005b8281101562000d8d5784890151825560018201915060208501945060208101905062000d66565b8683101562000dad578489015162000da9601f89168262000c9d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000df48262000dc7565b9050919050565b62000e068162000de7565b811462000e1257600080fd5b50565b60008151905062000e268162000dfb565b92915050565b60006020828403121562000e455762000e4462000dc2565b5b600062000e558482850162000e15565b91505092915050565b62000e698162000de7565b82525050565b600060408201905062000e86600083018562000e5e565b62000e95602083018462000e5e565b9392505050565b600082825260208201905092915050565b7f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b600062000f0b603f8362000e9c565b915062000f188262000ead565b604082019050919050565b6000602082019050818103600083015262000f3e8162000efc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f7d60208362000e9c565b915062000f8a8262000f45565b602082019050919050565b6000602082019050818103600083015262000fb08162000f6e565b9050919050565b7f546f6b656e3a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b60006200101560318362000e9c565b9150620010228262000fb7565b604082019050919050565b60006020820190508181036000830152620010488162001006565b9050919050565b60008115159050919050565b62001066816200104f565b82525050565b60006020820190506200108360008301846200105b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010c1601f8362000e9c565b9150620010ce8262001089565b602082019050919050565b60006020820190508181036000830152620010f481620010b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011378262000b87565b9150620011448362000b87565b92508282019050808211156200115f576200115e620010fb565b5b92915050565b620011708162000b87565b82525050565b60006020820190506200118d600083018462001165565b92915050565b61538380620011a36000396000f3fe6080604052600436106102605760003560e01c8063715018a611610144578063b62496f5116100b6578063e01af92c1161007a578063e01af92c1461091b578063e2f4560514610944578063e99c9d091461096f578063f2fde38b14610998578063f34eb0b8146109c1578063f9d0831a146109ea57610267565b8063b62496f514610826578063c024666814610863578063c492f0461461088c578063c851cc32146108b5578063dd62ed3e146108de57610267565b806395d89b411161010857806395d89b41146107045780639a7a23d61461072f578063a457c2d714610758578063a9059cbb14610795578063aa4bde28146107d2578063afa4f3b2146107fd57610267565b8063715018a6146106575780637537a47f1461066e57806388e765ff146106975780638a8c523c146106c25780638da5cb5b146106d957610267565b80633c310f5e116101dd5780635d098b38116101a15780635d098b381461053557806366d602ae1461055e57806368092bd9146105895780636c9bb93b146105b25780636ddd1713146105ef57806370a082311461061a57610267565b80633c310f5e1461044f578063470624021461047857806349bd5a5e146104a45780634fbee193146104cf5780635d0044ca1461050c57610267565b806327c8f8351161022457806327c8f835146103675780632b14ca56146103925780632ecd7e8f146103be578063313ce567146103e7578063395093511461041257610267565b806306fdde031461026c578063095ea7b3146102975780631694505e146102d457806318160ddd146102ff57806323b872dd1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a13565b60405161028e9190613af5565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613bb5565b610aa5565b6040516102cb9190613c10565b60405180910390f35b3480156102e057600080fd5b506102e9610ac3565b6040516102f69190613c8a565b60405180910390f35b34801561030b57600080fd5b50610314610ae9565b6040516103219190613cb4565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613ccf565b610af3565b60405161035e9190613c10565b60405180910390f35b34801561037357600080fd5b5061037c610beb565b6040516103899190613d31565b60405180910390f35b34801561039e57600080fd5b506103a7610bf1565b6040516103b5929190613d69565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e09190613dbe565b610c1f565b005b3480156103f357600080fd5b506103fc610d5f565b6040516104099190613e1a565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190613bb5565b610d68565b6040516104469190613c10565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190613dbe565b610e14565b005b34801561048457600080fd5b5061048d610f54565b60405161049b929190613d69565b60405180910390f35b3480156104b057600080fd5b506104b9610f82565b6040516104c69190613d31565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613e35565b610fa8565b6040516105039190613c10565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613e62565b610ffe565b005b34801561054157600080fd5b5061055c60048036038101906105579190613e35565b611093565b005b34801561056a57600080fd5b506105736111c2565b6040516105809190613cb4565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613ebb565b6111c8565b005b3480156105be57600080fd5b506105d960048036038101906105d49190613e35565b61129f565b6040516105e69190613c10565b60405180910390f35b3480156105fb57600080fd5b506106046112bf565b6040516106119190613c10565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613e35565b6112d2565b60405161064e9190613cb4565b60405180910390f35b34801561066357600080fd5b5061066c61131a565b005b34801561067a57600080fd5b5061069560048036038101906106909190613ebb565b6113a2565b005b3480156106a357600080fd5b506106ac611479565b6040516106b99190613cb4565b60405180910390f35b3480156106ce57600080fd5b506106d761147f565b005b3480156106e557600080fd5b506106ee611518565b6040516106fb9190613d31565b60405180910390f35b34801561071057600080fd5b50610719611542565b6040516107269190613af5565b60405180910390f35b34801561073b57600080fd5b5061075660048036038101906107519190613ebb565b6115d4565b005b34801561076457600080fd5b5061077f600480360381019061077a9190613bb5565b6116ee565b60405161078c9190613c10565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190613bb5565b6117d9565b6040516107c99190613c10565b60405180910390f35b3480156107de57600080fd5b506107e76117f7565b6040516107f49190613cb4565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613e62565b6117fd565b005b34801561083257600080fd5b5061084d60048036038101906108489190613e35565b611892565b60405161085a9190613c10565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190613ebb565b6118b2565b005b34801561089857600080fd5b506108b360048036038101906108ae9190613f60565b611a69565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613e35565b611bc5565b005b3480156108ea57600080fd5b5061090560048036038101906109009190613fc0565b61210f565b6040516109129190613cb4565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190614000565b612196565b005b34801561095057600080fd5b5061095961222f565b6040516109669190613cb4565b60405180910390f35b34801561097b57600080fd5b5061099660048036038101906109919190613e62565b612235565b005b3480156109a457600080fd5b506109bf60048036038101906109ba9190613e35565b6122ca565b005b3480156109cd57600080fd5b506109e860048036038101906109e39190613e62565b6123c1565b005b3480156109f657600080fd5b50610a116004803603810190610a0c9190613e35565b612456565b005b606060038054610a229061405c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e9061405c565b8015610a9b5780601f10610a7057610100808354040283529160200191610a9b565b820191906000526020600020905b815481529060010190602001808311610a7e57829003601f168201915b5050505050905090565b6000610ab9610ab26126d6565b84846126de565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610b008484846128a7565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4b6126d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906140ff565b60405180910390fd5b610bdf85610bd76126d6565b8584036126de565b60019150509392505050565b61dead81565b60098060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b610c276126d6565b73ffffffffffffffffffffffffffffffffffffffff16610c45611518565b73ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c929061416b565b60405180910390fd5b81600860000160006101000a81548161ffff021916908361ffff16021790555080600860000160026101000a81548161ffff021916908361ffff1602179055508082610ce791906141ba565b600e60006101000a81548161ffff021916908361ffff1602179055506005600e60009054906101000a900461ffff1661ffff161115610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290614262565b60405180910390fd5b5050565b60006009905090565b6000610e0a610d756126d6565b848460016000610d836126d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e059190614282565b6126de565b6001905092915050565b610e1c6126d6565b73ffffffffffffffffffffffffffffffffffffffff16610e3a611518565b73ffffffffffffffffffffffffffffffffffffffff1614610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e879061416b565b60405180910390fd5b81600960000160006101000a81548161ffff021916908361ffff16021790555080600960000160026101000a81548161ffff021916908361ffff1602179055508082610edc91906141ba565b600e60026101000a81548161ffff021916908361ffff1602179055506005600e60029054906101000a900461ffff1661ffff161115610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790614262565b60405180910390fd5b5050565b60088060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110066126d6565b73ffffffffffffffffffffffffffffffffffffffff16611024611518565b73ffffffffffffffffffffffffffffffffffffffff161461107a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110719061416b565b60405180910390fd5b633b9aca008161108a91906142b6565b600d8190555050565b61109b6126d6565b73ffffffffffffffffffffffffffffffffffffffff166110b9611518565b73ffffffffffffffffffffffffffffffffffffffff161461110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111069061416b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590614382565b60405180910390fd5b80600e60056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b6111d06126d6565b73ffffffffffffffffffffffffffffffffffffffff166111ee611518565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b9061416b565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60116020528060005260406000206000915054906101000a900460ff1681565b600e60049054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113226126d6565b73ffffffffffffffffffffffffffffffffffffffff16611340611518565b73ffffffffffffffffffffffffffffffffffffffff1614611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d9061416b565b60405180910390fd5b6113a060006130b1565b565b6113aa6126d6565b73ffffffffffffffffffffffffffffffffffffffff166113c8611518565b73ffffffffffffffffffffffffffffffffffffffff161461141e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114159061416b565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b5481565b6114876126d6565b73ffffffffffffffffffffffffffffffffffffffff166114a5611518565b73ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29061416b565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115519061405c565b80601f016020809104026020016040519081016040528092919081815260200182805461157d9061405c565b80156115ca5780601f1061159f576101008083540402835291602001916115ca565b820191906000526020600020905b8154815290600101906020018083116115ad57829003601f168201915b5050505050905090565b6115dc6126d6565b73ffffffffffffffffffffffffffffffffffffffff166115fa611518565b73ffffffffffffffffffffffffffffffffffffffff1614611650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061416b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d79061443a565b60405180910390fd5b6116ea8282613177565b5050565b600080600160006116fd6126d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b1906144cc565b60405180910390fd5b6117ce6117c56126d6565b858584036126de565b600191505092915050565b60006117ed6117e66126d6565b84846128a7565b6001905092915050565b600d5481565b6118056126d6565b73ffffffffffffffffffffffffffffffffffffffff16611823611518565b73ffffffffffffffffffffffffffffffffffffffff1614611879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118709061416b565b60405180910390fd5b633b9aca008161188991906142b6565b600a8190555050565b60136020528060005260406000206000915054906101000a900460ff1681565b6118ba6126d6565b73ffffffffffffffffffffffffffffffffffffffff166118d8611518565b73ffffffffffffffffffffffffffffffffffffffff161461192e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119259061416b565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061455e565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a5d9190613c10565b60405180910390a25050565b611a716126d6565b73ffffffffffffffffffffffffffffffffffffffff16611a8f611518565b73ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc9061416b565b60405180910390fd5b60005b83839050811015611b845781600f6000868685818110611b0b57611b0a61457e565b5b9050602002016020810190611b209190613e35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b7c906145ad565b915050611ae8565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bb8939291906146b8565b60405180910390a1505050565b611bcd6126d6565b73ffffffffffffffffffffffffffffffffffffffff16611beb611518565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c389061416b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc89061475c565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da59190614791565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e529190614791565b6040518363ffffffff1660e01b8152600401611e6f9291906147be565b602060405180830381865afa158015611e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb09190614791565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120c957600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f779190614791565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120249190614791565b6040518363ffffffff1660e01b81526004016120419291906147be565b6020604051808303816000875af1158015612060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120849190614791565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061210b565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61219e6126d6565b73ffffffffffffffffffffffffffffffffffffffff166121bc611518565b73ffffffffffffffffffffffffffffffffffffffff1614612212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122099061416b565b60405180910390fd5b80600e60046101000a81548160ff02191690831515021790555050565b600a5481565b61223d6126d6565b73ffffffffffffffffffffffffffffffffffffffff1661225b611518565b73ffffffffffffffffffffffffffffffffffffffff16146122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a89061416b565b60405180910390fd5b633b9aca00816122c191906142b6565b600c8190555050565b6122d26126d6565b73ffffffffffffffffffffffffffffffffffffffff166122f0611518565b73ffffffffffffffffffffffffffffffffffffffff1614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d9061416b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90614859565b60405180910390fd5b6123be816130b1565b50565b6123c96126d6565b73ffffffffffffffffffffffffffffffffffffffff166123e7611518565b73ffffffffffffffffffffffffffffffffffffffff161461243d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124349061416b565b60405180910390fd5b633b9aca008161244d91906142b6565b600b8190555050565b61245e6126d6565b73ffffffffffffffffffffffffffffffffffffffff1661247c611518565b73ffffffffffffffffffffffffffffffffffffffff16146124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c99061416b565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612537906148c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125c75761257c611518565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156125c1573d6000803e3d6000fd5b506126d3565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126079190613d31565b602060405180830381865afa158015612624573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264891906148fa565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61266e611518565b836040518363ffffffff1660e01b815260040161268c929190614927565b6020604051808303816000875af11580156126ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cf9190614965565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614a04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b390614a96565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161289a9190613cb4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d90614b28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297c90614bba565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a295750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f90614c26565b60405180910390fd5b60008103612a8157612a7c838360006132aa565b6130ac565b6000612a8c306112d2565b90506000600a548210159050600e60049054906101000a900460ff168015612ac15750600760149054906101000a900460ff16155b8015612b1b5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b245750805b15612be657600a5491506000600e60029054906101000a900461ffff16600e60009054906101000a900461ffff16612b5c91906141ba565b90506000612bbe8261ffff16612bb0600960000160029054906101000a900461ffff16600860000160029054906101000a900461ffff16612b9d91906141ba565b61ffff168761352990919063ffffffff16565b61353f90919063ffffffff16565b9050612bc981613555565b60008185612bd79190614c46565b9050612be28161362b565b5050505b600060019050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c8d5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9757600090505b801561309d57601260009054906101000a900460ff16612cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce390614cc6565b60405180910390fd5b6000601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d5c57600e60029054906101000a900461ffff1661ffff169050612dc7565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dc657600e60009054906101000a900461ffff1661ffff1690505b5b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e6b5750601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561305057601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f0c57600c54851115612f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efe90614d32565b60405180910390fd5b612fa5565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612fa457600b54851115612fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9a90614d9e565b60405180910390fd5b5b5b601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661304f57600d5485613003886112d2565b61300d9190614282565b111561304e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304590614e0a565b60405180910390fd5b5b5b6000613078606461306a848961352990919063ffffffff16565b61353f90919063ffffffff16565b905061308d818761371d90919063ffffffff16565b955061309a8830836132aa565b50505b6130a88686866132aa565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503613209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320090614e9c565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331090614f2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337f90614fc0565b60405180910390fd5b613393838383613733565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341090615052565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134ac9190614282565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135109190613cb4565b60405180910390a3613523848484613738565b50505050565b6000818361353791906142b6565b905092915050565b6000818361354d91906150a1565b905092915050565b6001600760146101000a81548160ff021916908315150217905550600061358660028361353f90919063ffffffff16565b9050600061359d828461371d90919063ffffffff16565b905060004790506135ad8361373d565b60006135c2824761371d90919063ffffffff16565b90506135ce8382613980565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613601939291906150d2565b60405180910390a1505050506000600760146101000a81548160ff02191690831515021790555050565b6001600760146101000a81548160ff02191690831515021790555060004790506136548261373d565b600081476136629190614c46565b90506000600e60059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136ac9061513a565b60006040518083038185875af1925050503d80600081146136e9576040519150601f19603f3d011682016040523d82523d6000602084013e6136ee565b606091505b50509050806136fc57600080fd5b5050506000600760146101000a81548160ff02191690831515021790555050565b6000818361372b9190614c46565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561375a5761375961514f565b5b6040519080825280602002602001820160405280156137885781602001602082028036833780820191505090505b50905030816000815181106137a05761379f61457e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386b9190614791565b8160018151811061387f5761387e61457e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138e630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126de565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161394a95949392919061523f565b600060405180830381600087803b15801561396457600080fd5b505af1158015613978573d6000803e3d6000fd5b505050505050565b6139ad30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126de565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806139f9611518565b426040518863ffffffff1660e01b8152600401613a1b96959493929190615299565b60606040518083038185885af1158015613a39573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a5e91906152fa565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a9f578082015181840152602081019050613a84565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ac782613a65565b613ad18185613a70565b9350613ae1818560208601613a81565b613aea81613aab565b840191505092915050565b60006020820190508181036000830152613b0f8184613abc565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b4c82613b21565b9050919050565b613b5c81613b41565b8114613b6757600080fd5b50565b600081359050613b7981613b53565b92915050565b6000819050919050565b613b9281613b7f565b8114613b9d57600080fd5b50565b600081359050613baf81613b89565b92915050565b60008060408385031215613bcc57613bcb613b17565b5b6000613bda85828601613b6a565b9250506020613beb85828601613ba0565b9150509250929050565b60008115159050919050565b613c0a81613bf5565b82525050565b6000602082019050613c256000830184613c01565b92915050565b6000819050919050565b6000613c50613c4b613c4684613b21565b613c2b565b613b21565b9050919050565b6000613c6282613c35565b9050919050565b6000613c7482613c57565b9050919050565b613c8481613c69565b82525050565b6000602082019050613c9f6000830184613c7b565b92915050565b613cae81613b7f565b82525050565b6000602082019050613cc96000830184613ca5565b92915050565b600080600060608486031215613ce857613ce7613b17565b5b6000613cf686828701613b6a565b9350506020613d0786828701613b6a565b9250506040613d1886828701613ba0565b9150509250925092565b613d2b81613b41565b82525050565b6000602082019050613d466000830184613d22565b92915050565b600061ffff82169050919050565b613d6381613d4c565b82525050565b6000604082019050613d7e6000830185613d5a565b613d8b6020830184613d5a565b9392505050565b613d9b81613d4c565b8114613da657600080fd5b50565b600081359050613db881613d92565b92915050565b60008060408385031215613dd557613dd4613b17565b5b6000613de385828601613da9565b9250506020613df485828601613da9565b9150509250929050565b600060ff82169050919050565b613e1481613dfe565b82525050565b6000602082019050613e2f6000830184613e0b565b92915050565b600060208284031215613e4b57613e4a613b17565b5b6000613e5984828501613b6a565b91505092915050565b600060208284031215613e7857613e77613b17565b5b6000613e8684828501613ba0565b91505092915050565b613e9881613bf5565b8114613ea357600080fd5b50565b600081359050613eb581613e8f565b92915050565b60008060408385031215613ed257613ed1613b17565b5b6000613ee085828601613b6a565b9250506020613ef185828601613ea6565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112613f2057613f1f613efb565b5b8235905067ffffffffffffffff811115613f3d57613f3c613f00565b5b602083019150836020820283011115613f5957613f58613f05565b5b9250929050565b600080600060408486031215613f7957613f78613b17565b5b600084013567ffffffffffffffff811115613f9757613f96613b1c565b5b613fa386828701613f0a565b93509350506020613fb686828701613ea6565b9150509250925092565b60008060408385031215613fd757613fd6613b17565b5b6000613fe585828601613b6a565b9250506020613ff685828601613b6a565b9150509250929050565b60006020828403121561401657614015613b17565b5b600061402484828501613ea6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061407457607f821691505b6020821081036140875761408661402d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140e9602883613a70565b91506140f48261408d565b604082019050919050565b60006020820190508181036000830152614118816140dc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614155602083613a70565b91506141608261411f565b602082019050919050565b6000602082019050818103600083015261418481614148565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141c582613d4c565b91506141d083613d4c565b9250828201905061ffff8111156141ea576141e961418b565b5b92915050565b7f6d617820666565732073686f756c64206265206c657373207468616e2065717560008201527f616c20746f203525000000000000000000000000000000000000000000000000602082015250565b600061424c602883613a70565b9150614257826141f0565b604082019050919050565b6000602082019050818103600083015261427b8161423f565b9050919050565b600061428d82613b7f565b915061429883613b7f565b92508282019050808211156142b0576142af61418b565b5b92915050565b60006142c182613b7f565b91506142cc83613b7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143055761430461418b565b5b828202905092915050565b7f6d61726b6574696e672077616c6c65742063616e27742062652061207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b600061436c602883613a70565b915061437782614310565b604082019050919050565b6000602082019050818103600083015261439b8161435f565b9050919050565b7f546f6b656e3a205468652050616e63616b655377617020706169722063616e6e60008201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60208201527f65744d616b657250616972730000000000000000000000000000000000000000604082015250565b6000614424604c83613a70565b915061442f826143a2565b606082019050919050565b6000602082019050818103600083015261445381614417565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006144b6602583613a70565b91506144c18261445a565b604082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b7f546f6b656e3a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b6000614548603183613a70565b9150614553826144ec565b604082019050919050565b600060208201905081810360008301526145778161453b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006145b882613b7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ea576145e961418b565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b61461981613b41565b82525050565b600061462b8383614610565b60208301905092915050565b60006146466020840184613b6a565b905092915050565b6000602082019050919050565b600061466783856145f5565b935061467282614606565b8060005b858110156146ab576146888284614637565b614692888261461f565b975061469d8361464e565b925050600181019050614676565b5085925050509392505050565b600060408201905081810360008301526146d381858761465b565b90506146e26020830184613c01565b949350505050565b7f544f4b454e3a2054686520726f7574657220616c72656164792068617320746860008201527f6174206164647265737300000000000000000000000000000000000000000000602082015250565b6000614746602a83613a70565b9150614751826146ea565b604082019050919050565b6000602082019050818103600083015261477581614739565b9050919050565b60008151905061478b81613b53565b92915050565b6000602082840312156147a7576147a6613b17565b5b60006147b58482850161477c565b91505092915050565b60006040820190506147d36000830185613d22565b6147e06020830184613d22565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614843602683613a70565b915061484e826147e7565b604082019050919050565b6000602082019050818103600083015261487281614836565b9050919050565b7f4e6f207275677300000000000000000000000000000000000000000000000000600082015250565b60006148af600783613a70565b91506148ba82614879565b602082019050919050565b600060208201905081810360008301526148de816148a2565b9050919050565b6000815190506148f481613b89565b92915050565b6000602082840312156149105761490f613b17565b5b600061491e848285016148e5565b91505092915050565b600060408201905061493c6000830185613d22565b6149496020830184613ca5565b9392505050565b60008151905061495f81613e8f565b92915050565b60006020828403121561497b5761497a613b17565b5b600061498984828501614950565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149ee602483613a70565b91506149f982614992565b604082019050919050565b60006020820190508181036000830152614a1d816149e1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a80602283613a70565b9150614a8b82614a24565b604082019050919050565b60006020820190508181036000830152614aaf81614a73565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b12602583613a70565b9150614b1d82614ab6565b604082019050919050565b60006020820190508181036000830152614b4181614b05565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ba4602383613a70565b9150614baf82614b48565b604082019050919050565b60006020820190508181036000830152614bd381614b97565b9050919050565b7f4163636f756e7420697320626c61636b6c697374656400000000000000000000600082015250565b6000614c10601683613a70565b9150614c1b82614bda565b602082019050919050565b60006020820190508181036000830152614c3f81614c03565b9050919050565b6000614c5182613b7f565b9150614c5c83613b7f565b9250828203905081811115614c7457614c7361418b565b5b92915050565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b6000614cb0601a83613a70565b9150614cbb82614c7a565b602082019050919050565b60006020820190508181036000830152614cdf81614ca3565b9050919050565b7f53656c6c2065786365656473206c696d69740000000000000000000000000000600082015250565b6000614d1c601283613a70565b9150614d2782614ce6565b602082019050919050565b60006020820190508181036000830152614d4b81614d0f565b9050919050565b7f4275792065786365656473206c696d6974000000000000000000000000000000600082015250565b6000614d88601183613a70565b9150614d9382614d52565b602082019050919050565b60006020820190508181036000830152614db781614d7b565b9050919050565b7f42616c616e63652065786365656473206c696d69740000000000000000000000600082015250565b6000614df4601583613a70565b9150614dff82614dbe565b602082019050919050565b60006020820190508181036000830152614e2381614de7565b9050919050565b7f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b6000614e86603f83613a70565b9150614e9182614e2a565b604082019050919050565b60006020820190508181036000830152614eb581614e79565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f18602583613a70565b9150614f2382614ebc565b604082019050919050565b60006020820190508181036000830152614f4781614f0b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614faa602383613a70565b9150614fb582614f4e565b604082019050919050565b60006020820190508181036000830152614fd981614f9d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061503c602683613a70565b915061504782614fe0565b604082019050919050565b6000602082019050818103600083015261506b8161502f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150ac82613b7f565b91506150b783613b7f565b9250826150c7576150c6615072565b5b828204905092915050565b60006060820190506150e76000830186613ca5565b6150f46020830185613ca5565b6151016040830184613ca5565b949350505050565b600081905092915050565b50565b6000615124600083615109565b915061512f82615114565b600082019050919050565b600061514582615117565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60006151a361519e6151998461517e565b613c2b565b613b7f565b9050919050565b6151b381615188565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b60006151ec826151b9565b6151f681856145f5565b9350615201836151c4565b8060005b83811015615232578151615219888261461f565b9750615224836151d4565b925050600181019050615205565b5085935050505092915050565b600060a0820190506152546000830188613ca5565b61526160208301876151aa565b818103604083015261527381866151e1565b90506152826060830185613d22565b61528f6080830184613ca5565b9695505050505050565b600060c0820190506152ae6000830189613d22565b6152bb6020830188613ca5565b6152c860408301876151aa565b6152d560608301866151aa565b6152e26080830185613d22565b6152ef60a0830184613ca5565b979650505050505050565b60008060006060848603121561531357615312613b17565b5b6000615321868287016148e5565b9350506020615332868287016148e5565b9250506040615343868287016148e5565b915050925092509256fea26469706673582212206dd02fb6f1bcca7958c7218fe06f063c9512aba0faccc6198f01155999626d1c64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063715018a611610144578063b62496f5116100b6578063e01af92c1161007a578063e01af92c1461091b578063e2f4560514610944578063e99c9d091461096f578063f2fde38b14610998578063f34eb0b8146109c1578063f9d0831a146109ea57610267565b8063b62496f514610826578063c024666814610863578063c492f0461461088c578063c851cc32146108b5578063dd62ed3e146108de57610267565b806395d89b411161010857806395d89b41146107045780639a7a23d61461072f578063a457c2d714610758578063a9059cbb14610795578063aa4bde28146107d2578063afa4f3b2146107fd57610267565b8063715018a6146106575780637537a47f1461066e57806388e765ff146106975780638a8c523c146106c25780638da5cb5b146106d957610267565b80633c310f5e116101dd5780635d098b38116101a15780635d098b381461053557806366d602ae1461055e57806368092bd9146105895780636c9bb93b146105b25780636ddd1713146105ef57806370a082311461061a57610267565b80633c310f5e1461044f578063470624021461047857806349bd5a5e146104a45780634fbee193146104cf5780635d0044ca1461050c57610267565b806327c8f8351161022457806327c8f835146103675780632b14ca56146103925780632ecd7e8f146103be578063313ce567146103e7578063395093511461041257610267565b806306fdde031461026c578063095ea7b3146102975780631694505e146102d457806318160ddd146102ff57806323b872dd1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610a13565b60405161028e9190613af5565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613bb5565b610aa5565b6040516102cb9190613c10565b60405180910390f35b3480156102e057600080fd5b506102e9610ac3565b6040516102f69190613c8a565b60405180910390f35b34801561030b57600080fd5b50610314610ae9565b6040516103219190613cb4565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613ccf565b610af3565b60405161035e9190613c10565b60405180910390f35b34801561037357600080fd5b5061037c610beb565b6040516103899190613d31565b60405180910390f35b34801561039e57600080fd5b506103a7610bf1565b6040516103b5929190613d69565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e09190613dbe565b610c1f565b005b3480156103f357600080fd5b506103fc610d5f565b6040516104099190613e1a565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190613bb5565b610d68565b6040516104469190613c10565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190613dbe565b610e14565b005b34801561048457600080fd5b5061048d610f54565b60405161049b929190613d69565b60405180910390f35b3480156104b057600080fd5b506104b9610f82565b6040516104c69190613d31565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613e35565b610fa8565b6040516105039190613c10565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190613e62565b610ffe565b005b34801561054157600080fd5b5061055c60048036038101906105579190613e35565b611093565b005b34801561056a57600080fd5b506105736111c2565b6040516105809190613cb4565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613ebb565b6111c8565b005b3480156105be57600080fd5b506105d960048036038101906105d49190613e35565b61129f565b6040516105e69190613c10565b60405180910390f35b3480156105fb57600080fd5b506106046112bf565b6040516106119190613c10565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c9190613e35565b6112d2565b60405161064e9190613cb4565b60405180910390f35b34801561066357600080fd5b5061066c61131a565b005b34801561067a57600080fd5b5061069560048036038101906106909190613ebb565b6113a2565b005b3480156106a357600080fd5b506106ac611479565b6040516106b99190613cb4565b60405180910390f35b3480156106ce57600080fd5b506106d761147f565b005b3480156106e557600080fd5b506106ee611518565b6040516106fb9190613d31565b60405180910390f35b34801561071057600080fd5b50610719611542565b6040516107269190613af5565b60405180910390f35b34801561073b57600080fd5b5061075660048036038101906107519190613ebb565b6115d4565b005b34801561076457600080fd5b5061077f600480360381019061077a9190613bb5565b6116ee565b60405161078c9190613c10565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190613bb5565b6117d9565b6040516107c99190613c10565b60405180910390f35b3480156107de57600080fd5b506107e76117f7565b6040516107f49190613cb4565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f9190613e62565b6117fd565b005b34801561083257600080fd5b5061084d60048036038101906108489190613e35565b611892565b60405161085a9190613c10565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190613ebb565b6118b2565b005b34801561089857600080fd5b506108b360048036038101906108ae9190613f60565b611a69565b005b3480156108c157600080fd5b506108dc60048036038101906108d79190613e35565b611bc5565b005b3480156108ea57600080fd5b5061090560048036038101906109009190613fc0565b61210f565b6040516109129190613cb4565b60405180910390f35b34801561092757600080fd5b50610942600480360381019061093d9190614000565b612196565b005b34801561095057600080fd5b5061095961222f565b6040516109669190613cb4565b60405180910390f35b34801561097b57600080fd5b5061099660048036038101906109919190613e62565b612235565b005b3480156109a457600080fd5b506109bf60048036038101906109ba9190613e35565b6122ca565b005b3480156109cd57600080fd5b506109e860048036038101906109e39190613e62565b6123c1565b005b3480156109f657600080fd5b50610a116004803603810190610a0c9190613e35565b612456565b005b606060038054610a229061405c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e9061405c565b8015610a9b5780601f10610a7057610100808354040283529160200191610a9b565b820191906000526020600020905b815481529060010190602001808311610a7e57829003601f168201915b5050505050905090565b6000610ab9610ab26126d6565b84846126de565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000610b008484846128a7565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b4b6126d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc2906140ff565b60405180910390fd5b610bdf85610bd76126d6565b8584036126de565b60019150509392505050565b61dead81565b60098060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b610c276126d6565b73ffffffffffffffffffffffffffffffffffffffff16610c45611518565b73ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c929061416b565b60405180910390fd5b81600860000160006101000a81548161ffff021916908361ffff16021790555080600860000160026101000a81548161ffff021916908361ffff1602179055508082610ce791906141ba565b600e60006101000a81548161ffff021916908361ffff1602179055506005600e60009054906101000a900461ffff1661ffff161115610d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5290614262565b60405180910390fd5b5050565b60006009905090565b6000610e0a610d756126d6565b848460016000610d836126d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e059190614282565b6126de565b6001905092915050565b610e1c6126d6565b73ffffffffffffffffffffffffffffffffffffffff16610e3a611518565b73ffffffffffffffffffffffffffffffffffffffff1614610e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e879061416b565b60405180910390fd5b81600960000160006101000a81548161ffff021916908361ffff16021790555080600960000160026101000a81548161ffff021916908361ffff1602179055508082610edc91906141ba565b600e60026101000a81548161ffff021916908361ffff1602179055506005600e60029054906101000a900461ffff1661ffff161115610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790614262565b60405180910390fd5b5050565b60088060000160009054906101000a900461ffff16908060000160029054906101000a900461ffff16905082565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110066126d6565b73ffffffffffffffffffffffffffffffffffffffff16611024611518565b73ffffffffffffffffffffffffffffffffffffffff161461107a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110719061416b565b60405180910390fd5b633b9aca008161108a91906142b6565b600d8190555050565b61109b6126d6565b73ffffffffffffffffffffffffffffffffffffffff166110b9611518565b73ffffffffffffffffffffffffffffffffffffffff161461110f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111069061416b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590614382565b60405180910390fd5b80600e60056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b6111d06126d6565b73ffffffffffffffffffffffffffffffffffffffff166111ee611518565b73ffffffffffffffffffffffffffffffffffffffff1614611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b9061416b565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60116020528060005260406000206000915054906101000a900460ff1681565b600e60049054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113226126d6565b73ffffffffffffffffffffffffffffffffffffffff16611340611518565b73ffffffffffffffffffffffffffffffffffffffff1614611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d9061416b565b60405180910390fd5b6113a060006130b1565b565b6113aa6126d6565b73ffffffffffffffffffffffffffffffffffffffff166113c8611518565b73ffffffffffffffffffffffffffffffffffffffff161461141e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114159061416b565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b5481565b6114876126d6565b73ffffffffffffffffffffffffffffffffffffffff166114a5611518565b73ffffffffffffffffffffffffffffffffffffffff16146114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29061416b565b60405180910390fd5b6001601260006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115519061405c565b80601f016020809104026020016040519081016040528092919081815260200182805461157d9061405c565b80156115ca5780601f1061159f576101008083540402835291602001916115ca565b820191906000526020600020905b8154815290600101906020018083116115ad57829003601f168201915b5050505050905090565b6115dc6126d6565b73ffffffffffffffffffffffffffffffffffffffff166115fa611518565b73ffffffffffffffffffffffffffffffffffffffff1614611650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061416b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d79061443a565b60405180910390fd5b6116ea8282613177565b5050565b600080600160006116fd6126d6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b1906144cc565b60405180910390fd5b6117ce6117c56126d6565b858584036126de565b600191505092915050565b60006117ed6117e66126d6565b84846128a7565b6001905092915050565b600d5481565b6118056126d6565b73ffffffffffffffffffffffffffffffffffffffff16611823611518565b73ffffffffffffffffffffffffffffffffffffffff1614611879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118709061416b565b60405180910390fd5b633b9aca008161188991906142b6565b600a8190555050565b60136020528060005260406000206000915054906101000a900460ff1681565b6118ba6126d6565b73ffffffffffffffffffffffffffffffffffffffff166118d8611518565b73ffffffffffffffffffffffffffffffffffffffff161461192e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119259061416b565b60405180910390fd5b801515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061455e565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a5d9190613c10565b60405180910390a25050565b611a716126d6565b73ffffffffffffffffffffffffffffffffffffffff16611a8f611518565b73ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc9061416b565b60405180910390fd5b60005b83839050811015611b845781600f6000868685818110611b0b57611b0a61457e565b5b9050602002016020810190611b209190613e35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b7c906145ad565b915050611ae8565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611bb8939291906146b8565b60405180910390a1505050565b611bcd6126d6565b73ffffffffffffffffffffffffffffffffffffffff16611beb611518565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c389061416b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc89061475c565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da59190614791565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e529190614791565b6040518363ffffffff1660e01b8152600401611e6f9291906147be565b602060405180830381865afa158015611e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb09190614791565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120c957600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f779190614791565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120249190614791565b6040518363ffffffff1660e01b81526004016120419291906147be565b6020604051808303816000875af1158015612060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120849190614791565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061210b565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61219e6126d6565b73ffffffffffffffffffffffffffffffffffffffff166121bc611518565b73ffffffffffffffffffffffffffffffffffffffff1614612212576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122099061416b565b60405180910390fd5b80600e60046101000a81548160ff02191690831515021790555050565b600a5481565b61223d6126d6565b73ffffffffffffffffffffffffffffffffffffffff1661225b611518565b73ffffffffffffffffffffffffffffffffffffffff16146122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a89061416b565b60405180910390fd5b633b9aca00816122c191906142b6565b600c8190555050565b6122d26126d6565b73ffffffffffffffffffffffffffffffffffffffff166122f0611518565b73ffffffffffffffffffffffffffffffffffffffff1614612346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233d9061416b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ac90614859565b60405180910390fd5b6123be816130b1565b50565b6123c96126d6565b73ffffffffffffffffffffffffffffffffffffffff166123e7611518565b73ffffffffffffffffffffffffffffffffffffffff161461243d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124349061416b565b60405180910390fd5b633b9aca008161244d91906142b6565b600b8190555050565b61245e6126d6565b73ffffffffffffffffffffffffffffffffffffffff1661247c611518565b73ffffffffffffffffffffffffffffffffffffffff16146124d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c99061416b565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612537906148c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125c75761257c611518565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156125c1573d6000803e3d6000fd5b506126d3565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126079190613d31565b602060405180830381865afa158015612624573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264891906148fa565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61266e611518565b836040518363ffffffff1660e01b815260040161268c929190614927565b6020604051808303816000875af11580156126ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cf9190614965565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614a04565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b390614a96565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161289a9190613cb4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d90614b28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297c90614bba565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a295750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5f90614c26565b60405180910390fd5b60008103612a8157612a7c838360006132aa565b6130ac565b6000612a8c306112d2565b90506000600a548210159050600e60049054906101000a900460ff168015612ac15750600760149054906101000a900460ff16155b8015612b1b5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b245750805b15612be657600a5491506000600e60029054906101000a900461ffff16600e60009054906101000a900461ffff16612b5c91906141ba565b90506000612bbe8261ffff16612bb0600960000160029054906101000a900461ffff16600860000160029054906101000a900461ffff16612b9d91906141ba565b61ffff168761352990919063ffffffff16565b61353f90919063ffffffff16565b9050612bc981613555565b60008185612bd79190614c46565b9050612be28161362b565b5050505b600060019050600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c8d5750600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9757600090505b801561309d57601260009054906101000a900460ff16612cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce390614cc6565b60405180910390fd5b6000601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d5c57600e60029054906101000a900461ffff1661ffff169050612dc7565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612dc657600e60009054906101000a900461ffff1661ffff1690505b5b601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e6b5750601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561305057601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f0c57600c54851115612f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efe90614d32565b60405180910390fd5b612fa5565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612fa457600b54851115612fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9a90614d9e565b60405180910390fd5b5b5b601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661304f57600d5485613003886112d2565b61300d9190614282565b111561304e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304590614e0a565b60405180910390fd5b5b5b6000613078606461306a848961352990919063ffffffff16565b61353f90919063ffffffff16565b905061308d818761371d90919063ffffffff16565b955061309a8830836132aa565b50505b6130a88686866132aa565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503613209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320090614e9c565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331090614f2e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337f90614fc0565b60405180910390fd5b613393838383613733565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613419576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341090615052565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134ac9190614282565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135109190613cb4565b60405180910390a3613523848484613738565b50505050565b6000818361353791906142b6565b905092915050565b6000818361354d91906150a1565b905092915050565b6001600760146101000a81548160ff021916908315150217905550600061358660028361353f90919063ffffffff16565b9050600061359d828461371d90919063ffffffff16565b905060004790506135ad8361373d565b60006135c2824761371d90919063ffffffff16565b90506135ce8382613980565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051613601939291906150d2565b60405180910390a1505050506000600760146101000a81548160ff02191690831515021790555050565b6001600760146101000a81548160ff02191690831515021790555060004790506136548261373d565b600081476136629190614c46565b90506000600e60059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516136ac9061513a565b60006040518083038185875af1925050503d80600081146136e9576040519150601f19603f3d011682016040523d82523d6000602084013e6136ee565b606091505b50509050806136fc57600080fd5b5050506000600760146101000a81548160ff02191690831515021790555050565b6000818361372b9190614c46565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561375a5761375961514f565b5b6040519080825280602002602001820160405280156137885781602001602082028036833780820191505090505b50905030816000815181106137a05761379f61457e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386b9190614791565b8160018151811061387f5761387e61457e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138e630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126de565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161394a95949392919061523f565b600060405180830381600087803b15801561396457600080fd5b505af1158015613978573d6000803e3d6000fd5b505050505050565b6139ad30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126de565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806139f9611518565b426040518863ffffffff1660e01b8152600401613a1b96959493929190615299565b60606040518083038185885af1158015613a39573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613a5e91906152fa565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a9f578082015181840152602081019050613a84565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ac782613a65565b613ad18185613a70565b9350613ae1818560208601613a81565b613aea81613aab565b840191505092915050565b60006020820190508181036000830152613b0f8184613abc565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613b4c82613b21565b9050919050565b613b5c81613b41565b8114613b6757600080fd5b50565b600081359050613b7981613b53565b92915050565b6000819050919050565b613b9281613b7f565b8114613b9d57600080fd5b50565b600081359050613baf81613b89565b92915050565b60008060408385031215613bcc57613bcb613b17565b5b6000613bda85828601613b6a565b9250506020613beb85828601613ba0565b9150509250929050565b60008115159050919050565b613c0a81613bf5565b82525050565b6000602082019050613c256000830184613c01565b92915050565b6000819050919050565b6000613c50613c4b613c4684613b21565b613c2b565b613b21565b9050919050565b6000613c6282613c35565b9050919050565b6000613c7482613c57565b9050919050565b613c8481613c69565b82525050565b6000602082019050613c9f6000830184613c7b565b92915050565b613cae81613b7f565b82525050565b6000602082019050613cc96000830184613ca5565b92915050565b600080600060608486031215613ce857613ce7613b17565b5b6000613cf686828701613b6a565b9350506020613d0786828701613b6a565b9250506040613d1886828701613ba0565b9150509250925092565b613d2b81613b41565b82525050565b6000602082019050613d466000830184613d22565b92915050565b600061ffff82169050919050565b613d6381613d4c565b82525050565b6000604082019050613d7e6000830185613d5a565b613d8b6020830184613d5a565b9392505050565b613d9b81613d4c565b8114613da657600080fd5b50565b600081359050613db881613d92565b92915050565b60008060408385031215613dd557613dd4613b17565b5b6000613de385828601613da9565b9250506020613df485828601613da9565b9150509250929050565b600060ff82169050919050565b613e1481613dfe565b82525050565b6000602082019050613e2f6000830184613e0b565b92915050565b600060208284031215613e4b57613e4a613b17565b5b6000613e5984828501613b6a565b91505092915050565b600060208284031215613e7857613e77613b17565b5b6000613e8684828501613ba0565b91505092915050565b613e9881613bf5565b8114613ea357600080fd5b50565b600081359050613eb581613e8f565b92915050565b60008060408385031215613ed257613ed1613b17565b5b6000613ee085828601613b6a565b9250506020613ef185828601613ea6565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112613f2057613f1f613efb565b5b8235905067ffffffffffffffff811115613f3d57613f3c613f00565b5b602083019150836020820283011115613f5957613f58613f05565b5b9250929050565b600080600060408486031215613f7957613f78613b17565b5b600084013567ffffffffffffffff811115613f9757613f96613b1c565b5b613fa386828701613f0a565b93509350506020613fb686828701613ea6565b9150509250925092565b60008060408385031215613fd757613fd6613b17565b5b6000613fe585828601613b6a565b9250506020613ff685828601613b6a565b9150509250929050565b60006020828403121561401657614015613b17565b5b600061402484828501613ea6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061407457607f821691505b6020821081036140875761408661402d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006140e9602883613a70565b91506140f48261408d565b604082019050919050565b60006020820190508181036000830152614118816140dc565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614155602083613a70565b91506141608261411f565b602082019050919050565b6000602082019050818103600083015261418481614148565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006141c582613d4c565b91506141d083613d4c565b9250828201905061ffff8111156141ea576141e961418b565b5b92915050565b7f6d617820666565732073686f756c64206265206c657373207468616e2065717560008201527f616c20746f203525000000000000000000000000000000000000000000000000602082015250565b600061424c602883613a70565b9150614257826141f0565b604082019050919050565b6000602082019050818103600083015261427b8161423f565b9050919050565b600061428d82613b7f565b915061429883613b7f565b92508282019050808211156142b0576142af61418b565b5b92915050565b60006142c182613b7f565b91506142cc83613b7f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143055761430461418b565b5b828202905092915050565b7f6d61726b6574696e672077616c6c65742063616e27742062652061207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b600061436c602883613a70565b915061437782614310565b604082019050919050565b6000602082019050818103600083015261439b8161435f565b9050919050565b7f546f6b656e3a205468652050616e63616b655377617020706169722063616e6e60008201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60208201527f65744d616b657250616972730000000000000000000000000000000000000000604082015250565b6000614424604c83613a70565b915061442f826143a2565b606082019050919050565b6000602082019050818103600083015261445381614417565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006144b6602583613a70565b91506144c18261445a565b604082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b7f546f6b656e3a204163636f756e7420697320616c72656164792074686520766160008201527f6c7565206f6620276578636c7564656427000000000000000000000000000000602082015250565b6000614548603183613a70565b9150614553826144ec565b604082019050919050565b600060208201905081810360008301526145778161453b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006145b882613b7f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ea576145e961418b565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b61461981613b41565b82525050565b600061462b8383614610565b60208301905092915050565b60006146466020840184613b6a565b905092915050565b6000602082019050919050565b600061466783856145f5565b935061467282614606565b8060005b858110156146ab576146888284614637565b614692888261461f565b975061469d8361464e565b925050600181019050614676565b5085925050509392505050565b600060408201905081810360008301526146d381858761465b565b90506146e26020830184613c01565b949350505050565b7f544f4b454e3a2054686520726f7574657220616c72656164792068617320746860008201527f6174206164647265737300000000000000000000000000000000000000000000602082015250565b6000614746602a83613a70565b9150614751826146ea565b604082019050919050565b6000602082019050818103600083015261477581614739565b9050919050565b60008151905061478b81613b53565b92915050565b6000602082840312156147a7576147a6613b17565b5b60006147b58482850161477c565b91505092915050565b60006040820190506147d36000830185613d22565b6147e06020830184613d22565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614843602683613a70565b915061484e826147e7565b604082019050919050565b6000602082019050818103600083015261487281614836565b9050919050565b7f4e6f207275677300000000000000000000000000000000000000000000000000600082015250565b60006148af600783613a70565b91506148ba82614879565b602082019050919050565b600060208201905081810360008301526148de816148a2565b9050919050565b6000815190506148f481613b89565b92915050565b6000602082840312156149105761490f613b17565b5b600061491e848285016148e5565b91505092915050565b600060408201905061493c6000830185613d22565b6149496020830184613ca5565b9392505050565b60008151905061495f81613e8f565b92915050565b60006020828403121561497b5761497a613b17565b5b600061498984828501614950565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149ee602483613a70565b91506149f982614992565b604082019050919050565b60006020820190508181036000830152614a1d816149e1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a80602283613a70565b9150614a8b82614a24565b604082019050919050565b60006020820190508181036000830152614aaf81614a73565b9050919050565b7f546f6b656e3a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b12602583613a70565b9150614b1d82614ab6565b604082019050919050565b60006020820190508181036000830152614b4181614b05565b9050919050565b7f546f6b656e3a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614ba4602383613a70565b9150614baf82614b48565b604082019050919050565b60006020820190508181036000830152614bd381614b97565b9050919050565b7f4163636f756e7420697320626c61636b6c697374656400000000000000000000600082015250565b6000614c10601683613a70565b9150614c1b82614bda565b602082019050919050565b60006020820190508181036000830152614c3f81614c03565b9050919050565b6000614c5182613b7f565b9150614c5c83613b7f565b9250828203905081811115614c7457614c7361418b565b5b92915050565b7f54726164696e67206973206e6f7420656e61626c656420796574000000000000600082015250565b6000614cb0601a83613a70565b9150614cbb82614c7a565b602082019050919050565b60006020820190508181036000830152614cdf81614ca3565b9050919050565b7f53656c6c2065786365656473206c696d69740000000000000000000000000000600082015250565b6000614d1c601283613a70565b9150614d2782614ce6565b602082019050919050565b60006020820190508181036000830152614d4b81614d0f565b9050919050565b7f4275792065786365656473206c696d6974000000000000000000000000000000600082015250565b6000614d88601183613a70565b9150614d9382614d52565b602082019050919050565b60006020820190508181036000830152614db781614d7b565b9050919050565b7f42616c616e63652065786365656473206c696d69740000000000000000000000600082015250565b6000614df4601583613a70565b9150614dff82614dbe565b602082019050919050565b60006020820190508181036000830152614e2381614de7565b9050919050565b7f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160008201527f697220697320616c72656164792073657420746f20746861742076616c756500602082015250565b6000614e86603f83613a70565b9150614e9182614e2a565b604082019050919050565b60006020820190508181036000830152614eb581614e79565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f18602583613a70565b9150614f2382614ebc565b604082019050919050565b60006020820190508181036000830152614f4781614f0b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614faa602383613a70565b9150614fb582614f4e565b604082019050919050565b60006020820190508181036000830152614fd981614f9d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061503c602683613a70565b915061504782614fe0565b604082019050919050565b6000602082019050818103600083015261506b8161502f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150ac82613b7f565b91506150b783613b7f565b9250826150c7576150c6615072565b5b828204905092915050565b60006060820190506150e76000830186613ca5565b6150f46020830185613ca5565b6151016040830184613ca5565b949350505050565b600081905092915050565b50565b6000615124600083615109565b915061512f82615114565b600082019050919050565b600061514582615117565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b60006151a361519e6151998461517e565b613c2b565b613b7f565b9050919050565b6151b381615188565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b60006151ec826151b9565b6151f681856145f5565b9350615201836151c4565b8060005b83811015615232578151615219888261461f565b9750615224836151d4565b925050600181019050615205565b5085935050505092915050565b600060a0820190506152546000830188613ca5565b61526160208301876151aa565b818103604083015261527381866151e1565b90506152826060830185613d22565b61528f6080830184613ca5565b9695505050505050565b600060c0820190506152ae6000830189613d22565b6152bb6020830188613ca5565b6152c860408301876151aa565b6152d560608301866151aa565b6152e26080830185613d22565b6152ef60a0830184613ca5565b979650505050505050565b60008060006060848603121561531357615312613b17565b5b6000615321868287016148e5565b9350506020615332868287016148e5565b9250506040615343868287016148e5565b915050925092509256fea26469706673582212206dd02fb6f1bcca7958c7218fe06f063c9512aba0faccc6198f01155999626d1c64736f6c63430008100033

Deployed Bytecode Sourcemap

35368:13090:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25336:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27503:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35444:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26456:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28154:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35528:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35867:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;41569:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38717:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29055:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41930:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35840:20;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;35492:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42388:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42844:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42524:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36045:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40394:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36561:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36268:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26627:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18757:103;;;;;;;;;;;;;:::i;:::-;;40227:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35971:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42293:87;;;;;;;;;;;;;:::i;:::-;;18106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25555:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40862:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29773:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26967:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36120:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43193:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36793:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39463:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40524:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38816:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27205:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42743:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35906:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43076:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19015:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42960:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39805:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25336:100;25390:13;25423:5;25416:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25336:100;:::o;27503:169::-;27586:4;27603:39;27612:12;:10;:12::i;:::-;27626:7;27635:6;27603:8;:39::i;:::-;27660:4;27653:11;;27503:169;;;;:::o;35444:41::-;;;;;;;;;;;;;:::o;26456:108::-;26517:7;26544:12;;26537:19;;26456:108;:::o;28154:492::-;28294:4;28311:36;28321:6;28329:9;28340:6;28311:9;:36::i;:::-;28360:24;28387:11;:19;28399:6;28387:19;;;;;;;;;;;;;;;:33;28407:12;:10;:12::i;:::-;28387:33;;;;;;;;;;;;;;;;28360:60;;28459:6;28439:16;:26;;28431:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;28546:57;28555:6;28563:12;:10;:12::i;:::-;28596:6;28577:16;:25;28546:8;:57::i;:::-;28634:4;28627:11;;;28154:492;;;;;:::o;35528:53::-;35574:6;35528:53;:::o;35867:22::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41569:350::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41724:9:::1;41702:6;:19;;;:31;;;;;;;;;;;;;;;;;;41765:9;41743:6;:19;;;:31;;;;;;;;;;;;;;;;;;41821:9;41809;:21;;;;:::i;:::-;41795:11;;:35;;;;;;;;;;;;;;;;;;41865:1;41850:11;;;;;;;;;;;:16;;;;41841:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41569:350:::0;;:::o;38717:84::-;38767:5;38792:1;38785:8;;38717:84;:::o;29055:215::-;29143:4;29160:80;29169:12;:10;:12::i;:::-;29183:7;29229:10;29192:11;:25;29204:12;:10;:12::i;:::-;29192:25;;;;;;;;;;;;;;;:34;29218:7;29192:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;29160:8;:80::i;:::-;29258:4;29251:11;;29055:215;;;;:::o;41930:355::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42087:9:::1;42064:7;:20;;;:32;;;;;;;;;;;;;;;;;;42129:9;42106:7;:20;;;:32;;;;;;;;;;;;;;;;;;42186:9;42174;:21;;;;:::i;:::-;42159:12;;:36;;;;;;;;;;;;;;;;;;42231:1;42215:12;;;;;;;;;;;:17;;;;42206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41930:355:::0;;:::o;35840:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35492:29::-;;;;;;;;;;;;;:::o;42388:126::-;42454:4;42478:19;:28;42498:7;42478:28;;;;;;;;;;;;;;;;;;;;;;;;;42471:35;;42388:126;;;:::o;42844:108::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42939:5:::1;42930:6;:14;;;;:::i;:::-;42912:15;:32;;;;42844:108:::0;:::o;42524:211::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42632:1:::1;42610:25;;:9;:25;;::::0;42601:79:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42717:9;42691:15;;:36;;;;;;;;;;;;;;;;;;42524:211:::0;:::o;36045:48::-;;;;:::o;40394:114::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40495:5:::1;40472:14;:20;40487:4;40472:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;40394:114:::0;;:::o;36561:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;36268:23::-;;;;;;;;;;;;;:::o;26627:127::-;26701:7;26728:9;:18;26738:7;26728:18;;;;;;;;;;;;;;;;26721:25;;26627:127;;;:::o;18757:103::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18822:30:::1;18849:1;18822:18;:30::i;:::-;18757:103::o:0;40227:159::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40370:8:::1;40338:20;:29;40359:7;40338:29;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;40227:159:::0;;:::o;35971:47::-;;;;:::o;42293:87::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42368:4:::1;42349:16;;:23;;;;;;;;;;;;;;;;;;42293:87::o:0;18106:::-;18152:7;18179:6;;;;;;;;;;;18172:13;;18106:87;:::o;25555:104::-;25611:13;25644:7;25637:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25555:104;:::o;40862:323::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41006:13:::1;;;;;;;;;;;40998:21;;:4;:21;;::::0;40976:147:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;41136:41;41165:4;41171:5;41136:28;:41::i;:::-;40862:323:::0;;:::o;29773:413::-;29866:4;29883:24;29910:11;:25;29922:12;:10;:12::i;:::-;29910:25;;;;;;;;;;;;;;;:34;29936:7;29910:34;;;;;;;;;;;;;;;;29883:61;;29983:15;29963:16;:35;;29955:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30076:67;30085:12;:10;:12::i;:::-;30099:7;30127:15;30108:16;:34;30076:8;:67::i;:::-;30174:4;30167:11;;;29773:413;;;;:::o;26967:175::-;27053:4;27070:42;27080:12;:10;:12::i;:::-;27094:9;27105:6;27070:9;:42::i;:::-;27130:4;27123:11;;26967:175;;;;:::o;36120:50::-;;;;:::o;43193:120::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43300:5:::1;43291:6;:14;;;;:::i;:::-;43269:18;:36;;;;43193:120:::0;:::o;36793:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;39463:334::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39602:8:::1;39570:40;;:19;:28;39590:7;39570:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;39548:139:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39729:8;39698:19;:28;39718:7;39698:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39771:7;39755:34;;;39780:8;39755:34;;;;;;:::i;:::-;;;;;;;;39463:334:::0;;:::o;40524:330::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40667:9:::1;40662:116;40686:8;;:15;;40682:1;:19;40662:116;;;40758:8;40723:19;:32;40743:8;;40752:1;40743:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40723:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;40703:3;;;;;:::i;:::-;;;;40662:116;;;;40795:51;40827:8;;40837;40795:51;;;;;;;;:::i;:::-;;;;;;;;40524:330:::0;;;:::o;38816:639::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38917:15:::1;;;;;;;;;;;38895:38;;:10;:38;;::::0;38887:93:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39032:10;38995:15;;:48;;;;;;;;;;;;;;;;;;39055:16;39105:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39087:52;;;39148:4;39168:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39087:104;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39055:136;;39226:1;39206:22;;:8;:22;;::::0;39202:239:::1;;39290:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39272:55;;;39336:4;39357:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39272:108;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39243:13;;:137;;;;;;;;;;;;;;;;;;39202:239;;;39421:8;39405:13;;:24;;;;;;;;;;;;;;;;;;39202:239;38877:578;38816:639:::0;:::o;27205:151::-;27294:7;27321:11;:18;27333:5;27321:18;;;;;;;;;;;;;;;:27;27340:7;27321:27;;;;;;;;;;;;;;;;27314:34;;27205:151;;;;:::o;42743:93::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42823:5:::1;42809:11;;:19;;;;;;;;;;;;;;;;;;42743:93:::0;:::o;35906:55::-;;;;:::o;43076:110::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43173:5:::1;43164:6;:14;;;;:::i;:::-;43148:13;:30;;;;43076:110:::0;:::o;19015:201::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19124:1:::1;19104:22;;:8;:22;;::::0;19096:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19180:28;19199:8;19180:18;:28::i;:::-;19015:201:::0;:::o;42960:108::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43055:5:::1;43046:6;:14;;;;:::i;:::-;43031:12;:29;;;;42960:108:::0;:::o;39805:414::-;18337:12;:10;:12::i;:::-;18326:23;;:7;:5;:7::i;:::-;:23;;;18318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39903:4:::1;39885:23;;:6;:23;;::::0;39877:43:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39953:3;39935:22;;:6;:22;;::::0;39931:124:::1;;39982:7;:5;:7::i;:::-;39974:25;;:48;40000:21;39974:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40037:7;;39931:124;40065:17;40092:6;40065:34;;40110:15;40128:10;:20;;;40157:4;40128:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40110:53;;40174:10;:19;;;40194:7;:5;:7::i;:::-;40203;40174:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39866:353;;18397:1;39805:414:::0;:::o;16830:98::-;16883:7;16910:10;16903:17;;16830:98;:::o;33457:380::-;33610:1;33593:19;;:5;:19;;;33585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33691:1;33672:21;;:7;:21;;;33664:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33775:6;33745:11;:18;33757:5;33745:18;;;;;;;;;;;;;;;:27;33764:7;33745:27;;;;;;;;;;;;;;;:36;;;;33813:7;33797:32;;33806:5;33797:32;;;33822:6;33797:32;;;;;;:::i;:::-;;;;;;;;33457:380;;;:::o;43321:2702::-;43469:1;43453:18;;:4;:18;;;43445:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43546:1;43532:16;;:2;:16;;;43524:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43622:14;:20;43637:4;43622:20;;;;;;;;;;;;;;;;;;;;;;;;;43621:21;:44;;;;;43647:14;:18;43662:2;43647:18;;;;;;;;;;;;;;;;;;;;;;;;;43646:19;43621:44;43599:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;43742:1;43732:6;:11;43728:93;;43760:28;43776:4;43782:2;43786:1;43760:15;:28::i;:::-;43803:7;;43728:93;43833:28;43864:24;43882:4;43864:9;:24::i;:::-;43833:55;;43899:28;43967:18;;43930:20;:55;;43899:86;;44016:11;;;;;;;;;;;:37;;;;;44045:8;;;;;;;;;;;44044:9;44016:37;:75;;;;;44078:13;;;;;;;;;;;44070:21;;:4;:21;;;;44016:75;:115;;;;;44108:23;44016:115;43998:582;;;44181:18;;44158:41;;44214:15;44246:12;;;;;;;;;;;44232:11;;;;;;;;;;;:26;;;;:::i;:::-;44214:44;;44273:18;44294:82;44367:8;44294:82;;:68;44341:7;:20;;;;;;;;;;;;44319:6;:19;;;;;;;;;;;;:42;;;;:::i;:::-;44294:68;;:20;:24;;:68;;;;:::i;:::-;:72;;:82;;;;:::i;:::-;44273:103;;44413:26;44428:10;44413:14;:26::i;:::-;44454:23;44503:10;44480:20;:33;;;;:::i;:::-;44454:59;;44529:39;44552:15;44529:22;:39::i;:::-;44143:437;;;43998:582;44592:12;44607:4;44592:19;;44713;:25;44733:4;44713:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44742:19;:23;44762:2;44742:23;;;;;;;;;;;;;;;;;;;;;;;;;44713:52;44709:100;;;44792:5;44782:15;;44709:100;44825:7;44821:1138;;;44858:16;;;;;;;;;;;44849:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44920:12;44967:25;:29;44993:2;44967:29;;;;;;;;;;;;;;;;;;;;;;;;;44963:185;;;45024:12;;;;;;;;;;;45017:19;;;;44963:185;;;45062:25;:31;45088:4;45062:31;;;;;;;;;;;;;;;;;;;;;;;;;45058:90;;;45121:11;;;;;;;;;;;45114:18;;;;45058:90;44963:185;45169:20;:26;45190:4;45169:26;;;;;;;;;;;;;;;;;;;;;;;;;45168:27;:56;;;;;45200:20;:24;45221:2;45200:24;;;;;;;;;;;;;;;;;;;;;;;;;45199:25;45168:56;45164:613;;;45249:25;:29;45275:2;45249:29;;;;;;;;;;;;;;;;;;;;;;;;;45245:270;;;45321:13;;45311:6;:23;;45303:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45245:270;;;45387:25;:31;45413:4;45387:31;;;;;;;;;;;;;;;;;;;;;;;;;45383:132;;;45461:12;;45451:6;:22;;45443:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;45383:132;45245:270;45540:25;:29;45566:2;45540:29;;;;;;;;;;;;;;;;;;;;;;;;;45535:227;;45654:15;;45644:6;45628:13;45638:2;45628:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;45594:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;45535:227;45164:613;45793:17;45813:25;45834:3;45813:16;45824:4;45813:6;:10;;:16;;;;:::i;:::-;:20;;:25;;;;:::i;:::-;45793:45;;45862:21;45873:9;45862:6;:10;;:21;;;;:::i;:::-;45853:30;;45900:47;45916:4;45930;45937:9;45900:15;:47::i;:::-;44834:1125;;44821:1138;45971:33;45987:4;45993:2;45997:6;45971:15;:33::i;:::-;43434:2589;;;43321:2702;;;;:::o;19376:191::-;19450:16;19469:6;;;;;;;;;;;19450:25;;19495:8;19486:6;;:17;;;;;;;;;;;;;;;;;;19550:8;19519:40;;19540:8;19519:40;;;;;;;;;;;;19439:128;19376:191;:::o;41193:360::-;41333:5;41298:40;;:25;:31;41324:4;41298:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;41276:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;41474:5;41440:25;:31;41466:4;41440:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41539:5;41505:40;;41533:4;41505:40;;;;;;;;;;;;41193:360;;:::o;30676:733::-;30834:1;30816:20;;:6;:20;;;30808:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;30918:1;30897:23;;:9;:23;;;30889:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30973:47;30994:6;31002:9;31013:6;30973:20;:47::i;:::-;31033:21;31057:9;:17;31067:6;31057:17;;;;;;;;;;;;;;;;31033:41;;31110:6;31093:13;:23;;31085:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31231:6;31215:13;:22;31195:9;:17;31205:6;31195:17;;;;;;;;;;;;;;;:42;;;;31283:6;31259:9;:20;31269:9;31259:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;31324:9;31307:35;;31316:6;31307:35;;;31335:6;31307:35;;;;;;:::i;:::-;;;;;;;;31355:46;31375:6;31383:9;31394:6;31355:19;:46::i;:::-;30797:612;30676:733;;;:::o;12724:98::-;12782:7;12813:1;12809;:5;;;;:::i;:::-;12802:12;;12724:98;;;;:::o;13123:::-;13181:7;13212:1;13208;:5;;;;:::i;:::-;13201:12;;13123:98;;;;:::o;46370:951::-;37287:4;37276:8;;:15;;;;;;;;;;;;;;;;;;46506:12:::1;46521:27;46546:1;46521:20;:24;;:27;;;;:::i;:::-;46506:42;;46559:17;46579:30;46604:4;46579:20;:24;;:30;;;;:::i;:::-;46559:50;;46887:22;46912:21;46887:46;;46978:22;46995:4;46978:16;:22::i;:::-;47105:18;47126:41;47152:14;47126:21;:25;;:41;;;;:::i;:::-;47105:62;;47217:35;47230:9;47241:10;47217:12;:35::i;:::-;47270:43;47285:4;47291:10;47303:9;47270:43;;;;;;;;:::i;:::-;;;;;;;;46444:877;;;;37325:5:::0;37314:8;;:16;;;;;;;;;;;;;;;;;;46370:951;:::o;46031:326::-;37287:4;37276:8;;:15;;;;;;;;;;;;;;;;;;46110:18:::1;46131:21;46110:42;;46164:24;46181:6;46164:16;:24::i;:::-;46199:18;46244:10;46220:21;:34;;;;:::i;:::-;46199:55;;46266:7;46287:15;;;;;;;;;;;46279:29;;46316:10;46279:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46265:66;;;46346:2;46338:11;;;::::0;::::1;;46099:258;;;37325:5:::0;37314:8;;:16;;;;;;;;;;;;;;;;;;46031:326;:::o;12367:98::-;12425:7;12456:1;12452;:5;;;;:::i;:::-;12445:12;;12367:98;;;;:::o;34437:125::-;;;;:::o;35166:124::-;;;;:::o;47854:589::-;47980:21;48018:1;48004:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47980:40;;48049:4;48031;48036:1;48031:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48075:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48065:4;48070:1;48065:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48110:62;48127:4;48142:15;;;;;;;;;;;48160:11;48110:8;:62::i;:::-;48211:15;;;;;;;;;;;:66;;;48292:11;48318:1;48362:4;48389;48409:15;48211:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47909:534;47854:589;:::o;47329:513::-;47477:62;47494:4;47509:15;;;;;;;;;;;47527:11;47477:8;:62::i;:::-;47582:15;;;;;;;;;;;:31;;;47621:9;47654:4;47674:11;47700:1;47743;47786:7;:5;:7::i;:::-;47808:15;47582:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47329:513;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652: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:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:118::-;5483:24;5501:5;5483:24;:::i;:::-;5478:3;5471:37;5396:118;;:::o;5520:222::-;5613:4;5651:2;5640:9;5636:18;5628:26;;5664:71;5732:1;5721:9;5717:17;5708:6;5664:71;:::i;:::-;5520:222;;;;:::o;5748:89::-;5784:7;5824:6;5817:5;5813:18;5802:29;;5748:89;;;:::o;5843:115::-;5928:23;5945:5;5928:23;:::i;:::-;5923:3;5916:36;5843:115;;:::o;5964:324::-;6081:4;6119:2;6108:9;6104:18;6096:26;;6132:69;6198:1;6187:9;6183:17;6174:6;6132:69;:::i;:::-;6211:70;6277:2;6266:9;6262:18;6253:6;6211:70;:::i;:::-;5964:324;;;;;:::o;6294:120::-;6366:23;6383:5;6366:23;:::i;:::-;6359:5;6356:34;6346:62;;6404:1;6401;6394:12;6346:62;6294:120;:::o;6420:137::-;6465:5;6503:6;6490:20;6481:29;;6519:32;6545:5;6519:32;:::i;:::-;6420:137;;;;:::o;6563:470::-;6629:6;6637;6686:2;6674:9;6665:7;6661:23;6657:32;6654:119;;;6692:79;;:::i;:::-;6654:119;6812:1;6837:52;6881:7;6872:6;6861:9;6857:22;6837:52;:::i;:::-;6827:62;;6783:116;6938:2;6964:52;7008:7;6999:6;6988:9;6984:22;6964:52;:::i;:::-;6954:62;;6909:117;6563:470;;;;;:::o;7039:86::-;7074:7;7114:4;7107:5;7103:16;7092:27;;7039:86;;;:::o;7131:112::-;7214:22;7230:5;7214:22;:::i;:::-;7209:3;7202:35;7131:112;;:::o;7249:214::-;7338:4;7376:2;7365:9;7361:18;7353:26;;7389:67;7453:1;7442:9;7438:17;7429:6;7389:67;:::i;:::-;7249:214;;;;:::o;7469:329::-;7528:6;7577:2;7565:9;7556:7;7552:23;7548:32;7545:119;;;7583:79;;:::i;:::-;7545:119;7703:1;7728:53;7773:7;7764:6;7753:9;7749:22;7728:53;:::i;:::-;7718:63;;7674:117;7469:329;;;;:::o;7804:::-;7863:6;7912:2;7900:9;7891:7;7887:23;7883:32;7880:119;;;7918:79;;:::i;:::-;7880:119;8038:1;8063:53;8108:7;8099:6;8088:9;8084:22;8063:53;:::i;:::-;8053:63;;8009:117;7804:329;;;;:::o;8139:116::-;8209:21;8224:5;8209:21;:::i;:::-;8202:5;8199:32;8189:60;;8245:1;8242;8235:12;8189:60;8139:116;:::o;8261:133::-;8304:5;8342:6;8329:20;8320:29;;8358:30;8382:5;8358:30;:::i;:::-;8261:133;;;;:::o;8400:468::-;8465:6;8473;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:53;8718:7;8709:6;8698:9;8694:22;8673:53;:::i;:::-;8663:63;;8619:117;8775:2;8801:50;8843:7;8834:6;8823:9;8819:22;8801:50;:::i;:::-;8791:60;;8746:115;8400:468;;;;;:::o;8874:117::-;8983:1;8980;8973:12;8997:117;9106:1;9103;9096:12;9120:117;9229:1;9226;9219:12;9260:568;9333:8;9343:6;9393:3;9386:4;9378:6;9374:17;9370:27;9360:122;;9401:79;;:::i;:::-;9360:122;9514:6;9501:20;9491:30;;9544:18;9536:6;9533:30;9530:117;;;9566:79;;:::i;:::-;9530:117;9680:4;9672:6;9668:17;9656:29;;9734:3;9726:4;9718:6;9714:17;9704:8;9700:32;9697:41;9694:128;;;9741:79;;:::i;:::-;9694:128;9260:568;;;;;:::o;9834:698::-;9926:6;9934;9942;9991:2;9979:9;9970:7;9966:23;9962:32;9959:119;;;9997:79;;:::i;:::-;9959:119;10145:1;10134:9;10130:17;10117:31;10175:18;10167:6;10164:30;10161:117;;;10197:79;;:::i;:::-;10161:117;10310:80;10382:7;10373:6;10362:9;10358:22;10310:80;:::i;:::-;10292:98;;;;10088:312;10439:2;10465:50;10507:7;10498:6;10487:9;10483:22;10465:50;:::i;:::-;10455:60;;10410:115;9834:698;;;;;:::o;10538:474::-;10606:6;10614;10663:2;10651:9;10642:7;10638:23;10634:32;10631:119;;;10669:79;;:::i;:::-;10631:119;10789:1;10814:53;10859:7;10850:6;10839:9;10835:22;10814:53;:::i;:::-;10804:63;;10760:117;10916:2;10942:53;10987:7;10978:6;10967:9;10963:22;10942:53;:::i;:::-;10932:63;;10887:118;10538:474;;;;;:::o;11018:323::-;11074:6;11123:2;11111:9;11102:7;11098:23;11094:32;11091:119;;;11129:79;;:::i;:::-;11091:119;11249:1;11274:50;11316:7;11307:6;11296:9;11292:22;11274:50;:::i;:::-;11264:60;;11220:114;11018:323;;;;:::o;11347:180::-;11395:77;11392:1;11385:88;11492:4;11489:1;11482:15;11516:4;11513:1;11506:15;11533:320;11577:6;11614:1;11608:4;11604:12;11594:22;;11661:1;11655:4;11651:12;11682:18;11672:81;;11738:4;11730:6;11726:17;11716:27;;11672:81;11800:2;11792:6;11789:14;11769:18;11766:38;11763:84;;11819:18;;:::i;:::-;11763:84;11584:269;11533:320;;;:::o;11859:227::-;11999:34;11995:1;11987:6;11983:14;11976:58;12068:10;12063:2;12055:6;12051:15;12044:35;11859:227;:::o;12092:366::-;12234:3;12255:67;12319:2;12314:3;12255:67;:::i;:::-;12248:74;;12331:93;12420:3;12331:93;:::i;:::-;12449:2;12444:3;12440:12;12433:19;;12092:366;;;:::o;12464:419::-;12630:4;12668:2;12657:9;12653:18;12645:26;;12717:9;12711:4;12707:20;12703:1;12692:9;12688:17;12681:47;12745:131;12871:4;12745:131;:::i;:::-;12737:139;;12464:419;;;:::o;12889:182::-;13029:34;13025:1;13017:6;13013:14;13006:58;12889:182;:::o;13077:366::-;13219:3;13240:67;13304:2;13299:3;13240:67;:::i;:::-;13233:74;;13316:93;13405:3;13316:93;:::i;:::-;13434:2;13429:3;13425:12;13418:19;;13077:366;;;:::o;13449:419::-;13615:4;13653:2;13642:9;13638:18;13630:26;;13702:9;13696:4;13692:20;13688:1;13677:9;13673:17;13666:47;13730:131;13856:4;13730:131;:::i;:::-;13722:139;;13449:419;;;:::o;13874:180::-;13922:77;13919:1;13912:88;14019:4;14016:1;14009:15;14043:4;14040:1;14033:15;14060:193;14099:3;14118:19;14135:1;14118:19;:::i;:::-;14113:24;;14151:19;14168:1;14151:19;:::i;:::-;14146:24;;14193:1;14190;14186:9;14179:16;;14216:6;14211:3;14208:15;14205:41;;;14226:18;;:::i;:::-;14205:41;14060:193;;;;:::o;14259:227::-;14399:34;14395:1;14387:6;14383:14;14376:58;14468:10;14463:2;14455:6;14451:15;14444:35;14259:227;:::o;14492:366::-;14634:3;14655:67;14719:2;14714:3;14655:67;:::i;:::-;14648:74;;14731:93;14820:3;14731:93;:::i;:::-;14849:2;14844:3;14840:12;14833:19;;14492:366;;;:::o;14864:419::-;15030:4;15068:2;15057:9;15053:18;15045:26;;15117:9;15111:4;15107:20;15103:1;15092:9;15088:17;15081:47;15145:131;15271:4;15145:131;:::i;:::-;15137:139;;14864:419;;;:::o;15289:191::-;15329:3;15348:20;15366:1;15348:20;:::i;:::-;15343:25;;15382:20;15400:1;15382:20;:::i;:::-;15377:25;;15425:1;15422;15418:9;15411:16;;15446:3;15443:1;15440:10;15437:36;;;15453:18;;:::i;:::-;15437:36;15289:191;;;;:::o;15486:348::-;15526:7;15549:20;15567:1;15549:20;:::i;:::-;15544:25;;15583:20;15601:1;15583:20;:::i;:::-;15578:25;;15771:1;15703:66;15699:74;15696:1;15693:81;15688:1;15681:9;15674:17;15670:105;15667:131;;;15778:18;;:::i;:::-;15667:131;15826:1;15823;15819:9;15808:20;;15486:348;;;;:::o;15840:227::-;15980:34;15976:1;15968:6;15964:14;15957:58;16049:10;16044:2;16036:6;16032:15;16025:35;15840:227;:::o;16073:366::-;16215:3;16236:67;16300:2;16295:3;16236:67;:::i;:::-;16229:74;;16312:93;16401:3;16312:93;:::i;:::-;16430:2;16425:3;16421:12;16414:19;;16073:366;;;:::o;16445:419::-;16611:4;16649:2;16638:9;16634:18;16626:26;;16698:9;16692:4;16688:20;16684:1;16673:9;16669:17;16662:47;16726:131;16852:4;16726:131;:::i;:::-;16718:139;;16445:419;;;:::o;16870:300::-;17010:34;17006:1;16998:6;16994:14;16987:58;17079:34;17074:2;17066:6;17062:15;17055:59;17148:14;17143:2;17135:6;17131:15;17124:39;16870:300;:::o;17176:366::-;17318:3;17339:67;17403:2;17398:3;17339:67;:::i;:::-;17332:74;;17415:93;17504:3;17415:93;:::i;:::-;17533:2;17528:3;17524:12;17517:19;;17176:366;;;:::o;17548:419::-;17714:4;17752:2;17741:9;17737:18;17729:26;;17801:9;17795:4;17791:20;17787:1;17776:9;17772:17;17765:47;17829:131;17955:4;17829:131;:::i;:::-;17821:139;;17548:419;;;:::o;17973:224::-;18113:34;18109:1;18101:6;18097:14;18090:58;18182:7;18177:2;18169:6;18165:15;18158:32;17973:224;:::o;18203:366::-;18345:3;18366:67;18430:2;18425:3;18366:67;:::i;:::-;18359:74;;18442:93;18531:3;18442:93;:::i;:::-;18560:2;18555:3;18551:12;18544:19;;18203:366;;;:::o;18575:419::-;18741:4;18779:2;18768:9;18764:18;18756:26;;18828:9;18822:4;18818:20;18814:1;18803:9;18799:17;18792:47;18856:131;18982:4;18856:131;:::i;:::-;18848:139;;18575:419;;;:::o;19000:236::-;19140:34;19136:1;19128:6;19124:14;19117:58;19209:19;19204:2;19196:6;19192:15;19185:44;19000:236;:::o;19242:366::-;19384:3;19405:67;19469:2;19464:3;19405:67;:::i;:::-;19398:74;;19481:93;19570:3;19481:93;:::i;:::-;19599:2;19594:3;19590:12;19583:19;;19242:366;;;:::o;19614:419::-;19780:4;19818:2;19807:9;19803:18;19795:26;;19867:9;19861:4;19857:20;19853:1;19842:9;19838:17;19831:47;19895:131;20021:4;19895:131;:::i;:::-;19887:139;;19614:419;;;:::o;20039:180::-;20087:77;20084:1;20077:88;20184:4;20181:1;20174:15;20208:4;20205:1;20198:15;20225:233;20264:3;20287:24;20305:5;20287:24;:::i;:::-;20278:33;;20333:66;20326:5;20323:77;20320:103;;20403:18;;:::i;:::-;20320:103;20450:1;20443:5;20439:13;20432:20;;20225:233;;;:::o;20464:184::-;20563:11;20597:6;20592:3;20585:19;20637:4;20632:3;20628:14;20613:29;;20464:184;;;;:::o;20654:102::-;20723:4;20746:3;20738:11;;20654:102;;;:::o;20762:108::-;20839:24;20857:5;20839:24;:::i;:::-;20834:3;20827:37;20762:108;;:::o;20876:179::-;20945:10;20966:46;21008:3;21000:6;20966:46;:::i;:::-;21044:4;21039:3;21035:14;21021:28;;20876:179;;;;:::o;21061:122::-;21113:5;21138:39;21173:2;21168:3;21164:12;21159:3;21138:39;:::i;:::-;21129:48;;21061:122;;;;:::o;21189:115::-;21261:4;21293;21288:3;21284:14;21276:22;;21189:115;;;:::o;21340:699::-;21469:3;21492:86;21571:6;21566:3;21492:86;:::i;:::-;21485:93;;21602:58;21654:5;21602:58;:::i;:::-;21683:7;21714:1;21699:315;21724:6;21721:1;21718:13;21699:315;;;21794:42;21829:6;21820:7;21794:42;:::i;:::-;21856:63;21915:3;21900:13;21856:63;:::i;:::-;21849:70;;21942:62;21997:6;21942:62;:::i;:::-;21932:72;;21759:255;21746:1;21743;21739:9;21734:14;;21699:315;;;21703:14;22030:3;22023:10;;21474:565;;21340:699;;;;;:::o;22045:491::-;22220:4;22258:2;22247:9;22243:18;22235:26;;22307:9;22301:4;22297:20;22293:1;22282:9;22278:17;22271:47;22335:118;22448:4;22439:6;22431;22335:118;:::i;:::-;22327:126;;22463:66;22525:2;22514:9;22510:18;22501:6;22463:66;:::i;:::-;22045:491;;;;;;:::o;22542:229::-;22682:34;22678:1;22670:6;22666:14;22659:58;22751:12;22746:2;22738:6;22734:15;22727:37;22542:229;:::o;22777:366::-;22919:3;22940:67;23004:2;22999:3;22940:67;:::i;:::-;22933:74;;23016:93;23105:3;23016:93;:::i;:::-;23134:2;23129:3;23125:12;23118:19;;22777:366;;;:::o;23149:419::-;23315:4;23353:2;23342:9;23338:18;23330:26;;23402:9;23396:4;23392:20;23388:1;23377:9;23373:17;23366:47;23430:131;23556:4;23430:131;:::i;:::-;23422:139;;23149:419;;;:::o;23574:143::-;23631:5;23662:6;23656:13;23647:22;;23678:33;23705:5;23678:33;:::i;:::-;23574:143;;;;:::o;23723:351::-;23793:6;23842:2;23830:9;23821:7;23817:23;23813:32;23810:119;;;23848:79;;:::i;:::-;23810:119;23968:1;23993:64;24049:7;24040:6;24029:9;24025:22;23993:64;:::i;:::-;23983:74;;23939:128;23723:351;;;;:::o;24080:332::-;24201:4;24239:2;24228:9;24224:18;24216:26;;24252:71;24320:1;24309:9;24305:17;24296:6;24252:71;:::i;:::-;24333:72;24401:2;24390:9;24386:18;24377:6;24333:72;:::i;:::-;24080:332;;;;;:::o;24418:225::-;24558:34;24554:1;24546:6;24542:14;24535:58;24627:8;24622:2;24614:6;24610:15;24603:33;24418:225;:::o;24649:366::-;24791:3;24812:67;24876:2;24871:3;24812:67;:::i;:::-;24805:74;;24888:93;24977:3;24888:93;:::i;:::-;25006:2;25001:3;24997:12;24990:19;;24649:366;;;:::o;25021:419::-;25187:4;25225:2;25214:9;25210:18;25202:26;;25274:9;25268:4;25264:20;25260:1;25249:9;25245:17;25238:47;25302:131;25428:4;25302:131;:::i;:::-;25294:139;;25021:419;;;:::o;25446:157::-;25586:9;25582:1;25574:6;25570:14;25563:33;25446:157;:::o;25609:365::-;25751:3;25772:66;25836:1;25831:3;25772:66;:::i;:::-;25765:73;;25847:93;25936:3;25847:93;:::i;:::-;25965:2;25960:3;25956:12;25949:19;;25609:365;;;:::o;25980:419::-;26146:4;26184:2;26173:9;26169:18;26161:26;;26233:9;26227:4;26223:20;26219:1;26208:9;26204:17;26197:47;26261:131;26387:4;26261:131;:::i;:::-;26253:139;;25980:419;;;:::o;26405:143::-;26462:5;26493:6;26487:13;26478:22;;26509:33;26536:5;26509:33;:::i;:::-;26405:143;;;;:::o;26554:351::-;26624:6;26673:2;26661:9;26652:7;26648:23;26644:32;26641:119;;;26679:79;;:::i;:::-;26641:119;26799:1;26824:64;26880:7;26871:6;26860:9;26856:22;26824:64;:::i;:::-;26814:74;;26770:128;26554:351;;;;:::o;26911:332::-;27032:4;27070:2;27059:9;27055:18;27047:26;;27083:71;27151:1;27140:9;27136:17;27127:6;27083:71;:::i;:::-;27164:72;27232:2;27221:9;27217:18;27208:6;27164:72;:::i;:::-;26911:332;;;;;:::o;27249:137::-;27303:5;27334:6;27328:13;27319:22;;27350:30;27374:5;27350:30;:::i;:::-;27249:137;;;;:::o;27392:345::-;27459:6;27508:2;27496:9;27487:7;27483:23;27479:32;27476:119;;;27514:79;;:::i;:::-;27476:119;27634:1;27659:61;27712:7;27703:6;27692:9;27688:22;27659:61;:::i;:::-;27649:71;;27605:125;27392:345;;;;:::o;27743:223::-;27883:34;27879:1;27871:6;27867:14;27860:58;27952:6;27947:2;27939:6;27935:15;27928:31;27743:223;:::o;27972:366::-;28114:3;28135:67;28199:2;28194:3;28135:67;:::i;:::-;28128:74;;28211:93;28300:3;28211:93;:::i;:::-;28329:2;28324:3;28320:12;28313:19;;27972:366;;;:::o;28344:419::-;28510:4;28548:2;28537:9;28533:18;28525:26;;28597:9;28591:4;28587:20;28583:1;28572:9;28568:17;28561:47;28625:131;28751:4;28625:131;:::i;:::-;28617:139;;28344:419;;;:::o;28769:221::-;28909:34;28905:1;28897:6;28893:14;28886:58;28978:4;28973:2;28965:6;28961:15;28954:29;28769:221;:::o;28996:366::-;29138:3;29159:67;29223:2;29218:3;29159:67;:::i;:::-;29152:74;;29235:93;29324:3;29235:93;:::i;:::-;29353:2;29348:3;29344:12;29337:19;;28996:366;;;:::o;29368:419::-;29534:4;29572:2;29561:9;29557:18;29549:26;;29621:9;29615:4;29611:20;29607:1;29596:9;29592:17;29585:47;29649:131;29775:4;29649:131;:::i;:::-;29641:139;;29368:419;;;:::o;29793:224::-;29933:34;29929:1;29921:6;29917:14;29910:58;30002:7;29997:2;29989:6;29985:15;29978:32;29793:224;:::o;30023:366::-;30165:3;30186:67;30250:2;30245:3;30186:67;:::i;:::-;30179:74;;30262:93;30351:3;30262:93;:::i;:::-;30380:2;30375:3;30371:12;30364:19;;30023:366;;;:::o;30395:419::-;30561:4;30599:2;30588:9;30584:18;30576:26;;30648:9;30642:4;30638:20;30634:1;30623:9;30619:17;30612:47;30676:131;30802:4;30676:131;:::i;:::-;30668:139;;30395:419;;;:::o;30820:222::-;30960:34;30956:1;30948:6;30944:14;30937:58;31029:5;31024:2;31016:6;31012:15;31005:30;30820:222;:::o;31048:366::-;31190:3;31211:67;31275:2;31270:3;31211:67;:::i;:::-;31204:74;;31287:93;31376:3;31287:93;:::i;:::-;31405:2;31400:3;31396:12;31389:19;;31048:366;;;:::o;31420:419::-;31586:4;31624:2;31613:9;31609:18;31601:26;;31673:9;31667:4;31663:20;31659:1;31648:9;31644:17;31637:47;31701:131;31827:4;31701:131;:::i;:::-;31693:139;;31420:419;;;:::o;31845:172::-;31985:24;31981:1;31973:6;31969:14;31962:48;31845:172;:::o;32023:366::-;32165:3;32186:67;32250:2;32245:3;32186:67;:::i;:::-;32179:74;;32262:93;32351:3;32262:93;:::i;:::-;32380:2;32375:3;32371:12;32364:19;;32023:366;;;:::o;32395:419::-;32561:4;32599:2;32588:9;32584:18;32576:26;;32648:9;32642:4;32638:20;32634:1;32623:9;32619:17;32612:47;32676:131;32802:4;32676:131;:::i;:::-;32668:139;;32395:419;;;:::o;32820:194::-;32860:4;32880:20;32898:1;32880:20;:::i;:::-;32875:25;;32914:20;32932:1;32914:20;:::i;:::-;32909:25;;32958:1;32955;32951:9;32943:17;;32982:1;32976:4;32973:11;32970:37;;;32987:18;;:::i;:::-;32970:37;32820:194;;;;:::o;33020:176::-;33160:28;33156:1;33148:6;33144:14;33137:52;33020:176;:::o;33202:366::-;33344:3;33365:67;33429:2;33424:3;33365:67;:::i;:::-;33358:74;;33441:93;33530:3;33441:93;:::i;:::-;33559:2;33554:3;33550:12;33543:19;;33202:366;;;:::o;33574:419::-;33740:4;33778:2;33767:9;33763:18;33755:26;;33827:9;33821:4;33817:20;33813:1;33802:9;33798:17;33791:47;33855:131;33981:4;33855:131;:::i;:::-;33847:139;;33574:419;;;:::o;33999:168::-;34139:20;34135:1;34127:6;34123:14;34116:44;33999:168;:::o;34173:366::-;34315:3;34336:67;34400:2;34395:3;34336:67;:::i;:::-;34329:74;;34412:93;34501:3;34412:93;:::i;:::-;34530:2;34525:3;34521:12;34514:19;;34173:366;;;:::o;34545:419::-;34711:4;34749:2;34738:9;34734:18;34726:26;;34798:9;34792:4;34788:20;34784:1;34773:9;34769:17;34762:47;34826:131;34952:4;34826:131;:::i;:::-;34818:139;;34545:419;;;:::o;34970:167::-;35110:19;35106:1;35098:6;35094:14;35087:43;34970:167;:::o;35143:366::-;35285:3;35306:67;35370:2;35365:3;35306:67;:::i;:::-;35299:74;;35382:93;35471:3;35382:93;:::i;:::-;35500:2;35495:3;35491:12;35484:19;;35143:366;;;:::o;35515:419::-;35681:4;35719:2;35708:9;35704:18;35696:26;;35768:9;35762:4;35758:20;35754:1;35743:9;35739:17;35732:47;35796:131;35922:4;35796:131;:::i;:::-;35788:139;;35515:419;;;:::o;35940:171::-;36080:23;36076:1;36068:6;36064:14;36057:47;35940:171;:::o;36117:366::-;36259:3;36280:67;36344:2;36339:3;36280:67;:::i;:::-;36273:74;;36356:93;36445:3;36356:93;:::i;:::-;36474:2;36469:3;36465:12;36458:19;;36117:366;;;:::o;36489:419::-;36655:4;36693:2;36682:9;36678:18;36670:26;;36742:9;36736:4;36732:20;36728:1;36717:9;36713:17;36706:47;36770:131;36896:4;36770:131;:::i;:::-;36762:139;;36489:419;;;:::o;36914:250::-;37054:34;37050:1;37042:6;37038:14;37031:58;37123:33;37118:2;37110:6;37106:15;37099:58;36914:250;:::o;37170:366::-;37312:3;37333:67;37397:2;37392:3;37333:67;:::i;:::-;37326:74;;37409:93;37498:3;37409:93;:::i;:::-;37527:2;37522:3;37518:12;37511:19;;37170:366;;;:::o;37542:419::-;37708:4;37746:2;37735:9;37731:18;37723:26;;37795:9;37789:4;37785:20;37781:1;37770:9;37766:17;37759:47;37823:131;37949:4;37823:131;:::i;:::-;37815:139;;37542:419;;;:::o;37967:224::-;38107:34;38103:1;38095:6;38091:14;38084:58;38176:7;38171:2;38163:6;38159:15;38152:32;37967:224;:::o;38197:366::-;38339:3;38360:67;38424:2;38419:3;38360:67;:::i;:::-;38353:74;;38436:93;38525:3;38436:93;:::i;:::-;38554:2;38549:3;38545:12;38538:19;;38197:366;;;:::o;38569:419::-;38735:4;38773:2;38762:9;38758:18;38750:26;;38822:9;38816:4;38812:20;38808:1;38797:9;38793:17;38786:47;38850:131;38976:4;38850:131;:::i;:::-;38842:139;;38569:419;;;:::o;38994:222::-;39134:34;39130:1;39122:6;39118:14;39111:58;39203:5;39198:2;39190:6;39186:15;39179:30;38994:222;:::o;39222:366::-;39364:3;39385:67;39449:2;39444:3;39385:67;:::i;:::-;39378:74;;39461:93;39550:3;39461:93;:::i;:::-;39579:2;39574:3;39570:12;39563:19;;39222:366;;;:::o;39594:419::-;39760:4;39798:2;39787:9;39783:18;39775:26;;39847:9;39841:4;39837:20;39833:1;39822:9;39818:17;39811:47;39875:131;40001:4;39875:131;:::i;:::-;39867:139;;39594:419;;;:::o;40019:225::-;40159:34;40155:1;40147:6;40143:14;40136:58;40228:8;40223:2;40215:6;40211:15;40204:33;40019:225;:::o;40250:366::-;40392:3;40413:67;40477:2;40472:3;40413:67;:::i;:::-;40406:74;;40489:93;40578:3;40489:93;:::i;:::-;40607:2;40602:3;40598:12;40591:19;;40250:366;;;:::o;40622:419::-;40788:4;40826:2;40815:9;40811:18;40803:26;;40875:9;40869:4;40865:20;40861:1;40850:9;40846:17;40839:47;40903:131;41029:4;40903:131;:::i;:::-;40895:139;;40622:419;;;:::o;41047:180::-;41095:77;41092:1;41085:88;41192:4;41189:1;41182:15;41216:4;41213:1;41206:15;41233:185;41273:1;41290:20;41308:1;41290:20;:::i;:::-;41285:25;;41324:20;41342:1;41324:20;:::i;:::-;41319:25;;41363:1;41353:35;;41368:18;;:::i;:::-;41353:35;41410:1;41407;41403:9;41398:14;;41233:185;;;;:::o;41424:442::-;41573:4;41611:2;41600:9;41596:18;41588:26;;41624:71;41692:1;41681:9;41677:17;41668:6;41624:71;:::i;:::-;41705:72;41773:2;41762:9;41758:18;41749:6;41705:72;:::i;:::-;41787;41855:2;41844:9;41840:18;41831:6;41787:72;:::i;:::-;41424:442;;;;;;:::o;41872:147::-;41973:11;42010:3;41995:18;;41872:147;;;;:::o;42025:114::-;;:::o;42145:398::-;42304:3;42325:83;42406:1;42401:3;42325:83;:::i;:::-;42318:90;;42417:93;42506:3;42417:93;:::i;:::-;42535:1;42530:3;42526:11;42519:18;;42145:398;;;:::o;42549:379::-;42733:3;42755:147;42898:3;42755:147;:::i;:::-;42748:154;;42919:3;42912:10;;42549:379;;;:::o;42934:180::-;42982:77;42979:1;42972:88;43079:4;43076:1;43069:15;43103:4;43100:1;43093:15;43120:85;43165:7;43194:5;43183:16;;43120:85;;;:::o;43211:158::-;43269:9;43302:61;43320:42;43329:32;43355:5;43329:32;:::i;:::-;43320:42;:::i;:::-;43302:61;:::i;:::-;43289:74;;43211:158;;;:::o;43375:147::-;43470:45;43509:5;43470:45;:::i;:::-;43465:3;43458:58;43375:147;;:::o;43528:114::-;43595:6;43629:5;43623:12;43613:22;;43528:114;;;:::o;43648:132::-;43715:4;43738:3;43730:11;;43768:4;43763:3;43759:14;43751:22;;43648:132;;;:::o;43786:113::-;43856:4;43888;43883:3;43879:14;43871:22;;43786:113;;;:::o;43935:732::-;44054:3;44083:54;44131:5;44083:54;:::i;:::-;44153:86;44232:6;44227:3;44153:86;:::i;:::-;44146:93;;44263:56;44313:5;44263:56;:::i;:::-;44342:7;44373:1;44358:284;44383:6;44380:1;44377:13;44358:284;;;44459:6;44453:13;44486:63;44545:3;44530:13;44486:63;:::i;:::-;44479:70;;44572:60;44625:6;44572:60;:::i;:::-;44562:70;;44418:224;44405:1;44402;44398:9;44393:14;;44358:284;;;44362:14;44658:3;44651:10;;44059:608;;;43935:732;;;;:::o;44673:831::-;44936:4;44974:3;44963:9;44959:19;44951:27;;44988:71;45056:1;45045:9;45041:17;45032:6;44988:71;:::i;:::-;45069:80;45145:2;45134:9;45130:18;45121:6;45069:80;:::i;:::-;45196:9;45190:4;45186:20;45181:2;45170:9;45166:18;45159:48;45224:108;45327:4;45318:6;45224:108;:::i;:::-;45216:116;;45342:72;45410:2;45399:9;45395:18;45386:6;45342:72;:::i;:::-;45424:73;45492:3;45481:9;45477:19;45468:6;45424:73;:::i;:::-;44673:831;;;;;;;;:::o;45510:807::-;45759:4;45797:3;45786:9;45782:19;45774:27;;45811:71;45879:1;45868:9;45864:17;45855:6;45811:71;:::i;:::-;45892:72;45960:2;45949:9;45945:18;45936:6;45892:72;:::i;:::-;45974:80;46050:2;46039:9;46035:18;46026:6;45974:80;:::i;:::-;46064;46140:2;46129:9;46125:18;46116:6;46064:80;:::i;:::-;46154:73;46222:3;46211:9;46207:19;46198:6;46154:73;:::i;:::-;46237;46305:3;46294:9;46290:19;46281:6;46237:73;:::i;:::-;45510:807;;;;;;;;;:::o;46323:663::-;46411:6;46419;46427;46476:2;46464:9;46455:7;46451:23;46447:32;46444:119;;;46482:79;;:::i;:::-;46444:119;46602:1;46627:64;46683:7;46674:6;46663:9;46659:22;46627:64;:::i;:::-;46617:74;;46573:128;46740:2;46766:64;46822:7;46813:6;46802:9;46798:22;46766:64;:::i;:::-;46756:74;;46711:129;46879:2;46905:64;46961:7;46952:6;46941:9;46937:22;46905:64;:::i;:::-;46895:74;;46850:129;46323:663;;;;;:::o

Swarm Source

ipfs://6dd02fb6f1bcca7958c7218fe06f063c9512aba0faccc6198f01155999626d1c
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.