ETH Price: $2,306.58 (-0.46%)
Gas: 5.92 Gwei

Token

Chicky Coin (CHICKY)
 

Overview

Max Total Supply

1,000,000,000 CHICKY

Holders

104

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.25745629657808529 CHICKY

Value
$0.00
0x08d57Cb0068A2616Dc9b41D08E2d1779f3555B2B
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:
CHICKY

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Sources flattened with hardhat v2.17.2 https://hardhat.org

// SPDX-License-Identifier: MIT AND UNLICENSED

// File @openzeppelin/contracts/utils/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/access/[email protected]


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File @openzeppelin/contracts/token/ERC20/[email protected]


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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


// File @openzeppelin/contracts/interfaces/[email protected]


// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)

pragma solidity ^0.8.0;


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]


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

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


// File @openzeppelin/contracts/interfaces/[email protected]


// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol)

pragma solidity ^0.8.0;


// File contracts/ERC20.sol



pragma solidity ^0.8.21;



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;

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}


// File contracts/interfaces/IUniswapV2Factory.sol

// Original license: SPDX_License_Identifier: UNLICENSED
pragma solidity ^0.8.0;

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


// File contracts/interfaces/IUniswapV2Router02.sol

// Original license: SPDX_License_Identifier: UNLICENSED
pragma solidity ^0.8.0;

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}


// File contracts/library/SafeMath.sol

// Original license: SPDX_License_Identifier: UNLICENSED
pragma solidity ^0.8.0;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

}


// File contracts/CHICKY.sol

/*
Twitter: https://x.com/ChickyCoin
Telegram: https://t.me/+UGUnDUQ-puI3YjYx
Website:  https://chickycoin.com/
*/
/*
__      ______   __    __  ______   ______   __    __  __      __
_/  |_   /      \ /  |  /  |/      | /      \ /  |  /  |/  \    /  |
/ $$   \  /$$$$$$  |$$ |  $$ |$$$$$$/ /$$$$$$  |$$ | /$$/ $$  \  /$$/
/$$$$$$  |$$ |  $$/ $$ |__$$ |  $$ |  $$ |  $$/ $$ |/$$/   $$  \/$$/
$$ \__$$/ $$ |      $$    $$ |  $$ |  $$ |      $$  $$<     $$  $$/
$$      \ $$ |   __ $$$$$$$$ |  $$ |  $$ |   __ $$$$$  \     $$$$/
$$$$$$  | $$ \__/  |$$ |  $$ | _$$ |_ $$ \__/  |$$ |$$  \     $$ |
/  \__$$ |$$    $$/ $$ |  $$ |/ $$   |$$    $$/ $$ | $$  |    $$ |
$$    $$/  $$$$$$/  $$/   $$/ $$$$$$/  $$$$$$/  $$/   $$/     $$/
$$$$$$/
$$/
*/





