ETH Price: $3,284.15 (+0.14%)
Gas: 4 Gwei

Token

Habibi/حبيبي (Oil)
 

Overview

Max Total Supply

1,000,000,000 Oil

Holders

230

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
621,887.001395689681161816 Oil

Value
$0.00
0x4ec05e170629877ee239775ab8aa66d657413172
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:
Habibi

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


pragma solidity 0.8.17;


/*
   
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣤⣤⠤⢤⣄⣠⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣀⣴⠾⠟⠋⠁⠀⠀⠀⠀⠀⠀⠈⠉⠒⠶⢄⡀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢠⡾⠋⠀⠀⡄⠀⠠⠀⢠⠄⠀⡤⠀⡤⡄⠀⠀⠀⠙⠳⣄⠀⠀⠀
⠀⠀⠀⡴⠋⠀⠀⠀⡇⡇⠀⡇⡆⢸⠔⠀⡇⠀⡧⡃⠀⡆⠀⠀⠀⠘⢦⠀⠀
⠀⠀⡼⠁⠀⠀⠀⠀⡇⡇⢠⠤⡇⢸⠀⠀⡇⠀⡇⡁⠀⡇⠀⠀⠀⠀⠈⢱⠀
⠀⣼⠃⠀⠀⠀⠀⠀⠃⠃⢬⠀⠁⠘⠈⠀⠁⠀⢧⠁⠀⠑⠀⠀⠀⠀⠀⠀⣇
⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠈⢳⡄⠀⠀⠀⢀⣴⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠
⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⢀⣈⣻⣆⠀⢀⣾⣃⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀
⢸⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢉⡿⠆⠾⣏⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼
⠀⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡄⠀⣠⠀⠀⣤⠀⠲⠶⢤⣀⠀⠀⠀⢠⠇
⠀⠘⣧⠀⠀⢠⡇⠀⠀⠐⢶⡤⠾⠷⠴⠿⠦⠴⠳⠤⠴⠖⠛⠉⠀⠀⢀⡞⠀
⠀⠀⠘⢧⡀⠀⠙⠶⠶⠖⠋⠀⠘⠀⠀⠙⠂⠀⠓⠀⠀⠀⠀⠀⠀⢠⡞⠀⠀
⠀⠀⠀⠈⠻⣦⡀⠙⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠀⠀⠀
⠀⠀⠀⠀⠀⠈⠙⠶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡠⠖⠋⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠓⠶⠶⠤⠶⠶⠖⠒⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀


    Arabs struck liquid gold beneath the sands, fueling a surge of wealth and power. But their oil-fueled dominance was
    not without controversy, as the world watched and wondered what the future would hold.

    ضرب العرب الذهب السائل تحت الرمال ، مما أدى إلى زيادة الثروة والسلطة. لكن هيمنتهم التي يغذيها النفط كانت كذلك
          لا يخلو من الجدل ، حيث كان العالم يشاهد ويتساءل عما يخبئه المستقبل.

Final tax: 1/1 LP


Website: https://habibieth.com/
Telegram: https://t.me/habibieth
Twitter: https://twitter.com/Habibiethereum
*/


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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionCallWithValue(
                target,
                data,
                0,
                "Address: low-level call failed"
            );
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
                target,
                success,
                returndata,
                errorMessage
            );
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage)
        private
        pure
    {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

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

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

    function _createInitialSupply(address account, uint256 amount)
        internal
        virtual
    {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface ILpPair {
    function sync() external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

contract Habibi is ERC20, Ownable {
    uint256 public maxBuyAmount;

    IDexRouter public immutable dexRouter;
    address public immutable lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

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

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

    uint256 public buyTotalFees;

    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;

    uint256 public sellLiquidityFee;

    uint256 public tokensForLiquidity;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedBuyFee(uint256 newAmount);
    event UpdatedSellFee(uint256 newAmount);

    event MaxTransactionExclusion(address _address, bool excluded);
    event OwnerForcedSwapBack(uint256 timestamp);
    event TransferForeignToken(address token, uint256 amount);
    event RemovedTokenHoldingsRequiredToBuy();
    event TransferDelayDisabled();
    event ReuppedApprovals();
    event SwapTokensAtAmountUpdated(uint256 newAmount);

        constructor() ERC20(unicode"Habibi/حبيبي", "Oil", 18) {
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;

        // automatically detect router/desired stablecoin
        if (block.chainid == 1) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 5) {
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if (block.chainid == 56) {
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if (block.chainid == 97) {
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(
            address(this),
            dexRouter.WETH()
        );
        setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e9 * (10**decimals());

        maxBuyAmount = (totalSupply * 5) / 1000;
        swapTokensAtAmount = (totalSupply * 25) / 100000;

        buyLiquidityFee = 15;

        buyTotalFees = buyLiquidityFee;

        sellLiquidityFee = 80;

        sellTotalFees = sellLiquidityFee;

        // update these!

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _createInitialSupply(address(newOwner), totalSupply);
        transferOwnership(newOwner);

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(msg.sender, address(dexRouter), totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        emit RemovedLimits();
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayDisabled();
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 10000) / (10**decimals()),
            "Cannot set max buy amount lower than 0.01%"
        );
        maxBuyAmount = newNum * (10**decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

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

    function _excludeFromMaxTransaction(address updAds, bool isExcluded)
        private
    {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        external
        onlyOwner
    {
        if (!isEx) {
            require(
                updAds != lpPair,
                "Cannot remove uniswap pair from max txn"
            );
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
        emit MaxTransactionExclusion(updAds, isEx);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != lpPair || value,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _liquidityFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;

        buyTotalFees = buyLiquidityFee;
        require(buyTotalFees <= 50, "Must keep buy fees at 50% or less");
        emit UpdatedBuyFee(buyTotalFees);
    }

    function updateSellFees(uint256 _liquidityFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;

        sellTotalFees = sellLiquidityFee;
        require(sellTotalFees <= 80, "Must keep sell fees at 80% or less");
        emit UpdatedSellFee(sellTotalFees);
    }

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

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

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            super._transfer(from, to, amount);
            return;
        }

        if (!tradingActive) {
            revert("Trading is not active.");
        }

        if (limitsInEffect) {
            // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
            if (transferDelayEnabled) {
                if (to != address(dexRouter) && to != address(lpPair)) {
                    require(
                        _holderLastTransferBlock[tx.origin] + 1 <
                            block.number &&
                            _holderLastTransferBlock[to] + 1 < block.number,
                        "_transfer:: Transfer Delay enabled.  Try again later."
                    );
                    _holderLastTransferBlock[tx.origin] = block.number;
                    _holderLastTransferBlock[to] = block.number;
                }
            }

            //when buy
            if (
                automatedMarketMakerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the max buy."
                );
            }
        }

        if (
            balanceOf(address(this)) > swapTokensAtAmount &&
            swapEnabled &&
            !swapping &&
            automatedMarketMakerPairs[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        uint256 fees = 0;

        // on sell
        if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
            fees = (amount * sellTotalFees) / 100;
            tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
        }
        // on buy
        else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
            fees = (amount * buyTotalFees) / 100;
            tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
        }

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

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

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

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
   

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity;

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

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

        if (tokensForLiquidity > 0) {
            uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
                totalTokensToSwap;
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync() {} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForLiquidity;
            tokensForLiquidity = 0;
        }       
    }

    function sendEth() external onlyOwner {
        bool success;
        (success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "withdraw unsuccessful");
    }

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
    {
        require(_token != address(0), "_token address cannot be 0");
        require(
            _token != address(this) || !tradingActive,
            "Can't withdraw native tokens while trading is active"
        );
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token), _to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(
            balanceOf(address(this)) >= swapTokensAtAmount,
            "Can only swap when token amount is at or higher than restriction"
        );
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedTokenHoldingsRequiredToBuy","type":"event"},{"anonymous":false,"inputs":[],"name":"ReuppedApprovals","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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":[],"name":"TransferDelayDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedSellFee","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260006009556001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff0219169083151502179055503480156200008257600080fd5b506040518060400160405280601181526020017f4861626962692fd8add8a8d98ad8a8d98a0000000000000000000000000000008152506040518060400160405280600381526020017f4f696c0000000000000000000000000000000000000000000000000000000000815250601282600390816200010291906200119f565b5081600490816200011491906200119f565b5080600560006101000a81548160ff021916908360ff1602179055505050506000620001456200065c60201b60201c565b905080600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060003390506000600146036200021157737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002c3565b600546036200023757737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002c2565b603846036200025d577310ed43c718714eb63d5aa57b78b54704e256024e9050620002c1565b60614603620002835773d99d1c33f9fc3444f8101754abc46c52416550d19050620002c0565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b790620012e7565b60405180910390fd5b5b5b5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062001373565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fb919062001373565b6040518363ffffffff1660e01b81526004016200041a929190620013b6565b6020604051808303816000875af11580156200043a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000460919062001373565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004a860a05160016200066460201b60201c565b6000620004ba6200083660201b60201c565b600a620004c8919062001573565b633b9aca00620004d99190620015c4565b90506103e8600582620004ed9190620015c4565b620004f991906200163e565b600681905550620186a0601982620005129190620015c4565b6200051e91906200163e565b600881905550600f600e81905550600e54600d819055506050601081905550601054600f81905550620005598360016200084d60201b60201c565b6200056e60805160016200084d60201b60201c565b620005813060016200084d60201b60201c565b6200059661dead60016200084d60201b60201c565b620005a9836001620008e360201b60201c565b620005be6080516001620008e360201b60201c565b620005d1306001620008e360201b60201c565b620005e661dead6001620008e360201b60201c565b620005f8838262000a3060201b60201c565b620006098362000b8060201b60201c565b6200063e306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000d5460201b60201c565b62000653336080518362000d5460201b60201c565b50505062001a8a565b600033905090565b620006746200065c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000706576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006fd90620016c6565b60405180910390fd5b60a05173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580620007415750805b62000783576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077a906200175e565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007ec82826200084d60201b60201c565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900460ff16905090565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051620008d79291906200179d565b60405180910390a15050565b620008f36200065c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000985576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200097c90620016c6565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a249190620017ca565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a999062001837565b60405180910390fd5b806002600082825462000ab6919062001859565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b0d919062001859565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b749190620018a5565b60405180910390a35050565b62000b906200065c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1990620016c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000c94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c8b9062001938565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000dc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dbd90620019d0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000e38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e2f9062001a68565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000f189190620018a5565b60405180910390a3505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fa757607f821691505b60208210810362000fbd5762000fbc62000f5f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620010277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000fe8565b62001033868362000fe8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620010806200107a62001074846200104b565b62001055565b6200104b565b9050919050565b6000819050919050565b6200109c836200105f565b620010b4620010ab8262001087565b84845462000ff5565b825550505050565b600090565b620010cb620010bc565b620010d881848462001091565b505050565b5b818110156200110057620010f4600082620010c1565b600181019050620010de565b5050565b601f8211156200114f57620011198162000fc3565b620011248462000fd8565b8101602085101562001134578190505b6200114c620011438562000fd8565b830182620010dd565b50505b505050565b600082821c905092915050565b6000620011746000198460080262001154565b1980831691505092915050565b60006200118f838362001161565b9150826002028217905092915050565b620011aa8262000f25565b67ffffffffffffffff811115620011c657620011c562000f30565b5b620011d2825462000f8e565b620011df82828562001104565b600060209050601f83116001811462001217576000841562001202578287015190505b6200120e858262001181565b8655506200127e565b601f198416620012278662000fc3565b60005b8281101562001251578489015182556001820191506020850194506020810190506200122a565b868310156200127157848901516200126d601f89168262001161565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f436861696e206e6f7420636f6e66696775726564000000000000000000000000600082015250565b6000620012cf60148362001286565b9150620012dc8262001297565b602082019050919050565b600060208201905081810360008301526200130281620012c0565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200133b826200130e565b9050919050565b6200134d816200132e565b81146200135957600080fd5b50565b6000815190506200136d8162001342565b92915050565b6000602082840312156200138c576200138b62001309565b5b60006200139c848285016200135c565b91505092915050565b620013b0816200132e565b82525050565b6000604082019050620013cd6000830185620013a5565b620013dc6020830184620013a5565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200147157808604811115620014495762001448620013e3565b5b6001851615620014595780820291505b8081029050620014698562001412565b945062001429565b94509492505050565b6000826200148c57600190506200155f565b816200149c57600090506200155f565b8160018114620014b55760028114620014c057620014f6565b60019150506200155f565b60ff841115620014d557620014d4620013e3565b5b8360020a915084821115620014ef57620014ee620013e3565b5b506200155f565b5060208310610133831016604e8410600b8410161715620015305782820a9050838111156200152a5762001529620013e3565b5b6200155f565b6200153f84848460016200141f565b92509050818404811115620015595762001558620013e3565b5b81810290505b9392505050565b600060ff82169050919050565b600062001580826200104b565b91506200158d8362001566565b9250620015bc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200147a565b905092915050565b6000620015d1826200104b565b9150620015de836200104b565b9250828202620015ee816200104b565b91508282048414831517620016085762001607620013e3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200164b826200104b565b915062001658836200104b565b9250826200166b576200166a6200160f565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620016ae60208362001286565b9150620016bb8262001676565b602082019050919050565b60006020820190508181036000830152620016e1816200169f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006200174660398362001286565b91506200175382620016e8565b604082019050919050565b60006020820190508181036000830152620017798162001737565b9050919050565b60008115159050919050565b620017978162001780565b82525050565b6000604082019050620017b46000830185620013a5565b620017c360208301846200178c565b9392505050565b6000602082019050620017e160008301846200178c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200181f601f8362001286565b91506200182c82620017e7565b602082019050919050565b60006020820190508181036000830152620018528162001810565b9050919050565b600062001866826200104b565b915062001873836200104b565b92508282019050808211156200188e576200188d620013e3565b5b92915050565b6200189f816200104b565b82525050565b6000602082019050620018bc600083018462001894565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200192060268362001286565b91506200192d82620018c2565b604082019050919050565b60006020820190508181036000830152620019538162001911565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000620019b860248362001286565b9150620019c5826200195a565b604082019050919050565b60006020820190508181036000830152620019eb81620019a9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062001a5060228362001286565b915062001a5d82620019f2565b604082019050919050565b6000602082019050818103600083015262001a838162001a41565b9050919050565b60805160a051614de262001ada60003960008181610f670152818161158001528181611ba2015281816129d401528181612f7c0152612fa3015260008181610b99015261297d0152614de26000f3fe6080604052600436106102605760003560e01c80638366e79a11610144578063c876d0b9116100b6578063e884f2601161007a578063e884f260146108d3578063eba4c333146108ea578063ee40166e14610913578063f11a24d31461093e578063f2fde38b14610969578063f63743421461099257610267565b8063c876d0b9146107ec578063d257b34f14610817578063d85ba06314610840578063dd62ed3e1461086b578063e2f45605146108a857610267565b80639a7a23d6116101085780639a7a23d6146106b8578063a457c2d7146106e1578063a9059cbb1461071e578063b62496f51461075b578063bbc0c74214610798578063c0246668146107c357610267565b80638366e79a146105f757806388e765ff146106205780638a8c523c1461064b5780638da5cb5b1461066257806395d89b411461068d57610267565b806339509351116101dd5780636ddd1713116101a15780636ddd17131461050f57806370a082311461053a578063715018a61461057757806371fc46881461058e578063751039fc146105b75780637571336a146105ce57610267565b8063395093511461043a578063452ed4f1146104775780634a62bb65146104a257806351f205e4146104cd5780636a486a8e146104e457610267565b806318160ddd1161022457806318160ddd146103535780631a8145bb1461037e57806323b872dd146103a95780632be32b61146103e6578063313ce5671461040f57610267565b806306e99fef1461026c57806306fdde03146102835780630758d924146102ae578063095ea7b3146102d957806310d5de531461031657610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109bd565b005b34801561028f57600080fd5b50610298610b05565b6040516102a591906136ef565b60405180910390f35b3480156102ba57600080fd5b506102c3610b97565b6040516102d09190613790565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190613824565b610bbb565b60405161030d919061387f565b60405180910390f35b34801561032257600080fd5b5061033d6004803603810190610338919061389a565b610bd9565b60405161034a919061387f565b60405180910390f35b34801561035f57600080fd5b50610368610bf9565b60405161037591906138d6565b60405180910390f35b34801561038a57600080fd5b50610393610c03565b6040516103a091906138d6565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906138f1565b610c09565b6040516103dd919061387f565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613944565b610d29565b005b34801561041b57600080fd5b50610424610ea2565b604051610431919061398d565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613824565b610eb9565b60405161046e919061387f565b60405180910390f35b34801561048357600080fd5b5061048c610f65565b60405161049991906139b7565b60405180910390f35b3480156104ae57600080fd5b506104b7610f89565b6040516104c4919061387f565b60405180910390f35b3480156104d957600080fd5b506104e2610f9c565b005b3480156104f057600080fd5b506104f96110f7565b60405161050691906138d6565b60405180910390f35b34801561051b57600080fd5b506105246110fd565b604051610531919061387f565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c919061389a565b611110565b60405161056e91906138d6565b60405180910390f35b34801561058357600080fd5b5061058c611158565b005b34801561059a57600080fd5b506105b560048036038101906105b09190613944565b6112b0565b005b3480156105c357600080fd5b506105cc6113d9565b005b3480156105da57600080fd5b506105f560048036038101906105f091906139fe565b6114e2565b005b34801561060357600080fd5b5061061e60048036038101906106199190613a3e565b6116a1565b005b34801561062c57600080fd5b506106356118f5565b60405161064291906138d6565b60405180910390f35b34801561065757600080fd5b506106606118fb565b005b34801561066e57600080fd5b50610677611a4d565b60405161068491906139b7565b60405180910390f35b34801561069957600080fd5b506106a2611a77565b6040516106af91906136ef565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da91906139fe565b611b09565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613824565b611ce2565b604051610715919061387f565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613824565b611dcd565b604051610752919061387f565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061389a565b611deb565b60405161078f919061387f565b60405180910390f35b3480156107a457600080fd5b506107ad611e0b565b6040516107ba919061387f565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e591906139fe565b611e1e565b005b3480156107f857600080fd5b50610801611f5e565b60405161080e919061387f565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190613944565b611f71565b005b34801561084c57600080fd5b50610855612110565b60405161086291906138d6565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d9190613a3e565b612116565b60405161089f91906138d6565b60405180910390f35b3480156108b457600080fd5b506108bd61219d565b6040516108ca91906138d6565b60405180910390f35b3480156108df57600080fd5b506108e86121a3565b005b3480156108f657600080fd5b50610911600480360381019061090c9190613944565b612283565b005b34801561091f57600080fd5b506109286123ac565b60405161093591906138d6565b60405180910390f35b34801561094a57600080fd5b506109536123b2565b60405161096091906138d6565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061389a565b6123b8565b005b34801561099e57600080fd5b506109a761257e565b6040516109b491906138d6565b60405180910390f35b6109c5612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90613aca565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610a7a90613b1b565b60006040518083038185875af1925050503d8060008114610ab7576040519150601f19603f3d011682016040523d82523d6000602084013e610abc565b606091505b50508091505080610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990613b7c565b60405180910390fd5b50565b606060038054610b1490613bcb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4090613bcb565b8015610b8d5780601f10610b6257610100808354040283529160200191610b8d565b820191906000526020600020905b815481529060010190602001808311610b7057829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610bcf610bc8612584565b848461258c565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b60115481565b6000610c16848484612755565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c61612584565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d1d5782811015610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff90613c6e565b60405180910390fd5b610d1c85610d14612584565b85840361258c565b5b60019150509392505050565b610d31612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790613aca565b60405180910390fd5b610dc8610ea2565b600a610dd49190613df0565b6127106001610de1610bf9565b610deb9190613e3b565b610df59190613eac565b610dff9190613eac565b811015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890613f4f565b60405180910390fd5b610e49610ea2565b600a610e559190613df0565b81610e609190613e3b565b6006819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009600654604051610e9791906138d6565b60405180910390a150565b6000600560009054906101000a900460ff16905090565b6000610f5b610ec6612584565b848460016000610ed4612584565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f569190613f6f565b61258c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b610fa4612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613aca565b60405180910390fd5b60085461103f30611110565b1015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790614015565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055506110a3612ef7565b6000600760006101000a81548160ff0219169083151502179055507f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516110ed91906138d6565b60405180910390a1565b600f5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611160612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690613aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112b8612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90613aca565b60405180910390fd5b80600e81905550600e54600d819055506032600d54111561139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906140a7565b60405180910390fd5b7f03cd3090e7c409e4a7ffd2d90ff610979f4a94a87a512188b7b615671bfb772f600d546040516113ce91906138d6565b60405180910390a150565b6113e1612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790613aca565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506114ae610bf9565b6006819055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b6114ea612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090613aca565b60405180910390fd5b8061160d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390614139565b60405180910390fd5b5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051611695929190614159565b60405180910390a15050565b6116a9612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90613aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e906141ce565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806117ef5750600a60019054906101000a900460ff16155b61182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590614260565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161186991906139b7565b602060405180830381865afa158015611886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118aa9190614295565b90506118b7838383613048565b7fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e43883826040516118e89291906142c2565b60405180910390a1505050565b60065481565b611903612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613aca565b60405180910390fd5b600a60019054906101000a900460ff16156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d99061435d565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550436009819055507fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb760405160405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a8690613bcb565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab290613bcb565b8015611aff5780601f10611ad457610100808354040283529160200191611aff565b820191906000526020600020905b815481529060010190602001808311611ae257829003601f168201915b5050505050905090565b611b11612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613aca565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580611bf85750805b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906143ef565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c9882826130ce565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008060016000611cf1612584565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590614481565b60405180910390fd5b611dc2611db9612584565b8585840361258c565b600191505092915050565b6000611de1611dda612584565b8484612755565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611e26612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac90613aca565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f52919061387f565b60405180910390a25050565b600c60009054906101000a900460ff1681565b611f79612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90613aca565b60405180910390fd5b620186a06001612016610bf9565b6120209190613e3b565b61202a9190613eac565b81101561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614513565b60405180910390fd5b6103e86001612079610bf9565b6120839190613e3b565b61208d9190613eac565b8111156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906145a5565b60405180910390fd5b806008819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b1458160405161210591906138d6565b60405180910390a150565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121ab612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223190613aca565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d60405160405180910390a1565b61228b612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231190613aca565b60405180910390fd5b80601081905550601054600f819055506050600f541115612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790614637565b60405180910390fd5b7f274faecd49018fb411281f27986b6b4acc86e5db4100735531acd18b7b6d5f93600f546040516123a191906138d6565b60405180910390a150565b60095481565b600e5481565b6123c0612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461244f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244690613aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b5906146c9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f29061475b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361266a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612661906147ed565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161274891906138d6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bb9061487f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614911565b60405180910390fd5b6000810361284c5761284783836000613162565b612ef2565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128ed5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612902576128fd838383613162565b612ef2565b600a60019054906101000a900460ff16612951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129489061497d565b60405180910390fd5b600a60009054906101000a900460ff1615612c8457600c60009054906101000a900460ff1615612b95577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a2357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b9457436001600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a759190613f6f565b108015612acc5750436001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aca9190613f6f565b105b612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290614a0f565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c385750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8357600654811115612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7990614aa1565b60405180910390fd5b5b5b600854612c9030611110565b118015612ca95750600a60029054906101000a900460ff165b8015612cc25750600760009054906101000a900460ff16155b8015612d175750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5b576001600760006101000a81548160ff021916908315150217905550612d3f612ef7565b6000600760006101000a81548160ff0219169083151502179055505b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db857506000600f54115b15612e11576064600f5483612dcd9190613e3b565b612dd79190613eac565b9050600f5460105482612dea9190613e3b565b612df49190613eac565b60116000828254612e059190613f6f565b92505081905550612ec2565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6c57506000600d54115b15612ec1576064600d5483612e819190613e3b565b612e8b9190613eac565b9050600d54600e5482612e9e9190613e3b565b612ea89190613eac565b60116000828254612eb99190613f6f565b925050819055505b5b6000811115612ee557612ed6843083613162565b8082612ee29190614ac1565b91505b612ef0848484613162565b505b505050565b6000612f0230611110565b9050600060115490506000821480612f1a5750600081145b15612f26575050613046565b603c600854612f359190613e3b565b821115612f4e57603c600854612f4b9190613e3b565b91505b600060115411156130435760008160115484612f6a9190613e3b565b612f749190613eac565b9050612fa1307f000000000000000000000000000000000000000000000000000000000000000083613162565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561300957600080fd5b505af192505050801561301a575060015b5080836130279190614ac1565b9250601154826130379190614ac1565b91506000601181905550505b50505b565b6130c98363a9059cbb60e01b84846040516024016130679291906142c2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506133cb565b505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613156929190614159565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c89061487f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323790614911565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bd90614b67565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133599190613f6f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133bd91906138d6565b60405180910390a350505050565b600061342d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166134929092919063ffffffff16565b905060008151111561348d578080602001905181019061344d9190614b9c565b61348c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348390614c3b565b60405180910390fd5b5b505050565b60606134a184846000856134aa565b90509392505050565b6060824710156134ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e690614ccd565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516135189190614d29565b60006040518083038185875af1925050503d8060008114613555576040519150601f19603f3d011682016040523d82523d6000602084013e61355a565b606091505b509150915061356b87838387613577565b92505050949350505050565b606083156135d95760008351036135d157613591856135ec565b6135d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c790614d8c565b60405180910390fd5b5b8290506135e4565b6135e3838361360f565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156136225781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365691906136ef565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b8381101561369957808201518184015260208101905061367e565b60008484015250505050565b6000601f19601f8301169050919050565b60006136c18261365f565b6136cb818561366a565b93506136db81856020860161367b565b6136e4816136a5565b840191505092915050565b6000602082019050818103600083015261370981846136b6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061375661375161374c84613711565b613731565b613711565b9050919050565b60006137688261373b565b9050919050565b600061377a8261375d565b9050919050565b61378a8161376f565b82525050565b60006020820190506137a56000830184613781565b92915050565b600080fd5b60006137bb82613711565b9050919050565b6137cb816137b0565b81146137d657600080fd5b50565b6000813590506137e8816137c2565b92915050565b6000819050919050565b613801816137ee565b811461380c57600080fd5b50565b60008135905061381e816137f8565b92915050565b6000806040838503121561383b5761383a6137ab565b5b6000613849858286016137d9565b925050602061385a8582860161380f565b9150509250929050565b60008115159050919050565b61387981613864565b82525050565b60006020820190506138946000830184613870565b92915050565b6000602082840312156138b0576138af6137ab565b5b60006138be848285016137d9565b91505092915050565b6138d0816137ee565b82525050565b60006020820190506138eb60008301846138c7565b92915050565b60008060006060848603121561390a576139096137ab565b5b6000613918868287016137d9565b9350506020613929868287016137d9565b925050604061393a8682870161380f565b9150509250925092565b60006020828403121561395a576139596137ab565b5b60006139688482850161380f565b91505092915050565b600060ff82169050919050565b61398781613971565b82525050565b60006020820190506139a2600083018461397e565b92915050565b6139b1816137b0565b82525050565b60006020820190506139cc60008301846139a8565b92915050565b6139db81613864565b81146139e657600080fd5b50565b6000813590506139f8816139d2565b92915050565b60008060408385031215613a1557613a146137ab565b5b6000613a23858286016137d9565b9250506020613a34858286016139e9565b9150509250929050565b60008060408385031215613a5557613a546137ab565b5b6000613a63858286016137d9565b9250506020613a74858286016137d9565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ab460208361366a565b9150613abf82613a7e565b602082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b600081905092915050565b50565b6000613b05600083613aea565b9150613b1082613af5565b600082019050919050565b6000613b2682613af8565b9150819050919050565b7f776974686472617720756e7375636365737366756c0000000000000000000000600082015250565b6000613b6660158361366a565b9150613b7182613b30565b602082019050919050565b60006020820190508181036000830152613b9581613b59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613be357607f821691505b602082108103613bf657613bf5613b9c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613c5860288361366a565b9150613c6382613bfc565b604082019050919050565b60006020820190508181036000830152613c8781613c4b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613d1457808604811115613cf057613cef613c8e565b5b6001851615613cff5780820291505b8081029050613d0d85613cbd565b9450613cd4565b94509492505050565b600082613d2d5760019050613de9565b81613d3b5760009050613de9565b8160018114613d515760028114613d5b57613d8a565b6001915050613de9565b60ff841115613d6d57613d6c613c8e565b5b8360020a915084821115613d8457613d83613c8e565b5b50613de9565b5060208310610133831016604e8410600b8410161715613dbf5782820a905083811115613dba57613db9613c8e565b5b613de9565b613dcc8484846001613cca565b92509050818404811115613de357613de2613c8e565b5b81810290505b9392505050565b6000613dfb826137ee565b9150613e0683613971565b9250613e337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d1d565b905092915050565b6000613e46826137ee565b9150613e51836137ee565b9250828202613e5f816137ee565b91508282048414831517613e7657613e75613c8e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613eb7826137ee565b9150613ec2836137ee565b925082613ed257613ed1613e7d565b5b828204905092915050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e30312500000000000000000000000000000000000000000000602082015250565b6000613f39602a8361366a565b9150613f4482613edd565b604082019050919050565b60006020820190508181036000830152613f6881613f2c565b9050919050565b6000613f7a826137ee565b9150613f85836137ee565b9250828201905080821115613f9d57613f9c613c8e565b5b92915050565b7f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060008201527f6973206174206f7220686967686572207468616e207265737472696374696f6e602082015250565b6000613fff60408361366a565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b7f4d757374206b65657020627579206665657320617420353025206f72206c657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061409160218361366a565b915061409c82614035565b604082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b600061412360278361366a565b915061412e826140c7565b604082019050919050565b6000602082019050818103600083015261415281614116565b9050919050565b600060408201905061416e60008301856139a8565b61417b6020830184613870565b9392505050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b60006141b8601a8361366a565b91506141c382614182565b602082019050919050565b600060208201905081810360008301526141e7816141ab565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e732077686960008201527f6c652074726164696e6720697320616374697665000000000000000000000000602082015250565b600061424a60348361366a565b9150614255826141ee565b604082019050919050565b600060208201905081810360008301526142798161423d565b9050919050565b60008151905061428f816137f8565b92915050565b6000602082840312156142ab576142aa6137ab565b5b60006142b984828501614280565b91505092915050565b60006040820190506142d760008301856139a8565b6142e460208301846138c7565b9392505050565b7f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60008201527f742072656c61756e63682e000000000000000000000000000000000000000000602082015250565b6000614347602b8361366a565b9150614352826142eb565b604082019050919050565b600060208201905081810360008301526143768161433a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006143d960398361366a565b91506143e48261437d565b604082019050919050565b60006020820190508181036000830152614408816143cc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061446b60258361366a565b91506144768261440f565b604082019050919050565b6000602082019050818103600083015261449a8161445e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144fd60358361366a565b9150614508826144a1565b604082019050919050565b6000602082019050818103600083015261452c816144f0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b600061458f60348361366a565b915061459a82614533565b604082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f4d757374206b6565702073656c6c206665657320617420383025206f72206c6560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061462160228361366a565b915061462c826145c5565b604082019050919050565b6000602082019050818103600083015261465081614614565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146b360268361366a565b91506146be82614657565b604082019050919050565b600060208201905081810360008301526146e2816146a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061474560248361366a565b9150614750826146e9565b604082019050919050565b6000602082019050818103600083015261477481614738565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147d760228361366a565b91506147e28261477b565b604082019050919050565b60006020820190508181036000830152614806816147ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061486960258361366a565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148fb60238361366a565b91506149068261489f565b604082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061496760168361366a565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b60006149f960358361366a565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b6000614a8b60288361366a565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b6000614acc826137ee565b9150614ad7836137ee565b9250828203905081811115614aef57614aee613c8e565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b5160268361366a565b9150614b5c82614af5565b604082019050919050565b60006020820190508181036000830152614b8081614b44565b9050919050565b600081519050614b96816139d2565b92915050565b600060208284031215614bb257614bb16137ab565b5b6000614bc084828501614b87565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614c25602a8361366a565b9150614c3082614bc9565b604082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614cb760268361366a565b9150614cc282614c5b565b604082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b600081519050919050565b6000614d0382614ced565b614d0d8185613aea565b9350614d1d81856020860161367b565b80840191505092915050565b6000614d358284614cf8565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614d76601d8361366a565b9150614d8182614d40565b602082019050919050565b60006020820190508181036000830152614da581614d69565b905091905056fea264697066735822122076b07d92f70038e0358e59bcc4cd4ca6cde7ad7234fa39f2b1db8c42ee13e4e664736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80638366e79a11610144578063c876d0b9116100b6578063e884f2601161007a578063e884f260146108d3578063eba4c333146108ea578063ee40166e14610913578063f11a24d31461093e578063f2fde38b14610969578063f63743421461099257610267565b8063c876d0b9146107ec578063d257b34f14610817578063d85ba06314610840578063dd62ed3e1461086b578063e2f45605146108a857610267565b80639a7a23d6116101085780639a7a23d6146106b8578063a457c2d7146106e1578063a9059cbb1461071e578063b62496f51461075b578063bbc0c74214610798578063c0246668146107c357610267565b80638366e79a146105f757806388e765ff146106205780638a8c523c1461064b5780638da5cb5b1461066257806395d89b411461068d57610267565b806339509351116101dd5780636ddd1713116101a15780636ddd17131461050f57806370a082311461053a578063715018a61461057757806371fc46881461058e578063751039fc146105b75780637571336a146105ce57610267565b8063395093511461043a578063452ed4f1146104775780634a62bb65146104a257806351f205e4146104cd5780636a486a8e146104e457610267565b806318160ddd1161022457806318160ddd146103535780631a8145bb1461037e57806323b872dd146103a95780632be32b61146103e6578063313ce5671461040f57610267565b806306e99fef1461026c57806306fdde03146102835780630758d924146102ae578063095ea7b3146102d957806310d5de531461031657610267565b3661026757005b600080fd5b34801561027857600080fd5b506102816109bd565b005b34801561028f57600080fd5b50610298610b05565b6040516102a591906136ef565b60405180910390f35b3480156102ba57600080fd5b506102c3610b97565b6040516102d09190613790565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190613824565b610bbb565b60405161030d919061387f565b60405180910390f35b34801561032257600080fd5b5061033d6004803603810190610338919061389a565b610bd9565b60405161034a919061387f565b60405180910390f35b34801561035f57600080fd5b50610368610bf9565b60405161037591906138d6565b60405180910390f35b34801561038a57600080fd5b50610393610c03565b6040516103a091906138d6565b60405180910390f35b3480156103b557600080fd5b506103d060048036038101906103cb91906138f1565b610c09565b6040516103dd919061387f565b60405180910390f35b3480156103f257600080fd5b5061040d60048036038101906104089190613944565b610d29565b005b34801561041b57600080fd5b50610424610ea2565b604051610431919061398d565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190613824565b610eb9565b60405161046e919061387f565b60405180910390f35b34801561048357600080fd5b5061048c610f65565b60405161049991906139b7565b60405180910390f35b3480156104ae57600080fd5b506104b7610f89565b6040516104c4919061387f565b60405180910390f35b3480156104d957600080fd5b506104e2610f9c565b005b3480156104f057600080fd5b506104f96110f7565b60405161050691906138d6565b60405180910390f35b34801561051b57600080fd5b506105246110fd565b604051610531919061387f565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c919061389a565b611110565b60405161056e91906138d6565b60405180910390f35b34801561058357600080fd5b5061058c611158565b005b34801561059a57600080fd5b506105b560048036038101906105b09190613944565b6112b0565b005b3480156105c357600080fd5b506105cc6113d9565b005b3480156105da57600080fd5b506105f560048036038101906105f091906139fe565b6114e2565b005b34801561060357600080fd5b5061061e60048036038101906106199190613a3e565b6116a1565b005b34801561062c57600080fd5b506106356118f5565b60405161064291906138d6565b60405180910390f35b34801561065757600080fd5b506106606118fb565b005b34801561066e57600080fd5b50610677611a4d565b60405161068491906139b7565b60405180910390f35b34801561069957600080fd5b506106a2611a77565b6040516106af91906136ef565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da91906139fe565b611b09565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613824565b611ce2565b604051610715919061387f565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613824565b611dcd565b604051610752919061387f565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061389a565b611deb565b60405161078f919061387f565b60405180910390f35b3480156107a457600080fd5b506107ad611e0b565b6040516107ba919061387f565b60405180910390f35b3480156107cf57600080fd5b506107ea60048036038101906107e591906139fe565b611e1e565b005b3480156107f857600080fd5b50610801611f5e565b60405161080e919061387f565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190613944565b611f71565b005b34801561084c57600080fd5b50610855612110565b60405161086291906138d6565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d9190613a3e565b612116565b60405161089f91906138d6565b60405180910390f35b3480156108b457600080fd5b506108bd61219d565b6040516108ca91906138d6565b60405180910390f35b3480156108df57600080fd5b506108e86121a3565b005b3480156108f657600080fd5b50610911600480360381019061090c9190613944565b612283565b005b34801561091f57600080fd5b506109286123ac565b60405161093591906138d6565b60405180910390f35b34801561094a57600080fd5b506109536123b2565b60405161096091906138d6565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b919061389a565b6123b8565b005b34801561099e57600080fd5b506109a761257e565b6040516109b491906138d6565b60405180910390f35b6109c5612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90613aca565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610a7a90613b1b565b60006040518083038185875af1925050503d8060008114610ab7576040519150601f19603f3d011682016040523d82523d6000602084013e610abc565b606091505b50508091505080610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990613b7c565b60405180910390fd5b50565b606060038054610b1490613bcb565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4090613bcb565b8015610b8d5780601f10610b6257610100808354040283529160200191610b8d565b820191906000526020600020905b815481529060010190602001808311610b7057829003601f168201915b5050505050905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000610bcf610bc8612584565b848461258c565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b60115481565b6000610c16848484612755565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c61612584565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d1d5782811015610d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cff90613c6e565b60405180910390fd5b610d1c85610d14612584565b85840361258c565b5b60019150509392505050565b610d31612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db790613aca565b60405180910390fd5b610dc8610ea2565b600a610dd49190613df0565b6127106001610de1610bf9565b610deb9190613e3b565b610df59190613eac565b610dff9190613eac565b811015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890613f4f565b60405180910390fd5b610e49610ea2565b600a610e559190613df0565b81610e609190613e3b565b6006819055507ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009600654604051610e9791906138d6565b60405180910390a150565b6000600560009054906101000a900460ff16905090565b6000610f5b610ec6612584565b848460016000610ed4612584565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f569190613f6f565b61258c565b6001905092915050565b7f0000000000000000000000007675311d9eede24528bbdb076f2bcad7c12899b381565b600a60009054906101000a900460ff1681565b610fa4612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613aca565b60405180910390fd5b60085461103f30611110565b1015611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790614015565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055506110a3612ef7565b6000600760006101000a81548160ff0219169083151502179055507f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb32426040516110ed91906138d6565b60405180910390a1565b600f5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611160612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e690613aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112b8612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133e90613aca565b60405180910390fd5b80600e81905550600e54600d819055506032600d54111561139d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611394906140a7565b60405180910390fd5b7f03cd3090e7c409e4a7ffd2d90ff610979f4a94a87a512188b7b615671bfb772f600d546040516113ce91906138d6565b60405180910390a150565b6113e1612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146790613aca565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055506114ae610bf9565b6006819055507fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c60405160405180910390a1565b6114ea612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090613aca565b60405180910390fd5b8061160d577f0000000000000000000000007675311d9eede24528bbdb076f2bcad7c12899b373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390614139565b60405180910390fd5b5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051611695929190614159565b60405180910390a15050565b6116a9612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90613aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e906141ce565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415806117ef5750600a60019054906101000a900460ff16155b61182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590614260565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161186991906139b7565b602060405180830381865afa158015611886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118aa9190614295565b90506118b7838383613048565b7fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e43883826040516118e89291906142c2565b60405180910390a1505050565b60065481565b611903612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613aca565b60405180910390fd5b600a60019054906101000a900460ff16156119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d99061435d565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550436009819055507fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb760405160405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611a8690613bcb565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab290613bcb565b8015611aff5780601f10611ad457610100808354040283529160200191611aff565b820191906000526020600020905b815481529060010190602001808311611ae257829003601f168201915b5050505050905090565b611b11612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790613aca565b60405180910390fd5b7f0000000000000000000000007675311d9eede24528bbdb076f2bcad7c12899b373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580611bf85750805b611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906143ef565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c9882826130ce565b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008060016000611cf1612584565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590614481565b60405180910390fd5b611dc2611db9612584565b8585840361258c565b600191505092915050565b6000611de1611dda612584565b8484612755565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611e26612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac90613aca565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f52919061387f565b60405180910390a25050565b600c60009054906101000a900460ff1681565b611f79612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fff90613aca565b60405180910390fd5b620186a06001612016610bf9565b6120209190613e3b565b61202a9190613eac565b81101561206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614513565b60405180910390fd5b6103e86001612079610bf9565b6120839190613e3b565b61208d9190613eac565b8111156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906145a5565b60405180910390fd5b806008819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b1458160405161210591906138d6565b60405180910390a150565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b6121ab612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461223a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223190613aca565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d60405160405180910390a1565b61228b612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231190613aca565b60405180910390fd5b80601081905550601054600f819055506050600f541115612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790614637565b60405180910390fd5b7f274faecd49018fb411281f27986b6b4acc86e5db4100735531acd18b7b6d5f93600f546040516123a191906138d6565b60405180910390a150565b60095481565b600e5481565b6123c0612584565b73ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461244f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244690613aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b5906146c9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f29061475b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361266a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612661906147ed565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161274891906138d6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bb9061487f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614911565b60405180910390fd5b6000810361284c5761284783836000613162565b612ef2565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128ed5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612902576128fd838383613162565b612ef2565b600a60019054906101000a900460ff16612951576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129489061497d565b60405180910390fd5b600a60009054906101000a900460ff1615612c8457600c60009054906101000a900460ff1615612b95577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a2357507f0000000000000000000000007675311d9eede24528bbdb076f2bcad7c12899b373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612b9457436001600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a759190613f6f565b108015612acc5750436001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aca9190613f6f565b105b612b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0290614a0f565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555043600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c385750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c8357600654811115612c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7990614aa1565b60405180910390fd5b5b5b600854612c9030611110565b118015612ca95750600a60029054906101000a900460ff165b8015612cc25750600760009054906101000a900460ff16155b8015612d175750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d5b576001600760006101000a81548160ff021916908315150217905550612d3f612ef7565b6000600760006101000a81548160ff0219169083151502179055505b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612db857506000600f54115b15612e11576064600f5483612dcd9190613e3b565b612dd79190613eac565b9050600f5460105482612dea9190613e3b565b612df49190613eac565b60116000828254612e059190613f6f565b92505081905550612ec2565b601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6c57506000600d54115b15612ec1576064600d5483612e819190613e3b565b612e8b9190613eac565b9050600d54600e5482612e9e9190613e3b565b612ea89190613eac565b60116000828254612eb99190613f6f565b925050819055505b5b6000811115612ee557612ed6843083613162565b8082612ee29190614ac1565b91505b612ef0848484613162565b505b505050565b6000612f0230611110565b9050600060115490506000821480612f1a5750600081145b15612f26575050613046565b603c600854612f359190613e3b565b821115612f4e57603c600854612f4b9190613e3b565b91505b600060115411156130435760008160115484612f6a9190613e3b565b612f749190613eac565b9050612fa1307f0000000000000000000000007675311d9eede24528bbdb076f2bcad7c12899b383613162565b7f0000000000000000000000007675311d9eede24528bbdb076f2bcad7c12899b373ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561300957600080fd5b505af192505050801561301a575060015b5080836130279190614ac1565b9250601154826130379190614ac1565b91506000601181905550505b50505b565b6130c98363a9059cbb60e01b84846040516024016130679291906142c2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506133cb565b505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67468282604051613156929190614159565b60405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c89061487f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323790614911565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bd90614b67565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133599190613f6f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133bd91906138d6565b60405180910390a350505050565b600061342d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166134929092919063ffffffff16565b905060008151111561348d578080602001905181019061344d9190614b9c565b61348c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348390614c3b565b60405180910390fd5b5b505050565b60606134a184846000856134aa565b90509392505050565b6060824710156134ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e690614ccd565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516135189190614d29565b60006040518083038185875af1925050503d8060008114613555576040519150601f19603f3d011682016040523d82523d6000602084013e61355a565b606091505b509150915061356b87838387613577565b92505050949350505050565b606083156135d95760008351036135d157613591856135ec565b6135d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c790614d8c565b60405180910390fd5b5b8290506135e4565b6135e3838361360f565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156136225781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365691906136ef565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b8381101561369957808201518184015260208101905061367e565b60008484015250505050565b6000601f19601f8301169050919050565b60006136c18261365f565b6136cb818561366a565b93506136db81856020860161367b565b6136e4816136a5565b840191505092915050565b6000602082019050818103600083015261370981846136b6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061375661375161374c84613711565b613731565b613711565b9050919050565b60006137688261373b565b9050919050565b600061377a8261375d565b9050919050565b61378a8161376f565b82525050565b60006020820190506137a56000830184613781565b92915050565b600080fd5b60006137bb82613711565b9050919050565b6137cb816137b0565b81146137d657600080fd5b50565b6000813590506137e8816137c2565b92915050565b6000819050919050565b613801816137ee565b811461380c57600080fd5b50565b60008135905061381e816137f8565b92915050565b6000806040838503121561383b5761383a6137ab565b5b6000613849858286016137d9565b925050602061385a8582860161380f565b9150509250929050565b60008115159050919050565b61387981613864565b82525050565b60006020820190506138946000830184613870565b92915050565b6000602082840312156138b0576138af6137ab565b5b60006138be848285016137d9565b91505092915050565b6138d0816137ee565b82525050565b60006020820190506138eb60008301846138c7565b92915050565b60008060006060848603121561390a576139096137ab565b5b6000613918868287016137d9565b9350506020613929868287016137d9565b925050604061393a8682870161380f565b9150509250925092565b60006020828403121561395a576139596137ab565b5b60006139688482850161380f565b91505092915050565b600060ff82169050919050565b61398781613971565b82525050565b60006020820190506139a2600083018461397e565b92915050565b6139b1816137b0565b82525050565b60006020820190506139cc60008301846139a8565b92915050565b6139db81613864565b81146139e657600080fd5b50565b6000813590506139f8816139d2565b92915050565b60008060408385031215613a1557613a146137ab565b5b6000613a23858286016137d9565b9250506020613a34858286016139e9565b9150509250929050565b60008060408385031215613a5557613a546137ab565b5b6000613a63858286016137d9565b9250506020613a74858286016137d9565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ab460208361366a565b9150613abf82613a7e565b602082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b600081905092915050565b50565b6000613b05600083613aea565b9150613b1082613af5565b600082019050919050565b6000613b2682613af8565b9150819050919050565b7f776974686472617720756e7375636365737366756c0000000000000000000000600082015250565b6000613b6660158361366a565b9150613b7182613b30565b602082019050919050565b60006020820190508181036000830152613b9581613b59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613be357607f821691505b602082108103613bf657613bf5613b9c565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613c5860288361366a565b9150613c6382613bfc565b604082019050919050565b60006020820190508181036000830152613c8781613c4b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613d1457808604811115613cf057613cef613c8e565b5b6001851615613cff5780820291505b8081029050613d0d85613cbd565b9450613cd4565b94509492505050565b600082613d2d5760019050613de9565b81613d3b5760009050613de9565b8160018114613d515760028114613d5b57613d8a565b6001915050613de9565b60ff841115613d6d57613d6c613c8e565b5b8360020a915084821115613d8457613d83613c8e565b5b50613de9565b5060208310610133831016604e8410600b8410161715613dbf5782820a905083811115613dba57613db9613c8e565b5b613de9565b613dcc8484846001613cca565b92509050818404811115613de357613de2613c8e565b5b81810290505b9392505050565b6000613dfb826137ee565b9150613e0683613971565b9250613e337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613d1d565b905092915050565b6000613e46826137ee565b9150613e51836137ee565b9250828202613e5f816137ee565b91508282048414831517613e7657613e75613c8e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613eb7826137ee565b9150613ec2836137ee565b925082613ed257613ed1613e7d565b5b828204905092915050565b7f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f7765722060008201527f7468616e20302e30312500000000000000000000000000000000000000000000602082015250565b6000613f39602a8361366a565b9150613f4482613edd565b604082019050919050565b60006020820190508181036000830152613f6881613f2c565b9050919050565b6000613f7a826137ee565b9150613f85836137ee565b9250828201905080821115613f9d57613f9c613c8e565b5b92915050565b7f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060008201527f6973206174206f7220686967686572207468616e207265737472696374696f6e602082015250565b6000613fff60408361366a565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b7f4d757374206b65657020627579206665657320617420353025206f72206c657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061409160218361366a565b915061409c82614035565b604082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060008201527f6d61782074786e00000000000000000000000000000000000000000000000000602082015250565b600061412360278361366a565b915061412e826140c7565b604082019050919050565b6000602082019050818103600083015261415281614116565b9050919050565b600060408201905061416e60008301856139a8565b61417b6020830184613870565b9392505050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b60006141b8601a8361366a565b91506141c382614182565b602082019050919050565b600060208201905081810360008301526141e7816141ab565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e732077686960008201527f6c652074726164696e6720697320616374697665000000000000000000000000602082015250565b600061424a60348361366a565b9150614255826141ee565b604082019050919050565b600060208201905081810360008301526142798161423d565b9050919050565b60008151905061428f816137f8565b92915050565b6000602082840312156142ab576142aa6137ab565b5b60006142b984828501614280565b91505092915050565b60006040820190506142d760008301856139a8565b6142e460208301846138c7565b9392505050565b7f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60008201527f742072656c61756e63682e000000000000000000000000000000000000000000602082015250565b6000614347602b8361366a565b9150614352826142eb565b604082019050919050565b600060208201905081810360008301526143768161433a565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006143d960398361366a565b91506143e48261437d565b604082019050919050565b60006020820190508181036000830152614408816143cc565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061446b60258361366a565b91506144768261440f565b604082019050919050565b6000602082019050818103600083015261449a8161445e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006144fd60358361366a565b9150614508826144a1565b604082019050919050565b6000602082019050818103600083015261452c816144f0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e312520746f74616c20737570706c792e000000000000000000000000602082015250565b600061458f60348361366a565b915061459a82614533565b604082019050919050565b600060208201905081810360008301526145be81614582565b9050919050565b7f4d757374206b6565702073656c6c206665657320617420383025206f72206c6560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061462160228361366a565b915061462c826145c5565b604082019050919050565b6000602082019050818103600083015261465081614614565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146b360268361366a565b91506146be82614657565b604082019050919050565b600060208201905081810360008301526146e2816146a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061474560248361366a565b9150614750826146e9565b604082019050919050565b6000602082019050818103600083015261477481614738565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006147d760228361366a565b91506147e28261477b565b604082019050919050565b60006020820190508181036000830152614806816147ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061486960258361366a565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006148fb60238361366a565b91506149068261489f565b604082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061496760168361366a565b915061497282614931565b602082019050919050565b600060208201905081810360008301526149968161495a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e202054727920616761696e206c617465722e0000000000000000000000602082015250565b60006149f960358361366a565b9150614a048261499d565b604082019050919050565b60006020820190508181036000830152614a28816149ec565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178206275792e000000000000000000000000000000000000000000000000602082015250565b6000614a8b60288361366a565b9150614a9682614a2f565b604082019050919050565b60006020820190508181036000830152614aba81614a7e565b9050919050565b6000614acc826137ee565b9150614ad7836137ee565b9250828203905081811115614aef57614aee613c8e565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614b5160268361366a565b9150614b5c82614af5565b604082019050919050565b60006020820190508181036000830152614b8081614b44565b9050919050565b600081519050614b96816139d2565b92915050565b600060208284031215614bb257614bb16137ab565b5b6000614bc084828501614b87565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000614c25602a8361366a565b9150614c3082614bc9565b604082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614cb760268361366a565b9150614cc282614c5b565b604082019050919050565b60006020820190508181036000830152614ce681614caa565b9050919050565b600081519050919050565b6000614d0382614ced565b614d0d8185613aea565b9350614d1d81856020860161367b565b80840191505092915050565b6000614d358284614cf8565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614d76601d8361366a565b9150614d8182614d40565b602082019050919050565b60006020820190508181036000830152614da581614d69565b905091905056fea264697066735822122076b07d92f70038e0358e59bcc4cd4ca6cde7ad7234fa39f2b1db8c42ee13e4e664736f6c63430008110033

Deployed Bytecode Sourcemap

18696:12535:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30080:195;;;;;;;;;;;;;:::i;:::-;;11757:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18773:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12819:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19601:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12085:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19500:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13037:622;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23378:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11977:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13667:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18817:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19006:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30879:349;;;;;;;;;;;;;:::i;:::-;;19423:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19086:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12201:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16388:150;;;;;;;;;;;;;:::i;:::-;;25308:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22979:193;;;;;;;;;;;;;:::i;:::-;;24497:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30283:544;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18737:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22658:269;;;;;;;;;;;;;:::i;:::-;;16174:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11865:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24892:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13972:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12386:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19673:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19046:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25884:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19300:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23780:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19348:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12610:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18885:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23233:137;;;;;;;;;;;;;:::i;:::-;;25592:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18927:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19384:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16546:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19460:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30080:195;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30129:12:::1;30166:10;:15;;30189:21;30166:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30152:63;;;;;30234:7;30226:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;30118:157;30080:195::o:0;11757:100::-;11811:13;11844:5;11837:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11757:100;:::o;18773:37::-;;;:::o;12819:210::-;12938:4;12960:39;12969:12;:10;:12::i;:::-;12983:7;12992:6;12960:8;:39::i;:::-;13017:4;13010:11;;12819:210;;;;:::o;19601:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12085:108::-;12146:7;12173:12;;12166:19;;12085:108;:::o;19500:33::-;;;;:::o;13037:622::-;13177:4;13194:36;13204:6;13212:9;13223:6;13194:9;:36::i;:::-;13243:24;13270:11;:19;13282:6;13270:19;;;;;;;;;;;;;;;:33;13290:12;:10;:12::i;:::-;13270:33;;;;;;;;;;;;;;;;13243:60;;13338:17;13318:16;:37;13314:314;;13418:6;13398:16;:26;;13372:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;13544:57;13553:6;13561:12;:10;:12::i;:::-;13594:6;13575:16;:25;13544:8;:57::i;:::-;13314:314;13647:4;13640:11;;;13037:622;;;;;:::o;23378:332::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23521:10:::1;:8;:10::i;:::-;23517:2;:14;;;;:::i;:::-;23507:5;23502:1;23486:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23485:27;;;;:::i;:::-;23484:48;;;;:::i;:::-;23474:6;:58;;23452:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;23642:10;:8;:10::i;:::-;23638:2;:14;;;;:::i;:::-;23628:6;:25;;;;:::i;:::-;23613:12;:40;;;;23669:33;23689:12;;23669:33;;;;;;:::i;:::-;;;;;;;;23378:332:::0;:::o;11977:100::-;12035:5;12060:9;;;;;;;;;;;12053:16;;11977:100;:::o;13667:297::-;13782:4;13804:130;13827:12;:10;:12::i;:::-;13854:7;13913:10;13876:11;:25;13888:12;:10;:12::i;:::-;13876:25;;;;;;;;;;;;;;;:34;13902:7;13876:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13804:8;:130::i;:::-;13952:4;13945:11;;13667:297;;;;:::o;18817:31::-;;;:::o;19006:33::-;;;;;;;;;;;;;:::o;30879:349::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30984:18:::1;;30956:24;30974:4;30956:9;:24::i;:::-;:46;;30934:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;31116:4;31105:8;;:15;;;;;;;;;;;;;;;;;;31131:10;:8;:10::i;:::-;31163:5;31152:8;;:16;;;;;;;;;;;;;;;;;;31184:36;31204:15;31184:36;;;;;;:::i;:::-;;;;;;;;30879:349::o:0;19423:28::-;;;;:::o;19086:31::-;;;;;;;;;;;;;:::o;12201:177::-;12320:7;12352:9;:18;12362:7;12352:18;;;;;;;;;;;;;;;;12345:25;;12201:177;;;:::o;16388:150::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16497:1:::1;16460:40;;16481:6;;;;;;;;;;;16460:40;;;;;;;;;;;;16528:1;16511:6;;:19;;;;;;;;;;;;;;;;;;16388:150::o:0;25308:276::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25402:13:::1;25384:15;:31;;;;25443:15;;25428:12;:30;;;;25493:2;25477:12;;:18;;25469:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25549:27;25563:12;;25549:27;;;;;;:::i;:::-;;;;;;;;25308:276:::0;:::o;22979:193::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23050:5:::1;23033:14;;:22;;;;;;;;;;;;;;;;;;23089:5;23066:20;;:28;;;;;;;;;;;;;;;;;;23120:13;:11;:13::i;:::-;23105:12;:28;;;;23149:15;;;;;;;;;;22979:193::o:0;24497:387::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24617:4:::1;24612:155;;24674:6;24664:16;;:6;:16;;::::0;24638:117:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24612:155;24819:4;24777:31;:39;24809:6;24777:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24839:37;24863:6;24871:4;24839:37;;;;;;;:::i;:::-;;;;;;;;24497:387:::0;;:::o;30283:544::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30421:1:::1;30403:20;;:6;:20;;::::0;30395:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30505:4;30487:23;;:6;:23;;;;:41;;;;30515:13;;;;;;;;;;;30514:14;30487:41;30465:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;30619:24;30653:6;30646:24;;;30679:4;30646:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30619:66;;30696:61;30726:6;30735:3;30740:16;30696:22;:61::i;:::-;30773:46;30794:6;30802:16;30773:46;;;;;;;:::i;:::-;;;;;;;;30384:443;30283:544:::0;;:::o;18737:27::-;;;;:::o;22658:269::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22722:13:::1;;;;;;;;;;;22721:14;22713:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22810:4;22794:13;;:20;;;;;;;;;;;;;;;;;;22839:4;22825:11;;:18;;;;;;;;;;;;;;;;;;22875:12;22854:18;:33;;;;22903:16;;;;;;;;;;22658:269::o:0;16174:79::-;16212:7;16239:6;;;;;;;;;;;16232:13;;16174:79;:::o;11865:104::-;11921:13;11954:7;11947:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11865:104;:::o;24892:408::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25036:6:::1;25028:14;;:4;:14;;;;:23;;;;25046:5;25028:23;25006:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;25181:5;25147:25;:31;25173:4;25147:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25197;25224:4;25230:5;25197:26;:39::i;:::-;25286:5;25252:40;;25280:4;25252:40;;;;;;;;;;;;24892:408:::0;;:::o;13972:482::-;14092:4;14114:24;14141:11;:25;14153:12;:10;:12::i;:::-;14141:25;;;;;;;;;;;;;;;:34;14167:7;14141:34;;;;;;;;;;;;;;;;14114:61;;14228:15;14208:16;:35;;14186:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14344:67;14353:12;:10;:12::i;:::-;14367:7;14395:15;14376:16;:34;14344:8;:67::i;:::-;14442:4;14435:11;;;13972:482;;;;:::o;12386:216::-;12508:4;12530:42;12540:12;:10;:12::i;:::-;12554:9;12565:6;12530:9;:42::i;:::-;12590:4;12583:11;;12386:216;;;;:::o;19673:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19046:33::-;;;;;;;;;;;;;:::o;25884:182::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26000:8:::1;25969:19;:28;25989:7;25969:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26040:7;26024:34;;;26049:8;26024:34;;;;;;:::i;:::-;;;;;;;;25884:182:::0;;:::o;19300:39::-;;;;;;;;;;;;;:::o;23780:480::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23920:6:::1;23915:1;23899:13;:11;:13::i;:::-;:17;;;;:::i;:::-;23898:28;;;;:::i;:::-;23885:9;:41;;23863:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;24075:4;24070:1;24054:13;:11;:13::i;:::-;:17;;;;:::i;:::-;24053:26;;;;:::i;:::-;24040:9;:39;;24018:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;24191:9;24170:18;:30;;;;24216:36;24242:9;24216:36;;;;;;:::i;:::-;;;;;;;;23780:480:::0;:::o;19348:27::-;;;;:::o;12610:201::-;12744:7;12776:11;:18;12788:5;12776:18;;;;;;;;;;;;;;;:27;12795:7;12776:27;;;;;;;;;;;;;;;;12769:34;;12610:201;;;;:::o;18885:33::-;;;;:::o;23233:137::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23318:5:::1;23295:20;;:28;;;;;;;;;;;;;;;;;;23339:23;;;;;;;;;;23233:137::o:0;25592:284::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25688:13:::1;25669:16;:32;;;;25730:16;;25714:13;:32;;;;25782:2;25765:13;;:19;;25757:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25839:29;25854:13;;25839:29;;;;;;:::i;:::-;;;;;;;;25592:284:::0;:::o;18927:37::-;;;;:::o;19384:30::-;;;;:::o;16546:281::-;16311:12;:10;:12::i;:::-;16301:22;;:6;;;;;;;;;;;:22;;;16293:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16669:1:::1;16649:22;;:8;:22;;::::0;16627:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16782:8;16753:38;;16774:6;;;;;;;;;;;16753:38;;;;;;;;;;;;16811:8;16802:6;;:17;;;;;;;;;;;;;;;;;;16546:281:::0;:::o;19460:31::-;;;;:::o;2144:98::-;2197:7;2224:10;2217:17;;2144:98;:::o;15443:380::-;15596:1;15579:19;;:5;:19;;;15571:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15677:1;15658:21;;:7;:21;;;15650:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15761:6;15731:11;:18;15743:5;15731:18;;;;;;;;;;;;;;;:27;15750:7;15731:27;;;;;;;;;;;;;;;:36;;;;15799:7;15783:32;;15792:5;15783:32;;;15808:6;15783:32;;;;;;:::i;:::-;;;;;;;;15443:380;;;:::o;26074:2686::-;26222:1;26206:18;;:4;:18;;;26198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26299:1;26285:16;;:2;:16;;;26277:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26366:1;26356:6;:11;26352:93;;26384:28;26400:4;26406:2;26410:1;26384:15;:28::i;:::-;26427:7;;26352:93;26461:19;:25;26481:4;26461:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26490:19;:23;26510:2;26490:23;;;;;;;;;;;;;;;;;;;;;;;;;26461:52;26457:139;;;26530:33;26546:4;26552:2;26556:6;26530:15;:33::i;:::-;26578:7;;26457:139;26613:13;;;;;;;;;;;26608:79;;26643:32;;;;;;;;;;:::i;:::-;;;;;;;;26608:79;26703:14;;;;;;;;;;;26699:1110;;;26866:20;;;;;;;;;;;26862:599;;;26925:9;26911:24;;:2;:24;;;;:49;;;;;26953:6;26939:21;;:2;:21;;;;26911:49;26907:539;;;27090:12;27057:1;27019:24;:35;27044:9;27019:35;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:83;:163;;;;;27170:12;27166:1;27135:24;:28;27160:2;27135:28;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;:47;27019:163;26985:302;;;;;;;;;;;;:::i;:::-;;;;;;;;;27348:12;27310:24;:35;27335:9;27310:35;;;;;;;;;;;;;;;:50;;;;27414:12;27383:24;:28;27408:2;27383:28;;;;;;;;;;;;;;;:43;;;;26907:539;26862:599;27523:25;:31;27549:4;27523:31;;;;;;;;;;;;;;;;;;;;;;;;;:88;;;;;27576:31;:35;27608:2;27576:35;;;;;;;;;;;;;;;;;;;;;;;;;27575:36;27523:88;27501:297;;;27686:12;;27676:6;:22;;27646:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;27501:297;26699:1110;27866:18;;27839:24;27857:4;27839:9;:24::i;:::-;:45;:73;;;;;27901:11;;;;;;;;;;;27839:73;:99;;;;;27930:8;;;;;;;;;;;27929:9;27839:99;:145;;;;;27955:25;:29;27981:2;27955:29;;;;;;;;;;;;;;;;;;;;;;;;;27839:145;27821:273;;;28022:4;28011:8;;:15;;;;;;;;;;;;;;;;;;28041:10;:8;:10::i;:::-;28077:5;28066:8;;:16;;;;;;;;;;;;;;;;;;27821:273;28106:12;28159:25;:29;28185:2;28159:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;28208:1;28192:13;;:17;28159:50;28155:428;;;28260:3;28243:13;;28234:6;:22;;;;:::i;:::-;28233:30;;;;:::i;:::-;28226:37;;28328:13;;28308:16;;28301:4;:23;;;;:::i;:::-;28300:41;;;;:::i;:::-;28278:18;;:63;;;;;;;:::i;:::-;;;;;;;;28155:428;;;28391:25;:31;28417:4;28391:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;28441:1;28426:12;;:16;28391:51;28387:196;;;28492:3;28476:12;;28467:6;:21;;;;:::i;:::-;28466:29;;;;:::i;:::-;28459:36;;28559:12;;28540:15;;28533:4;:22;;;;:::i;:::-;28532:39;;;;:::i;:::-;28510:18;;:61;;;;;;;:::i;:::-;;;;;;;;28387:196;28155:428;28606:1;28599:4;:8;28595:112;;;28624:42;28640:4;28654;28661;28624:15;:42::i;:::-;28691:4;28681:14;;;;;:::i;:::-;;;28595:112;28719:33;28735:4;28741:2;28745:6;28719:15;:33::i;:::-;26187:2573;26074:2686;;;;:::o;29250:822::-;29296:23;29322:24;29340:4;29322:9;:24::i;:::-;29296:50;;29357:25;29385:18;;29357:46;;29439:1;29420:15;:20;:46;;;;29465:1;29444:17;:22;29420:46;29416:85;;;29483:7;;;;29416:85;29556:2;29535:18;;:23;;;;:::i;:::-;29517:15;:41;29513:115;;;29614:2;29593:18;;:23;;;;:::i;:::-;29575:41;;29513:115;29665:1;29644:18;;:22;29640:418;;;29683:23;29767:17;29728:18;;29710:15;:36;;;;:::i;:::-;29709:75;;;;:::i;:::-;29683:101;;29799:55;29823:4;29830:6;29838:15;29799;:55::i;:::-;29881:6;29873:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29869:38;29940:15;29921:34;;;;;:::i;:::-;;;29991:18;;29970:39;;;;;:::i;:::-;;;30045:1;30024:18;:22;;;;29668:390;29640:418;29278:794;;29250:822;:::o;9529:248::-;9646:123;9680:5;9723:23;;;9748:2;9752:5;9700:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9646:19;:123::i;:::-;9529:248;;;:::o;24268:221::-;24412:10;24370:31;:39;24402:6;24370:39;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;24438:43;24462:6;24470:10;24438:43;;;;;;;:::i;:::-;;;;;;;;24268:221;;:::o;14462:651::-;14620:1;14602:20;;:6;:20;;;14594:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14704:1;14683:23;;:9;:23;;;14675:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14759:21;14783:9;:17;14793:6;14783:17;;;;;;;;;;;;;;;;14759:41;;14850:6;14833:13;:23;;14811:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;14994:6;14978:13;:22;14958:9;:17;14968:6;14958:17;;;;;;;;;;;;;;;:42;;;;15046:6;15022:9;:20;15032:9;15022:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15087:9;15070:35;;15079:6;15070:35;;;15098:6;15070:35;;;;;;:::i;:::-;;;;;;;;14583:530;14462:651;;;:::o;9785:419::-;9866:23;9892:106;9934:4;9892:106;;;;;;;;;;;;;;;;;9900:5;9892:27;;;;:106;;;;;:::i;:::-;9866:132;;10033:1;10013:10;:17;:21;10009:188;;;10088:10;10077:30;;;;;;;;;;;;:::i;:::-;10051:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;10009:188;9855:349;9785:419;;:::o;3351:229::-;3488:12;3520:52;3542:6;3550:4;3556:1;3559:12;3520:21;:52::i;:::-;3513:59;;3351:229;;;;;:::o;4567:612::-;4737:12;4809:5;4784:21;:30;;4762:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;4892:12;4906:23;4933:6;:11;;4952:5;4973:4;4933:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4891:97;;;;5019:152;5064:6;5089:7;5115:10;5144:12;5019:26;:152::i;:::-;4999:172;;;;4567:612;;;;;;:::o;7702:644::-;7887:12;7916:7;7912:427;;;7965:1;7944:10;:17;:22;7940:290;;8162:18;8173:6;8162:10;:18::i;:::-;8154:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7940:290;8251:10;8244:17;;;;7912:427;8294:33;8302:10;8314:12;8294:7;:33::i;:::-;7702:644;;;;;;;:::o;2515:115::-;2575:4;2621:1;2599:7;:19;;;:23;2592:30;;2515:115;;;:::o;8888:575::-;9092:1;9072:10;:17;:21;9068:388;;;9304:10;9298:17;9361:15;9348:10;9344:2;9340:19;9333:44;9068:388;9431:12;9424:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:99:1;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:60::-;1509:3;1530:5;1523:12;;1481:60;;;:::o;1547:142::-;1597:9;1630:53;1648:34;1657:24;1675:5;1657:24;:::i;:::-;1648:34;:::i;:::-;1630:53;:::i;:::-;1617:66;;1547:142;;;:::o;1695:126::-;1745:9;1778:37;1809:5;1778:37;:::i;:::-;1765:50;;1695:126;;;:::o;1827:145::-;1896:9;1929:37;1960:5;1929:37;:::i;:::-;1916:50;;1827:145;;;:::o;1978:169::-;2084:56;2134:5;2084:56;:::i;:::-;2079:3;2072:69;1978:169;;:::o;2153:260::-;2265:4;2303:2;2292:9;2288:18;2280:26;;2316:90;2403:1;2392:9;2388:17;2379:6;2316:90;:::i;:::-;2153:260;;;;:::o;2500:117::-;2609:1;2606;2599:12;2746:96;2783:7;2812:24;2830:5;2812:24;:::i;:::-;2801:35;;2746:96;;;:::o;2848:122::-;2921:24;2939:5;2921:24;:::i;:::-;2914:5;2911:35;2901:63;;2960:1;2957;2950:12;2901:63;2848:122;:::o;2976:139::-;3022:5;3060:6;3047:20;3038:29;;3076:33;3103:5;3076:33;:::i;:::-;2976:139;;;;:::o;3121:77::-;3158:7;3187:5;3176:16;;3121:77;;;:::o;3204:122::-;3277:24;3295:5;3277:24;:::i;:::-;3270:5;3267:35;3257:63;;3316:1;3313;3306:12;3257:63;3204:122;:::o;3332:139::-;3378:5;3416:6;3403:20;3394:29;;3432:33;3459:5;3432:33;:::i;:::-;3332:139;;;;:::o;3477:474::-;3545:6;3553;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3855:2;3881:53;3926:7;3917:6;3906:9;3902:22;3881:53;:::i;:::-;3871:63;;3826:118;3477:474;;;;;:::o;3957:90::-;3991:7;4034:5;4027:13;4020:21;4009:32;;3957:90;;;:::o;4053:109::-;4134:21;4149:5;4134:21;:::i;:::-;4129:3;4122:34;4053:109;;:::o;4168:210::-;4255:4;4293:2;4282:9;4278:18;4270:26;;4306:65;4368:1;4357:9;4353:17;4344:6;4306:65;:::i;:::-;4168:210;;;;:::o;4384:329::-;4443:6;4492:2;4480:9;4471:7;4467:23;4463:32;4460:119;;;4498:79;;:::i;:::-;4460:119;4618:1;4643:53;4688:7;4679:6;4668:9;4664:22;4643:53;:::i;:::-;4633:63;;4589:117;4384:329;;;;:::o;4719:118::-;4806:24;4824:5;4806:24;:::i;:::-;4801:3;4794:37;4719:118;;:::o;4843:222::-;4936:4;4974:2;4963:9;4959:18;4951:26;;4987:71;5055:1;5044:9;5040:17;5031:6;4987:71;:::i;:::-;4843:222;;;;:::o;5071:619::-;5148:6;5156;5164;5213:2;5201:9;5192:7;5188:23;5184:32;5181:119;;;5219:79;;:::i;:::-;5181:119;5339:1;5364:53;5409:7;5400:6;5389:9;5385:22;5364:53;:::i;:::-;5354:63;;5310:117;5466:2;5492:53;5537:7;5528:6;5517:9;5513:22;5492:53;:::i;:::-;5482:63;;5437:118;5594:2;5620:53;5665:7;5656:6;5645:9;5641:22;5620:53;:::i;:::-;5610:63;;5565:118;5071:619;;;;;:::o;5696:329::-;5755:6;5804:2;5792:9;5783:7;5779:23;5775:32;5772:119;;;5810:79;;:::i;:::-;5772:119;5930:1;5955:53;6000:7;5991:6;5980:9;5976:22;5955:53;:::i;:::-;5945:63;;5901:117;5696:329;;;;:::o;6031:86::-;6066:7;6106:4;6099:5;6095:16;6084:27;;6031:86;;;:::o;6123:112::-;6206:22;6222:5;6206:22;:::i;:::-;6201:3;6194:35;6123:112;;:::o;6241:214::-;6330:4;6368:2;6357:9;6353:18;6345:26;;6381:67;6445:1;6434:9;6430:17;6421:6;6381:67;:::i;:::-;6241:214;;;;:::o;6461:118::-;6548:24;6566:5;6548:24;:::i;:::-;6543:3;6536:37;6461:118;;:::o;6585:222::-;6678:4;6716:2;6705:9;6701:18;6693:26;;6729:71;6797:1;6786:9;6782:17;6773:6;6729:71;:::i;:::-;6585:222;;;;:::o;6813:116::-;6883:21;6898:5;6883:21;:::i;:::-;6876:5;6873:32;6863:60;;6919:1;6916;6909:12;6863:60;6813:116;:::o;6935:133::-;6978:5;7016:6;7003:20;6994:29;;7032:30;7056:5;7032:30;:::i;:::-;6935:133;;;;:::o;7074:468::-;7139:6;7147;7196:2;7184:9;7175:7;7171:23;7167:32;7164:119;;;7202:79;;:::i;:::-;7164:119;7322:1;7347:53;7392:7;7383:6;7372:9;7368:22;7347:53;:::i;:::-;7337:63;;7293:117;7449:2;7475:50;7517:7;7508:6;7497:9;7493:22;7475:50;:::i;:::-;7465:60;;7420:115;7074:468;;;;;:::o;7548:474::-;7616:6;7624;7673:2;7661:9;7652:7;7648:23;7644:32;7641:119;;;7679:79;;:::i;:::-;7641:119;7799:1;7824:53;7869:7;7860:6;7849:9;7845:22;7824:53;:::i;:::-;7814:63;;7770:117;7926:2;7952:53;7997:7;7988:6;7977:9;7973:22;7952:53;:::i;:::-;7942:63;;7897:118;7548:474;;;;;:::o;8028:182::-;8168:34;8164:1;8156:6;8152:14;8145:58;8028:182;:::o;8216:366::-;8358:3;8379:67;8443:2;8438:3;8379:67;:::i;:::-;8372:74;;8455:93;8544:3;8455:93;:::i;:::-;8573:2;8568:3;8564:12;8557:19;;8216:366;;;:::o;8588:419::-;8754:4;8792:2;8781:9;8777:18;8769:26;;8841:9;8835:4;8831:20;8827:1;8816:9;8812:17;8805:47;8869:131;8995:4;8869:131;:::i;:::-;8861:139;;8588:419;;;:::o;9013:147::-;9114:11;9151:3;9136:18;;9013:147;;;;:::o;9166:114::-;;:::o;9286:398::-;9445:3;9466:83;9547:1;9542:3;9466:83;:::i;:::-;9459:90;;9558:93;9647:3;9558:93;:::i;:::-;9676:1;9671:3;9667:11;9660:18;;9286:398;;;:::o;9690:379::-;9874:3;9896:147;10039:3;9896:147;:::i;:::-;9889:154;;10060:3;10053:10;;9690:379;;;:::o;10075:171::-;10215:23;10211:1;10203:6;10199:14;10192:47;10075:171;:::o;10252:366::-;10394:3;10415:67;10479:2;10474:3;10415:67;:::i;:::-;10408:74;;10491:93;10580:3;10491:93;:::i;:::-;10609:2;10604:3;10600:12;10593:19;;10252:366;;;:::o;10624:419::-;10790:4;10828:2;10817:9;10813:18;10805:26;;10877:9;10871:4;10867:20;10863:1;10852:9;10848:17;10841:47;10905:131;11031:4;10905:131;:::i;:::-;10897:139;;10624:419;;;:::o;11049:180::-;11097:77;11094:1;11087:88;11194:4;11191:1;11184:15;11218:4;11215:1;11208:15;11235:320;11279:6;11316:1;11310:4;11306:12;11296:22;;11363:1;11357:4;11353:12;11384:18;11374:81;;11440:4;11432:6;11428:17;11418:27;;11374:81;11502:2;11494:6;11491:14;11471:18;11468:38;11465:84;;11521:18;;:::i;:::-;11465:84;11286:269;11235:320;;;:::o;11561:227::-;11701:34;11697:1;11689:6;11685:14;11678:58;11770:10;11765:2;11757:6;11753:15;11746:35;11561:227;:::o;11794:366::-;11936:3;11957:67;12021:2;12016:3;11957:67;:::i;:::-;11950:74;;12033:93;12122:3;12033:93;:::i;:::-;12151:2;12146:3;12142:12;12135:19;;11794:366;;;:::o;12166:419::-;12332:4;12370:2;12359:9;12355:18;12347:26;;12419:9;12413:4;12409:20;12405:1;12394:9;12390:17;12383:47;12447:131;12573:4;12447:131;:::i;:::-;12439:139;;12166:419;;;:::o;12591:180::-;12639:77;12636:1;12629:88;12736:4;12733:1;12726:15;12760:4;12757:1;12750:15;12777:102;12819:8;12866:5;12863:1;12859:13;12838:34;;12777:102;;;:::o;12885:848::-;12946:5;12953:4;12977:6;12968:15;;13001:5;12992:14;;13015:712;13036:1;13026:8;13023:15;13015:712;;;13131:4;13126:3;13122:14;13116:4;13113:24;13110:50;;;13140:18;;:::i;:::-;13110:50;13190:1;13180:8;13176:16;13173:451;;;13605:4;13598:5;13594:16;13585:25;;13173:451;13655:4;13649;13645:15;13637:23;;13685:32;13708:8;13685:32;:::i;:::-;13673:44;;13015:712;;;12885:848;;;;;;;:::o;13739:1073::-;13793:5;13984:8;13974:40;;14005:1;13996:10;;14007:5;;13974:40;14033:4;14023:36;;14050:1;14041:10;;14052:5;;14023:36;14119:4;14167:1;14162:27;;;;14203:1;14198:191;;;;14112:277;;14162:27;14180:1;14171:10;;14182:5;;;14198:191;14243:3;14233:8;14230:17;14227:43;;;14250:18;;:::i;:::-;14227:43;14299:8;14296:1;14292:16;14283:25;;14334:3;14327:5;14324:14;14321:40;;;14341:18;;:::i;:::-;14321:40;14374:5;;;14112:277;;14498:2;14488:8;14485:16;14479:3;14473:4;14470:13;14466:36;14448:2;14438:8;14435:16;14430:2;14424:4;14421:12;14417:35;14401:111;14398:246;;;14554:8;14548:4;14544:19;14535:28;;14589:3;14582:5;14579:14;14576:40;;;14596:18;;:::i;:::-;14576:40;14629:5;;14398:246;14669:42;14707:3;14697:8;14691:4;14688:1;14669:42;:::i;:::-;14654:57;;;;14743:4;14738:3;14734:14;14727:5;14724:25;14721:51;;;14752:18;;:::i;:::-;14721:51;14801:4;14794:5;14790:16;14781:25;;13739:1073;;;;;;:::o;14818:281::-;14876:5;14900:23;14918:4;14900:23;:::i;:::-;14892:31;;14944:25;14960:8;14944:25;:::i;:::-;14932:37;;14988:104;15025:66;15015:8;15009:4;14988:104;:::i;:::-;14979:113;;14818:281;;;;:::o;15105:410::-;15145:7;15168:20;15186:1;15168:20;:::i;:::-;15163:25;;15202:20;15220:1;15202:20;:::i;:::-;15197:25;;15257:1;15254;15250:9;15279:30;15297:11;15279:30;:::i;:::-;15268:41;;15458:1;15449:7;15445:15;15442:1;15439:22;15419:1;15412:9;15392:83;15369:139;;15488:18;;:::i;:::-;15369:139;15153:362;15105:410;;;;:::o;15521:180::-;15569:77;15566:1;15559:88;15666:4;15663:1;15656:15;15690:4;15687:1;15680:15;15707:185;15747:1;15764:20;15782:1;15764:20;:::i;:::-;15759:25;;15798:20;15816:1;15798:20;:::i;:::-;15793:25;;15837:1;15827:35;;15842:18;;:::i;:::-;15827:35;15884:1;15881;15877:9;15872:14;;15707:185;;;;:::o;15898:229::-;16038:34;16034:1;16026:6;16022:14;16015:58;16107:12;16102:2;16094:6;16090:15;16083:37;15898:229;:::o;16133:366::-;16275:3;16296:67;16360:2;16355:3;16296:67;:::i;:::-;16289:74;;16372:93;16461:3;16372:93;:::i;:::-;16490:2;16485:3;16481:12;16474:19;;16133:366;;;:::o;16505:419::-;16671:4;16709:2;16698:9;16694:18;16686:26;;16758:9;16752:4;16748:20;16744:1;16733:9;16729:17;16722:47;16786:131;16912:4;16786:131;:::i;:::-;16778:139;;16505:419;;;:::o;16930:191::-;16970:3;16989:20;17007:1;16989:20;:::i;:::-;16984:25;;17023:20;17041:1;17023:20;:::i;:::-;17018:25;;17066:1;17063;17059:9;17052:16;;17087:3;17084:1;17081:10;17078:36;;;17094:18;;:::i;:::-;17078:36;16930:191;;;;:::o;17127:251::-;17267:34;17263:1;17255:6;17251:14;17244:58;17336:34;17331:2;17323:6;17319:15;17312:59;17127:251;:::o;17384:366::-;17526:3;17547:67;17611:2;17606:3;17547:67;:::i;:::-;17540:74;;17623:93;17712:3;17623:93;:::i;:::-;17741:2;17736:3;17732:12;17725:19;;17384:366;;;:::o;17756:419::-;17922:4;17960:2;17949:9;17945:18;17937:26;;18009:9;18003:4;17999:20;17995:1;17984:9;17980:17;17973:47;18037:131;18163:4;18037:131;:::i;:::-;18029:139;;17756:419;;;:::o;18181:220::-;18321:34;18317:1;18309:6;18305:14;18298:58;18390:3;18385:2;18377:6;18373:15;18366:28;18181:220;:::o;18407:366::-;18549:3;18570:67;18634:2;18629:3;18570:67;:::i;:::-;18563:74;;18646:93;18735:3;18646:93;:::i;:::-;18764:2;18759:3;18755:12;18748:19;;18407:366;;;:::o;18779:419::-;18945:4;18983:2;18972:9;18968:18;18960:26;;19032:9;19026:4;19022:20;19018:1;19007:9;19003:17;18996:47;19060:131;19186:4;19060:131;:::i;:::-;19052:139;;18779:419;;;:::o;19204:226::-;19344:34;19340:1;19332:6;19328:14;19321:58;19413:9;19408:2;19400:6;19396:15;19389:34;19204:226;:::o;19436:366::-;19578:3;19599:67;19663:2;19658:3;19599:67;:::i;:::-;19592:74;;19675:93;19764:3;19675:93;:::i;:::-;19793:2;19788:3;19784:12;19777:19;;19436:366;;;:::o;19808:419::-;19974:4;20012:2;20001:9;19997:18;19989:26;;20061:9;20055:4;20051:20;20047:1;20036:9;20032:17;20025:47;20089:131;20215:4;20089:131;:::i;:::-;20081:139;;19808:419;;;:::o;20233:320::-;20348:4;20386:2;20375:9;20371:18;20363:26;;20399:71;20467:1;20456:9;20452:17;20443:6;20399:71;:::i;:::-;20480:66;20542:2;20531:9;20527:18;20518:6;20480:66;:::i;:::-;20233:320;;;;;:::o;20559:176::-;20699:28;20695:1;20687:6;20683:14;20676:52;20559:176;:::o;20741:366::-;20883:3;20904:67;20968:2;20963:3;20904:67;:::i;:::-;20897:74;;20980:93;21069:3;20980:93;:::i;:::-;21098:2;21093:3;21089:12;21082:19;;20741:366;;;:::o;21113:419::-;21279:4;21317:2;21306:9;21302:18;21294:26;;21366:9;21360:4;21356:20;21352:1;21341:9;21337:17;21330:47;21394:131;21520:4;21394:131;:::i;:::-;21386:139;;21113:419;;;:::o;21538:239::-;21678:34;21674:1;21666:6;21662:14;21655:58;21747:22;21742:2;21734:6;21730:15;21723:47;21538:239;:::o;21783:366::-;21925:3;21946:67;22010:2;22005:3;21946:67;:::i;:::-;21939:74;;22022:93;22111:3;22022:93;:::i;:::-;22140:2;22135:3;22131:12;22124:19;;21783:366;;;:::o;22155:419::-;22321:4;22359:2;22348:9;22344:18;22336:26;;22408:9;22402:4;22398:20;22394:1;22383:9;22379:17;22372:47;22436:131;22562:4;22436:131;:::i;:::-;22428:139;;22155:419;;;:::o;22580:143::-;22637:5;22668:6;22662:13;22653:22;;22684:33;22711:5;22684:33;:::i;:::-;22580:143;;;;:::o;22729:351::-;22799:6;22848:2;22836:9;22827:7;22823:23;22819:32;22816:119;;;22854:79;;:::i;:::-;22816:119;22974:1;22999:64;23055:7;23046:6;23035:9;23031:22;22999:64;:::i;:::-;22989:74;;22945:128;22729:351;;;;:::o;23086:332::-;23207:4;23245:2;23234:9;23230:18;23222:26;;23258:71;23326:1;23315:9;23311:17;23302:6;23258:71;:::i;:::-;23339:72;23407:2;23396:9;23392:18;23383:6;23339:72;:::i;:::-;23086:332;;;;;:::o;23424:230::-;23564:34;23560:1;23552:6;23548:14;23541:58;23633:13;23628:2;23620:6;23616:15;23609:38;23424:230;:::o;23660:366::-;23802:3;23823:67;23887:2;23882:3;23823:67;:::i;:::-;23816:74;;23899:93;23988:3;23899:93;:::i;:::-;24017:2;24012:3;24008:12;24001:19;;23660:366;;;:::o;24032:419::-;24198:4;24236:2;24225:9;24221:18;24213:26;;24285:9;24279:4;24275:20;24271:1;24260:9;24256:17;24249:47;24313:131;24439:4;24313:131;:::i;:::-;24305:139;;24032:419;;;:::o;24457:244::-;24597:34;24593:1;24585:6;24581:14;24574:58;24666:27;24661:2;24653:6;24649:15;24642:52;24457:244;:::o;24707:366::-;24849:3;24870:67;24934:2;24929:3;24870:67;:::i;:::-;24863:74;;24946:93;25035:3;24946:93;:::i;:::-;25064:2;25059:3;25055:12;25048:19;;24707:366;;;:::o;25079:419::-;25245:4;25283:2;25272:9;25268:18;25260:26;;25332:9;25326:4;25322:20;25318:1;25307:9;25303:17;25296:47;25360:131;25486:4;25360:131;:::i;:::-;25352:139;;25079:419;;;:::o;25504:224::-;25644:34;25640:1;25632:6;25628:14;25621:58;25713:7;25708:2;25700:6;25696:15;25689:32;25504:224;:::o;25734:366::-;25876:3;25897:67;25961:2;25956:3;25897:67;:::i;:::-;25890:74;;25973:93;26062:3;25973:93;:::i;:::-;26091:2;26086:3;26082:12;26075:19;;25734:366;;;:::o;26106:419::-;26272:4;26310:2;26299:9;26295:18;26287:26;;26359:9;26353:4;26349:20;26345:1;26334:9;26330:17;26323:47;26387:131;26513:4;26387:131;:::i;:::-;26379:139;;26106:419;;;:::o;26531:240::-;26671:34;26667:1;26659:6;26655:14;26648:58;26740:23;26735:2;26727:6;26723:15;26716:48;26531:240;:::o;26777:366::-;26919:3;26940:67;27004:2;26999:3;26940:67;:::i;:::-;26933:74;;27016:93;27105:3;27016:93;:::i;:::-;27134:2;27129:3;27125:12;27118:19;;26777:366;;;:::o;27149:419::-;27315:4;27353:2;27342:9;27338:18;27330:26;;27402:9;27396:4;27392:20;27388:1;27377:9;27373:17;27366:47;27430:131;27556:4;27430:131;:::i;:::-;27422:139;;27149:419;;;:::o;27574:239::-;27714:34;27710:1;27702:6;27698:14;27691:58;27783:22;27778:2;27770:6;27766:15;27759:47;27574:239;:::o;27819:366::-;27961:3;27982:67;28046:2;28041:3;27982:67;:::i;:::-;27975:74;;28058:93;28147:3;28058:93;:::i;:::-;28176:2;28171:3;28167:12;28160:19;;27819:366;;;:::o;28191:419::-;28357:4;28395:2;28384:9;28380:18;28372:26;;28444:9;28438:4;28434:20;28430:1;28419:9;28415:17;28408:47;28472:131;28598:4;28472:131;:::i;:::-;28464:139;;28191:419;;;:::o;28616:221::-;28756:34;28752:1;28744:6;28740:14;28733:58;28825:4;28820:2;28812:6;28808:15;28801:29;28616:221;:::o;28843:366::-;28985:3;29006:67;29070:2;29065:3;29006:67;:::i;:::-;28999:74;;29082:93;29171:3;29082:93;:::i;:::-;29200:2;29195:3;29191:12;29184:19;;28843:366;;;:::o;29215:419::-;29381:4;29419:2;29408:9;29404:18;29396:26;;29468:9;29462:4;29458:20;29454:1;29443:9;29439:17;29432:47;29496:131;29622:4;29496:131;:::i;:::-;29488:139;;29215:419;;;:::o;29640:225::-;29780:34;29776:1;29768:6;29764:14;29757:58;29849:8;29844:2;29836:6;29832:15;29825:33;29640:225;:::o;29871:366::-;30013:3;30034:67;30098:2;30093:3;30034:67;:::i;:::-;30027:74;;30110:93;30199:3;30110:93;:::i;:::-;30228:2;30223:3;30219:12;30212:19;;29871:366;;;:::o;30243:419::-;30409:4;30447:2;30436:9;30432:18;30424:26;;30496:9;30490:4;30486:20;30482:1;30471:9;30467:17;30460:47;30524:131;30650:4;30524:131;:::i;:::-;30516:139;;30243:419;;;:::o;30668:223::-;30808:34;30804:1;30796:6;30792:14;30785:58;30877:6;30872:2;30864:6;30860:15;30853:31;30668:223;:::o;30897:366::-;31039:3;31060:67;31124:2;31119:3;31060:67;:::i;:::-;31053:74;;31136:93;31225:3;31136:93;:::i;:::-;31254:2;31249:3;31245:12;31238:19;;30897:366;;;:::o;31269:419::-;31435:4;31473:2;31462:9;31458:18;31450:26;;31522:9;31516:4;31512:20;31508:1;31497:9;31493:17;31486:47;31550:131;31676:4;31550:131;:::i;:::-;31542:139;;31269:419;;;:::o;31694:221::-;31834:34;31830:1;31822:6;31818:14;31811:58;31903:4;31898:2;31890:6;31886:15;31879:29;31694:221;:::o;31921:366::-;32063:3;32084:67;32148:2;32143:3;32084:67;:::i;:::-;32077:74;;32160:93;32249:3;32160:93;:::i;:::-;32278:2;32273:3;32269:12;32262:19;;31921:366;;;:::o;32293:419::-;32459:4;32497:2;32486:9;32482:18;32474:26;;32546:9;32540:4;32536:20;32532:1;32521:9;32517:17;32510:47;32574:131;32700:4;32574:131;:::i;:::-;32566:139;;32293:419;;;:::o;32718:224::-;32858:34;32854:1;32846:6;32842:14;32835:58;32927:7;32922:2;32914:6;32910:15;32903:32;32718:224;:::o;32948:366::-;33090:3;33111:67;33175:2;33170:3;33111:67;:::i;:::-;33104:74;;33187:93;33276:3;33187:93;:::i;:::-;33305:2;33300:3;33296:12;33289:19;;32948:366;;;:::o;33320:419::-;33486:4;33524:2;33513:9;33509:18;33501:26;;33573:9;33567:4;33563:20;33559:1;33548:9;33544:17;33537:47;33601:131;33727:4;33601:131;:::i;:::-;33593:139;;33320:419;;;:::o;33745:222::-;33885:34;33881:1;33873:6;33869:14;33862:58;33954:5;33949:2;33941:6;33937:15;33930:30;33745:222;:::o;33973:366::-;34115:3;34136:67;34200:2;34195:3;34136:67;:::i;:::-;34129:74;;34212:93;34301:3;34212:93;:::i;:::-;34330:2;34325:3;34321:12;34314:19;;33973:366;;;:::o;34345:419::-;34511:4;34549:2;34538:9;34534:18;34526:26;;34598:9;34592:4;34588:20;34584:1;34573:9;34569:17;34562:47;34626:131;34752:4;34626:131;:::i;:::-;34618:139;;34345:419;;;:::o;34770:172::-;34910:24;34906:1;34898:6;34894:14;34887:48;34770:172;:::o;34948:366::-;35090:3;35111:67;35175:2;35170:3;35111:67;:::i;:::-;35104:74;;35187:93;35276:3;35187:93;:::i;:::-;35305:2;35300:3;35296:12;35289:19;;34948:366;;;:::o;35320:419::-;35486:4;35524:2;35513:9;35509:18;35501:26;;35573:9;35567:4;35563:20;35559:1;35548:9;35544:17;35537:47;35601:131;35727:4;35601:131;:::i;:::-;35593:139;;35320:419;;;:::o;35745:240::-;35885:34;35881:1;35873:6;35869:14;35862:58;35954:23;35949:2;35941:6;35937:15;35930:48;35745:240;:::o;35991:366::-;36133:3;36154:67;36218:2;36213:3;36154:67;:::i;:::-;36147:74;;36230:93;36319:3;36230:93;:::i;:::-;36348:2;36343:3;36339:12;36332:19;;35991:366;;;:::o;36363:419::-;36529:4;36567:2;36556:9;36552:18;36544:26;;36616:9;36610:4;36606:20;36602:1;36591:9;36587:17;36580:47;36644:131;36770:4;36644:131;:::i;:::-;36636:139;;36363:419;;;:::o;36788:227::-;36928:34;36924:1;36916:6;36912:14;36905:58;36997:10;36992:2;36984:6;36980:15;36973:35;36788:227;:::o;37021:366::-;37163:3;37184:67;37248:2;37243:3;37184:67;:::i;:::-;37177:74;;37260:93;37349:3;37260:93;:::i;:::-;37378:2;37373:3;37369:12;37362:19;;37021:366;;;:::o;37393:419::-;37559:4;37597:2;37586:9;37582:18;37574:26;;37646:9;37640:4;37636:20;37632:1;37621:9;37617:17;37610:47;37674:131;37800:4;37674:131;:::i;:::-;37666:139;;37393:419;;;:::o;37818:194::-;37858:4;37878:20;37896:1;37878:20;:::i;:::-;37873:25;;37912:20;37930:1;37912:20;:::i;:::-;37907:25;;37956:1;37953;37949:9;37941:17;;37980:1;37974:4;37971:11;37968:37;;;37985:18;;:::i;:::-;37968:37;37818:194;;;;:::o;38018:225::-;38158:34;38154:1;38146:6;38142:14;38135:58;38227:8;38222:2;38214:6;38210:15;38203:33;38018:225;:::o;38249:366::-;38391:3;38412:67;38476:2;38471:3;38412:67;:::i;:::-;38405:74;;38488:93;38577:3;38488:93;:::i;:::-;38606:2;38601:3;38597:12;38590:19;;38249:366;;;:::o;38621:419::-;38787:4;38825:2;38814:9;38810:18;38802:26;;38874:9;38868:4;38864:20;38860:1;38849:9;38845:17;38838:47;38902:131;39028:4;38902:131;:::i;:::-;38894:139;;38621:419;;;:::o;39046:137::-;39100:5;39131:6;39125:13;39116:22;;39147:30;39171:5;39147:30;:::i;:::-;39046:137;;;;:::o;39189:345::-;39256:6;39305:2;39293:9;39284:7;39280:23;39276:32;39273:119;;;39311:79;;:::i;:::-;39273:119;39431:1;39456:61;39509:7;39500:6;39489:9;39485:22;39456:61;:::i;:::-;39446:71;;39402:125;39189:345;;;;:::o;39540:229::-;39680:34;39676:1;39668:6;39664:14;39657:58;39749:12;39744:2;39736:6;39732:15;39725:37;39540:229;:::o;39775:366::-;39917:3;39938:67;40002:2;39997:3;39938:67;:::i;:::-;39931:74;;40014:93;40103:3;40014:93;:::i;:::-;40132:2;40127:3;40123:12;40116:19;;39775:366;;;:::o;40147:419::-;40313:4;40351:2;40340:9;40336:18;40328:26;;40400:9;40394:4;40390:20;40386:1;40375:9;40371:17;40364:47;40428:131;40554:4;40428:131;:::i;:::-;40420:139;;40147:419;;;:::o;40572:225::-;40712:34;40708:1;40700:6;40696:14;40689:58;40781:8;40776:2;40768:6;40764:15;40757:33;40572:225;:::o;40803:366::-;40945:3;40966:67;41030:2;41025:3;40966:67;:::i;:::-;40959:74;;41042:93;41131:3;41042:93;:::i;:::-;41160:2;41155:3;41151:12;41144:19;;40803:366;;;:::o;41175:419::-;41341:4;41379:2;41368:9;41364:18;41356:26;;41428:9;41422:4;41418:20;41414:1;41403:9;41399:17;41392:47;41456:131;41582:4;41456:131;:::i;:::-;41448:139;;41175:419;;;:::o;41600:98::-;41651:6;41685:5;41679:12;41669:22;;41600:98;;;:::o;41704:386::-;41808:3;41836:38;41868:5;41836:38;:::i;:::-;41890:88;41971:6;41966:3;41890:88;:::i;:::-;41883:95;;41987:65;42045:6;42040:3;42033:4;42026:5;42022:16;41987:65;:::i;:::-;42077:6;42072:3;42068:16;42061:23;;41812:278;41704:386;;;;:::o;42096:271::-;42226:3;42248:93;42337:3;42328:6;42248:93;:::i;:::-;42241:100;;42358:3;42351:10;;42096:271;;;;:::o;42373:179::-;42513:31;42509:1;42501:6;42497:14;42490:55;42373:179;:::o;42558:366::-;42700:3;42721:67;42785:2;42780:3;42721:67;:::i;:::-;42714:74;;42797:93;42886:3;42797:93;:::i;:::-;42915:2;42910:3;42906:12;42899:19;;42558:366;;;:::o;42930:419::-;43096:4;43134:2;43123:9;43119:18;43111:26;;43183:9;43177:4;43173:20;43169:1;43158:9;43154:17;43147:47;43211:131;43337:4;43211:131;:::i;:::-;43203:139;;42930:419;;;:::o

Swarm Source

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