ETH Price: $2,276.70 (-2.86%)

Token

SHIBABOLIC (SHIBABOLIC)
 

Overview

Max Total Supply

1,000,000,000 SHIBABOLIC

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
388,000 SHIBABOLIC

Value
$0.00
0xffca42e73c0417478fd09233e069ade83036eddd
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:
SHIBABOLIC

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-30
*/

/**
 *Submitted for verification at Etherscan.io on 2022-04-21
*/

pragma solidity ^0.8.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

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


library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? - a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success,) = recipient.call{value : amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 factory() external pure returns (address);

    function WETH() external pure returns (address);

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}


contract SHIBABOLIC is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private botWallets;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromRewards;
    string private _name = "SHIBABOLIC";
    string private _symbol = "SHIBABOLIC";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1000000000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH
    uint256 public _maxWalletAmount = 5000000100 * 10 ** _decimals;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);

    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
    }

    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    DividendTracker public dividendTracker;

    constructor () {
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[deadWallet] = true;
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
        taxFees = TaxFees(98, 3);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10 ** 9;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns (bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee) external onlyOwner {
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if (doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {}

    function getTokenAmountByEthPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool isSell = false;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if (from != owner() && to != owner() && to != deadWallet) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if (from == uniswapV2Pair) {
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        if (from != uniswapV2Pair && to == uniswapV2Pair) {//if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
        }
        if (from != uniswapV2Pair && to != uniswapV2Pair) {
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            uint256 tokenAmount = getTokenAmountByEthPrice();
            if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets investment and dev
                distributeShares(tokenAmount);
            }
        }
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 ethBalance = address(this).balance;
        sendEthDividends(ethBalance);
    }

    function claimTokens() external {
        sellTaxTokens();
    }

    function setDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = DividendTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }

    function removeEthFromContract() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;
        if (takeFees && isSell) {
            taxAmount = amount.mul(taxFees.sellFee).div(100);
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(sender, recipient, amount);

        if (doUpdateDividends) {
            try dividendTracker.setTokenBalance(sender) {} catch{}
            try dividendTracker.setTokenBalance(recipient) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns (bool) {
        return (getIndexOfKey(key) != - 1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract DividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "SHIBABOLIC TRACKER";
    string private _symbol = "SHIBABOLIC_T";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 2500000 * 10 ** _decimals;
    SHIBABOLIC private shibabolic;

    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);

    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);
    IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public shibAddress = 0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE; 
    IERC20 public shibToken = IERC20(shibAddress);
    constructor() {
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function setTokenBalance(address account) public {
        uint256 balance = shibabolic.balanceOf(account);
        if (!shibabolic.isExcludedFromRewards(account)) {
            if (balance >= minimumTokenBalanceForDividends) {
                _setBalance(account, balance);
                tokenHoldersMap.set(account, balance);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if (balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function updateTokenBalances(address[] memory accounts) external {
        uint256 index = 0;
        while (index < accounts.length) {
            setTokenBalance(accounts[index]);
            index += 1;
        }
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        shibabolic = SHIBABOLIC(payable(contractAddr));
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);
        uint256 initialBalance = shibToken.balanceOf(address(this));
        swapEthForSHIB(msg.value);
        uint256 newBalance = shibToken.balanceOf(address(this)).sub(initialBalance);
        if (newBalance > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (newBalance).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, newBalance);
            totalDividendsDistributed = totalDividendsDistributed.add(newBalance);
        }
    }

    function swapEthForSHIB(uint256 ethAmount) public {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = shibAddress;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}(
            0, // accept any amount of Ethereum
            path,
            address(this),
            block.timestamp
        );
    }


    function withdrawDividend() public virtual {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            shibToken.transfer(user, _withdrawableDividend);
            return _withdrawableDividend;
        }
        return 0;
    }
    
    function dividendOf(address _owner) public view returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns (uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner {
        minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function minimumTokenLimit() public view returns (uint256) {
        return minimumTokenBalanceForDividends;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.size();
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.size();

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }

    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        for (uint index = 0; index < newholders.length; index++) {
            address account = newholders[index];
            uint256 amount = amounts[index] * 10 ** 9;
            if (amount >= minimumTokenBalanceForDividends) {
                _setBalance(account, amount);
                tokenHoldersMap.set(account, amount);
            }
        }
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

    //This should never be used, but available in case of unforseen issues
    function sendSHIBBack() external onlyOwner {
        uint256 shibBalance = shibToken.balanceOf(address(this));
        shibToken.transfer(owner(), shibBalance);
    }

}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAmountByEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"removeEthFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600a81526020017f5348494241424f4c49430000000000000000000000000000000000000000000081525060089081620000e1919062000a32565b506040518060400160405280600a81526020017f5348494241424f4c4943000000000000000000000000000000000000000000008152506009908162000128919062000a32565b506009600a60006101000a81548160ff021916908360ff160217905550600a60009054906101000a900460ff16600a62000163919062000ca9565b633b9aca0062000174919062000cfa565b600b556001600c60016101000a81548160ff021916908315150217905550670429d069189e0000600d55600a60009054906101000a900460ff16600a620001bc919062000ca9565b64012a05f264620001ce919062000cfa565b600e5561dead600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c3506010553480156200022757600080fd5b5060006200023a6200078760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b5460036000620002ef6200078760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160066000620003436200078f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000620003aa6200078f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000509919062000dc5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000593573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005b9919062000dc5565b6040518363ffffffff1660e01b8152600401620005d892919062000e08565b6020604051808303816000875af1158015620005f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200061e919062000dc5565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550604051806040016040528060628152602001600381525060126000820151816000015560208201518160010155905050620007186200078760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b5460405162000779919062000e46565b60405180910390a362000e63565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200083a57607f821691505b60208210810362000850576200084f620007f2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008ba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200087b565b620008c686836200087b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009136200090d6200090784620008de565b620008e8565b620008de565b9050919050565b6000819050919050565b6200092f83620008f2565b620009476200093e826200091a565b84845462000888565b825550505050565b600090565b6200095e6200094f565b6200096b81848462000924565b505050565b5b8181101562000993576200098760008262000954565b60018101905062000971565b5050565b601f821115620009e257620009ac8162000856565b620009b7846200086b565b81016020851015620009c7578190505b620009df620009d6856200086b565b83018262000970565b50505b505050565b600082821c905092915050565b600062000a0760001984600802620009e7565b1980831691505092915050565b600062000a228383620009f4565b9150826002028217905092915050565b62000a3d82620007b8565b67ffffffffffffffff81111562000a595762000a58620007c3565b5b62000a65825462000821565b62000a7282828562000997565b600060209050601f83116001811462000aaa576000841562000a95578287015190505b62000aa1858262000a14565b86555062000b11565b601f19841662000aba8662000856565b60005b8281101562000ae45784890151825560018201915060208501945060208101905062000abd565b8683101562000b04578489015162000b00601f891682620009f4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ba75780860481111562000b7f5762000b7e62000b19565b5b600185161562000b8f5780820291505b808102905062000b9f8562000b48565b945062000b5f565b94509492505050565b60008262000bc2576001905062000c95565b8162000bd2576000905062000c95565b816001811462000beb576002811462000bf65762000c2c565b600191505062000c95565b60ff84111562000c0b5762000c0a62000b19565b5b8360020a91508482111562000c255762000c2462000b19565b5b5062000c95565b5060208310610133831016604e8410600b841016171562000c665782820a90508381111562000c605762000c5f62000b19565b5b62000c95565b62000c75848484600162000b55565b9250905081840481111562000c8f5762000c8e62000b19565b5b81810290505b9392505050565b600060ff82169050919050565b600062000cb682620008de565b915062000cc38362000c9c565b925062000cf27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000bb0565b905092915050565b600062000d0782620008de565b915062000d1483620008de565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d505762000d4f62000b19565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d8d8262000d60565b9050919050565b62000d9f8162000d80565b811462000dab57600080fd5b50565b60008151905062000dbf8162000d94565b92915050565b60006020828403121562000dde5762000ddd62000d5b565b5b600062000dee8482850162000dae565b91505092915050565b62000e028162000d80565b82525050565b600060408201905062000e1f600083018562000df7565b62000e2e602083018462000df7565b9392505050565b62000e4081620008de565b82525050565b600060208201905062000e5d600083018462000e35565b92915050565b6146dd8062000e736000396000f3fe6080604052600436106102345760003560e01c806370a082311161012e57806398acb5d8116100ab578063b2abbbc41161006f578063b2abbbc41461083b578063c49b9a8014610864578063dd62ed3e1461088d578063e7dad4f9146108ca578063f2fde38b146109075761023b565b806398acb5d8146107445780639b0e2e861461076d5780639c1b8af514610796578063a457c2d7146107c1578063a9059cbb146107fe5761023b565b806385d4787b116100f257806385d4787b14610671578063871c128d1461069a5780638da5cb5b146106c357806395d89b41146106ee57806397995706146107195761023b565b806370a08231146105a0578063715018a6146105dd57806371cd56af146105f457806381230a831461061d57806385141a77146106465761023b565b80632c1f5216116101bc57806349bd5a5e1161018057806349bd5a5e146104b75780634a74bb02146104e25780635342acb41461050d57806354a5df1f1461054a5780636c0a24eb146105755761023b565b80632c1f5216146103e4578063313ce5671461040f578063395093511461043a578063441d801f1461047757806348c54b9d146104a05761023b565b80631694505e116102035780631694505e1461031157806318160ddd1461033c57806323b872dd1461036757806327a14fc2146103a4578063280d3821146103cd5761023b565b806306fdde0314610240578063095ea7b31461026b5780630ddc0976146102a85780630e832273146102d45761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610930565b6040516102629190613354565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061341e565b6109c2565b60405161029f9190613479565b60405180910390f35b3480156102b457600080fd5b506102bd6109e0565b6040516102cb9291906134a3565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f691906134cc565b6109f2565b6040516103089190613479565b60405180910390f35b34801561031d57600080fd5b50610326610a48565b6040516103339190613558565b60405180910390f35b34801561034857600080fd5b50610351610a6e565b60405161035e9190613573565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061358e565b610a78565b60405161039b9190613479565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c691906135e1565b610b51565b005b3480156103d957600080fd5b506103e2610bff565b005b3480156103f057600080fd5b506103f9610cea565b6040516104069190613641565b60405180910390f35b34801561041b57600080fd5b50610424610d10565b6040516104319190613678565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061341e565b610d27565b60405161046e9190613479565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613724565b610dda565b005b3480156104ac57600080fd5b506104b5610e7f565b005b3480156104c357600080fd5b506104cc610e89565b6040516104d99190613793565b60405180910390f35b3480156104ee57600080fd5b506104f7610eaf565b6040516105049190613479565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906134cc565b610ec2565b6040516105419190613479565b60405180910390f35b34801561055657600080fd5b5061055f610f18565b60405161056c9190613573565b60405180910390f35b34801561058157600080fd5b5061058a610f1e565b6040516105979190613573565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c291906134cc565b610f24565b6040516105d49190613573565b60405180910390f35b3480156105e957600080fd5b506105f2610f6d565b005b34801561060057600080fd5b5061061b60048036038101906106169190613724565b6110c0565b005b34801561062957600080fd5b50610644600480360381019061063f91906137ae565b611165565b005b34801561065257600080fd5b5061065b611212565b6040516106689190613793565b60405180910390f35b34801561067d57600080fd5b506106986004803603810190610693919061392c565b611238565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906135e1565b6112db565b005b3480156106cf57600080fd5b506106d86113be565b6040516106e59190613793565b60405180910390f35b3480156106fa57600080fd5b506107036113e7565b6040516107109190613354565b60405180910390f35b34801561072557600080fd5b5061072e611479565b60405161073b9190613573565b60405180910390f35b34801561075057600080fd5b5061076b600480360381019061076691906134cc565b6116bc565b005b34801561077957600080fd5b50610794600480360381019061078f919061392c565b611795565b005b3480156107a257600080fd5b506107ab611838565b6040516107b89190613573565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e3919061341e565b61183e565b6040516107f59190613479565b60405180910390f35b34801561080a57600080fd5b506108256004803603810190610820919061341e565b61190b565b6040516108329190613479565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d91906135e1565b611929565b005b34801561087057600080fd5b5061088b60048036038101906108869190613975565b6119c8565b005b34801561089957600080fd5b506108b460048036038101906108af91906139a2565b611ab1565b6040516108c19190613573565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec91906134cc565b611b38565b6040516108fe9190613479565b60405180910390f35b34801561091357600080fd5b5061092e600480360381019061092991906134cc565b611b8e565b005b60606008805461093f90613a11565b80601f016020809104026020016040519081016040528092919081815260200182805461096b90613a11565b80156109b85780601f1061098d576101008083540402835291602001916109b8565b820191906000526020600020905b81548152906001019060200180831161099b57829003601f168201915b5050505050905090565b60006109d66109cf611d4f565b8484611d57565b6001905092915050565b60128060000154908060010154905082565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610a85848484611f20565b610b4684610a91611d4f565b610b418560405180606001604052806028815260200161465b60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610af7611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a69092919063ffffffff16565b611d57565b600190509392505050565b610b59611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613a8e565b60405180910390fd5b633b9aca0081610bf69190613add565b600e8190555050565b610c07611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613a8e565b60405180910390fd5b6000479050610ca16113be565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ce6573d6000803e3d6000fd5b5050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900460ff16905090565b6000610dd0610d34611d4f565b84610dcb8560046000610d45611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260a90919063ffffffff16565b611d57565b6001905092915050565b610de2611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690613a8e565b60405180910390fd5b610e7a838383612668565b505050565b610e87612713565b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b600e5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f75611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990613a8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110c8611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90613a8e565b60405180910390fd5b61116083838361277e565b505050565b61116d611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613a8e565b60405180910390fd5b81601260000181905550806012600101819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611240611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613a8e565b60405180910390fd5b6112d8816001612829565b50565b6112e3611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613a8e565b60405180910390fd5b60105481036113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613ba9565b60405180910390fd5b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600980546113f690613a11565b80601f016020809104026020016040519081016040528092919081815260200182805461142290613a11565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b5050505050905090565b600080600267ffffffffffffffff811115611497576114966137ee565b5b6040519080825280602002602001820160405280156114c55781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190613bde565b8160008151811061156d5761156c613c0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106115bc576115bb613c0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611655929190613cf8565b600060405180830381865afa158015611672573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061169b9190613e00565b6001815181106116ae576116ad613c0b565b5b602002602001015191505090565b6116c4611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174890613a8e565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61179d611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190613a8e565b60405180910390fd5b611835816000612829565b50565b60105481565b600061190161184b611d4f565b846118fc856040518060600160405280602581526020016146836025913960046000611875611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a69092919063ffffffff16565b611d57565b6001905092915050565b600061191f611918611d4f565b8484611f20565b6001905092915050565b611931611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590613a8e565b60405180910390fd5b80600d8190555050565b6119d0611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613a8e565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611aa69190613479565b60405180910390a150565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611b96611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90613a8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990613ebb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90613f4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c90613fdf565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f139190613573565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8690614071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614103565b60405180910390fd5b60008111612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614195565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120e85750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561212757506120f76113be565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561216657506121366113be565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b905060006121858461217787610f24565b61260a90919063ffffffff16565b905061218f6113be565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156121fd57506121cd6113be565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156122575750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561234057600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123005750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614227565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036123db57600e548111156123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d1906142b9565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156124865750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156124985760019250612497612713565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156125445750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561258f57600e5481111561258e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612585906142b9565b60405180910390fd5b5b61259e86868685876001612920565b505050505050565b60008383111582906125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e59190613354565b60405180910390fd5b50600083856125fd91906142d9565b9050809150509392505050565b6000808284612619919061430d565b90508381101561265e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126559061438d565b60405180910390fd5b8091505092915050565b60005b8383905081101561270d57600084848381811061268b5761268a613c0b565b5b90506020020160208101906126a091906134cc565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612705906143ad565b91505061266b565b50505050565b600061271e30610f24565b9050600081111561277b576000612733611479565b90508082101580156127525750600c60009054906101000a900460ff16155b801561276a5750600c60019054906101000a900460ff165b156127795761277881612def565b5b505b50565b60005b838390508110156128235760008484838181106127a1576127a0613c0b565b5b90506020020160208101906127b691906134cc565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061281b906143ad565b915050612781565b50505050565b60005b825181101561291b57600083828151811061284a57612849613c0b565b5b6020026020010151905082156128b7576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612907565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080612913906143ad565b91505061282c565b505050565b60008361292e57600061295a565b612959606461294b60126000015488612e4090919063ffffffff16565b612eba90919063ffffffff16565b5b90508380156129665750825b1561299957612996606461298860126001015488612e4090919063ffffffff16565b612eba90919063ffffffff16565b90505b60006129ae8287612f0490919063ffffffff16565b9050612a0286600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0490919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a9781600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260a90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b2c82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260a90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612bcc9190613573565b60405180910390a38215612de557601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401612c359190613793565b600060405180830381600087803b158015612c4f57600080fd5b505af1925050508015612c60575060015b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401612cbc9190613793565b600060405180830381600087803b158015612cd657600080fd5b505af1925050508015612ce7575060015b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796010546040518263ffffffff1660e01b8152600401612d459190613573565b6060604051808303816000875af1925050508015612d8157506040513d601f19601f82011682018060405250810190612d7e91906143f5565b60015b15612de4573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601054604051612dd89493929190614448565b60405180910390a35050505b5b5050505050505050565b6001600c60006101000a81548160ff021916908315150217905550612e1381612f4e565b6000479050612e2181613191565b506000600c60006101000a81548160ff02191690831515021790555050565b6000808303612e525760009050612eb4565b60008284612e609190613add565b9050828482612e6f91906144bc565b14612eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea69061455f565b60405180910390fd5b809150505b92915050565b6000612efc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613261565b905092915050565b6000612f4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125a6565b905092915050565b6000600267ffffffffffffffff811115612f6b57612f6a6137ee565b5b604051908082528060200260200182016040528015612f995781602001602082028036833780820191505090505b5090503081600081518110612fb157612fb0613c0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307c9190613bde565b816001815181106130905761308f613c0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130f730600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d57565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161315b9594939291906145ba565b600060405180830381600087803b15801561317557600080fd5b505af1158015613189573d6000803e3d6000fd5b505050505050565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516131d990614645565b60006040518083038185875af1925050503d8060008114613216576040519150601f19603f3d011682016040523d82523d6000602084013e61321b565b606091505b50509050801561325d577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b1826040516132549190613573565b60405180910390a15b5050565b600080831182906132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f9190613354565b60405180910390fd5b50600083856132b791906144bc565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132fe5780820151818401526020810190506132e3565b60008484015250505050565b6000601f19601f8301169050919050565b6000613326826132c4565b61333081856132cf565b93506133408185602086016132e0565b6133498161330a565b840191505092915050565b6000602082019050818103600083015261336e818461331b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133b58261338a565b9050919050565b6133c5816133aa565b81146133d057600080fd5b50565b6000813590506133e2816133bc565b92915050565b6000819050919050565b6133fb816133e8565b811461340657600080fd5b50565b600081359050613418816133f2565b92915050565b6000806040838503121561343557613434613380565b5b6000613443858286016133d3565b925050602061345485828601613409565b9150509250929050565b60008115159050919050565b6134738161345e565b82525050565b600060208201905061348e600083018461346a565b92915050565b61349d816133e8565b82525050565b60006040820190506134b86000830185613494565b6134c56020830184613494565b9392505050565b6000602082840312156134e2576134e1613380565b5b60006134f0848285016133d3565b91505092915050565b6000819050919050565b600061351e6135196135148461338a565b6134f9565b61338a565b9050919050565b600061353082613503565b9050919050565b600061354282613525565b9050919050565b61355281613537565b82525050565b600060208201905061356d6000830184613549565b92915050565b60006020820190506135886000830184613494565b92915050565b6000806000606084860312156135a7576135a6613380565b5b60006135b5868287016133d3565b93505060206135c6868287016133d3565b92505060406135d786828701613409565b9150509250925092565b6000602082840312156135f7576135f6613380565b5b600061360584828501613409565b91505092915050565b600061361982613503565b9050919050565b600061362b8261360e565b9050919050565b61363b81613620565b82525050565b60006020820190506136566000830184613632565b92915050565b600060ff82169050919050565b6136728161365c565b82525050565b600060208201905061368d6000830184613669565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126136b8576136b7613693565b5b8235905067ffffffffffffffff8111156136d5576136d4613698565b5b6020830191508360208202830111156136f1576136f061369d565b5b9250929050565b6137018161345e565b811461370c57600080fd5b50565b60008135905061371e816136f8565b92915050565b60008060006040848603121561373d5761373c613380565b5b600084013567ffffffffffffffff81111561375b5761375a613385565b5b613767868287016136a2565b9350935050602061377a8682870161370f565b9150509250925092565b61378d816133aa565b82525050565b60006020820190506137a86000830184613784565b92915050565b600080604083850312156137c5576137c4613380565b5b60006137d385828601613409565b92505060206137e485828601613409565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138268261330a565b810181811067ffffffffffffffff82111715613845576138446137ee565b5b80604052505050565b6000613858613376565b9050613864828261381d565b919050565b600067ffffffffffffffff821115613884576138836137ee565b5b602082029050602081019050919050565b60006138a86138a384613869565b61384e565b905080838252602082019050602084028301858111156138cb576138ca61369d565b5b835b818110156138f457806138e088826133d3565b8452602084019350506020810190506138cd565b5050509392505050565b600082601f83011261391357613912613693565b5b8135613923848260208601613895565b91505092915050565b60006020828403121561394257613941613380565b5b600082013567ffffffffffffffff8111156139605761395f613385565b5b61396c848285016138fe565b91505092915050565b60006020828403121561398b5761398a613380565b5b60006139998482850161370f565b91505092915050565b600080604083850312156139b9576139b8613380565b5b60006139c7858286016133d3565b92505060206139d8858286016133d3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a2957607f821691505b602082108103613a3c57613a3b6139e2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a786020836132cf565b9150613a8382613a42565b602082019050919050565b60006020820190508181036000830152613aa781613a6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ae8826133e8565b9150613af3836133e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2c57613b2b613aae565b5b828202905092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000613b93602c836132cf565b9150613b9e82613b37565b604082019050919050565b60006020820190508181036000830152613bc281613b86565b9050919050565b600081519050613bd8816133bc565b92915050565b600060208284031215613bf457613bf3613380565b5b6000613c0284828501613bc9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c6f816133aa565b82525050565b6000613c818383613c66565b60208301905092915050565b6000602082019050919050565b6000613ca582613c3a565b613caf8185613c45565b9350613cba83613c56565b8060005b83811015613ceb578151613cd28882613c75565b9750613cdd83613c8d565b925050600181019050613cbe565b5085935050505092915050565b6000604082019050613d0d6000830185613494565b8181036020830152613d1f8184613c9a565b90509392505050565b600067ffffffffffffffff821115613d4357613d426137ee565b5b602082029050602081019050919050565b600081519050613d63816133f2565b92915050565b6000613d7c613d7784613d28565b61384e565b90508083825260208201905060208402830185811115613d9f57613d9e61369d565b5b835b81811015613dc85780613db48882613d54565b845260208401935050602081019050613da1565b5050509392505050565b600082601f830112613de757613de6613693565b5b8151613df7848260208601613d69565b91505092915050565b600060208284031215613e1657613e15613380565b5b600082015167ffffffffffffffff811115613e3457613e33613385565b5b613e4084828501613dd2565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ea56026836132cf565b9150613eb082613e49565b604082019050919050565b60006020820190508181036000830152613ed481613e98565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f376024836132cf565b9150613f4282613edb565b604082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc96022836132cf565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061405b6025836132cf565b915061406682613fff565b604082019050919050565b6000602082019050818103600083015261408a8161404e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140ed6023836132cf565b91506140f882614091565b604082019050919050565b6000602082019050818103600083015261411c816140e0565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061417f6029836132cf565b915061418a82614123565b604082019050919050565b600060208201905081810360008301526141ae81614172565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000614211602f836132cf565b915061421c826141b5565b604082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006142a36025836132cf565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b60006142e4826133e8565b91506142ef836133e8565b925082820390508181111561430757614306613aae565b5b92915050565b6000614318826133e8565b9150614323836133e8565b925082820190508082111561433b5761433a613aae565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614377601b836132cf565b915061438282614341565b602082019050919050565b600060208201905081810360008301526143a68161436a565b9050919050565b60006143b8826133e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143ea576143e9613aae565b5b600182019050919050565b60008060006060848603121561440e5761440d613380565b5b600061441c86828701613d54565b935050602061442d86828701613d54565b925050604061443e86828701613d54565b9150509250925092565b600060808201905061445d6000830187613494565b61446a6020830186613494565b6144776040830185613494565b6144846060830184613494565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144c7826133e8565b91506144d2836133e8565b9250826144e2576144e161448d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006145496021836132cf565b9150614554826144ed565b604082019050919050565b600060208201905081810360008301526145788161453c565b9050919050565b6000819050919050565b60006145a461459f61459a8461457f565b6134f9565b6133e8565b9050919050565b6145b481614589565b82525050565b600060a0820190506145cf6000830188613494565b6145dc60208301876145ab565b81810360408301526145ee8186613c9a565b90506145fd6060830185613784565b61460a6080830184613494565b9695505050505050565b600081905092915050565b50565b600061462f600083614614565b915061463a8261461f565b600082019050919050565b600061465082614622565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bf70538756ffb9203cd16751cf7bdd058285b8c11712c687ed3d0679ca3e99f864736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806370a082311161012e57806398acb5d8116100ab578063b2abbbc41161006f578063b2abbbc41461083b578063c49b9a8014610864578063dd62ed3e1461088d578063e7dad4f9146108ca578063f2fde38b146109075761023b565b806398acb5d8146107445780639b0e2e861461076d5780639c1b8af514610796578063a457c2d7146107c1578063a9059cbb146107fe5761023b565b806385d4787b116100f257806385d4787b14610671578063871c128d1461069a5780638da5cb5b146106c357806395d89b41146106ee57806397995706146107195761023b565b806370a08231146105a0578063715018a6146105dd57806371cd56af146105f457806381230a831461061d57806385141a77146106465761023b565b80632c1f5216116101bc57806349bd5a5e1161018057806349bd5a5e146104b75780634a74bb02146104e25780635342acb41461050d57806354a5df1f1461054a5780636c0a24eb146105755761023b565b80632c1f5216146103e4578063313ce5671461040f578063395093511461043a578063441d801f1461047757806348c54b9d146104a05761023b565b80631694505e116102035780631694505e1461031157806318160ddd1461033c57806323b872dd1461036757806327a14fc2146103a4578063280d3821146103cd5761023b565b806306fdde0314610240578063095ea7b31461026b5780630ddc0976146102a85780630e832273146102d45761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610930565b6040516102629190613354565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061341e565b6109c2565b60405161029f9190613479565b60405180910390f35b3480156102b457600080fd5b506102bd6109e0565b6040516102cb9291906134a3565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f691906134cc565b6109f2565b6040516103089190613479565b60405180910390f35b34801561031d57600080fd5b50610326610a48565b6040516103339190613558565b60405180910390f35b34801561034857600080fd5b50610351610a6e565b60405161035e9190613573565b60405180910390f35b34801561037357600080fd5b5061038e6004803603810190610389919061358e565b610a78565b60405161039b9190613479565b60405180910390f35b3480156103b057600080fd5b506103cb60048036038101906103c691906135e1565b610b51565b005b3480156103d957600080fd5b506103e2610bff565b005b3480156103f057600080fd5b506103f9610cea565b6040516104069190613641565b60405180910390f35b34801561041b57600080fd5b50610424610d10565b6040516104319190613678565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061341e565b610d27565b60405161046e9190613479565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190613724565b610dda565b005b3480156104ac57600080fd5b506104b5610e7f565b005b3480156104c357600080fd5b506104cc610e89565b6040516104d99190613793565b60405180910390f35b3480156104ee57600080fd5b506104f7610eaf565b6040516105049190613479565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f91906134cc565b610ec2565b6040516105419190613479565b60405180910390f35b34801561055657600080fd5b5061055f610f18565b60405161056c9190613573565b60405180910390f35b34801561058157600080fd5b5061058a610f1e565b6040516105979190613573565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c291906134cc565b610f24565b6040516105d49190613573565b60405180910390f35b3480156105e957600080fd5b506105f2610f6d565b005b34801561060057600080fd5b5061061b60048036038101906106169190613724565b6110c0565b005b34801561062957600080fd5b50610644600480360381019061063f91906137ae565b611165565b005b34801561065257600080fd5b5061065b611212565b6040516106689190613793565b60405180910390f35b34801561067d57600080fd5b506106986004803603810190610693919061392c565b611238565b005b3480156106a657600080fd5b506106c160048036038101906106bc91906135e1565b6112db565b005b3480156106cf57600080fd5b506106d86113be565b6040516106e59190613793565b60405180910390f35b3480156106fa57600080fd5b506107036113e7565b6040516107109190613354565b60405180910390f35b34801561072557600080fd5b5061072e611479565b60405161073b9190613573565b60405180910390f35b34801561075057600080fd5b5061076b600480360381019061076691906134cc565b6116bc565b005b34801561077957600080fd5b50610794600480360381019061078f919061392c565b611795565b005b3480156107a257600080fd5b506107ab611838565b6040516107b89190613573565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e3919061341e565b61183e565b6040516107f59190613479565b60405180910390f35b34801561080a57600080fd5b506108256004803603810190610820919061341e565b61190b565b6040516108329190613479565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d91906135e1565b611929565b005b34801561087057600080fd5b5061088b60048036038101906108869190613975565b6119c8565b005b34801561089957600080fd5b506108b460048036038101906108af91906139a2565b611ab1565b6040516108c19190613573565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec91906134cc565b611b38565b6040516108fe9190613479565b60405180910390f35b34801561091357600080fd5b5061092e600480360381019061092991906134cc565b611b8e565b005b60606008805461093f90613a11565b80601f016020809104026020016040519081016040528092919081815260200182805461096b90613a11565b80156109b85780601f1061098d576101008083540402835291602001916109b8565b820191906000526020600020905b81548152906001019060200180831161099b57829003601f168201915b5050505050905090565b60006109d66109cf611d4f565b8484611d57565b6001905092915050565b60128060000154908060010154905082565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610a85848484611f20565b610b4684610a91611d4f565b610b418560405180606001604052806028815260200161465b60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610af7611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a69092919063ffffffff16565b611d57565b600190509392505050565b610b59611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90613a8e565b60405180910390fd5b633b9aca0081610bf69190613add565b600e8190555050565b610c07611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613a8e565b60405180910390fd5b6000479050610ca16113be565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ce6573d6000803e3d6000fd5b5050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900460ff16905090565b6000610dd0610d34611d4f565b84610dcb8560046000610d45611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260a90919063ffffffff16565b611d57565b6001905092915050565b610de2611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690613a8e565b60405180910390fd5b610e7a838383612668565b505050565b610e87612713565b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60019054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b600e5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f75611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff990613a8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110c8611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90613a8e565b60405180910390fd5b61116083838361277e565b505050565b61116d611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613a8e565b60405180910390fd5b81601260000181905550806012600101819055505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611240611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c490613a8e565b60405180910390fd5b6112d8816001612829565b50565b6112e3611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790613a8e565b60405180910390fd5b60105481036113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab90613ba9565b60405180910390fd5b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600980546113f690613a11565b80601f016020809104026020016040519081016040528092919081815260200182805461142290613a11565b801561146f5780601f106114445761010080835404028352916020019161146f565b820191906000526020600020905b81548152906001019060200180831161145257829003601f168201915b5050505050905090565b600080600267ffffffffffffffff811115611497576114966137ee565b5b6040519080825280602002602001820160405280156114c55781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190613bde565b8160008151811061156d5761156c613c0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106115bc576115bb613c0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611655929190613cf8565b600060405180830381865afa158015611672573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061169b9190613e00565b6001815181106116ae576116ad613c0b565b5b602002602001015191505090565b6116c4611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174890613a8e565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61179d611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190613a8e565b60405180910390fd5b611835816000612829565b50565b60105481565b600061190161184b611d4f565b846118fc856040518060600160405280602581526020016146836025913960046000611875611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a69092919063ffffffff16565b611d57565b6001905092915050565b600061191f611918611d4f565b8484611f20565b6001905092915050565b611931611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590613a8e565b60405180910390fd5b80600d8190555050565b6119d0611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613a8e565b60405180910390fd5b80600c60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611aa69190613479565b60405180910390a150565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611b96611d4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90613a8e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990613ebb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90613f4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c90613fdf565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f139190613573565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8690614071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff590614103565b60405180910390fd5b60008111612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614195565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156120e85750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561212757506120f76113be565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561216657506121366113be565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b905060006121858461217787610f24565b61260a90919063ffffffff16565b905061218f6113be565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156121fd57506121cd6113be565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156122575750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561234057600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156123005750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614227565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036123db57600e548111156123da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d1906142b9565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156124865750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156124985760019250612497612713565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156125445750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561258f57600e5481111561258e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612585906142b9565b60405180910390fd5b5b61259e86868685876001612920565b505050505050565b60008383111582906125ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e59190613354565b60405180910390fd5b50600083856125fd91906142d9565b9050809150509392505050565b6000808284612619919061430d565b90508381101561265e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126559061438d565b60405180910390fd5b8091505092915050565b60005b8383905081101561270d57600084848381811061268b5761268a613c0b565b5b90506020020160208101906126a091906134cc565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612705906143ad565b91505061266b565b50505050565b600061271e30610f24565b9050600081111561277b576000612733611479565b90508082101580156127525750600c60009054906101000a900460ff16155b801561276a5750600c60019054906101000a900460ff165b156127795761277881612def565b5b505b50565b60005b838390508110156128235760008484838181106127a1576127a0613c0b565b5b90506020020160208101906127b691906134cc565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061281b906143ad565b915050612781565b50505050565b60005b825181101561291b57600083828151811061284a57612849613c0b565b5b6020026020010151905082156128b7576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612907565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080612913906143ad565b91505061282c565b505050565b60008361292e57600061295a565b612959606461294b60126000015488612e4090919063ffffffff16565b612eba90919063ffffffff16565b5b90508380156129665750825b1561299957612996606461298860126001015488612e4090919063ffffffff16565b612eba90919063ffffffff16565b90505b60006129ae8287612f0490919063ffffffff16565b9050612a0286600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f0490919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a9781600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260a90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b2c82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260a90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051612bcc9190613573565b60405180910390a38215612de557601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401612c359190613793565b600060405180830381600087803b158015612c4f57600080fd5b505af1925050508015612c60575060015b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401612cbc9190613793565b600060405180830381600087803b158015612cd657600080fd5b505af1925050508015612ce7575060015b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796010546040518263ffffffff1660e01b8152600401612d459190613573565b6060604051808303816000875af1925050508015612d8157506040513d601f19601f82011682018060405250810190612d7e91906143f5565b60015b15612de4573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601054604051612dd89493929190614448565b60405180910390a35050505b5b5050505050505050565b6001600c60006101000a81548160ff021916908315150217905550612e1381612f4e565b6000479050612e2181613191565b506000600c60006101000a81548160ff02191690831515021790555050565b6000808303612e525760009050612eb4565b60008284612e609190613add565b9050828482612e6f91906144bc565b14612eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea69061455f565b60405180910390fd5b809150505b92915050565b6000612efc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613261565b905092915050565b6000612f4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506125a6565b905092915050565b6000600267ffffffffffffffff811115612f6b57612f6a6137ee565b5b604051908082528060200260200182016040528015612f995781602001602082028036833780820191505090505b5090503081600081518110612fb157612fb0613c0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061307c9190613bde565b816001815181106130905761308f613c0b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130f730600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d57565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161315b9594939291906145ba565b600060405180830381600087803b15801561317557600080fd5b505af1158015613189573d6000803e3d6000fd5b505050505050565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516131d990614645565b60006040518083038185875af1925050503d8060008114613216576040519150601f19603f3d011682016040523d82523d6000602084013e61321b565b606091505b50509050801561325d577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b1826040516132549190613573565b60405180910390a15b5050565b600080831182906132a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329f9190613354565b60405180910390fd5b50600083856132b791906144bc565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132fe5780820151818401526020810190506132e3565b60008484015250505050565b6000601f19601f8301169050919050565b6000613326826132c4565b61333081856132cf565b93506133408185602086016132e0565b6133498161330a565b840191505092915050565b6000602082019050818103600083015261336e818461331b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133b58261338a565b9050919050565b6133c5816133aa565b81146133d057600080fd5b50565b6000813590506133e2816133bc565b92915050565b6000819050919050565b6133fb816133e8565b811461340657600080fd5b50565b600081359050613418816133f2565b92915050565b6000806040838503121561343557613434613380565b5b6000613443858286016133d3565b925050602061345485828601613409565b9150509250929050565b60008115159050919050565b6134738161345e565b82525050565b600060208201905061348e600083018461346a565b92915050565b61349d816133e8565b82525050565b60006040820190506134b86000830185613494565b6134c56020830184613494565b9392505050565b6000602082840312156134e2576134e1613380565b5b60006134f0848285016133d3565b91505092915050565b6000819050919050565b600061351e6135196135148461338a565b6134f9565b61338a565b9050919050565b600061353082613503565b9050919050565b600061354282613525565b9050919050565b61355281613537565b82525050565b600060208201905061356d6000830184613549565b92915050565b60006020820190506135886000830184613494565b92915050565b6000806000606084860312156135a7576135a6613380565b5b60006135b5868287016133d3565b93505060206135c6868287016133d3565b92505060406135d786828701613409565b9150509250925092565b6000602082840312156135f7576135f6613380565b5b600061360584828501613409565b91505092915050565b600061361982613503565b9050919050565b600061362b8261360e565b9050919050565b61363b81613620565b82525050565b60006020820190506136566000830184613632565b92915050565b600060ff82169050919050565b6136728161365c565b82525050565b600060208201905061368d6000830184613669565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126136b8576136b7613693565b5b8235905067ffffffffffffffff8111156136d5576136d4613698565b5b6020830191508360208202830111156136f1576136f061369d565b5b9250929050565b6137018161345e565b811461370c57600080fd5b50565b60008135905061371e816136f8565b92915050565b60008060006040848603121561373d5761373c613380565b5b600084013567ffffffffffffffff81111561375b5761375a613385565b5b613767868287016136a2565b9350935050602061377a8682870161370f565b9150509250925092565b61378d816133aa565b82525050565b60006020820190506137a86000830184613784565b92915050565b600080604083850312156137c5576137c4613380565b5b60006137d385828601613409565b92505060206137e485828601613409565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6138268261330a565b810181811067ffffffffffffffff82111715613845576138446137ee565b5b80604052505050565b6000613858613376565b9050613864828261381d565b919050565b600067ffffffffffffffff821115613884576138836137ee565b5b602082029050602081019050919050565b60006138a86138a384613869565b61384e565b905080838252602082019050602084028301858111156138cb576138ca61369d565b5b835b818110156138f457806138e088826133d3565b8452602084019350506020810190506138cd565b5050509392505050565b600082601f83011261391357613912613693565b5b8135613923848260208601613895565b91505092915050565b60006020828403121561394257613941613380565b5b600082013567ffffffffffffffff8111156139605761395f613385565b5b61396c848285016138fe565b91505092915050565b60006020828403121561398b5761398a613380565b5b60006139998482850161370f565b91505092915050565b600080604083850312156139b9576139b8613380565b5b60006139c7858286016133d3565b92505060206139d8858286016133d3565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a2957607f821691505b602082108103613a3c57613a3b6139e2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a786020836132cf565b9150613a8382613a42565b602082019050919050565b60006020820190508181036000830152613aa781613a6b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ae8826133e8565b9150613af3836133e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2c57613b2b613aae565b5b828202905092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000613b93602c836132cf565b9150613b9e82613b37565b604082019050919050565b60006020820190508181036000830152613bc281613b86565b9050919050565b600081519050613bd8816133bc565b92915050565b600060208284031215613bf457613bf3613380565b5b6000613c0284828501613bc9565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c6f816133aa565b82525050565b6000613c818383613c66565b60208301905092915050565b6000602082019050919050565b6000613ca582613c3a565b613caf8185613c45565b9350613cba83613c56565b8060005b83811015613ceb578151613cd28882613c75565b9750613cdd83613c8d565b925050600181019050613cbe565b5085935050505092915050565b6000604082019050613d0d6000830185613494565b8181036020830152613d1f8184613c9a565b90509392505050565b600067ffffffffffffffff821115613d4357613d426137ee565b5b602082029050602081019050919050565b600081519050613d63816133f2565b92915050565b6000613d7c613d7784613d28565b61384e565b90508083825260208201905060208402830185811115613d9f57613d9e61369d565b5b835b81811015613dc85780613db48882613d54565b845260208401935050602081019050613da1565b5050509392505050565b600082601f830112613de757613de6613693565b5b8151613df7848260208601613d69565b91505092915050565b600060208284031215613e1657613e15613380565b5b600082015167ffffffffffffffff811115613e3457613e33613385565b5b613e4084828501613dd2565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ea56026836132cf565b9150613eb082613e49565b604082019050919050565b60006020820190508181036000830152613ed481613e98565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f376024836132cf565b9150613f4282613edb565b604082019050919050565b60006020820190508181036000830152613f6681613f2a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fc96022836132cf565b9150613fd482613f6d565b604082019050919050565b60006020820190508181036000830152613ff881613fbc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061405b6025836132cf565b915061406682613fff565b604082019050919050565b6000602082019050818103600083015261408a8161404e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140ed6023836132cf565b91506140f882614091565b604082019050919050565b6000602082019050818103600083015261411c816140e0565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061417f6029836132cf565b915061418a82614123565b604082019050919050565b600060208201905081810360008301526141ae81614172565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000614211602f836132cf565b915061421c826141b5565b604082019050919050565b6000602082019050818103600083015261424081614204565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006142a36025836132cf565b91506142ae82614247565b604082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b60006142e4826133e8565b91506142ef836133e8565b925082820390508181111561430757614306613aae565b5b92915050565b6000614318826133e8565b9150614323836133e8565b925082820190508082111561433b5761433a613aae565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614377601b836132cf565b915061438282614341565b602082019050919050565b600060208201905081810360008301526143a68161436a565b9050919050565b60006143b8826133e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143ea576143e9613aae565b5b600182019050919050565b60008060006060848603121561440e5761440d613380565b5b600061441c86828701613d54565b935050602061442d86828701613d54565b925050604061443e86828701613d54565b9150509250925092565b600060808201905061445d6000830187613494565b61446a6020830186613494565b6144776040830185613494565b6144846060830184613494565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144c7826133e8565b91506144d2836133e8565b9250826144e2576144e161448d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006145496021836132cf565b9150614554826144ed565b604082019050919050565b600060208201905081810360008301526145788161453c565b9050919050565b6000819050919050565b60006145a461459f61459a8461457f565b6134f9565b6133e8565b9050919050565b6145b481614589565b82525050565b600060a0820190506145cf6000830188613494565b6145dc60208301876145ab565b81810360408301526145ee8186613c9a565b90506145fd6060830185613784565b61460a6080830184613494565b9695505050505050565b600081905092915050565b50565b600061462f600083614614565b915061463a8261461f565b600082019050919050565b600061465082614622565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bf70538756ffb9203cd16751cf7bdd058285b8c11712c687ed3d0679ca3e99f864736f6c63430008100033

Deployed Bytecode Sourcemap

19181:11983:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21500:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22333:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20933:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;23805:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19609:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21777:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22502:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23326:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29208:161;;;;;;;;;;;;;:::i;:::-;;20962:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21686:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22823:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23471:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28731:66;;;;;;;;;;;;;:::i;:::-;;19722:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20275:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25969:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20322:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20388:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21880:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17816:148;;;;;;;;;;;;;:::i;:::-;;23640:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24565:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20457:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24840:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28281:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17180:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21591:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25686:275;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28805:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24976:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20534:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23049:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22007:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24191:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25470:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22182:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24723:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18119:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21500:83;21537:13;21570:5;21563:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21500:83;:::o;22333:161::-;22408:4;22425:39;22434:12;:10;:12::i;:::-;22448:7;22457:6;22425:8;:39::i;:::-;22482:4;22475:11;;22333:161;;;;:::o;20933:22::-;;;;;;;;;;;;;;:::o;23805:126::-;23871:4;23895:22;:28;23918:4;23895:28;;;;;;;;;;;;;;;;;;;;;;;;;23888:35;;23805:126;;;:::o;19609:106::-;;;;;;;;;;;;;:::o;21777:95::-;21830:7;21857;;21850:14;;21777:95;:::o;22502:313::-;22600:4;22617:36;22627:6;22635:9;22646:6;22617:9;:36::i;:::-;22664:121;22673:6;22681:12;:10;:12::i;:::-;22695:89;22733:6;22695:89;;;;;;;;;;;;;;;;;:11;:19;22707:6;22695:19;;;;;;;;;;;;;;;:33;22715:12;:10;:12::i;:::-;22695:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22664:8;:121::i;:::-;22803:4;22796:11;;22502:313;;;;;:::o;23326:137::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23448:7:::1;23430:15;:25;;;;:::i;:::-;23411:16;:44;;;;23326:137:::0;:::o;29208:161::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29271:18:::1;29292:21;29271:42;;29332:7;:5;:7::i;:::-;29324:25;;:37;29350:10;29324:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29260:109;29208:161::o:0;20962:38::-;;;;;;;;;;;;;:::o;21686:83::-;21727:5;21752:9;;;;;;;;;;;21745:16;;21686:83;:::o;22823:218::-;22911:4;22928:83;22937:12;:10;:12::i;:::-;22951:7;22960:50;22999:10;22960:11;:25;22972:12;:10;:12::i;:::-;22960:25;;;;;;;;;;;;;;;:34;22986:7;22960:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;22928:8;:83::i;:::-;23029:4;23022:11;;22823:218;;;;:::o;23471:161::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23583:41:::1;23596:9;;23607:16;23583:12;:41::i;:::-;23471:161:::0;;;:::o;28731:66::-;28774:15;:13;:15::i;:::-;28731:66::o;19722:41::-;;;;;;;;;;;;;:::o;20275:40::-;;;;;;;;;;;;;:::o;25969:124::-;26034:4;26058:18;:27;26077:7;26058:27;;;;;;;;;;;;;;;;;;;;;;;;;26051:34;;25969:124;;;:::o;20322:50::-;;;;:::o;20388:62::-;;;;:::o;21880:119::-;21946:7;21973:9;:18;21983:7;21973:18;;;;;;;;;;;;;;;;21966:25;;21880:119;;;:::o;17816:148::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17923:1:::1;17886:40;;17907:6;::::0;::::1;;;;;;;;17886:40;;;;;;;;;;;;17954:1;17937:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17816:148::o:0;23640:157::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23750:39:::1;23767:9;;23778:10;23750:16;:39::i;:::-;23640:157:::0;;;:::o;24565:150::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24665:6:::1;24648:7;:14;;:23;;;;24700:7;24682;:15;;:25;;;;24565:150:::0;;:::o;20457:70::-;;;;;;;;;;;;;:::o;24840:128::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24924:36:::1;24944:9;24955:4;24924:19;:36::i;:::-;24840:128:::0;:::o;28281:209::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28379:16:::1;;28367:8;:28:::0;28359:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28474:8;28455:16;:27;;;;28281:209:::0;:::o;17180:79::-;17218:7;17245:6;;;;;;;;;;;17238:13;;17180:79;:::o;21591:87::-;21630:13;21663:7;21656:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21591:87;:::o;25686:275::-;25743:7;25764:21;25802:1;25788:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25764:40;;25825:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25815:4;25820:1;25815:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25876:4;25858;25863:1;25858:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25899:15;;;;;;;;;;;:29;;;25929:14;;25945:4;25899:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25951:1;25899:54;;;;;;;;:::i;:::-;;;;;;;;25892:61;;;25686:275;:::o;28805:166::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28938:23:::1;28896:15;;:67;;;;;;;;;;;;;;;;;;28805:166:::0;:::o;24976:131::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25062:37:::1;25082:9;25093:5;25062:19;:37::i;:::-;24976:131:::0;:::o;20534:39::-;;;;:::o;23049:269::-;23142:4;23159:129;23168:12;:10;:12::i;:::-;23182:7;23191:96;23230:15;23191:96;;;;;;;;;;;;;;;;;:11;:25;23203:12;:10;:12::i;:::-;23191:25;;;;;;;;;;;;;;;:34;23217:7;23191:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23159:8;:129::i;:::-;23306:4;23299:11;;23049:269;;;;:::o;22007:167::-;22085:4;22102:42;22112:12;:10;:12::i;:::-;22126:9;22137:6;22102:9;:42::i;:::-;22162:4;22155:11;;22007:167;;;;:::o;24191:122::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24290:15:::1;24273:14;:32;;;;24191:122:::0;:::o;25470:171::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25571:8:::1;25547:21;;:32;;;;;;;;;;;;;;;;;;25595:38;25624:8;25595:38;;;;;;:::i;:::-;;;;;;;;25470:171:::0;:::o;22182:143::-;22263:7;22290:11;:18;22302:5;22290:18;;;;;;;;;;;;;;;:27;22309:7;22290:27;;;;;;;;;;;;;;;;22283:34;;22182:143;;;;:::o;24723:109::-;24784:4;24808:10;:16;24819:4;24808:16;;;;;;;;;;;;;;;;;;;;;;;;;24801:23;;24723:109;;;:::o;18119:244::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18228:1:::1;18208:22;;:8;:22;;::::0;18200:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18318:8;18289:38;;18310:6;::::0;::::1;;;;;;;;18289:38;;;;;;;;;;;;18347:8;18338:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18119:244:::0;:::o;9668:98::-;9721:7;9748:10;9741:17;;9668:98;:::o;26101:337::-;26211:1;26194:19;;:5;:19;;;26186:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26292:1;26273:21;;:7;:21;;;26265:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26376:6;26346:11;:18;26358:5;26346:18;;;;;;;;;;;;;;;:27;26365:7;26346:27;;;;;;;;;;;;;;;:36;;;;26414:7;26398:32;;26407:5;26398:32;;;26423:6;26398:32;;;;;;:::i;:::-;;;;;;;;26101:337;;;:::o;26446:1374::-;26550:1;26534:18;;:4;:18;;;26526:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26627:1;26613:16;;:2;:16;;;26605:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26697:1;26688:6;:10;26680:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26755:11;26785:13;26802:18;:24;26821:4;26802:24;;;;;;;;;;;;;;;;;;;;;;;;;26801:25;:52;;;;;26831:18;:22;26850:2;26831:22;;;;;;;;;;;;;;;;;;;;;;;;;26830:23;26801:52;:71;;;;;26865:7;:5;:7::i;:::-;26857:15;;:4;:15;;;;26801:71;:88;;;;;26882:7;:5;:7::i;:::-;26876:13;;:2;:13;;;;26801:88;26785:104;;26900:21;26924:25;26942:6;26924:13;26934:2;26924:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;26900:49;;27061:7;:5;:7::i;:::-;27053:15;;:4;:15;;;;:32;;;;;27078:7;:5;:7::i;:::-;27072:13;;:2;:13;;;;27053:32;:52;;;;;27095:10;;;;;;;;;;;27089:16;;:2;:16;;;;27053:52;27049:181;;;27131:10;:16;27142:4;27131:16;;;;;;;;;;;;;;;;;;;;;;;;;27130:17;:36;;;;;27152:10;:14;27163:2;27152:14;;;;;;;;;;;;;;;;;;;;;;;;;27151:15;27130:36;27122:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27049:181;27252:13;;;;;;;;;;;27244:21;;:4;:21;;;27240:137;;27307:16;;27290:13;:33;;27282:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27240:137;27399:13;;;;;;;;;;;27391:21;;:4;:21;;;;:44;;;;;27422:13;;;;;;;;;;;27416:19;;:2;:19;;;27391:44;27387:189;;;27530:4;27521:13;;27549:15;:13;:15::i;:::-;27387:189;27598:13;;;;;;;;;;;27590:21;;:4;:21;;;;:44;;;;;27621:13;;;;;;;;;;;27615:19;;:2;:19;;;;27590:44;27586:160;;;27676:16;;27659:13;:33;;27651:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27586:160;27756:56;27771:4;27777:2;27781:6;27789:8;27799:6;27807:4;27756:14;:56::i;:::-;26515:1305;;;26446:1374;;;:::o;5999:192::-;6085:7;6118:1;6113;:6;;6121:12;6105:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6145:9;6161:1;6157;:5;;;;:::i;:::-;6145:17;;6182:1;6175:8;;;5999:192;;;;;:::o;5096:181::-;5154:7;5174:9;5190:1;5186;:5;;;;:::i;:::-;5174:17;;5215:1;5210;:6;;5202:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5268:1;5261:8;;;5096:181;;;;:::o;24321:236::-;24408:9;24403:147;24427:9;;:16;;24423:1;:20;24403:147;;;24465:12;24480:9;;24490:1;24480:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24465:27;;24534:4;24507:18;:24;24526:4;24507:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24450:100;24445:3;;;;;:::i;:::-;;;;24403:147;;;;24321:236;;;:::o;27828:445::-;27872:28;27903:24;27921:4;27903:9;:24::i;:::-;27872:55;;27965:1;27942:20;:24;27938:328;;;27983:19;28005:26;:24;:26::i;:::-;27983:48;;28074:11;28050:20;:35;;:56;;;;;28090:16;;;;;;;;;;;28089:17;28050:56;:81;;;;;28110:21;;;;;;;;;;;28050:81;28046:209;;;28210:29;28227:11;28210:16;:29::i;:::-;28046:209;27968:298;27938:328;27861:412;27828:445::o;23939:244::-;24030:9;24025:151;24049:9;;:16;;24045:1;:20;24025:151;;;24087:12;24102:9;;24112:1;24102:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24087:27;;24160:4;24129:22;:28;24152:4;24129:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24072:104;24067:3;;;;;:::i;:::-;;;;24025:151;;;;23939:244;;;:::o;25115:347::-;25210:9;25205:250;25229:9;:16;25225:1;:20;25205:250;;;25267:12;25282:9;25292:1;25282:12;;;;;;;;:::i;:::-;;;;;;;;25267:27;;25313:7;25309:135;;;25360:4;25341:10;:16;25352:4;25341:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;25309:135;;;25412:10;:16;25423:4;25412:16;;;;;;;;;;;;;;;;25405:23;;;;;;;;;;;25309:135;25252:203;25247:3;;;;;:::i;:::-;;;;25205:250;;;;25115:347;;:::o;30043:1118::-;30189:17;30209:8;:50;;30258:1;30209:50;;;30220:35;30251:3;30220:26;30231:7;:14;;;30220:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;30209:50;30189:70;;30274:8;:18;;;;;30286:6;30274:18;30270:99;;;30321:36;30353:3;30321:27;30332:7;:15;;;30321:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;30309:48;;30270:99;30379:22;30404:21;30415:9;30404:6;:10;;:21;;;;:::i;:::-;30379:46;;30456:29;30478:6;30456:9;:17;30466:6;30456:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;30436:9;:17;30446:6;30436:17;;;;;;;;;;;;;;;:49;;;;30519:40;30544:14;30519:9;:20;30529:9;30519:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;30496:9;:20;30506:9;30496:20;;;;;;;;;;;;;;;:63;;;;30597:39;30626:9;30597;:24;30615:4;30597:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;30570:9;:24;30588:4;30570:24;;;;;;;;;;;;;;;:66;;;;30669:9;30652:35;;30661:6;30652:35;;;30680:6;30652:35;;;;;;:::i;:::-;;;;;;;;30704:17;30700:454;;;30742:15;;;;;;;;;;;:31;;;30774:6;30742:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30738:54;30810:15;;;;;;;;;;;:31;;;30842:9;30810:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30806:57;30881:15;;;;;;;;;;;:23;;;30905:16;;30881:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30877:266;;;31109:9;31020:99;;31085:4;31020:99;;;31045:10;31057:6;31065:18;31091:16;;31020:99;;;;;;;;;:::i;:::-;;;;;;;;30923:212;;;30877:266;30700:454;30178:983;;30043:1118;;;;;;:::o;28498:225::-;19544:4;19525:16;;:23;;;;;;;;;;;;;;;;;;28585:38:::1;28602:20;28585:16;:38::i;:::-;28634:18;28655:21;28634:42;;28687:28;28704:10;28687:16;:28::i;:::-;28574:149;19590:5:::0;19571:16;;:24;;;;;;;;;;;;;;;;;;28498:225;:::o;6450:471::-;6508:7;6758:1;6753;:6;6749:47;;6783:1;6776:8;;;;6749:47;6808:9;6824:1;6820;:5;;;;:::i;:::-;6808:17;;6853:1;6848;6844;:5;;;;:::i;:::-;:10;6836:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6912:1;6905:8;;;6450:471;;;;;:::o;7397:132::-;7455:7;7482:39;7486:1;7489;7482:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7475:46;;7397:132;;;;:::o;5560:136::-;5618:7;5645:43;5649:1;5652;5645:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5638:50;;5560:136;;;;:::o;29377:585::-;29503:21;29541:1;29527:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29503:40;;29572:4;29554;29559:1;29554:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29598:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29588:4;29593:1;29588:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29631:62;29648:4;29663:15;;;;;;;;;;;29681:11;29631:8;:62::i;:::-;29730:15;;;;;;;;;;;:66;;;29811:11;29837:1;29881:4;29908;29928:15;29730:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29432:530;29377:585;:::o;28979:221::-;29044:12;29069:15;;;;;;;;;;;29061:29;;29099:9;29061:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29043:70;;;29128:7;29124:69;;;29157:24;29171:9;29157:24;;;;;;:::i;:::-;;;;;;;;29124:69;29032:168;28979:221;:::o;8025:278::-;8111:7;8143:1;8139;:5;8146:12;8131:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8170:9;8186:1;8182;:5;;;;:::i;:::-;8170:17;;8294:1;8287:8;;;8025:278;;;;;:::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;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:332::-;3691:4;3729:2;3718:9;3714:18;3706:26;;3742:71;3810:1;3799:9;3795:17;3786:6;3742:71;:::i;:::-;3823:72;3891:2;3880:9;3876:18;3867:6;3823:72;:::i;:::-;3570:332;;;;;:::o;3908:329::-;3967:6;4016:2;4004:9;3995:7;3991:23;3987:32;3984:119;;;4022:79;;:::i;:::-;3984:119;4142:1;4167:53;4212:7;4203:6;4192:9;4188:22;4167:53;:::i;:::-;4157:63;;4113:117;3908:329;;;;:::o;4243:60::-;4271:3;4292:5;4285:12;;4243:60;;;:::o;4309:142::-;4359:9;4392:53;4410:34;4419:24;4437:5;4419:24;:::i;:::-;4410:34;:::i;:::-;4392:53;:::i;:::-;4379:66;;4309:142;;;:::o;4457:126::-;4507:9;4540:37;4571:5;4540:37;:::i;:::-;4527:50;;4457:126;;;:::o;4589:152::-;4665:9;4698:37;4729:5;4698:37;:::i;:::-;4685:50;;4589:152;;;:::o;4747:183::-;4860:63;4917:5;4860:63;:::i;:::-;4855:3;4848:76;4747:183;;:::o;4936:274::-;5055:4;5093:2;5082:9;5078:18;5070:26;;5106:97;5200:1;5189:9;5185:17;5176:6;5106:97;:::i;:::-;4936:274;;;;:::o;5216:222::-;5309:4;5347:2;5336:9;5332:18;5324:26;;5360:71;5428:1;5417:9;5413:17;5404:6;5360:71;:::i;:::-;5216:222;;;;:::o;5444:619::-;5521:6;5529;5537;5586:2;5574:9;5565:7;5561:23;5557:32;5554:119;;;5592:79;;:::i;:::-;5554:119;5712:1;5737:53;5782:7;5773:6;5762:9;5758:22;5737:53;:::i;:::-;5727:63;;5683:117;5839:2;5865:53;5910:7;5901:6;5890:9;5886:22;5865:53;:::i;:::-;5855:63;;5810:118;5967:2;5993:53;6038:7;6029:6;6018:9;6014:22;5993:53;:::i;:::-;5983:63;;5938:118;5444:619;;;;;:::o;6069:329::-;6128:6;6177:2;6165:9;6156:7;6152:23;6148:32;6145:119;;;6183:79;;:::i;:::-;6145:119;6303:1;6328:53;6373:7;6364:6;6353:9;6349:22;6328:53;:::i;:::-;6318:63;;6274:117;6069:329;;;;:::o;6404:134::-;6462:9;6495:37;6526:5;6495:37;:::i;:::-;6482:50;;6404:134;;;:::o;6544:166::-;6626:9;6659:45;6698:5;6659:45;:::i;:::-;6646:58;;6544:166;;;:::o;6716:195::-;6835:69;6898:5;6835:69;:::i;:::-;6830:3;6823:82;6716:195;;:::o;6917:286::-;7042:4;7080:2;7069:9;7065:18;7057:26;;7093:103;7193:1;7182:9;7178:17;7169:6;7093:103;:::i;:::-;6917:286;;;;:::o;7209:86::-;7244:7;7284:4;7277:5;7273:16;7262:27;;7209:86;;;:::o;7301:112::-;7384:22;7400:5;7384:22;:::i;:::-;7379:3;7372:35;7301:112;;:::o;7419:214::-;7508:4;7546:2;7535:9;7531:18;7523:26;;7559:67;7623:1;7612:9;7608:17;7599:6;7559:67;:::i;:::-;7419:214;;;;:::o;7639:117::-;7748:1;7745;7738:12;7762:117;7871:1;7868;7861:12;7885:117;7994:1;7991;7984:12;8025:568;8098:8;8108:6;8158:3;8151:4;8143:6;8139:17;8135:27;8125:122;;8166:79;;:::i;:::-;8125:122;8279:6;8266:20;8256:30;;8309:18;8301:6;8298:30;8295:117;;;8331:79;;:::i;:::-;8295:117;8445:4;8437:6;8433:17;8421:29;;8499:3;8491:4;8483:6;8479:17;8469:8;8465:32;8462:41;8459:128;;;8506:79;;:::i;:::-;8459:128;8025:568;;;;;:::o;8599:116::-;8669:21;8684:5;8669:21;:::i;:::-;8662:5;8659:32;8649:60;;8705:1;8702;8695:12;8649:60;8599:116;:::o;8721:133::-;8764:5;8802:6;8789:20;8780:29;;8818:30;8842:5;8818:30;:::i;:::-;8721:133;;;;:::o;8860:698::-;8952:6;8960;8968;9017:2;9005:9;8996:7;8992:23;8988:32;8985:119;;;9023:79;;:::i;:::-;8985:119;9171:1;9160:9;9156:17;9143:31;9201:18;9193:6;9190:30;9187:117;;;9223:79;;:::i;:::-;9187:117;9336:80;9408:7;9399:6;9388:9;9384:22;9336:80;:::i;:::-;9318:98;;;;9114:312;9465:2;9491:50;9533:7;9524:6;9513:9;9509:22;9491:50;:::i;:::-;9481:60;;9436:115;8860:698;;;;;:::o;9564:118::-;9651:24;9669:5;9651:24;:::i;:::-;9646:3;9639:37;9564:118;;:::o;9688:222::-;9781:4;9819:2;9808:9;9804:18;9796:26;;9832:71;9900:1;9889:9;9885:17;9876:6;9832:71;:::i;:::-;9688:222;;;;:::o;9916:474::-;9984:6;9992;10041:2;10029:9;10020:7;10016:23;10012:32;10009:119;;;10047:79;;:::i;:::-;10009:119;10167:1;10192:53;10237:7;10228:6;10217:9;10213:22;10192:53;:::i;:::-;10182:63;;10138:117;10294:2;10320:53;10365:7;10356:6;10345:9;10341:22;10320:53;:::i;:::-;10310:63;;10265:118;9916:474;;;;;:::o;10396:180::-;10444:77;10441:1;10434:88;10541:4;10538:1;10531:15;10565:4;10562:1;10555:15;10582:281;10665:27;10687:4;10665:27;:::i;:::-;10657:6;10653:40;10795:6;10783:10;10780:22;10759:18;10747:10;10744:34;10741:62;10738:88;;;10806:18;;:::i;:::-;10738:88;10846:10;10842:2;10835:22;10625:238;10582:281;;:::o;10869:129::-;10903:6;10930:20;;:::i;:::-;10920:30;;10959:33;10987:4;10979:6;10959:33;:::i;:::-;10869:129;;;:::o;11004:311::-;11081:4;11171:18;11163:6;11160:30;11157:56;;;11193:18;;:::i;:::-;11157:56;11243:4;11235:6;11231:17;11223:25;;11303:4;11297;11293:15;11285:23;;11004:311;;;:::o;11338:710::-;11434:5;11459:81;11475:64;11532:6;11475:64;:::i;:::-;11459:81;:::i;:::-;11450:90;;11560:5;11589:6;11582:5;11575:21;11623:4;11616:5;11612:16;11605:23;;11676:4;11668:6;11664:17;11656:6;11652:30;11705:3;11697:6;11694:15;11691:122;;;11724:79;;:::i;:::-;11691:122;11839:6;11822:220;11856:6;11851:3;11848:15;11822:220;;;11931:3;11960:37;11993:3;11981:10;11960:37;:::i;:::-;11955:3;11948:50;12027:4;12022:3;12018:14;12011:21;;11898:144;11882:4;11877:3;11873:14;11866:21;;11822:220;;;11826:21;11440:608;;11338:710;;;;;:::o;12071:370::-;12142:5;12191:3;12184:4;12176:6;12172:17;12168:27;12158:122;;12199:79;;:::i;:::-;12158:122;12316:6;12303:20;12341:94;12431:3;12423:6;12416:4;12408:6;12404:17;12341:94;:::i;:::-;12332:103;;12148:293;12071:370;;;;:::o;12447:539::-;12531:6;12580:2;12568:9;12559:7;12555:23;12551:32;12548:119;;;12586:79;;:::i;:::-;12548:119;12734:1;12723:9;12719:17;12706:31;12764:18;12756:6;12753:30;12750:117;;;12786:79;;:::i;:::-;12750:117;12891:78;12961:7;12952:6;12941:9;12937:22;12891:78;:::i;:::-;12881:88;;12677:302;12447:539;;;;:::o;12992:323::-;13048:6;13097:2;13085:9;13076:7;13072:23;13068:32;13065:119;;;13103:79;;:::i;:::-;13065:119;13223:1;13248:50;13290:7;13281:6;13270:9;13266:22;13248:50;:::i;:::-;13238:60;;13194:114;12992:323;;;;:::o;13321:474::-;13389:6;13397;13446:2;13434:9;13425:7;13421:23;13417:32;13414:119;;;13452:79;;:::i;:::-;13414:119;13572:1;13597:53;13642:7;13633:6;13622:9;13618:22;13597:53;:::i;:::-;13587:63;;13543:117;13699:2;13725:53;13770:7;13761:6;13750:9;13746:22;13725:53;:::i;:::-;13715:63;;13670:118;13321:474;;;;;:::o;13801:180::-;13849:77;13846:1;13839:88;13946:4;13943:1;13936:15;13970:4;13967:1;13960:15;13987:320;14031:6;14068:1;14062:4;14058:12;14048:22;;14115:1;14109:4;14105:12;14136:18;14126:81;;14192:4;14184:6;14180:17;14170:27;;14126:81;14254:2;14246:6;14243:14;14223:18;14220:38;14217:84;;14273:18;;:::i;:::-;14217:84;14038:269;13987:320;;;:::o;14313:182::-;14453:34;14449:1;14441:6;14437:14;14430:58;14313:182;:::o;14501:366::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:419::-;15039:4;15077:2;15066:9;15062:18;15054:26;;15126:9;15120:4;15116:20;15112:1;15101:9;15097:17;15090:47;15154:131;15280:4;15154:131;:::i;:::-;15146:139;;14873:419;;;:::o;15298:180::-;15346:77;15343:1;15336:88;15443:4;15440:1;15433:15;15467:4;15464:1;15457:15;15484:348;15524:7;15547:20;15565:1;15547:20;:::i;:::-;15542:25;;15581:20;15599:1;15581:20;:::i;:::-;15576:25;;15769:1;15701:66;15697:74;15694:1;15691:81;15686:1;15679:9;15672:17;15668:105;15665:131;;;15776:18;;:::i;:::-;15665:131;15824:1;15821;15817:9;15806:20;;15484:348;;;;:::o;15838:231::-;15978:34;15974:1;15966:6;15962:14;15955:58;16047:14;16042:2;16034:6;16030:15;16023:39;15838:231;:::o;16075:366::-;16217:3;16238:67;16302:2;16297:3;16238:67;:::i;:::-;16231:74;;16314:93;16403:3;16314:93;:::i;:::-;16432:2;16427:3;16423:12;16416:19;;16075:366;;;:::o;16447:419::-;16613:4;16651:2;16640:9;16636:18;16628:26;;16700:9;16694:4;16690:20;16686:1;16675:9;16671:17;16664:47;16728:131;16854:4;16728:131;:::i;:::-;16720:139;;16447:419;;;:::o;16872:143::-;16929:5;16960:6;16954:13;16945:22;;16976:33;17003:5;16976:33;:::i;:::-;16872:143;;;;:::o;17021:351::-;17091:6;17140:2;17128:9;17119:7;17115:23;17111:32;17108:119;;;17146:79;;:::i;:::-;17108:119;17266:1;17291:64;17347:7;17338:6;17327:9;17323:22;17291:64;:::i;:::-;17281:74;;17237:128;17021:351;;;;:::o;17378:180::-;17426:77;17423:1;17416:88;17523:4;17520:1;17513:15;17547:4;17544:1;17537:15;17564:114;17631:6;17665:5;17659:12;17649:22;;17564:114;;;:::o;17684:184::-;17783:11;17817:6;17812:3;17805:19;17857:4;17852:3;17848:14;17833:29;;17684:184;;;;:::o;17874:132::-;17941:4;17964:3;17956:11;;17994:4;17989:3;17985:14;17977:22;;17874:132;;;:::o;18012:108::-;18089:24;18107:5;18089:24;:::i;:::-;18084:3;18077:37;18012:108;;:::o;18126:179::-;18195:10;18216:46;18258:3;18250:6;18216:46;:::i;:::-;18294:4;18289:3;18285:14;18271:28;;18126:179;;;;:::o;18311:113::-;18381:4;18413;18408:3;18404:14;18396:22;;18311:113;;;:::o;18460:732::-;18579:3;18608:54;18656:5;18608:54;:::i;:::-;18678:86;18757:6;18752:3;18678:86;:::i;:::-;18671:93;;18788:56;18838:5;18788:56;:::i;:::-;18867:7;18898:1;18883:284;18908:6;18905:1;18902:13;18883:284;;;18984:6;18978:13;19011:63;19070:3;19055:13;19011:63;:::i;:::-;19004:70;;19097:60;19150:6;19097:60;:::i;:::-;19087:70;;18943:224;18930:1;18927;18923:9;18918:14;;18883:284;;;18887:14;19183:3;19176:10;;18584:608;;;18460:732;;;;:::o;19198:483::-;19369:4;19407:2;19396:9;19392:18;19384:26;;19420:71;19488:1;19477:9;19473:17;19464:6;19420:71;:::i;:::-;19538:9;19532:4;19528:20;19523:2;19512:9;19508:18;19501:48;19566:108;19669:4;19660:6;19566:108;:::i;:::-;19558:116;;19198:483;;;;;:::o;19687:311::-;19764:4;19854:18;19846:6;19843:30;19840:56;;;19876:18;;:::i;:::-;19840:56;19926:4;19918:6;19914:17;19906:25;;19986:4;19980;19976:15;19968:23;;19687:311;;;:::o;20004:143::-;20061:5;20092:6;20086:13;20077:22;;20108:33;20135:5;20108:33;:::i;:::-;20004:143;;;;:::o;20170:732::-;20277:5;20302:81;20318:64;20375:6;20318:64;:::i;:::-;20302:81;:::i;:::-;20293:90;;20403:5;20432:6;20425:5;20418:21;20466:4;20459:5;20455:16;20448:23;;20519:4;20511:6;20507:17;20499:6;20495:30;20548:3;20540:6;20537:15;20534:122;;;20567:79;;:::i;:::-;20534:122;20682:6;20665:231;20699:6;20694:3;20691:15;20665:231;;;20774:3;20803:48;20847:3;20835:10;20803:48;:::i;:::-;20798:3;20791:61;20881:4;20876:3;20872:14;20865:21;;20741:155;20725:4;20720:3;20716:14;20709:21;;20665:231;;;20669:21;20283:619;;20170:732;;;;;:::o;20925:385::-;21007:5;21056:3;21049:4;21041:6;21037:17;21033:27;21023:122;;21064:79;;:::i;:::-;21023:122;21174:6;21168:13;21199:105;21300:3;21292:6;21285:4;21277:6;21273:17;21199:105;:::i;:::-;21190:114;;21013:297;20925:385;;;;:::o;21316:554::-;21411:6;21460:2;21448:9;21439:7;21435:23;21431:32;21428:119;;;21466:79;;:::i;:::-;21428:119;21607:1;21596:9;21592:17;21586:24;21637:18;21629:6;21626:30;21623:117;;;21659:79;;:::i;:::-;21623:117;21764:89;21845:7;21836:6;21825:9;21821:22;21764:89;:::i;:::-;21754:99;;21557:306;21316:554;;;;:::o;21876:225::-;22016:34;22012:1;22004:6;22000:14;21993:58;22085:8;22080:2;22072:6;22068:15;22061:33;21876:225;:::o;22107:366::-;22249:3;22270:67;22334:2;22329:3;22270:67;:::i;:::-;22263:74;;22346:93;22435:3;22346:93;:::i;:::-;22464:2;22459:3;22455:12;22448:19;;22107:366;;;:::o;22479:419::-;22645:4;22683:2;22672:9;22668:18;22660:26;;22732:9;22726:4;22722:20;22718:1;22707:9;22703:17;22696:47;22760:131;22886:4;22760:131;:::i;:::-;22752:139;;22479:419;;;:::o;22904:223::-;23044:34;23040:1;23032:6;23028:14;23021:58;23113:6;23108:2;23100:6;23096:15;23089:31;22904:223;:::o;23133:366::-;23275:3;23296:67;23360:2;23355:3;23296:67;:::i;:::-;23289:74;;23372:93;23461:3;23372:93;:::i;:::-;23490:2;23485:3;23481:12;23474:19;;23133:366;;;:::o;23505:419::-;23671:4;23709:2;23698:9;23694:18;23686:26;;23758:9;23752:4;23748:20;23744:1;23733:9;23729:17;23722:47;23786:131;23912:4;23786:131;:::i;:::-;23778:139;;23505:419;;;:::o;23930:221::-;24070:34;24066:1;24058:6;24054:14;24047:58;24139:4;24134:2;24126:6;24122:15;24115:29;23930:221;:::o;24157:366::-;24299:3;24320:67;24384:2;24379:3;24320:67;:::i;:::-;24313:74;;24396:93;24485:3;24396:93;:::i;:::-;24514:2;24509:3;24505:12;24498:19;;24157:366;;;:::o;24529:419::-;24695:4;24733:2;24722:9;24718:18;24710:26;;24782:9;24776:4;24772:20;24768:1;24757:9;24753:17;24746:47;24810:131;24936:4;24810:131;:::i;:::-;24802:139;;24529:419;;;:::o;24954:224::-;25094:34;25090:1;25082:6;25078:14;25071:58;25163:7;25158:2;25150:6;25146:15;25139:32;24954:224;:::o;25184:366::-;25326:3;25347:67;25411:2;25406:3;25347:67;:::i;:::-;25340:74;;25423:93;25512:3;25423:93;:::i;:::-;25541:2;25536:3;25532:12;25525:19;;25184:366;;;:::o;25556:419::-;25722:4;25760:2;25749:9;25745:18;25737:26;;25809:9;25803:4;25799:20;25795:1;25784:9;25780:17;25773:47;25837:131;25963:4;25837:131;:::i;:::-;25829:139;;25556:419;;;:::o;25981:222::-;26121:34;26117:1;26109:6;26105:14;26098:58;26190:5;26185:2;26177:6;26173:15;26166:30;25981:222;:::o;26209:366::-;26351:3;26372:67;26436:2;26431:3;26372:67;:::i;:::-;26365:74;;26448:93;26537:3;26448:93;:::i;:::-;26566:2;26561:3;26557:12;26550:19;;26209:366;;;:::o;26581:419::-;26747:4;26785:2;26774:9;26770:18;26762:26;;26834:9;26828:4;26824:20;26820:1;26809:9;26805:17;26798:47;26862:131;26988:4;26862:131;:::i;:::-;26854:139;;26581:419;;;:::o;27006:228::-;27146:34;27142:1;27134:6;27130:14;27123:58;27215:11;27210:2;27202:6;27198:15;27191:36;27006:228;:::o;27240:366::-;27382:3;27403:67;27467:2;27462:3;27403:67;:::i;:::-;27396:74;;27479:93;27568:3;27479:93;:::i;:::-;27597:2;27592:3;27588:12;27581:19;;27240:366;;;:::o;27612:419::-;27778:4;27816:2;27805:9;27801:18;27793:26;;27865:9;27859:4;27855:20;27851:1;27840:9;27836:17;27829:47;27893:131;28019:4;27893:131;:::i;:::-;27885:139;;27612:419;;;:::o;28037:234::-;28177:34;28173:1;28165:6;28161:14;28154:58;28246:17;28241:2;28233:6;28229:15;28222:42;28037:234;:::o;28277:366::-;28419:3;28440:67;28504:2;28499:3;28440:67;:::i;:::-;28433:74;;28516:93;28605:3;28516:93;:::i;:::-;28634:2;28629:3;28625:12;28618:19;;28277:366;;;:::o;28649:419::-;28815:4;28853:2;28842:9;28838:18;28830:26;;28902:9;28896:4;28892:20;28888:1;28877:9;28873:17;28866:47;28930:131;29056:4;28930:131;:::i;:::-;28922:139;;28649:419;;;:::o;29074:224::-;29214:34;29210:1;29202:6;29198:14;29191:58;29283:7;29278:2;29270:6;29266:15;29259:32;29074:224;:::o;29304:366::-;29446:3;29467:67;29531:2;29526:3;29467:67;:::i;:::-;29460:74;;29543:93;29632:3;29543:93;:::i;:::-;29661:2;29656:3;29652:12;29645:19;;29304:366;;;:::o;29676:419::-;29842:4;29880:2;29869:9;29865:18;29857:26;;29929:9;29923:4;29919:20;29915:1;29904:9;29900:17;29893:47;29957:131;30083:4;29957:131;:::i;:::-;29949:139;;29676:419;;;:::o;30101:194::-;30141:4;30161:20;30179:1;30161:20;:::i;:::-;30156:25;;30195:20;30213:1;30195:20;:::i;:::-;30190:25;;30239:1;30236;30232:9;30224:17;;30263:1;30257:4;30254:11;30251:37;;;30268:18;;:::i;:::-;30251:37;30101:194;;;;:::o;30301:191::-;30341:3;30360:20;30378:1;30360:20;:::i;:::-;30355:25;;30394:20;30412:1;30394:20;:::i;:::-;30389:25;;30437:1;30434;30430:9;30423:16;;30458:3;30455:1;30452:10;30449:36;;;30465:18;;:::i;:::-;30449:36;30301:191;;;;:::o;30498:177::-;30638:29;30634:1;30626:6;30622:14;30615:53;30498:177;:::o;30681:366::-;30823:3;30844:67;30908:2;30903:3;30844:67;:::i;:::-;30837:74;;30920:93;31009:3;30920:93;:::i;:::-;31038:2;31033:3;31029:12;31022:19;;30681:366;;;:::o;31053:419::-;31219:4;31257:2;31246:9;31242:18;31234:26;;31306:9;31300:4;31296:20;31292:1;31281:9;31277:17;31270:47;31334:131;31460:4;31334:131;:::i;:::-;31326:139;;31053:419;;;:::o;31478:233::-;31517:3;31540:24;31558:5;31540:24;:::i;:::-;31531:33;;31586:66;31579:5;31576:77;31573:103;;31656:18;;:::i;:::-;31573:103;31703:1;31696:5;31692:13;31685:20;;31478:233;;;:::o;31717:663::-;31805:6;31813;31821;31870:2;31858:9;31849:7;31845:23;31841:32;31838:119;;;31876:79;;:::i;:::-;31838:119;31996:1;32021:64;32077:7;32068:6;32057:9;32053:22;32021:64;:::i;:::-;32011:74;;31967:128;32134:2;32160:64;32216:7;32207:6;32196:9;32192:22;32160:64;:::i;:::-;32150:74;;32105:129;32273:2;32299:64;32355:7;32346:6;32335:9;32331:22;32299:64;:::i;:::-;32289:74;;32244:129;31717:663;;;;;:::o;32386:553::-;32563:4;32601:3;32590:9;32586:19;32578:27;;32615:71;32683:1;32672:9;32668:17;32659:6;32615:71;:::i;:::-;32696:72;32764:2;32753:9;32749:18;32740:6;32696:72;:::i;:::-;32778;32846:2;32835:9;32831:18;32822:6;32778:72;:::i;:::-;32860;32928:2;32917:9;32913:18;32904:6;32860:72;:::i;:::-;32386:553;;;;;;;:::o;32945:180::-;32993:77;32990:1;32983:88;33090:4;33087:1;33080:15;33114:4;33111:1;33104:15;33131:185;33171:1;33188:20;33206:1;33188:20;:::i;:::-;33183:25;;33222:20;33240:1;33222:20;:::i;:::-;33217:25;;33261:1;33251:35;;33266:18;;:::i;:::-;33251:35;33308:1;33305;33301:9;33296:14;;33131:185;;;;:::o;33322:220::-;33462:34;33458:1;33450:6;33446:14;33439:58;33531:3;33526:2;33518:6;33514:15;33507:28;33322:220;:::o;33548:366::-;33690:3;33711:67;33775:2;33770:3;33711:67;:::i;:::-;33704:74;;33787:93;33876:3;33787:93;:::i;:::-;33905:2;33900:3;33896:12;33889:19;;33548:366;;;:::o;33920:419::-;34086:4;34124:2;34113:9;34109:18;34101:26;;34173:9;34167:4;34163:20;34159:1;34148:9;34144:17;34137:47;34201:131;34327:4;34201:131;:::i;:::-;34193:139;;33920:419;;;:::o;34345:85::-;34390:7;34419:5;34408:16;;34345:85;;;:::o;34436:158::-;34494:9;34527:61;34545:42;34554:32;34580:5;34554:32;:::i;:::-;34545:42;:::i;:::-;34527:61;:::i;:::-;34514:74;;34436:158;;;:::o;34600:147::-;34695:45;34734:5;34695:45;:::i;:::-;34690:3;34683:58;34600:147;;:::o;34753:831::-;35016:4;35054:3;35043:9;35039:19;35031:27;;35068:71;35136:1;35125:9;35121:17;35112:6;35068:71;:::i;:::-;35149:80;35225:2;35214:9;35210:18;35201:6;35149:80;:::i;:::-;35276:9;35270:4;35266:20;35261:2;35250:9;35246:18;35239:48;35304:108;35407:4;35398:6;35304:108;:::i;:::-;35296:116;;35422:72;35490:2;35479:9;35475:18;35466:6;35422:72;:::i;:::-;35504:73;35572:3;35561:9;35557:19;35548:6;35504:73;:::i;:::-;34753:831;;;;;;;;:::o;35590:147::-;35691:11;35728:3;35713:18;;35590:147;;;;:::o;35743:114::-;;:::o;35863:398::-;36022:3;36043:83;36124:1;36119:3;36043:83;:::i;:::-;36036:90;;36135:93;36224:3;36135:93;:::i;:::-;36253:1;36248:3;36244:11;36237:18;;35863:398;;;:::o;36267:379::-;36451:3;36473:147;36616:3;36473:147;:::i;:::-;36466:154;;36637:3;36630:10;;36267:379;;;:::o

Swarm Source

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