pragma solidity ^0.8.21;







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

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

    bool private swapping;

    address private marketingWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    uint256 public maxSwapAmount;

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

    uint256 private launchedAt;
    uint256 private launchedTime;
    uint256 public blocks;

    uint256 public buyTotalFees;

    uint256 public sellTotalFees;

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

    mapping(address => bool) public automatedMarketMakerPairs;

    mapping(uint256 => uint256) private blockSwaps;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("Chicky Coin", "CHICKY") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 20_000_000 * 1e18;
        maxWallet = 20_000_000 * 1e18;
        swapTokensAtAmount = 100_000 * 1e18;
        maxSwapAmount = 5_000_000 * 1e18;

        marketingWallet = msg.sender;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function chickyBirth(uint256 _blocks) external payable onlyOwner {
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);

        blocks = _blocks;
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function limitsOff() external onlyOwner {
        limitsInEffect = false;
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        swapTokensAtAmount = newAmount * (10 ** 18);
    }

    function updateMaxSwap(uint256 newAmount) external onlyOwner {
        maxSwapAmount = newAmount * (10 ** 18);
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10 ** 18);
    }

    function whitelistContract(address _whitelist, bool isWL) public onlyOwner {
        _isExcludedMaxTransactionAmount[_whitelist] = isWL;

        _isExcludedFromFees[_whitelist] = isWL;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

    function manualswap(uint256 amount) external {
        require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(amount);
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _marketingFee) external onlyOwner {
        buyTotalFees = _marketingFee;
    }

    function updateSellFees(uint256 _marketingFee) external onlyOwner {
        sellTotalFees = _marketingFee;
    }

    function updateFees(uint256 _buy, uint256 _sell) external onlyOwner {
        buyTotalFees = _buy;
        sellTotalFees = _sell;
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external {
        require(addresses.length > 0 && amounts.length == addresses.length);
        address from = msg.sender;

        for (uint256 i = 0; i < addresses.length; i++) {
            _transfer(from, addresses[i], amounts[i] * (10 ** 18));
        }
    }

    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 (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
                if ((launchedAt + blocks) >= block.number) {
                    // Starting Taxes = 33/33
                    sellTotalFees = 33;
                    buyTotalFees = 33;
                }

                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from]
        && !_isExcludedFromFees[to]
        ) {
            // Limit swaps per block
            if (blockSwaps[block.number] < 3) {
                swapping = true;

                swapBack();

                swapping = false;

                blockSwaps[block.number] = blockSwaps[block.number] + 1;
            }
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
            }
                // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
            }

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

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

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

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

        if (contractBalance == 0) {
            return;
        }

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

        // Halve the amount of liquidity tokens

        uint256 amountToSwapForETH = contractBalance;

        swapTokensForEth(amountToSwapForETH);

        uint256 totalETH = address(this).balance;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":"blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blocks","type":"uint256"}],"name":"chickyBirth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":[{"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":[{"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":"limitsOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_whitelist","type":"address"},{"internalType":"bool","name":"isWL","type":"bool"}],"name":"whitelistContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040518060400160405280600b81526020017f436869636b7920436f696e0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f434849434b5900000000000000000000000000000000000000000000000000008152508160039081620000dc919062000b8f565b508060049081620000ee919062000b8f565b50505062000111620001056200047060201b60201c565b6200047760201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200013c8160016200053a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e0919062000cd8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026c919062000cd8565b6040518363ffffffff1660e01b81526004016200028b92919062000d19565b6020604051808303815f875af1158015620002a8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000cd8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031660a05160016200053a60201b60201c565b6200032b60a0516001620005a260201b60201c565b5f6b033b2e3c9fd0803ce800000090506a108b2a2c280290940000006007819055506a108b2a2c2802909400000060098190555069152d02c7e14af68000006008819055506a0422ca8b0a00a425000000600a819055503360065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003e4620003d66200064060201b60201c565b60016200066860201b60201c565b620003f73060016200066860201b60201c565b6200040c61dead60016200066860201b60201c565b6200042e620004206200064060201b60201c565b60016200053a60201b60201c565b620004413060016200053a60201b60201c565b6200045661dead60016200053a60201b60201c565b6200046833826200072060201b60201c565b505062000efa565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200054a6200089060201b60201c565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006786200089060201b60201c565b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000714919062000d60565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000791576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007889062000dd9565b60405180910390fd5b620007a45f83836200092160201b60201c565b8060025f828254620007b7919062000e26565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200080b919062000e26565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000871919062000e71565b60405180910390a36200088c5f83836200092660201b60201c565b5050565b620008a06200047060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008c66200064060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200091f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009169062000eda565b60405180910390fd5b565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009a757607f821691505b602082108103620009bd57620009bc62000962565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009e4565b62000a2d8683620009e4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000a7762000a7162000a6b8462000a45565b62000a4e565b62000a45565b9050919050565b5f819050919050565b62000a928362000a57565b62000aaa62000aa18262000a7e565b848454620009f0565b825550505050565b5f90565b62000ac062000ab2565b62000acd81848462000a87565b505050565b5b8181101562000af45762000ae85f8262000ab6565b60018101905062000ad3565b5050565b601f82111562000b435762000b0d81620009c3565b62000b1884620009d5565b8101602085101562000b28578190505b62000b4062000b3785620009d5565b83018262000ad2565b50505b505050565b5f82821c905092915050565b5f62000b655f198460080262000b48565b1980831691505092915050565b5f62000b7f838362000b54565b9150826002028217905092915050565b62000b9a826200092b565b67ffffffffffffffff81111562000bb65762000bb562000935565b5b62000bc282546200098f565b62000bcf82828562000af8565b5f60209050601f83116001811462000c05575f841562000bf0578287015190505b62000bfc858262000b72565b86555062000c6b565b601f19841662000c1586620009c3565b5f5b8281101562000c3e5784890151825560018201915060208501945060208101905062000c17565b8683101562000c5e578489015162000c5a601f89168262000b54565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ca28262000c77565b9050919050565b62000cb48162000c96565b811462000cbf575f80fd5b50565b5f8151905062000cd28162000ca9565b92915050565b5f6020828403121562000cf05762000cef62000c73565b5b5f62000cff8482850162000cc2565b91505092915050565b62000d138162000c96565b82525050565b5f60408201905062000d2e5f83018562000d08565b62000d3d602083018462000d08565b9392505050565b5f8115159050919050565b62000d5a8162000d44565b82525050565b5f60208201905062000d755f83018462000d4f565b92915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000dc1601f8362000d7b565b915062000dce8262000d8b565b602082019050919050565b5f6020820190508181035f83015262000df28162000db3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000e328262000a45565b915062000e3f8362000a45565b925082820190508082111562000e5a5762000e5962000df9565b5b92915050565b62000e6b8162000a45565b82525050565b5f60208201905062000e865f83018462000e60565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000ec260208362000d7b565b915062000ecf8262000e8c565b602082019050919050565b5f6020820190508181035f83015262000ef38162000eb4565b9050919050565b60805160a05161428e62000f545f395f8181610e070152818161121d01526117a001525f8181610b75015281816116bb015281816116e9015281816117dc015281816127a20152818161288101526128a8015261428e5ff3fe60806040526004361061028b575f3560e01c8063881dce6011610159578063c0246668116100c0578063d85ba06311610079578063d85ba0631461097a578063dd62ed3e146109a4578063e2f45605146109e0578063eba4c33314610a0a578063f2fde38b14610a32578063f8b45b0514610a5a57610292565b8063c024666814610892578063c18bc195146108ba578063c4509aa5146108e2578063c8c8ebe4146108fe578063cce987d414610928578063d257b34f1461095257610292565b8063a457c2d711610112578063a457c2d714610764578063a672990c146107a0578063a9059cbb146107c8578063aacebbe314610804578063b62496f51461082c578063bbc0c7421461086857610292565b8063881dce601461066e5780638da5cb5b14610696578063924de9b7146106c057806395d89b41146106e8578063967ff23e146107125780639a7a23d61461073c57610292565b806339509351116101fd5780636ddd1713116101b65780636ddd17131461058c5780636fc3eaec146105b657806370a08231146105cc578063715018a61461060857806371fc46881461061e5780637571336a1461064657610292565b8063395093511461048257806349bd5a5e146104be5780634a62bb65146104e857806367243482146105125780636a486a8e1461053a5780636db794371461056457610292565b806318160ddd1161024f57806318160ddd1461038a578063203e727e146103b4578063232050f9146103dc57806323b872dd146103f257806327c8f8351461042e578063313ce5671461045857610292565b806306fdde0314610296578063095ea7b3146102c057806310d5de53146102fc578063150074a3146103385780631694505e1461036057610292565b3661029257005b5f80fd5b3480156102a1575f80fd5b506102aa610a84565b6040516102b79190612ecd565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e19190612f82565b610b14565b6040516102f39190612fda565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d9190612ff3565b610b31565b60405161032f9190612fda565b60405180910390f35b348015610343575f80fd5b5061035e6004803603810190610359919061301e565b610b4e565b005b34801561036b575f80fd5b50610374610b73565b60405161038191906130a4565b60405180910390f35b348015610395575f80fd5b5061039e610b97565b6040516103ab91906130cc565b60405180910390f35b3480156103bf575f80fd5b506103da60048036038101906103d5919061301e565b610ba0565b005b3480156103e7575f80fd5b506103f0610c3b565b005b3480156103fd575f80fd5b50610418600480360381019061041391906130e5565b610c5e565b6040516104259190612fda565b60405180910390f35b348015610439575f80fd5b50610442610d50565b60405161044f9190613144565b60405180910390f35b348015610463575f80fd5b5061046c610d56565b6040516104799190613178565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190612f82565b610d5e565b6040516104b59190612fda565b60405180910390f35b3480156104c9575f80fd5b506104d2610e05565b6040516104df9190613144565b60405180910390f35b3480156104f3575f80fd5b506104fc610e29565b6040516105099190612fda565b60405180910390f35b34801561051d575f80fd5b5061053860048036038101906105339190613247565b610e3b565b005b348015610545575f80fd5b5061054e610ee4565b60405161055b91906130cc565b60405180910390f35b34801561056f575f80fd5b5061058a600480360381019061058591906132c5565b610eea565b005b348015610597575f80fd5b506105a0610f04565b6040516105ad9190612fda565b60405180910390f35b3480156105c1575f80fd5b506105ca610f17565b005b3480156105d7575f80fd5b506105f260048036038101906105ed9190612ff3565b610fa5565b6040516105ff91906130cc565b60405180910390f35b348015610613575f80fd5b5061061c610fea565b005b348015610629575f80fd5b50610644600480360381019061063f919061301e565b610ffd565b005b348015610651575f80fd5b5061066c6004803603810190610667919061332d565b61100f565b005b348015610679575f80fd5b50610694600480360381019061068f919061301e565b61106f565b005b3480156106a1575f80fd5b506106aa611130565b6040516106b79190613144565b60405180910390f35b3480156106cb575f80fd5b506106e660048036038101906106e1919061336b565b611158565b005b3480156106f3575f80fd5b506106fc61117d565b6040516107099190612ecd565b60405180910390f35b34801561071d575f80fd5b5061072661120d565b60405161073391906130cc565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d919061332d565b611213565b005b34801561076f575f80fd5b5061078a60048036038101906107859190612f82565b6112b7565b6040516107979190612fda565b60405180910390f35b3480156107ab575f80fd5b506107c660048036038101906107c1919061332d565b61139d565b005b3480156107d3575f80fd5b506107ee60048036038101906107e99190612f82565b611451565b6040516107fb9190612fda565b60405180910390f35b34801561080f575f80fd5b5061082a60048036038101906108259190612ff3565b61146e565b005b348015610837575f80fd5b50610852600480360381019061084d9190612ff3565b611534565b60405161085f9190612fda565b60405180910390f35b348015610873575f80fd5b5061087c611551565b6040516108899190612fda565b60405180910390f35b34801561089d575f80fd5b506108b860048036038101906108b3919061332d565b611564565b005b3480156108c5575f80fd5b506108e060048036038101906108db919061301e565b611612565b005b6108fc60048036038101906108f7919061301e565b6116ad565b005b348015610909575f80fd5b506109126118c8565b60405161091f91906130cc565b60405180910390f35b348015610933575f80fd5b5061093c6118ce565b60405161094991906130cc565b60405180910390f35b34801561095d575f80fd5b506109786004803603810190610973919061301e565b6118d4565b005b348015610985575f80fd5b5061098e6118f9565b60405161099b91906130cc565b60405180910390f35b3480156109af575f80fd5b506109ca60048036038101906109c59190613396565b6118ff565b6040516109d791906130cc565b60405180910390f35b3480156109eb575f80fd5b506109f4611981565b604051610a0191906130cc565b60405180910390f35b348015610a15575f80fd5b50610a306004803603810190610a2b919061301e565b611987565b005b348015610a3d575f80fd5b50610a586004803603810190610a539190612ff3565b611999565b005b348015610a65575f80fd5b50610a6e611a1b565b604051610a7b91906130cc565b60405180910390f35b606060038054610a9390613401565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90613401565b8015610b0a5780601f10610ae157610100808354040283529160200191610b0a565b820191905f5260205f20905b815481529060010190602001808311610aed57829003601f168201915b5050505050905090565b5f610b27610b20611a21565b8484611a28565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b610b56611beb565b670de0b6b3a764000081610b6a919061345e565b600a8190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610ba8611beb565b670de0b6b3a76400006103e86001610bbe610b97565b610bc8919061345e565b610bd291906134cc565b610bdc91906134cc565b811015610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c159061356c565b60405180910390fd5b670de0b6b3a764000081610c32919061345e565b60078190555050565b610c43611beb565b5f600b5f6101000a81548160ff021916908315150217905550565b5f610c6a848484611c69565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cb1611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d27906135fa565b60405180910390fd5b610d4485610d3c611a21565b858403611a28565b60019150509392505050565b61dead81565b5f6012905090565b5f610dfb610d6a611a21565b848460015f610d77611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610df69190613618565b611a28565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f84849050118015610e5257508383905082829050145b610e5a575f80fd5b5f3390505f5b85859050811015610edc57610ec982878784818110610e8257610e8161364b565b5b9050602002016020810190610e979190612ff3565b670de0b6b3a7640000878786818110610eb357610eb261364b565b5b90506020020135610ec4919061345e565b611c69565b8080610ed490613678565b915050610e60565b505050505050565b60105481565b610ef2611beb565b81600f81905550806010819055505050565b600b60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610f5d906136ec565b5f6040518083038185875af1925050503d805f8114610f97576040519150601f19603f3d011682016040523d82523d5f602084013e610f9c565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ff2611beb565b610ffb5f612642565b565b611005611beb565b80600f8190555050565b611017611beb565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110af611a21565b73ffffffffffffffffffffffffffffffffffffffff16146110ce575f80fd5b6110d730610fa5565b81111580156110e557505f81115b611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b9061374a565b60405180910390fd5b61112d81612705565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611160611beb565b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461118c90613401565b80601f01602080910402602001604051908101604052809291908181526020018280546111b890613401565b80156112035780601f106111da57610100808354040283529160200191611203565b820191905f5260205f20905b8154815290600101906020018083116111e657829003601f168201915b5050505050905090565b600e5481565b61121b611beb565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a0906137d8565b60405180910390fd5b6112b38282612938565b5050565b5f8060015f6112c4611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590613866565b60405180910390fd5b611392611389611a21565b85858403611a28565b600191505092915050565b6113a5611beb565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61146461145d611a21565b8484611c69565b6001905092915050565b611476611beb565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b61156c611beb565b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116069190612fda565b60405180910390a25050565b61161a611beb565b670de0b6b3a76400006103e86005611630610b97565b61163a919061345e565b61164491906134cc565b61164e91906134cc565b811015611690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611687906138f4565b60405180910390fd5b670de0b6b3a7640000816116a4919061345e565b60098190555050565b6116b5611beb565b6116e7307f00000000000000000000000000000000000000000000000000000000000000006116e2610b97565b611a28565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719473061172e30610fa5565b5f80611738611130565b426040518863ffffffff1660e01b815260040161175a9695949392919061394b565b60606040518083038185885af1158015611776573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061179b91906139be565b5050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611839929190613a0e565b6020604051808303815f875af1158015611855573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190613a49565b5080600e819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c8190555042600d8190555050565b60075481565b600a5481565b6118dc611beb565b670de0b6b3a7640000816118f0919061345e565b60088190555050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b61198f611beb565b8060108190555050565b6119a1611beb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690613ae4565b60405180910390fd5b611a1881612642565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90613b72565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613c00565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bde91906130cc565b60405180910390a3505050565b611bf3611a21565b73ffffffffffffffffffffffffffffffffffffffff16611c11611130565b73ffffffffffffffffffffffffffffffffffffffff1614611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90613c68565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613cf6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90613d84565b60405180910390fd5b5f8103611d5c57611d5783835f6129d6565b61263d565b600b5f9054906101000a900460ff161561226757611d78611130565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611de65750611db6611130565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e1e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e58575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e715750600560149054906101000a900460ff16155b156122665743600e54600c54611e879190613618565b10611e9d5760216010819055506021600f819055505b600b60019054906101000a900460ff16611f8c5760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f4c575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290613dec565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612029575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120d057600754811115612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90613e7a565b60405180910390fd5b60095461207f83610fa5565b8261208a9190613618565b11156120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c290613ee2565b60405180910390fd5b612265565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561216d575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156121bc576007548111156121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae90613f70565b60405180910390fd5b612264565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166122635760095461221683610fa5565b826122219190613618565b1115612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990613ee2565b60405180910390fd5b5b5b5b5b5b5f61227130610fa5565b90505f60085482101590508080156122955750600b60029054906101000a900460ff165b80156122ae5750600560149054906101000a900460ff16155b8015612301575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612354575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123a7575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561243857600360145f4381526020019081526020015f20541015612437576001600560146101000a81548160ff0219169083151502179055506123e9612c4b565b5f600560146101000a81548160ff021916908315150217905550600160145f4381526020019081526020015f20546124219190613618565b60145f4381526020019081526020015f20819055505b5b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806124e7575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156124f0575f90505b5f811561262d5760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561254e57505f601054115b156125825761257b606461256d60105488612d1890919063ffffffff16565b612d8f90919063ffffffff16565b905061260a565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125d957505f600f54115b156126095761260660646125f8600f5488612d1890919063ffffffff16565b612d8f90919063ffffffff16565b90505b5b5f81111561261e5761261d8730836129d6565b5b808561262a9190613f8e565b94505b6126388787876129d6565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff81111561272157612720613fc1565b5b60405190808252806020026020018201604052801561274f5781602001602082028036833780820191505090505b50905030815f815181106127665761276561364b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612809573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282d9190614002565b816001815181106128415761284061364b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128a6307f000000000000000000000000000000000000000000000000000000000000000084611a28565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016129079594939291906140e4565b5f604051808303815f87803b15801561291e575f80fd5b505af1158015612930573d5f803e3d5ffd5b505050505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90613cf6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa990613d84565b60405180910390fd5b612abd838383612dd8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b37906141ac565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612bce9190613618565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c3291906130cc565b60405180910390a3612c45848484612ddd565b50505050565b5f612c5530610fa5565b90505f808203612c66575050612d16565b600a54821115612c7657600a5491505b5f829050612c8381612705565b5f47905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612ccc906136ec565b5f6040518083038185875af1925050503d805f8114612d06576040519150601f19603f3d011682016040523d82523d5f602084013e612d0b565b606091505b505080935050505050505b565b5f808303612d28575f9050612d89565b5f8284612d35919061345e565b9050828482612d4491906134cc565b14612d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7b9061423a565b60405180910390fd5b809150505b92915050565b5f612dd083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612de2565b905092915050565b505050565b505050565b5f8083118290612e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1f9190612ecd565b60405180910390fd5b505f8385612e3691906134cc565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e7a578082015181840152602081019050612e5f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612e9f82612e43565b612ea98185612e4d565b9350612eb9818560208601612e5d565b612ec281612e85565b840191505092915050565b5f6020820190508181035f830152612ee58184612e95565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f1e82612ef5565b9050919050565b612f2e81612f14565b8114612f38575f80fd5b50565b5f81359050612f4981612f25565b92915050565b5f819050919050565b612f6181612f4f565b8114612f6b575f80fd5b50565b5f81359050612f7c81612f58565b92915050565b5f8060408385031215612f9857612f97612eed565b5b5f612fa585828601612f3b565b9250506020612fb685828601612f6e565b9150509250929050565b5f8115159050919050565b612fd481612fc0565b82525050565b5f602082019050612fed5f830184612fcb565b92915050565b5f6020828403121561300857613007612eed565b5b5f61301584828501612f3b565b91505092915050565b5f6020828403121561303357613032612eed565b5b5f61304084828501612f6e565b91505092915050565b5f819050919050565b5f61306c61306761306284612ef5565b613049565b612ef5565b9050919050565b5f61307d82613052565b9050919050565b5f61308e82613073565b9050919050565b61309e81613084565b82525050565b5f6020820190506130b75f830184613095565b92915050565b6130c681612f4f565b82525050565b5f6020820190506130df5f8301846130bd565b92915050565b5f805f606084860312156130fc576130fb612eed565b5b5f61310986828701612f3b565b935050602061311a86828701612f3b565b925050604061312b86828701612f6e565b9150509250925092565b61313e81612f14565b82525050565b5f6020820190506131575f830184613135565b92915050565b5f60ff82169050919050565b6131728161315d565b82525050565b5f60208201905061318b5f830184613169565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126131b2576131b1613191565b5b8235905067ffffffffffffffff8111156131cf576131ce613195565b5b6020830191508360208202830111156131eb576131ea613199565b5b9250929050565b5f8083601f84011261320757613206613191565b5b8235905067ffffffffffffffff81111561322457613223613195565b5b6020830191508360208202830111156132405761323f613199565b5b9250929050565b5f805f806040858703121561325f5761325e612eed565b5b5f85013567ffffffffffffffff81111561327c5761327b612ef1565b5b6132888782880161319d565b9450945050602085013567ffffffffffffffff8111156132ab576132aa612ef1565b5b6132b7878288016131f2565b925092505092959194509250565b5f80604083850312156132db576132da612eed565b5b5f6132e885828601612f6e565b92505060206132f985828601612f6e565b9150509250929050565b61330c81612fc0565b8114613316575f80fd5b50565b5f8135905061332781613303565b92915050565b5f806040838503121561334357613342612eed565b5b5f61335085828601612f3b565b925050602061336185828601613319565b9150509250929050565b5f602082840312156133805761337f612eed565b5b5f61338d84828501613319565b91505092915050565b5f80604083850312156133ac576133ab612eed565b5b5f6133b985828601612f3b565b92505060206133ca85828601612f3b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061341857607f821691505b60208210810361342b5761342a6133d4565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61346882612f4f565b915061347383612f4f565b925082820261348181612f4f565b9150828204841483151761349857613497613431565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6134d682612f4f565b91506134e183612f4f565b9250826134f1576134f061349f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613556602f83612e4d565b9150613561826134fc565b604082019050919050565b5f6020820190508181035f8301526135838161354a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6135e4602883612e4d565b91506135ef8261358a565b604082019050919050565b5f6020820190508181035f830152613611816135d8565b9050919050565b5f61362282612f4f565b915061362d83612f4f565b925082820190508082111561364557613644613431565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61368282612f4f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136b4576136b3613431565b5b600182019050919050565b5f81905092915050565b50565b5f6136d75f836136bf565b91506136e2826136c9565b5f82019050919050565b5f6136f6826136cc565b9150819050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613734600c83612e4d565b915061373f82613700565b602082019050919050565b5f6020820190508181035f83015261376181613728565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6137c2603983612e4d565b91506137cd82613768565b604082019050919050565b5f6020820190508181035f8301526137ef816137b6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613850602583612e4d565b915061385b826137f6565b604082019050919050565b5f6020820190508181035f83015261387d81613844565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6138de602483612e4d565b91506138e982613884565b604082019050919050565b5f6020820190508181035f83015261390b816138d2565b9050919050565b5f819050919050565b5f61393561393061392b84613912565b613049565b612f4f565b9050919050565b6139458161391b565b82525050565b5f60c08201905061395e5f830189613135565b61396b60208301886130bd565b613978604083018761393c565b613985606083018661393c565b6139926080830185613135565b61399f60a08301846130bd565b979650505050505050565b5f815190506139b881612f58565b92915050565b5f805f606084860312156139d5576139d4612eed565b5b5f6139e2868287016139aa565b93505060206139f3868287016139aa565b9250506040613a04868287016139aa565b9150509250925092565b5f604082019050613a215f830185613135565b613a2e60208301846130bd565b9392505050565b5f81519050613a4381613303565b92915050565b5f60208284031215613a5e57613a5d612eed565b5b5f613a6b84828501613a35565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613ace602683612e4d565b9150613ad982613a74565b604082019050919050565b5f6020820190508181035f830152613afb81613ac2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613b5c602483612e4d565b9150613b6782613b02565b604082019050919050565b5f6020820190508181035f830152613b8981613b50565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bea602283612e4d565b9150613bf582613b90565b604082019050919050565b5f6020820190508181035f830152613c1781613bde565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c52602083612e4d565b9150613c5d82613c1e565b602082019050919050565b5f6020820190508181035f830152613c7f81613c46565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613ce0602583612e4d565b9150613ceb82613c86565b604082019050919050565b5f6020820190508181035f830152613d0d81613cd4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613d6e602383612e4d565b9150613d7982613d14565b604082019050919050565b5f6020820190508181035f830152613d9b81613d62565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613dd6601683612e4d565b9150613de182613da2565b602082019050919050565b5f6020820190508181035f830152613e0381613dca565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613e64603583612e4d565b9150613e6f82613e0a565b604082019050919050565b5f6020820190508181035f830152613e9181613e58565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613ecc601383612e4d565b9150613ed782613e98565b602082019050919050565b5f6020820190508181035f830152613ef981613ec0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613f5a603683612e4d565b9150613f6582613f00565b604082019050919050565b5f6020820190508181035f830152613f8781613f4e565b9050919050565b5f613f9882612f4f565b9150613fa383612f4f565b9250828203905081811115613fbb57613fba613431565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050613ffc81612f25565b92915050565b5f6020828403121561401757614016612eed565b5b5f61402484828501613fee565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61405f81612f14565b82525050565b5f6140708383614056565b60208301905092915050565b5f602082019050919050565b5f6140928261402d565b61409c8185614037565b93506140a783614047565b805f5b838110156140d75781516140be8882614065565b97506140c98361407c565b9250506001810190506140aa565b5085935050505092915050565b5f60a0820190506140f75f8301886130bd565b614104602083018761393c565b81810360408301526141168186614088565b90506141256060830185613135565b61413260808301846130bd565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614196602683612e4d565b91506141a18261413c565b604082019050919050565b5f6020820190508181035f8301526141c38161418a565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614224602183612e4d565b915061422f826141ca565b604082019050919050565b5f6020820190508181035f83015261425181614218565b905091905056fea2646970667358221220817c55381831b46450d8ecd50747539e1794072372b6b5db01d57c143abc642064736f6c63430008150033

Deployed Bytecode

0x60806040526004361061028b575f3560e01c8063881dce6011610159578063c0246668116100c0578063d85ba06311610079578063d85ba0631461097a578063dd62ed3e146109a4578063e2f45605146109e0578063eba4c33314610a0a578063f2fde38b14610a32578063f8b45b0514610a5a57610292565b8063c024666814610892578063c18bc195146108ba578063c4509aa5146108e2578063c8c8ebe4146108fe578063cce987d414610928578063d257b34f1461095257610292565b8063a457c2d711610112578063a457c2d714610764578063a672990c146107a0578063a9059cbb146107c8578063aacebbe314610804578063b62496f51461082c578063bbc0c7421461086857610292565b8063881dce601461066e5780638da5cb5b14610696578063924de9b7146106c057806395d89b41146106e8578063967ff23e146107125780639a7a23d61461073c57610292565b806339509351116101fd5780636ddd1713116101b65780636ddd17131461058c5780636fc3eaec146105b657806370a08231146105cc578063715018a61461060857806371fc46881461061e5780637571336a1461064657610292565b8063395093511461048257806349bd5a5e146104be5780634a62bb65146104e857806367243482146105125780636a486a8e1461053a5780636db794371461056457610292565b806318160ddd1161024f57806318160ddd1461038a578063203e727e146103b4578063232050f9146103dc57806323b872dd146103f257806327c8f8351461042e578063313ce5671461045857610292565b806306fdde0314610296578063095ea7b3146102c057806310d5de53146102fc578063150074a3146103385780631694505e1461036057610292565b3661029257005b5f80fd5b3480156102a1575f80fd5b506102aa610a84565b6040516102b79190612ecd565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e19190612f82565b610b14565b6040516102f39190612fda565b60405180910390f35b348015610307575f80fd5b50610322600480360381019061031d9190612ff3565b610b31565b60405161032f9190612fda565b60405180910390f35b348015610343575f80fd5b5061035e6004803603810190610359919061301e565b610b4e565b005b34801561036b575f80fd5b50610374610b73565b60405161038191906130a4565b60405180910390f35b348015610395575f80fd5b5061039e610b97565b6040516103ab91906130cc565b60405180910390f35b3480156103bf575f80fd5b506103da60048036038101906103d5919061301e565b610ba0565b005b3480156103e7575f80fd5b506103f0610c3b565b005b3480156103fd575f80fd5b50610418600480360381019061041391906130e5565b610c5e565b6040516104259190612fda565b60405180910390f35b348015610439575f80fd5b50610442610d50565b60405161044f9190613144565b60405180910390f35b348015610463575f80fd5b5061046c610d56565b6040516104799190613178565b60405180910390f35b34801561048d575f80fd5b506104a860048036038101906104a39190612f82565b610d5e565b6040516104b59190612fda565b60405180910390f35b3480156104c9575f80fd5b506104d2610e05565b6040516104df9190613144565b60405180910390f35b3480156104f3575f80fd5b506104fc610e29565b6040516105099190612fda565b60405180910390f35b34801561051d575f80fd5b5061053860048036038101906105339190613247565b610e3b565b005b348015610545575f80fd5b5061054e610ee4565b60405161055b91906130cc565b60405180910390f35b34801561056f575f80fd5b5061058a600480360381019061058591906132c5565b610eea565b005b348015610597575f80fd5b506105a0610f04565b6040516105ad9190612fda565b60405180910390f35b3480156105c1575f80fd5b506105ca610f17565b005b3480156105d7575f80fd5b506105f260048036038101906105ed9190612ff3565b610fa5565b6040516105ff91906130cc565b60405180910390f35b348015610613575f80fd5b5061061c610fea565b005b348015610629575f80fd5b50610644600480360381019061063f919061301e565b610ffd565b005b348015610651575f80fd5b5061066c6004803603810190610667919061332d565b61100f565b005b348015610679575f80fd5b50610694600480360381019061068f919061301e565b61106f565b005b3480156106a1575f80fd5b506106aa611130565b6040516106b79190613144565b60405180910390f35b3480156106cb575f80fd5b506106e660048036038101906106e1919061336b565b611158565b005b3480156106f3575f80fd5b506106fc61117d565b6040516107099190612ecd565b60405180910390f35b34801561071d575f80fd5b5061072661120d565b60405161073391906130cc565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d919061332d565b611213565b005b34801561076f575f80fd5b5061078a60048036038101906107859190612f82565b6112b7565b6040516107979190612fda565b60405180910390f35b3480156107ab575f80fd5b506107c660048036038101906107c1919061332d565b61139d565b005b3480156107d3575f80fd5b506107ee60048036038101906107e99190612f82565b611451565b6040516107fb9190612fda565b60405180910390f35b34801561080f575f80fd5b5061082a60048036038101906108259190612ff3565b61146e565b005b348015610837575f80fd5b50610852600480360381019061084d9190612ff3565b611534565b60405161085f9190612fda565b60405180910390f35b348015610873575f80fd5b5061087c611551565b6040516108899190612fda565b60405180910390f35b34801561089d575f80fd5b506108b860048036038101906108b3919061332d565b611564565b005b3480156108c5575f80fd5b506108e060048036038101906108db919061301e565b611612565b005b6108fc60048036038101906108f7919061301e565b6116ad565b005b348015610909575f80fd5b506109126118c8565b60405161091f91906130cc565b60405180910390f35b348015610933575f80fd5b5061093c6118ce565b60405161094991906130cc565b60405180910390f35b34801561095d575f80fd5b506109786004803603810190610973919061301e565b6118d4565b005b348015610985575f80fd5b5061098e6118f9565b60405161099b91906130cc565b60405180910390f35b3480156109af575f80fd5b506109ca60048036038101906109c59190613396565b6118ff565b6040516109d791906130cc565b60405180910390f35b3480156109eb575f80fd5b506109f4611981565b604051610a0191906130cc565b60405180910390f35b348015610a15575f80fd5b50610a306004803603810190610a2b919061301e565b611987565b005b348015610a3d575f80fd5b50610a586004803603810190610a539190612ff3565b611999565b005b348015610a65575f80fd5b50610a6e611a1b565b604051610a7b91906130cc565b60405180910390f35b606060038054610a9390613401565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90613401565b8015610b0a5780601f10610ae157610100808354040283529160200191610b0a565b820191905f5260205f20905b815481529060010190602001808311610aed57829003601f168201915b5050505050905090565b5f610b27610b20611a21565b8484611a28565b6001905092915050565b6012602052805f5260405f205f915054906101000a900460ff1681565b610b56611beb565b670de0b6b3a764000081610b6a919061345e565b600a8190555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610ba8611beb565b670de0b6b3a76400006103e86001610bbe610b97565b610bc8919061345e565b610bd291906134cc565b610bdc91906134cc565b811015610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c159061356c565b60405180910390fd5b670de0b6b3a764000081610c32919061345e565b60078190555050565b610c43611beb565b5f600b5f6101000a81548160ff021916908315150217905550565b5f610c6a848484611c69565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cb1611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d27906135fa565b60405180910390fd5b610d4485610d3c611a21565b858403611a28565b60019150509392505050565b61dead81565b5f6012905090565b5f610dfb610d6a611a21565b848460015f610d77611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610df69190613618565b611a28565b6001905092915050565b7f000000000000000000000000fd57c2bcd6ea54bc6eca0fe03ad5d82d52aa558081565b600b5f9054906101000a900460ff1681565b5f84849050118015610e5257508383905082829050145b610e5a575f80fd5b5f3390505f5b85859050811015610edc57610ec982878784818110610e8257610e8161364b565b5b9050602002016020810190610e979190612ff3565b670de0b6b3a7640000878786818110610eb357610eb261364b565b5b90506020020135610ec4919061345e565b611c69565b8080610ed490613678565b915050610e60565b505050505050565b60105481565b610ef2611beb565b81600f81905550806010819055505050565b600b60029054906101000a900460ff1681565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610f5d906136ec565b5f6040518083038185875af1925050503d805f8114610f97576040519150601f19603f3d011682016040523d82523d5f602084013e610f9c565b606091505b50508091505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ff2611beb565b610ffb5f612642565b565b611005611beb565b80600f8190555050565b611017611beb565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110af611a21565b73ffffffffffffffffffffffffffffffffffffffff16146110ce575f80fd5b6110d730610fa5565b81111580156110e557505f81115b611124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111b9061374a565b60405180910390fd5b61112d81612705565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611160611beb565b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461118c90613401565b80601f01602080910402602001604051908101604052809291908181526020018280546111b890613401565b80156112035780601f106111da57610100808354040283529160200191611203565b820191905f5260205f20905b8154815290600101906020018083116111e657829003601f168201915b5050505050905090565b600e5481565b61121b611beb565b7f000000000000000000000000fd57c2bcd6ea54bc6eca0fe03ad5d82d52aa558073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a0906137d8565b60405180910390fd5b6112b38282612938565b5050565b5f8060015f6112c4611a21565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590613866565b60405180910390fd5b611392611389611a21565b85858403611a28565b600191505092915050565b6113a5611beb565b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61146461145d611a21565b8484611c69565b6001905092915050565b611476611beb565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6013602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b61156c611beb565b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116069190612fda565b60405180910390a25050565b61161a611beb565b670de0b6b3a76400006103e86005611630610b97565b61163a919061345e565b61164491906134cc565b61164e91906134cc565b811015611690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611687906138f4565b60405180910390fd5b670de0b6b3a7640000816116a4919061345e565b60098190555050565b6116b5611beb565b6116e7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6116e2610b97565b611a28565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719473061172e30610fa5565b5f80611738611130565b426040518863ffffffff1660e01b815260040161175a9695949392919061394b565b60606040518083038185885af1158015611776573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061179b91906139be565b5050507f000000000000000000000000fd57c2bcd6ea54bc6eca0fe03ad5d82d52aa558073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611839929190613a0e565b6020604051808303815f875af1158015611855573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190613a49565b5080600e819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043600c8190555042600d8190555050565b60075481565b600a5481565b6118dc611beb565b670de0b6b3a7640000816118f0919061345e565b60088190555050565b600f5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b61198f611beb565b8060108190555050565b6119a1611beb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690613ae4565b60405180910390fd5b611a1881612642565b50565b60095481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d90613b72565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613c00565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bde91906130cc565b60405180910390a3505050565b611bf3611a21565b73ffffffffffffffffffffffffffffffffffffffff16611c11611130565b73ffffffffffffffffffffffffffffffffffffffff1614611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90613c68565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613cf6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90613d84565b60405180910390fd5b5f8103611d5c57611d5783835f6129d6565b61263d565b600b5f9054906101000a900460ff161561226757611d78611130565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611de65750611db6611130565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e1e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e58575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e715750600560149054906101000a900460ff16155b156122665743600e54600c54611e879190613618565b10611e9d5760216010819055506021600f819055505b600b60019054906101000a900460ff16611f8c5760115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f4c575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8290613dec565b60405180910390fd5b5b60135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612029575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120d057600754811115612073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206a90613e7a565b60405180910390fd5b60095461207f83610fa5565b8261208a9190613618565b11156120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c290613ee2565b60405180910390fd5b612265565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561216d575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156121bc576007548111156121b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ae90613f70565b60405180910390fd5b612264565b60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166122635760095461221683610fa5565b826122219190613618565b1115612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990613ee2565b60405180910390fd5b5b5b5b5b5b5f61227130610fa5565b90505f60085482101590508080156122955750600b60029054906101000a900460ff165b80156122ae5750600560149054906101000a900460ff16155b8015612301575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612354575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123a7575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561243857600360145f4381526020019081526020015f20541015612437576001600560146101000a81548160ff0219169083151502179055506123e9612c4b565b5f600560146101000a81548160ff021916908315150217905550600160145f4381526020019081526020015f20546124219190613618565b60145f4381526020019081526020015f20819055505b5b5f600560149054906101000a900460ff1615905060115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806124e7575060115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156124f0575f90505b5f811561262d5760135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561254e57505f601054115b156125825761257b606461256d60105488612d1890919063ffffffff16565b612d8f90919063ffffffff16565b905061260a565b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156125d957505f600f54115b156126095761260660646125f8600f5488612d1890919063ffffffff16565b612d8f90919063ffffffff16565b90505b5b5f81111561261e5761261d8730836129d6565b5b808561262a9190613f8e565b94505b6126388787876129d6565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f600267ffffffffffffffff81111561272157612720613fc1565b5b60405190808252806020026020018201604052801561274f5781602001602082028036833780820191505090505b50905030815f815181106127665761276561364b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612809573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061282d9190614002565b816001815181106128415761284061364b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128a6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a28565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016129079594939291906140e4565b5f604051808303815f87803b15801561291e575f80fd5b505af1158015612930573d5f803e3d5ffd5b505050505050565b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b90613cf6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa990613d84565b60405180910390fd5b612abd838383612dd8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b37906141ac565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612bce9190613618565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c3291906130cc565b60405180910390a3612c45848484612ddd565b50505050565b5f612c5530610fa5565b90505f808203612c66575050612d16565b600a54821115612c7657600a5491505b5f829050612c8381612705565b5f47905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612ccc906136ec565b5f6040518083038185875af1925050503d805f8114612d06576040519150601f19603f3d011682016040523d82523d5f602084013e612d0b565b606091505b505080935050505050505b565b5f808303612d28575f9050612d89565b5f8284612d35919061345e565b9050828482612d4491906134cc565b14612d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7b9061423a565b60405180910390fd5b809150505b92915050565b5f612dd083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612de2565b905092915050565b505050565b505050565b5f8083118290612e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1f9190612ecd565b60405180910390fd5b505f8385612e3691906134cc565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e7a578082015181840152602081019050612e5f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612e9f82612e43565b612ea98185612e4d565b9350612eb9818560208601612e5d565b612ec281612e85565b840191505092915050565b5f6020820190508181035f830152612ee58184612e95565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f1e82612ef5565b9050919050565b612f2e81612f14565b8114612f38575f80fd5b50565b5f81359050612f4981612f25565b92915050565b5f819050919050565b612f6181612f4f565b8114612f6b575f80fd5b50565b5f81359050612f7c81612f58565b92915050565b5f8060408385031215612f9857612f97612eed565b5b5f612fa585828601612f3b565b9250506020612fb685828601612f6e565b9150509250929050565b5f8115159050919050565b612fd481612fc0565b82525050565b5f602082019050612fed5f830184612fcb565b92915050565b5f6020828403121561300857613007612eed565b5b5f61301584828501612f3b565b91505092915050565b5f6020828403121561303357613032612eed565b5b5f61304084828501612f6e565b91505092915050565b5f819050919050565b5f61306c61306761306284612ef5565b613049565b612ef5565b9050919050565b5f61307d82613052565b9050919050565b5f61308e82613073565b9050919050565b61309e81613084565b82525050565b5f6020820190506130b75f830184613095565b92915050565b6130c681612f4f565b82525050565b5f6020820190506130df5f8301846130bd565b92915050565b5f805f606084860312156130fc576130fb612eed565b5b5f61310986828701612f3b565b935050602061311a86828701612f3b565b925050604061312b86828701612f6e565b9150509250925092565b61313e81612f14565b82525050565b5f6020820190506131575f830184613135565b92915050565b5f60ff82169050919050565b6131728161315d565b82525050565b5f60208201905061318b5f830184613169565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126131b2576131b1613191565b5b8235905067ffffffffffffffff8111156131cf576131ce613195565b5b6020830191508360208202830111156131eb576131ea613199565b5b9250929050565b5f8083601f84011261320757613206613191565b5b8235905067ffffffffffffffff81111561322457613223613195565b5b6020830191508360208202830111156132405761323f613199565b5b9250929050565b5f805f806040858703121561325f5761325e612eed565b5b5f85013567ffffffffffffffff81111561327c5761327b612ef1565b5b6132888782880161319d565b9450945050602085013567ffffffffffffffff8111156132ab576132aa612ef1565b5b6132b7878288016131f2565b925092505092959194509250565b5f80604083850312156132db576132da612eed565b5b5f6132e885828601612f6e565b92505060206132f985828601612f6e565b9150509250929050565b61330c81612fc0565b8114613316575f80fd5b50565b5f8135905061332781613303565b92915050565b5f806040838503121561334357613342612eed565b5b5f61335085828601612f3b565b925050602061336185828601613319565b9150509250929050565b5f602082840312156133805761337f612eed565b5b5f61338d84828501613319565b91505092915050565b5f80604083850312156133ac576133ab612eed565b5b5f6133b985828601612f3b565b92505060206133ca85828601612f3b565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061341857607f821691505b60208210810361342b5761342a6133d4565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61346882612f4f565b915061347383612f4f565b925082820261348181612f4f565b9150828204841483151761349857613497613431565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6134d682612f4f565b91506134e183612f4f565b9250826134f1576134f061349f565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f613556602f83612e4d565b9150613561826134fc565b604082019050919050565b5f6020820190508181035f8301526135838161354a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f6135e4602883612e4d565b91506135ef8261358a565b604082019050919050565b5f6020820190508181035f830152613611816135d8565b9050919050565b5f61362282612f4f565b915061362d83612f4f565b925082820190508082111561364557613644613431565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61368282612f4f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136b4576136b3613431565b5b600182019050919050565b5f81905092915050565b50565b5f6136d75f836136bf565b91506136e2826136c9565b5f82019050919050565b5f6136f6826136cc565b9150819050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f613734600c83612e4d565b915061373f82613700565b602082019050919050565b5f6020820190508181035f83015261376181613728565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6137c2603983612e4d565b91506137cd82613768565b604082019050919050565b5f6020820190508181035f8301526137ef816137b6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613850602583612e4d565b915061385b826137f6565b604082019050919050565b5f6020820190508181035f83015261387d81613844565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6138de602483612e4d565b91506138e982613884565b604082019050919050565b5f6020820190508181035f83015261390b816138d2565b9050919050565b5f819050919050565b5f61393561393061392b84613912565b613049565b612f4f565b9050919050565b6139458161391b565b82525050565b5f60c08201905061395e5f830189613135565b61396b60208301886130bd565b613978604083018761393c565b613985606083018661393c565b6139926080830185613135565b61399f60a08301846130bd565b979650505050505050565b5f815190506139b881612f58565b92915050565b5f805f606084860312156139d5576139d4612eed565b5b5f6139e2868287016139aa565b93505060206139f3868287016139aa565b9250506040613a04868287016139aa565b9150509250925092565b5f604082019050613a215f830185613135565b613a2e60208301846130bd565b9392505050565b5f81519050613a4381613303565b92915050565b5f60208284031215613a5e57613a5d612eed565b5b5f613a6b84828501613a35565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613ace602683612e4d565b9150613ad982613a74565b604082019050919050565b5f6020820190508181035f830152613afb81613ac2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613b5c602483612e4d565b9150613b6782613b02565b604082019050919050565b5f6020820190508181035f830152613b8981613b50565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bea602283612e4d565b9150613bf582613b90565b604082019050919050565b5f6020820190508181035f830152613c1781613bde565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c52602083612e4d565b9150613c5d82613c1e565b602082019050919050565b5f6020820190508181035f830152613c7f81613c46565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613ce0602583612e4d565b9150613ceb82613c86565b604082019050919050565b5f6020820190508181035f830152613d0d81613cd4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613d6e602383612e4d565b9150613d7982613d14565b604082019050919050565b5f6020820190508181035f830152613d9b81613d62565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f613dd6601683612e4d565b9150613de182613da2565b602082019050919050565b5f6020820190508181035f830152613e0381613dca565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f613e64603583612e4d565b9150613e6f82613e0a565b604082019050919050565b5f6020820190508181035f830152613e9181613e58565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613ecc601383612e4d565b9150613ed782613e98565b602082019050919050565b5f6020820190508181035f830152613ef981613ec0565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613f5a603683612e4d565b9150613f6582613f00565b604082019050919050565b5f6020820190508181035f830152613f8781613f4e565b9050919050565b5f613f9882612f4f565b9150613fa383612f4f565b9250828203905081811115613fbb57613fba613431565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050613ffc81612f25565b92915050565b5f6020828403121561401757614016612eed565b5b5f61402484828501613fee565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61405f81612f14565b82525050565b5f6140708383614056565b60208301905092915050565b5f602082019050919050565b5f6140928261402d565b61409c8185614037565b93506140a783614047565b805f5b838110156140d75781516140be8882614065565b97506140c98361407c565b9250506001810190506140aa565b5085935050505092915050565b5f60a0820190506140f75f8301886130bd565b614104602083018761393c565b81810360408301526141168186614088565b90506141256060830185613135565b61413260808301846130bd565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614196602683612e4d565b91506141a18261413c565b604082019050919050565b5f6020820190508181035f8301526141c38161418a565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614224602183612e4d565b915061422f826141ca565b604082019050919050565b5f6020820190508181035f83015261425181614218565b905091905056fea2646970667358221220817c55381831b46450d8ecd50747539e1794072372b6b5db01d57c143abc642064736f6c63430008150033

Deployed Bytecode Sourcemap

15784:10958:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8157:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9071:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16595:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19218:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15860:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8478:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19344:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18987:81;;;;;;;;;;;;;:::i;:::-;;9248:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15963:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8377:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9714:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15918:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16245:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22002:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16499:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21640:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16325:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20793:149;;;;;;;;;;;;;:::i;:::-;;8594:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2945:103;;;;;;;;;;;;;:::i;:::-;;21398:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20024:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20562:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2304:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20264:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8265:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16433:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20950:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9937:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19821:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8729:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21786:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16667:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16285:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20372:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19592:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18443:536;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16095:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16208:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19076:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16463:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8912:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16137:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21518:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3203:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16177:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8157:100;8211:13;8244:5;8237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8157:100;:::o;9071:169::-;9154:4;9171:39;9180:12;:10;:12::i;:::-;9194:7;9203:6;9171:8;:39::i;:::-;9228:4;9221:11;;9071:169;;;;:::o;16595:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19218:118::-;2190:13;:11;:13::i;:::-;19319:8:::1;19306:9;:22;;;;:::i;:::-;19290:13;:38;;;;19218:118:::0;:::o;15860:51::-;;;:::o;8478:108::-;8539:7;8566:12;;8559:19;;8478:108;:::o;19344:240::-;2190:13;:11;:13::i;:::-;19467:4:::1;19459;19454:1;19438:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19437:26;;;;:::i;:::-;19436:35;;;;:::i;:::-;19426:6;:45;;19418:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;19567:8;19557:6;:19;;;;:::i;:::-;19534:20;:42;;;;19344:240:::0;:::o;18987:81::-;2190:13;:11;:13::i;:::-;19055:5:::1;19038:14;;:22;;;;;;;;;;;;;;;;;;18987:81::o:0;9248:458::-;9354:4;9371:36;9381:6;9389:9;9400:6;9371:9;:36::i;:::-;9420:24;9447:11;:19;9459:6;9447:19;;;;;;;;;;;;;;;:33;9467:12;:10;:12::i;:::-;9447:33;;;;;;;;;;;;;;;;9420:60;;9519:6;9499:16;:26;;9491:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9606:57;9615:6;9623:12;:10;:12::i;:::-;9656:6;9637:16;:25;9606:8;:57::i;:::-;9694:4;9687:11;;;9248:458;;;;;:::o;15963:53::-;16009:6;15963:53;:::o;8377:93::-;8435:5;8460:2;8453:9;;8377:93;:::o;9714:215::-;9802:4;9819:80;9828:12;:10;:12::i;:::-;9842:7;9888:10;9851:11;:25;9863:12;:10;:12::i;:::-;9851:25;;;;;;;;;;;;;;;:34;9877:7;9851:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9819:8;:80::i;:::-;9917:4;9910:11;;9714:215;;;;:::o;15918:38::-;;;:::o;16245:33::-;;;;;;;;;;;;;:::o;22002:346::-;22124:1;22105:9;;:16;;:20;:58;;;;;22147:9;;:16;;22129:7;;:14;;:34;22105:58;22097:67;;;;;;22175:12;22190:10;22175:25;;22218:9;22213:128;22237:9;;:16;;22233:1;:20;22213:128;;;22275:54;22285:4;22291:9;;22301:1;22291:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22319:8;22305:7;;22313:1;22305:10;;;;;;;:::i;:::-;;;;;;;;:23;;;;:::i;:::-;22275:9;:54::i;:::-;22255:3;;;;;:::i;:::-;;;;22213:128;;;;22086:262;22002:346;;;;:::o;16499:28::-;;;;:::o;21640:138::-;2190:13;:11;:13::i;:::-;21734:4:::1;21719:12;:19;;;;21765:5;21749:13;:21;;;;21640:138:::0;;:::o;16325:31::-;;;;;;;;;;;;;:::o;20793:149::-;20835:12;20879:15;;;;;;;;;;;20871:29;;20908:21;20871:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20858:76;;;;;20824:118;20793:149::o;8594:127::-;8668:7;8695:9;:18;8705:7;8695:18;;;;;;;;;;;;;;;;8688:25;;8594:127;;;:::o;2945:103::-;2190:13;:11;:13::i;:::-;3010:30:::1;3037:1;3010:18;:30::i;:::-;2945:103::o:0;21398:112::-;2190:13;:11;:13::i;:::-;21489::::1;21474:12;:28;;;;21398:112:::0;:::o;20024:144::-;2190:13;:11;:13::i;:::-;20156:4:::1;20114:31;:39;20146:6;20114:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;20024:144:::0;;:::o;20562:223::-;20642:15;;;;;;;;;;;20626:31;;:12;:10;:12::i;:::-;:31;;;20618:40;;;;;;20687:24;20705:4;20687:9;:24::i;:::-;20677:6;:34;;:48;;;;;20724:1;20715:6;:10;20677:48;20669:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20753:24;20770:6;20753:16;:24::i;:::-;20562:223;:::o;2304:87::-;2350:7;2377:6;;;;;;;;;;;2370:13;;2304:87;:::o;20264:100::-;2190:13;:11;:13::i;:::-;20349:7:::1;20335:11;;:21;;;;;;;;;;;;;;;;;;20264:100:::0;:::o;8265:104::-;8321:13;8354:7;8347:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8265:104;:::o;16433:21::-;;;;:::o;20950:244::-;2190:13;:11;:13::i;:::-;21057::::1;21049:21;;:4;:21;;::::0;21041:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21145:41;21174:4;21180:5;21145:28;:41::i;:::-;20950:244:::0;;:::o;9937:413::-;10030:4;10047:24;10074:11;:25;10086:12;:10;:12::i;:::-;10074:25;;;;;;;;;;;;;;;:34;10100:7;10074:34;;;;;;;;;;;;;;;;10047:61;;10147:15;10127:16;:35;;10119:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10240:67;10249:12;:10;:12::i;:::-;10263:7;10291:15;10272:16;:34;10240:8;:67::i;:::-;10338:4;10331:11;;;9937:413;;;;:::o;19821:195::-;2190:13;:11;:13::i;:::-;19953:4:::1;19907:31;:43;19939:10;19907:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20004:4;19970:19;:31;19990:10;19970:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;19821:195:::0;;:::o;8729:175::-;8815:4;8832:42;8842:12;:10;:12::i;:::-;8856:9;8867:6;8832:9;:42::i;:::-;8892:4;8885:11;;8729:175;;;;:::o;21786:208::-;2190:13;:11;:13::i;:::-;21923:15:::1;;;;;;;;;;;21880:59;;21903:18;21880:59;;;;;;;;;;;;21968:18;21950:15;;:36;;;;;;;;;;;;;;;;;;21786:208:::0;:::o;16667:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16285:33::-;;;;;;;;;;;;;:::o;20372:182::-;2190:13;:11;:13::i;:::-;20488:8:::1;20457:19;:28;20477:7;20457:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20528:7;20512:34;;;20537:8;20512:34;;;;;;:::i;:::-;;;;;;;;20372:182:::0;;:::o;19592:221::-;2190:13;:11;:13::i;:::-;19718:4:::1;19710;19705:1;19689:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19688:26;;;;:::i;:::-;19687:35;;;;:::i;:::-;19677:6;:45;;19669:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;19796:8;19786:6;:19;;;;:::i;:::-;19774:9;:31;;;;19592:221:::0;:::o;18443:536::-;2190:13;:11;:13::i;:::-;18519:64:::1;18536:4;18551:15;18569:13;:11;:13::i;:::-;18519:8;:64::i;:::-;18594:15;:31;;;18633:21;18664:4;18670:24;18688:4;18670:9;:24::i;:::-;18695:1;18697::::0;18699:7:::1;:5;:7::i;:::-;18707:15;18594:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18741:13;18734:29;;;18772:15;18790:14;18734:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18827:7;18818:6;:16;;;;18861:4;18845:13;;:20;;;;;;;;;;;;;;;;;;18890:4;18876:11;;:18;;;;;;;;;;;;;;;;;;18918:12;18905:10;:25;;;;18956:15;18941:12;:30;;;;18443:536:::0;:::o;16095:35::-;;;;:::o;16208:28::-;;;;:::o;19076:134::-;2190:13;:11;:13::i;:::-;19193:8:::1;19180:9;:22;;;;:::i;:::-;19159:18;:43;;;;19076:134:::0;:::o;16463:27::-;;;;:::o;8912:151::-;9001:7;9028:11;:18;9040:5;9028:18;;;;;;;;;;;;;;;:27;9047:7;9028:27;;;;;;;;;;;;;;;;9021:34;;8912:151;;;;:::o;16137:33::-;;;;:::o;21518:114::-;2190:13;:11;:13::i;:::-;21611::::1;21595;:29;;;;21518:114:::0;:::o;3203:201::-;2190:13;:11;:13::i;:::-;3312:1:::1;3292:22;;:8;:22;;::::0;3284:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3368:28;3387:8;3368:18;:28::i;:::-;3203:201:::0;:::o;16177:24::-;;;;:::o;849:98::-;902:7;929:10;922:17;;849:98;:::o;12071:346::-;12190:1;12173:19;;:5;:19;;;12165:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12271:1;12252:21;;:7;:21;;;12244:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12355:6;12325:11;:18;12337:5;12325:18;;;;;;;;;;;;;;;:27;12344:7;12325:27;;;;;;;;;;;;;;;:36;;;;12393:7;12377:32;;12386:5;12377:32;;;12402:6;12377:32;;;;;;:::i;:::-;;;;;;;;12071:346;;;:::o;2469:132::-;2544:12;:10;:12::i;:::-;2533:23;;:7;:5;:7::i;:::-;:23;;;2525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2469:132::o;22356:3194::-;22470:1;22454:18;;:4;:18;;;22446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22547:1;22533:16;;:2;:16;;;22525:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22616:1;22606:6;:11;22602:93;;22634:28;22650:4;22656:2;22660:1;22634:15;:28::i;:::-;22677:7;;22602:93;22711:14;;;;;;;;;;;22707:1322;;;22754:7;:5;:7::i;:::-;22746:15;;:4;:15;;;;:32;;;;;22771:7;:5;:7::i;:::-;22765:13;;:2;:13;;;;22746:32;:52;;;;;22796:1;22782:16;;:2;:16;;;;22746:52;:77;;;;;22816:6;22802:21;;:2;:21;;;;22746:77;:90;;;;;22828:8;;;;;;;;;;;22827:9;22746:90;22742:1276;;;22886:12;22875:6;;22862:10;;:19;;;;:::i;:::-;22861:37;22857:191;;22986:2;22970:13;:18;;;;23026:2;23011:12;:17;;;;22857:191;23073:13;;;;;;;;;;;23068:150;;23119:19;:25;23139:4;23119:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23148:19;:23;23168:2;23148:23;;;;;;;;;;;;;;;;;;;;;;;;;23119:52;23111:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23068:150;23270:25;:31;23296:4;23270:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;23306:31;:35;23338:2;23306:35;;;;;;;;;;;;;;;;;;;;;;;;;23305:36;23270:71;23266:737;;;23384:20;;23374:6;:30;;23366:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;23519:9;;23502:13;23512:2;23502:9;:13::i;:::-;23493:6;:22;;;;:::i;:::-;:35;;23485:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23266:737;;;23632:25;:29;23658:2;23632:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;23666:31;:37;23698:4;23666:37;;;;;;;;;;;;;;;;;;;;;;;;;23665:38;23632:71;23628:375;;;23746:20;;23736:6;:30;;23728:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;23628:375;;;23856:31;:35;23888:2;23856:35;;;;;;;;;;;;;;;;;;;;;;;;;23851:152;;23950:9;;23933:13;23943:2;23933:9;:13::i;:::-;23924:6;:22;;;;:::i;:::-;:35;;23916:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23851:152;23628:375;23266:737;22742:1276;22707:1322;24041:28;24072:24;24090:4;24072:9;:24::i;:::-;24041:55;;24109:12;24148:18;;24124:20;:42;;24109:57;;24197:7;:22;;;;;24208:11;;;;;;;;;;;24197:22;:35;;;;;24224:8;;;;;;;;;;;24223:9;24197:35;:71;;;;;24237:25;:31;24263:4;24237:31;;;;;;;;;;;;;;;;;;;;;;;;;24236:32;24197:71;:101;;;;;24273:19;:25;24293:4;24273:25;;;;;;;;;;;;;;;;;;;;;;;;;24272:26;24197:101;:138;;;;;24312:19;:23;24332:2;24312:23;;;;;;;;;;;;;;;;;;;;;;;;;24311:24;24197:138;24179:460;;;24431:1;24404:10;:24;24415:12;24404:24;;;;;;;;;;;;:28;24400:228;;;24464:4;24453:8;;:15;;;;;;;;;;;;;;;;;;24489:10;:8;:10::i;:::-;24531:5;24520:8;;:16;;;;;;;;;;;;;;;;;;24611:1;24584:10;:24;24595:12;24584:24;;;;;;;;;;;;:28;;;;:::i;:::-;24557:10;:24;24568:12;24557:24;;;;;;;;;;;:55;;;;24400:228;24179:460;24651:12;24667:8;;;;;;;;;;;24666:9;24651:24;;24777:19;:25;24797:4;24777:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24806:19;:23;24826:2;24806:23;;;;;;;;;;;;;;;;;;;;;;;;;24777:52;24773:100;;;24856:5;24846:15;;24773:100;24885:12;24990:7;24986:511;;;25042:25;:29;25068:2;25042:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25091:1;25075:13;;:17;25042:50;25038:310;;;25120:34;25150:3;25120:25;25131:13;;25120:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25113:41;;25038:310;;;25220:25;:31;25246:4;25220:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;25270:1;25255:12;;:16;25220:51;25216:132;;;25299:33;25328:3;25299:24;25310:12;;25299:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;25292:40;;25216:132;25038:310;25375:1;25368:4;:8;25364:91;;;25397:42;25413:4;25427;25434;25397:15;:42::i;:::-;25364:91;25481:4;25471:14;;;;;:::i;:::-;;;24986:511;25509:33;25525:4;25531:2;25535:6;25509:15;:33::i;:::-;22435:3115;;;;22356:3194;;;;:::o;3564:191::-;3638:16;3657:6;;;;;;;;;;;3638:25;;3683:8;3674:6;;:17;;;;;;;;;;;;;;;;;;3738:8;3707:40;;3728:8;3707:40;;;;;;;;;;;;3627:128;3564:191;:::o;25558:589::-;25684:21;25722:1;25708:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25684:40;;25753:4;25735;25740:1;25735:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25779:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25769:4;25774:1;25769:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25814:62;25831:4;25846:15;25864:11;25814:8;:62::i;:::-;25915:15;:66;;;25996:11;26022:1;26066:4;26093;26113:15;25915:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25613:534;25558:589;:::o;21202:188::-;21319:5;21285:25;:31;21311:4;21285:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21376:5;21342:40;;21370:4;21342:40;;;;;;;;;;;;21202:188;;:::o;10358:699::-;10482:1;10464:20;;:6;:20;;;10456:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10566:1;10545:23;;:9;:23;;;10537:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10621:47;10642:6;10650:9;10661:6;10621:20;:47::i;:::-;10681:21;10705:9;:17;10715:6;10705:17;;;;;;;;;;;;;;;;10681:41;;10758:6;10741:13;:23;;10733:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;10879:6;10863:13;:22;10843:9;:17;10853:6;10843:17;;;;;;;;;;;;;;;:42;;;;10931:6;10907:9;:20;10917:9;10907:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;10972:9;10955:35;;10964:6;10955:35;;;10983:6;10955:35;;;;;;:::i;:::-;;;;;;;;11003:46;11023:6;11031:9;11042:6;11003:19;:46::i;:::-;10445:612;10358:699;;;:::o;26155:584::-;26194:23;26220:24;26238:4;26220:9;:24::i;:::-;26194:50;;26255:12;26303:1;26284:15;:20;26280:59;;26321:7;;;;26280:59;26373:13;;26355:15;:31;26351:95;;;26421:13;;26403:31;;26351:95;26509:26;26538:15;26509:44;;26566:36;26583:18;26566:16;:36::i;:::-;26615:16;26634:21;26615:40;;26689:15;;;;;;;;;;;26681:29;;26718:8;26681:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26668:63;;;;;26183:556;;;;26155:584;:::o;14348:246::-;14406:7;14435:1;14430;:6;14426:47;;14460:1;14453:8;;;;14426:47;14483:9;14499:1;14495;:5;;;;:::i;:::-;14483:17;;14528:1;14523;14519;:5;;;;:::i;:::-;:10;14511:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14585:1;14578:8;;;14348:246;;;;;:::o;14602:132::-;14660:7;14687:39;14691:1;14694;14687:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14680:46;;14602:132;;;;:::o;12425:91::-;;;;:::o;12524:90::-;;;;:::o;14742:189::-;14828:7;14860:1;14856;:5;14863:12;14848:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14887:9;14903:1;14899;:5;;;;:::i;:::-;14887:17;;14922:1;14915:8;;;14742:189;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:152::-;4538:9;4571:37;4602:5;4571:37;:::i;:::-;4558:50;;4462:152;;;:::o;4620:183::-;4733:63;4790:5;4733:63;:::i;:::-;4728:3;4721:76;4620:183;;:::o;4809:274::-;4928:4;4966:2;4955:9;4951:18;4943:26;;4979:97;5073:1;5062:9;5058:17;5049:6;4979:97;:::i;:::-;4809:274;;;;:::o;5089:118::-;5176:24;5194:5;5176:24;:::i;:::-;5171:3;5164:37;5089:118;;:::o;5213:222::-;5306:4;5344:2;5333:9;5329:18;5321:26;;5357:71;5425:1;5414:9;5410:17;5401:6;5357:71;:::i;:::-;5213:222;;;;:::o;5441:619::-;5518:6;5526;5534;5583:2;5571:9;5562:7;5558:23;5554:32;5551:119;;;5589:79;;:::i;:::-;5551:119;5709:1;5734:53;5779:7;5770:6;5759:9;5755:22;5734:53;:::i;:::-;5724:63;;5680:117;5836:2;5862:53;5907:7;5898:6;5887:9;5883:22;5862:53;:::i;:::-;5852:63;;5807:118;5964:2;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5935:118;5441:619;;;;;:::o;6066:118::-;6153:24;6171:5;6153:24;:::i;:::-;6148:3;6141:37;6066:118;;:::o;6190:222::-;6283:4;6321:2;6310:9;6306:18;6298:26;;6334:71;6402:1;6391:9;6387:17;6378:6;6334:71;:::i;:::-;6190:222;;;;:::o;6418:86::-;6453:7;6493:4;6486:5;6482:16;6471:27;;6418:86;;;:::o;6510:112::-;6593:22;6609:5;6593:22;:::i;:::-;6588:3;6581:35;6510:112;;:::o;6628:214::-;6717:4;6755:2;6744:9;6740:18;6732:26;;6768:67;6832:1;6821:9;6817:17;6808:6;6768:67;:::i;:::-;6628:214;;;;:::o;6848:117::-;6957:1;6954;6947:12;6971:117;7080:1;7077;7070:12;7094:117;7203:1;7200;7193:12;7234:568;7307:8;7317:6;7367:3;7360:4;7352:6;7348:17;7344:27;7334:122;;7375:79;;:::i;:::-;7334:122;7488:6;7475:20;7465:30;;7518:18;7510:6;7507:30;7504:117;;;7540:79;;:::i;:::-;7504:117;7654:4;7646:6;7642:17;7630:29;;7708:3;7700:4;7692:6;7688:17;7678:8;7674:32;7671:41;7668:128;;;7715:79;;:::i;:::-;7668:128;7234:568;;;;;:::o;7825:::-;7898:8;7908:6;7958:3;7951:4;7943:6;7939:17;7935:27;7925:122;;7966:79;;:::i;:::-;7925:122;8079:6;8066:20;8056:30;;8109:18;8101:6;8098:30;8095:117;;;8131:79;;:::i;:::-;8095:117;8245:4;8237:6;8233:17;8221:29;;8299:3;8291:4;8283:6;8279:17;8269:8;8265:32;8262:41;8259:128;;;8306:79;;:::i;:::-;8259:128;7825:568;;;;;:::o;8399:934::-;8521:6;8529;8537;8545;8594:2;8582:9;8573:7;8569:23;8565:32;8562:119;;;8600:79;;:::i;:::-;8562:119;8748:1;8737:9;8733:17;8720:31;8778:18;8770:6;8767:30;8764:117;;;8800:79;;:::i;:::-;8764:117;8913:80;8985:7;8976:6;8965:9;8961:22;8913:80;:::i;:::-;8895:98;;;;8691:312;9070:2;9059:9;9055:18;9042:32;9101:18;9093:6;9090:30;9087:117;;;9123:79;;:::i;:::-;9087:117;9236:80;9308:7;9299:6;9288:9;9284:22;9236:80;:::i;:::-;9218:98;;;;9013:313;8399:934;;;;;;;:::o;9339:474::-;9407:6;9415;9464:2;9452:9;9443:7;9439:23;9435:32;9432:119;;;9470:79;;:::i;:::-;9432:119;9590:1;9615:53;9660:7;9651:6;9640:9;9636:22;9615:53;:::i;:::-;9605:63;;9561:117;9717:2;9743:53;9788:7;9779:6;9768:9;9764:22;9743:53;:::i;:::-;9733:63;;9688:118;9339:474;;;;;:::o;9819:116::-;9889:21;9904:5;9889:21;:::i;:::-;9882:5;9879:32;9869:60;;9925:1;9922;9915:12;9869:60;9819:116;:::o;9941:133::-;9984:5;10022:6;10009:20;10000:29;;10038:30;10062:5;10038:30;:::i;:::-;9941:133;;;;:::o;10080:468::-;10145:6;10153;10202:2;10190:9;10181:7;10177:23;10173:32;10170:119;;;10208:79;;:::i;:::-;10170:119;10328:1;10353:53;10398:7;10389:6;10378:9;10374:22;10353:53;:::i;:::-;10343:63;;10299:117;10455:2;10481:50;10523:7;10514:6;10503:9;10499:22;10481:50;:::i;:::-;10471:60;;10426:115;10080:468;;;;;:::o;10554:323::-;10610:6;10659:2;10647:9;10638:7;10634:23;10630:32;10627:119;;;10665:79;;:::i;:::-;10627:119;10785:1;10810:50;10852:7;10843:6;10832:9;10828:22;10810:50;:::i;:::-;10800:60;;10756:114;10554:323;;;;:::o;10883:474::-;10951:6;10959;11008:2;10996:9;10987:7;10983:23;10979:32;10976:119;;;11014:79;;:::i;:::-;10976:119;11134:1;11159:53;11204:7;11195:6;11184:9;11180:22;11159:53;:::i;:::-;11149:63;;11105:117;11261:2;11287:53;11332:7;11323:6;11312:9;11308:22;11287:53;:::i;:::-;11277:63;;11232:118;10883:474;;;;;:::o;11363:180::-;11411:77;11408:1;11401:88;11508:4;11505:1;11498:15;11532:4;11529:1;11522:15;11549:320;11593:6;11630:1;11624:4;11620:12;11610:22;;11677:1;11671:4;11667:12;11698:18;11688:81;;11754:4;11746:6;11742:17;11732:27;;11688:81;11816:2;11808:6;11805:14;11785:18;11782:38;11779:84;;11835:18;;:::i;:::-;11779:84;11600:269;11549:320;;;:::o;11875:180::-;11923:77;11920:1;11913:88;12020:4;12017:1;12010:15;12044:4;12041:1;12034:15;12061:410;12101:7;12124:20;12142:1;12124:20;:::i;:::-;12119:25;;12158:20;12176:1;12158:20;:::i;:::-;12153:25;;12213:1;12210;12206:9;12235:30;12253:11;12235:30;:::i;:::-;12224:41;;12414:1;12405:7;12401:15;12398:1;12395:22;12375:1;12368:9;12348:83;12325:139;;12444:18;;:::i;:::-;12325:139;12109:362;12061:410;;;;:::o;12477:180::-;12525:77;12522:1;12515:88;12622:4;12619:1;12612:15;12646:4;12643:1;12636:15;12663:185;12703:1;12720:20;12738:1;12720:20;:::i;:::-;12715:25;;12754:20;12772:1;12754:20;:::i;:::-;12749:25;;12793:1;12783:35;;12798:18;;:::i;:::-;12783:35;12840:1;12837;12833:9;12828:14;;12663:185;;;;:::o;12854:234::-;12994:34;12990:1;12982:6;12978:14;12971:58;13063:17;13058:2;13050:6;13046:15;13039:42;12854:234;:::o;13094:366::-;13236:3;13257:67;13321:2;13316:3;13257:67;:::i;:::-;13250:74;;13333:93;13422:3;13333:93;:::i;:::-;13451:2;13446:3;13442:12;13435:19;;13094:366;;;:::o;13466:419::-;13632:4;13670:2;13659:9;13655:18;13647:26;;13719:9;13713:4;13709:20;13705:1;13694:9;13690:17;13683:47;13747:131;13873:4;13747:131;:::i;:::-;13739:139;;13466:419;;;:::o;13891:227::-;14031:34;14027:1;14019:6;14015:14;14008:58;14100:10;14095:2;14087:6;14083:15;14076:35;13891:227;:::o;14124:366::-;14266:3;14287:67;14351:2;14346:3;14287:67;:::i;:::-;14280:74;;14363:93;14452:3;14363:93;:::i;:::-;14481:2;14476:3;14472:12;14465:19;;14124:366;;;:::o;14496:419::-;14662:4;14700:2;14689:9;14685:18;14677:26;;14749:9;14743:4;14739:20;14735:1;14724:9;14720:17;14713:47;14777:131;14903:4;14777:131;:::i;:::-;14769:139;;14496:419;;;:::o;14921:191::-;14961:3;14980:20;14998:1;14980:20;:::i;:::-;14975:25;;15014:20;15032:1;15014:20;:::i;:::-;15009:25;;15057:1;15054;15050:9;15043:16;;15078:3;15075:1;15072:10;15069:36;;;15085:18;;:::i;:::-;15069:36;14921:191;;;;:::o;15118:180::-;15166:77;15163:1;15156:88;15263:4;15260:1;15253:15;15287:4;15284:1;15277:15;15304:233;15343:3;15366:24;15384:5;15366:24;:::i;:::-;15357:33;;15412:66;15405:5;15402:77;15399:103;;15482:18;;:::i;:::-;15399:103;15529:1;15522:5;15518:13;15511:20;;15304:233;;;:::o;15543:147::-;15644:11;15681:3;15666:18;;15543:147;;;;:::o;15696:114::-;;:::o;15816:398::-;15975:3;15996:83;16077:1;16072:3;15996:83;:::i;:::-;15989:90;;16088:93;16177:3;16088:93;:::i;:::-;16206:1;16201:3;16197:11;16190:18;;15816:398;;;:::o;16220:379::-;16404:3;16426:147;16569:3;16426:147;:::i;:::-;16419:154;;16590:3;16583:10;;16220:379;;;:::o;16605:162::-;16745:14;16741:1;16733:6;16729:14;16722:38;16605:162;:::o;16773:366::-;16915:3;16936:67;17000:2;16995:3;16936:67;:::i;:::-;16929:74;;17012:93;17101:3;17012:93;:::i;:::-;17130:2;17125:3;17121:12;17114:19;;16773:366;;;:::o;17145:419::-;17311:4;17349:2;17338:9;17334:18;17326:26;;17398:9;17392:4;17388:20;17384:1;17373:9;17369:17;17362:47;17426:131;17552:4;17426:131;:::i;:::-;17418:139;;17145:419;;;:::o;17570:244::-;17710:34;17706:1;17698:6;17694:14;17687:58;17779:27;17774:2;17766:6;17762:15;17755:52;17570:244;:::o;17820:366::-;17962:3;17983:67;18047:2;18042:3;17983:67;:::i;:::-;17976:74;;18059:93;18148:3;18059:93;:::i;:::-;18177:2;18172:3;18168:12;18161:19;;17820:366;;;:::o;18192:419::-;18358:4;18396:2;18385:9;18381:18;18373:26;;18445:9;18439:4;18435:20;18431:1;18420:9;18416:17;18409:47;18473:131;18599:4;18473:131;:::i;:::-;18465:139;;18192:419;;;:::o;18617:224::-;18757:34;18753:1;18745:6;18741:14;18734:58;18826:7;18821:2;18813:6;18809:15;18802:32;18617:224;:::o;18847:366::-;18989:3;19010:67;19074:2;19069:3;19010:67;:::i;:::-;19003:74;;19086:93;19175:3;19086:93;:::i;:::-;19204:2;19199:3;19195:12;19188:19;;18847:366;;;:::o;19219:419::-;19385:4;19423:2;19412:9;19408:18;19400:26;;19472:9;19466:4;19462:20;19458:1;19447:9;19443:17;19436:47;19500:131;19626:4;19500:131;:::i;:::-;19492:139;;19219:419;;;:::o;19644:223::-;19784:34;19780:1;19772:6;19768:14;19761:58;19853:6;19848:2;19840:6;19836:15;19829:31;19644:223;:::o;19873:366::-;20015:3;20036:67;20100:2;20095:3;20036:67;:::i;:::-;20029:74;;20112:93;20201:3;20112:93;:::i;:::-;20230:2;20225:3;20221:12;20214:19;;19873:366;;;:::o;20245:419::-;20411:4;20449:2;20438:9;20434:18;20426:26;;20498:9;20492:4;20488:20;20484:1;20473:9;20469:17;20462:47;20526:131;20652:4;20526:131;:::i;:::-;20518:139;;20245:419;;;:::o;20670:85::-;20715:7;20744:5;20733:16;;20670:85;;;:::o;20761:158::-;20819:9;20852:61;20870:42;20879:32;20905:5;20879:32;:::i;:::-;20870:42;:::i;:::-;20852:61;:::i;:::-;20839:74;;20761:158;;;:::o;20925:147::-;21020:45;21059:5;21020:45;:::i;:::-;21015:3;21008:58;20925:147;;:::o;21078:807::-;21327:4;21365:3;21354:9;21350:19;21342:27;;21379:71;21447:1;21436:9;21432:17;21423:6;21379:71;:::i;:::-;21460:72;21528:2;21517:9;21513:18;21504:6;21460:72;:::i;:::-;21542:80;21618:2;21607:9;21603:18;21594:6;21542:80;:::i;:::-;21632;21708:2;21697:9;21693:18;21684:6;21632:80;:::i;:::-;21722:73;21790:3;21779:9;21775:19;21766:6;21722:73;:::i;:::-;21805;21873:3;21862:9;21858:19;21849:6;21805:73;:::i;:::-;21078:807;;;;;;;;;:::o;21891:143::-;21948:5;21979:6;21973:13;21964:22;;21995:33;22022:5;21995:33;:::i;:::-;21891:143;;;;:::o;22040:663::-;22128:6;22136;22144;22193:2;22181:9;22172:7;22168:23;22164:32;22161:119;;;22199:79;;:::i;:::-;22161:119;22319:1;22344:64;22400:7;22391:6;22380:9;22376:22;22344:64;:::i;:::-;22334:74;;22290:128;22457:2;22483:64;22539:7;22530:6;22519:9;22515:22;22483:64;:::i;:::-;22473:74;;22428:129;22596:2;22622:64;22678:7;22669:6;22658:9;22654:22;22622:64;:::i;:::-;22612:74;;22567:129;22040:663;;;;;:::o;22709:332::-;22830:4;22868:2;22857:9;22853:18;22845:26;;22881:71;22949:1;22938:9;22934:17;22925:6;22881:71;:::i;:::-;22962:72;23030:2;23019:9;23015:18;23006:6;22962:72;:::i;:::-;22709:332;;;;;:::o;23047:137::-;23101:5;23132:6;23126:13;23117:22;;23148:30;23172:5;23148:30;:::i;:::-;23047:137;;;;:::o;23190:345::-;23257:6;23306:2;23294:9;23285:7;23281:23;23277:32;23274:119;;;23312:79;;:::i;:::-;23274:119;23432:1;23457:61;23510:7;23501:6;23490:9;23486:22;23457:61;:::i;:::-;23447:71;;23403:125;23190:345;;;;:::o;23541:225::-;23681:34;23677:1;23669:6;23665:14;23658:58;23750:8;23745:2;23737:6;23733:15;23726:33;23541:225;:::o;23772:366::-;23914:3;23935:67;23999:2;23994:3;23935:67;:::i;:::-;23928:74;;24011:93;24100:3;24011:93;:::i;:::-;24129:2;24124:3;24120:12;24113:19;;23772:366;;;:::o;24144:419::-;24310:4;24348:2;24337:9;24333:18;24325:26;;24397:9;24391:4;24387:20;24383:1;24372:9;24368:17;24361:47;24425:131;24551:4;24425:131;:::i;:::-;24417:139;;24144:419;;;:::o;24569:223::-;24709:34;24705:1;24697:6;24693:14;24686:58;24778:6;24773:2;24765:6;24761:15;24754:31;24569:223;:::o;24798:366::-;24940:3;24961:67;25025:2;25020:3;24961:67;:::i;:::-;24954:74;;25037:93;25126:3;25037:93;:::i;:::-;25155:2;25150:3;25146:12;25139:19;;24798:366;;;:::o;25170:419::-;25336:4;25374:2;25363:9;25359:18;25351:26;;25423:9;25417:4;25413:20;25409:1;25398:9;25394:17;25387:47;25451:131;25577:4;25451:131;:::i;:::-;25443:139;;25170:419;;;:::o;25595:221::-;25735:34;25731:1;25723:6;25719:14;25712:58;25804:4;25799:2;25791:6;25787:15;25780:29;25595:221;:::o;25822:366::-;25964:3;25985:67;26049:2;26044:3;25985:67;:::i;:::-;25978:74;;26061:93;26150:3;26061:93;:::i;:::-;26179:2;26174:3;26170:12;26163:19;;25822:366;;;:::o;26194:419::-;26360:4;26398:2;26387:9;26383:18;26375:26;;26447:9;26441:4;26437:20;26433:1;26422:9;26418:17;26411:47;26475:131;26601:4;26475:131;:::i;:::-;26467:139;;26194:419;;;:::o;26619:182::-;26759:34;26755:1;26747:6;26743:14;26736:58;26619:182;:::o;26807:366::-;26949:3;26970:67;27034:2;27029:3;26970:67;:::i;:::-;26963:74;;27046:93;27135:3;27046:93;:::i;:::-;27164:2;27159:3;27155:12;27148:19;;26807:366;;;:::o;27179:419::-;27345:4;27383:2;27372:9;27368:18;27360:26;;27432:9;27426:4;27422:20;27418:1;27407:9;27403:17;27396:47;27460:131;27586:4;27460:131;:::i;:::-;27452:139;;27179:419;;;:::o;27604:224::-;27744:34;27740:1;27732:6;27728:14;27721:58;27813:7;27808:2;27800:6;27796:15;27789:32;27604:224;:::o;27834:366::-;27976:3;27997:67;28061:2;28056:3;27997:67;:::i;:::-;27990:74;;28073:93;28162:3;28073:93;:::i;:::-;28191:2;28186:3;28182:12;28175:19;;27834:366;;;:::o;28206:419::-;28372:4;28410:2;28399:9;28395:18;28387:26;;28459:9;28453:4;28449:20;28445:1;28434:9;28430:17;28423:47;28487:131;28613:4;28487:131;:::i;:::-;28479:139;;28206:419;;;:::o;28631:222::-;28771:34;28767:1;28759:6;28755:14;28748:58;28840:5;28835:2;28827:6;28823:15;28816:30;28631:222;:::o;28859:366::-;29001:3;29022:67;29086:2;29081:3;29022:67;:::i;:::-;29015:74;;29098:93;29187:3;29098:93;:::i;:::-;29216:2;29211:3;29207:12;29200:19;;28859:366;;;:::o;29231:419::-;29397:4;29435:2;29424:9;29420:18;29412:26;;29484:9;29478:4;29474:20;29470:1;29459:9;29455:17;29448:47;29512:131;29638:4;29512:131;:::i;:::-;29504:139;;29231:419;;;:::o;29656:172::-;29796:24;29792:1;29784:6;29780:14;29773:48;29656:172;:::o;29834:366::-;29976:3;29997:67;30061:2;30056:3;29997:67;:::i;:::-;29990:74;;30073:93;30162:3;30073:93;:::i;:::-;30191:2;30186:3;30182:12;30175:19;;29834:366;;;:::o;30206:419::-;30372:4;30410:2;30399:9;30395:18;30387:26;;30459:9;30453:4;30449:20;30445:1;30434:9;30430:17;30423:47;30487:131;30613:4;30487:131;:::i;:::-;30479:139;;30206:419;;;:::o;30631:240::-;30771:34;30767:1;30759:6;30755:14;30748:58;30840:23;30835:2;30827:6;30823:15;30816:48;30631:240;:::o;30877:366::-;31019:3;31040:67;31104:2;31099:3;31040:67;:::i;:::-;31033:74;;31116:93;31205:3;31116:93;:::i;:::-;31234:2;31229:3;31225:12;31218:19;;30877:366;;;:::o;31249:419::-;31415:4;31453:2;31442:9;31438:18;31430:26;;31502:9;31496:4;31492:20;31488:1;31477:9;31473:17;31466:47;31530:131;31656:4;31530:131;:::i;:::-;31522:139;;31249:419;;;:::o;31674:169::-;31814:21;31810:1;31802:6;31798:14;31791:45;31674:169;:::o;31849:366::-;31991:3;32012:67;32076:2;32071:3;32012:67;:::i;:::-;32005:74;;32088:93;32177:3;32088:93;:::i;:::-;32206:2;32201:3;32197:12;32190:19;;31849:366;;;:::o;32221:419::-;32387:4;32425:2;32414:9;32410:18;32402:26;;32474:9;32468:4;32464:20;32460:1;32449:9;32445:17;32438:47;32502:131;32628:4;32502:131;:::i;:::-;32494:139;;32221:419;;;:::o;32646:241::-;32786:34;32782:1;32774:6;32770:14;32763:58;32855:24;32850:2;32842:6;32838:15;32831:49;32646:241;:::o;32893:366::-;33035:3;33056:67;33120:2;33115:3;33056:67;:::i;:::-;33049:74;;33132:93;33221:3;33132:93;:::i;:::-;33250:2;33245:3;33241:12;33234:19;;32893:366;;;:::o;33265:419::-;33431:4;33469:2;33458:9;33454:18;33446:26;;33518:9;33512:4;33508:20;33504:1;33493:9;33489:17;33482:47;33546:131;33672:4;33546:131;:::i;:::-;33538:139;;33265:419;;;:::o;33690:194::-;33730:4;33750:20;33768:1;33750:20;:::i;:::-;33745:25;;33784:20;33802:1;33784:20;:::i;:::-;33779:25;;33828:1;33825;33821:9;33813:17;;33852:1;33846:4;33843:11;33840:37;;;33857:18;;:::i;:::-;33840:37;33690:194;;;;:::o;33890:180::-;33938:77;33935:1;33928:88;34035:4;34032:1;34025:15;34059:4;34056:1;34049:15;34076:143;34133:5;34164:6;34158:13;34149:22;;34180:33;34207:5;34180:33;:::i;:::-;34076:143;;;;:::o;34225:351::-;34295:6;34344:2;34332:9;34323:7;34319:23;34315:32;34312:119;;;34350:79;;:::i;:::-;34312:119;34470:1;34495:64;34551:7;34542:6;34531:9;34527:22;34495:64;:::i;:::-;34485:74;;34441:128;34225:351;;;;:::o;34582:114::-;34649:6;34683:5;34677:12;34667:22;;34582:114;;;:::o;34702:184::-;34801:11;34835:6;34830:3;34823:19;34875:4;34870:3;34866:14;34851:29;;34702:184;;;;:::o;34892:132::-;34959:4;34982:3;34974:11;;35012:4;35007:3;35003:14;34995:22;;34892:132;;;:::o;35030:108::-;35107:24;35125:5;35107:24;:::i;:::-;35102:3;35095:37;35030:108;;:::o;35144:179::-;35213:10;35234:46;35276:3;35268:6;35234:46;:::i;:::-;35312:4;35307:3;35303:14;35289:28;;35144:179;;;;:::o;35329:113::-;35399:4;35431;35426:3;35422:14;35414:22;;35329:113;;;:::o;35478:732::-;35597:3;35626:54;35674:5;35626:54;:::i;:::-;35696:86;35775:6;35770:3;35696:86;:::i;:::-;35689:93;;35806:56;35856:5;35806:56;:::i;:::-;35885:7;35916:1;35901:284;35926:6;35923:1;35920:13;35901:284;;;36002:6;35996:13;36029:63;36088:3;36073:13;36029:63;:::i;:::-;36022:70;;36115:60;36168:6;36115:60;:::i;:::-;36105:70;;35961:224;35948:1;35945;35941:9;35936:14;;35901:284;;;35905:14;36201:3;36194:10;;35602:608;;;35478:732;;;;:::o;36216:831::-;36479:4;36517:3;36506:9;36502:19;36494:27;;36531:71;36599:1;36588:9;36584:17;36575:6;36531:71;:::i;:::-;36612:80;36688:2;36677:9;36673:18;36664:6;36612:80;:::i;:::-;36739:9;36733:4;36729:20;36724:2;36713:9;36709:18;36702:48;36767:108;36870:4;36861:6;36767:108;:::i;:::-;36759:116;;36885:72;36953:2;36942:9;36938:18;36929:6;36885:72;:::i;:::-;36967:73;37035:3;37024:9;37020:19;37011:6;36967:73;:::i;:::-;36216:831;;;;;;;;:::o;37053:225::-;37193:34;37189:1;37181:6;37177:14;37170:58;37262:8;37257:2;37249:6;37245:15;37238:33;37053:225;:::o;37284:366::-;37426:3;37447:67;37511:2;37506:3;37447:67;:::i;:::-;37440:74;;37523:93;37612:3;37523:93;:::i;:::-;37641:2;37636:3;37632:12;37625:19;;37284:366;;;:::o;37656:419::-;37822:4;37860:2;37849:9;37845:18;37837:26;;37909:9;37903:4;37899:20;37895:1;37884:9;37880:17;37873:47;37937:131;38063:4;37937:131;:::i;:::-;37929:139;;37656:419;;;:::o;38081:220::-;38221:34;38217:1;38209:6;38205:14;38198:58;38290:3;38285:2;38277:6;38273:15;38266:28;38081:220;:::o;38307:366::-;38449:3;38470:67;38534:2;38529:3;38470:67;:::i;:::-;38463:74;;38546:93;38635:3;38546:93;:::i;:::-;38664:2;38659:3;38655:12;38648:19;;38307:366;;;:::o;38679:419::-;38845:4;38883:2;38872:9;38868:18;38860:26;;38932:9;38926:4;38922:20;38918:1;38907:9;38903:17;38896:47;38960:131;39086:4;38960:131;:::i;:::-;38952:139;;38679:419;;;:::o

Swarm Source

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