ETH Price: $3,272.81 (-4.04%)
Gas: 10 Gwei

Token

Shibamon (SHIBAMON)
 

Overview

Max Total Supply

1,000,000,000,000 SHIBAMON

Holders

1,397

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
herotruck.eth
Balance
352,159.122596729 SHIBAMON

Value
$0.00
0x35aA3f733958b7416669303945093C98819F77A6
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:
Shibamon

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 7 of 7: Shibamon.sol
pragma solidity 0.8.9;

// SPDX-License-Identifier: MIT

import "./IERC20.sol";
import "./Ownable.sol";
import "./Address.sol";
import "./Context.sol";
import "./IDEXRouter.sol";
import "./IDEXFactory.sol";

contract Shibamon is Context, IERC20, Ownable {
	using Address for address payable;

	string constant NAME = "Shibamon";
	string constant SYMBOL = "SHIBAMON";
	uint8 constant DECIMALS = 9;

	uint256 constant MAX_UINT = 2 ** 256 - 1;
	address constant ROUTER_ADDRESS = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
	address constant ZERO_ADDRESS = address(0);
	address constant DEAD_ADDRESS = address(57005);

	mapping(address => uint256) rOwned;
	mapping(address => uint256) tOwned;

	mapping(address => mapping(address => uint256)) allowances;

	mapping(address => bool) public isExcludedFromFees;
	mapping(address => bool) public isExcludedFromRewards;
	mapping(address => bool) public isExcludedFromMaxWallet;
	address[] excluded;

	mapping(address => bool) public isBot;

	uint256 tTotal = 10 ** 12 * 10 ** DECIMALS;
	uint256 rTotal = (MAX_UINT - (MAX_UINT % tTotal));

	uint256 public maxTxAmountBuy = tTotal / 200;
	uint256 public maxTxAmountSell = tTotal / 200;
	uint256 public maxWalletAmount = tTotal / 100;

	uint256 launchedAt;

	address payable marketingAddress;

	mapping(address => bool) automatedMarketMakerPairs;

	bool areFeesBeingProcessed;
	bool public isFeeProcessingEnabled = false;
	uint256 public feeProcessingThreshold = tTotal / 500;

	IDEXRouter router;

	bool isTradingOpen;

	struct FeeSet {
		uint256 reflectFee;
		uint256 marketingFee;
		uint256 liquidityFee;
	}

	FeeSet public fees = FeeSet({
		reflectFee: 3,
		marketingFee: 5,
		liquidityFee: 2
	});

	struct ReflectValueSet {
		uint256 rAmount;
		uint256 rTransferAmount;
		uint256 rReflectFee;
		uint256 rOtherFee;
		uint256 tTransferAmount;
		uint256 tReflectFee;
		uint256 tOtherFee;
	}

	modifier lockTheSwap {
		areFeesBeingProcessed = true;
		_;
		areFeesBeingProcessed = false;
	}

	constructor() {
		address self = address(this);

		rOwned[owner()] = rTotal;

		router = IDEXRouter(ROUTER_ADDRESS);

		marketingAddress = payable(msg.sender);

		isExcludedFromFees[owner()] = true;
		isExcludedFromFees[marketingAddress] = true;
		isExcludedFromFees[self] = true;
		isExcludedFromFees[DEAD_ADDRESS] = true;

		isExcludedFromMaxWallet[owner()] = true;
		isExcludedFromMaxWallet[marketingAddress] = true;
		isExcludedFromMaxWallet[self] = true;
		isExcludedFromMaxWallet[DEAD_ADDRESS] = true;

		emit Transfer(ZERO_ADDRESS, owner(), tTotal);
	}

	function name() public pure returns (string memory) {
		return NAME;
	}

	function symbol() public pure returns (string memory) {
		return SYMBOL;
	}

	function decimals() public pure returns (uint8) {
		return DECIMALS;
	}

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

	function balanceOf(address account) public view override returns (uint256) {
		if (isExcludedFromRewards[account]) return tOwned[account];
		return tokenFromReflection(rOwned[account]);
	}

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

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

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

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

		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 tokenFromReflection(uint256 rAmount) public view returns (uint256) {
		require(rAmount <= rTotal, "Amount must be less than total reflections");
		uint256 currentRate = _getRate();
		return rAmount / currentRate;
	}

	function excludeFromRewards(address account) external onlyOwner {
		require(!isExcludedFromRewards[account], "Account is already excluded");

		if (rOwned[account] > 0) {
			tOwned[account] = tokenFromReflection(rOwned[account]);
		}

		isExcludedFromRewards[account] = true;
		excluded.push(account);
	}

	function includeInRewards(address account) external onlyOwner {
		require(isExcludedFromRewards[account], "Account is not excluded");

		for (uint256 i = 0; i < excluded.length; i++) {
			if (excluded[i] == account) {
				excluded[i] = excluded[excluded.length - 1];
				tOwned[account] = 0;
				isExcludedFromRewards[account] = false;
				excluded.pop();
				break;
			}
		}
	}

	function _getValues(uint256 tAmount, bool takeFee) private view returns (ReflectValueSet memory set) {
		set = _getTValues(tAmount, takeFee);
		(set.rAmount, set.rTransferAmount, set.rReflectFee, set.rOtherFee) = _getRValues(set, tAmount, takeFee, _getRate());
		return set;
	}

	function _getTValues(uint256 tAmount, bool takeFee) private view returns (ReflectValueSet memory set) {
		if (!takeFee) {
			set.tTransferAmount = tAmount;
			return set;
		}

		set.tReflectFee = tAmount * fees.reflectFee / 100;
		set.tOtherFee = tAmount * (fees.marketingFee + fees.liquidityFee) / 100;
		set.tTransferAmount = tAmount - set.tReflectFee - set.tOtherFee;

		return set;
	}

	function _getRValues(ReflectValueSet memory set, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rReflectFee, uint256 rOtherFee) {
		rAmount = tAmount * currentRate;

		if (!takeFee) {
			return (rAmount, rAmount, 0, 0);
		}

		rReflectFee = set.tReflectFee * currentRate;
		rOtherFee = set.tOtherFee * currentRate;
		rTransferAmount = rAmount - rReflectFee - rOtherFee;
		return (rAmount, rTransferAmount, rReflectFee, rOtherFee);
	}

	function _getRate() private view returns (uint256) {
		(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
		return rSupply / tSupply;
	}

	function _getCurrentSupply() private view returns (uint256, uint256) {
		uint256 rSupply = rTotal;
		uint256 tSupply = tTotal;

		for (uint256 i = 0; i < excluded.length; i++) {
			if (rOwned[excluded[i]] > rSupply || tOwned[excluded[i]] > tSupply) return (rTotal, tTotal);
			rSupply -= rOwned[excluded[i]];
			tSupply -= tOwned[excluded[i]];
		}

		if (rSupply < rTotal / tTotal) return (rTotal, tTotal);
		return (rSupply, tSupply);
	}

	function _approve(address owner, address spender, uint256 amount) private {
		require(owner != ZERO_ADDRESS, "ERC20: approve from the zero address");
		require(spender != ZERO_ADDRESS, "ERC20: approve to the zero address");

		allowances[owner][spender] = amount;

		emit Approval(owner, spender, amount);
	}

	function _transfer(address from, address to, uint256 amount) private {
		require(from != ZERO_ADDRESS, "ERC20: transfer from the zero address");
		require(to != ZERO_ADDRESS, "ERC20: transfer to the zero address");
		require(!isBot[from], "ERC20: address blacklisted (bot)");
		require(amount > 0, "Transfer amount must be greater than zero");
		require(amount <= balanceOf(from), "You are trying to transfer more than your balance");

		if (maxWalletAmount > 0 && !automatedMarketMakerPairs[to] && !isExcludedFromMaxWallet[to]) {
			require((balanceOf(to) + amount) <= maxWalletAmount, "You are trying to transfer more than the max wallet amount");
		}

		if (launchedAt == 0 && automatedMarketMakerPairs[to]) {
			launchedAt = block.number;
		}

		bool shouldTakeFees = !isExcludedFromFees[from] && !isExcludedFromFees[to];
		if (shouldTakeFees) {
			require(amount <= (automatedMarketMakerPairs[from] ? maxTxAmountBuy : maxTxAmountSell), "You are trying to transfer too many tokens");

			if (automatedMarketMakerPairs[from] && block.number <= launchedAt) {
				isBot[to] = true;
			}
		}

		uint256 balance = balanceOf(address(this));

		if (balance > maxTxAmountSell) {
			balance = maxTxAmountSell;
		}

		if (isFeeProcessingEnabled && !areFeesBeingProcessed && balance >= feeProcessingThreshold && !automatedMarketMakerPairs[from]) {
			areFeesBeingProcessed = true;
			_processFees(balance);
			areFeesBeingProcessed = false;
		}

		_tokenTransfer(from, to, amount, shouldTakeFees);
	}

	function _takeReflectFees(uint256 rReflectFee) private {
		rTotal -= rReflectFee;
	}

	function _takeOtherFees(uint256 rOtherFee, uint256 tOtherFee) private {
		address self = address(this);

		rOwned[self] += rOtherFee;

		if (isExcludedFromRewards[self]) {
			tOwned[self] += tOtherFee;
		}
	}

	function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool shouldTakeFees) private {
		ReflectValueSet memory set = _getValues(tAmount, shouldTakeFees);

		if (isExcludedFromRewards[sender]) {
			tOwned[sender] -= tAmount;
		}

		if (isExcludedFromRewards[recipient]) {
			tOwned[recipient] += set.tTransferAmount;
		}

		rOwned[sender] -= set.rAmount;
		rOwned[recipient] += set.rTransferAmount;

		if (shouldTakeFees) {
			_takeReflectFees(set.rReflectFee);
			_takeOtherFees(set.rOtherFee, set.tOtherFee);
			emit Transfer(sender, address(this), set.tOtherFee);
		}

		emit Transfer(sender, recipient, set.tTransferAmount);
	}

	function _processFees(uint256 amount) private lockTheSwap {
		uint256 feeSum = fees.marketingFee + fees.liquidityFee;
		if (feeSum == 0) return;

		//Calculate amounts
		uint256 amountForMarketing = amount * fees.marketingFee / feeSum;
		uint256 amountForLiquidity = amount - amountForMarketing;

		//Do processing
		_swapExactTokensForETH(amountForMarketing);
		_addLiquidity(amountForLiquidity);

		//Send marketing funds
		marketingAddress.transfer(address(this).balance);
	}

	function _addLiquidity(uint256 amount) private {
		address self = address(this);

		uint256 tokensToSell = amount / 2;
		uint256 tokensForLiquidity = amount - tokensToSell;

		uint256 ethForLiquidity = _swapExactTokensForETH(tokensToSell);

		_approve(self, address(router), MAX_UINT);
		router.addLiquidityETH{value: ethForLiquidity}(self, tokensForLiquidity, 0, 0, DEAD_ADDRESS, block.timestamp);
	}

	function _swapExactTokensForETH(uint256 amountIn) private returns (uint256) {
		address self = address(this);

		address[] memory path = new address[](2);
		path[0] = self;
		path[1] = router.WETH();

		_approve(self, address(router), MAX_UINT);

		uint256 previousBalance = self.balance;
		router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountIn, 0, path, self, block.timestamp);
		return self.balance - previousBalance;
	}

	function openTrading(uint256 tokensForLiquidity) external payable onlyOwner {
		address self = address(this);
		require(!isTradingOpen, "Trading is already open");
		require(balanceOf(self) >= tokensForLiquidity, "Insufficient token balance for initial liquidity");
		require(msg.value > 0, "Insufficient ETH for initial liquidity");

		//Create pair
		address pairAddress = IDEXFactory(router.factory()).createPair(self, router.WETH());
		automatedMarketMakerPairs[pairAddress] = true;
		isExcludedFromMaxWallet[pairAddress] = true;

		//Add liquidity
		_approve(self, address(router), MAX_UINT);
		router.addLiquidityETH{value: msg.value}(self, tokensForLiquidity, 0, 0, owner(), block.timestamp);

		isFeeProcessingEnabled = true;
		isTradingOpen = true;
	}

	function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
		require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;

		if (value) {
			isExcludedFromMaxWallet[pair] = true;
		}
	}

	function setFees(uint256 reflectFee, uint256 marketingFee, uint256 liquidityFee) external onlyOwner {
		require((reflectFee + marketingFee + liquidityFee) <= 20, "Cannot set fees to above a combined total of 20%");

		fees = FeeSet({
			reflectFee: reflectFee,
			marketingFee: marketingFee,
			liquidityFee: liquidityFee
		});
	}

	function setIsFeeProcessingEnabled(bool value) public onlyOwner {
		isFeeProcessingEnabled = value;
	}

	function setFeeProcessingThreshold(uint256 value) external onlyOwner {
		feeProcessingThreshold = value;
	}

	function setMaxTransactionAmounts(uint256 maxBuy, uint256 maxSell) external onlyOwner {
		require(maxBuy >= (tTotal / 400), "Must set max buy to at least 0.25% of total supply");
		require(maxSell >= (tTotal / 400), "Must set max sell to at least 0.25% of total supply");

		maxTxAmountBuy = maxBuy;
		maxTxAmountSell = maxSell;
	}

	function setMarketingAddress(address payable value) external onlyOwner {
		require(marketingAddress != value, "Marketing address is already set to this value");
		marketingAddress = value;
	}

	function setIsBot(address account, bool value) external onlyOwner {
		require(isBot[account] != value, "Account is already set to this value");
		isBot[account] = value;
	}

	function setMaxWalletAmount(uint256 value) external onlyOwner {
		require(value >= (tTotal / 200), "Must set max wallet to at least 0.5% of total supply");
		maxWalletAmount = value;
	}

	function setIsExcludedFromMaxWallet(address account, bool value) external onlyOwner {
		require(isExcludedFromMaxWallet[account] != value, "Account is already set to this value");
		isExcludedFromMaxWallet[account] = value;
	}

	function setIsExcludedFromFees(address account, bool value) external onlyOwner {
		require(isExcludedFromFees[account] != value, "Account is already set to this value");
		isExcludedFromFees[account] = value;
	}

	receive() external payable {}
}

File 1 of 7: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 7: Context.sol
// SPDX-License-Identifier: MIT

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 3 of 7: IDEXFactory.sol
pragma solidity ^0.8.9;

// SPDX-License-Identifier: MIT

interface IDEXFactory {
	event PairCreated(address indexed token0, address indexed token1, address pair, uint);

	function feeTo() external view returns (address);

	function feeToSetter() external view returns (address);

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

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

	function allPairsLength() external view returns (uint);

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

	function setFeeTo(address) external;

	function setFeeToSetter(address) external;
}

File 4 of 7: IDEXRouter.sol
pragma solidity ^0.8.9;

// SPDX-License-Identifier: MIT

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

	function WETH() external pure returns (address);

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

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

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

	function removeLiquidityETH(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external returns (uint amountToken, uint amountETH);

	function removeLiquidityWithPermit(
		address tokenA,
		address tokenB,
		uint liquidity,
		uint amountAMin,
		uint amountBMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountA, uint amountB);

	function removeLiquidityETHWithPermit(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountToken, uint amountETH);

	function swapExactTokensForTokens(
		uint amountIn,
		uint amountOutMin,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);

	function swapTokensForExactTokens(
		uint amountOut,
		uint amountInMax,
		address[] calldata path,
		address to,
		uint deadline
	) external returns (uint[] memory amounts);

	function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
	external
	payable
	returns (uint[] memory amounts);

	function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
	external
	returns (uint[] memory amounts);

	function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
	external
	returns (uint[] memory amounts);

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

	function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);

	function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);

	function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);

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

	function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);

	function removeLiquidityETHSupportingFeeOnTransferTokens(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline
	) external returns (uint amountETH);

	function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
		address token,
		uint liquidity,
		uint amountTokenMin,
		uint amountETHMin,
		address to,
		uint deadline,
		bool approveMax, uint8 v, bytes32 r, bytes32 s
	) external returns (uint amountETH);

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

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

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

File 5 of 7: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 6 of 7: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeProcessingThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint256","name":"reflectFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInRewards","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":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeProcessingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setFeeProcessingThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setIsFeeProcessingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"value","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxTransactionAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000888565b64e8d4a51000620000269190620008d9565b6009556009547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000059919062000969565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620000869190620009a1565b600a5560c86009546200009a9190620009dc565b600b5560c8600954620000ae9190620009dc565b600c556064600954620000c29190620009dc565b600d556000601160016101000a81548160ff0219169083151502179055506101f4600954620000f29190620009dc565b601255604051806060016040528060038152602001600581526020016002815250601460008201518160000155602082015181600101556040820151816002015550503480156200014257600080fd5b506200016362000157620005f960201b60201c565b6200060160201b60201c565b6000309050600a54600160006200017f620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016004600062000269620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016004600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620003fc620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016006600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000589620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620005ea919062000a25565b60405180910390a35062000a42565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200077c57808604811115620007545762000753620006ee565b5b6001851615620007645780820291505b808102905062000774856200071d565b945062000734565b94509492505050565b6000826200079757600190506200086a565b81620007a757600090506200086a565b8160018114620007c05760028114620007cb5762000801565b60019150506200086a565b60ff841115620007e057620007df620006ee565b5b8360020a915084821115620007fa57620007f9620006ee565b5b506200086a565b5060208310610133831016604e8410600b84101617156200083b5782820a905083811115620008355762000834620006ee565b5b6200086a565b6200084a84848460016200072a565b92509050818404811115620008645762000863620006ee565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620008958262000871565b9150620008a2836200087b565b9250620008d17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000785565b905092915050565b6000620008e68262000871565b9150620008f38362000871565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200092f576200092e620006ee565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009768262000871565b9150620009838362000871565b9250826200099657620009956200093a565b5b828206905092915050565b6000620009ae8262000871565b9150620009bb8362000871565b925082821015620009d157620009d0620006ee565b5b828203905092915050565b6000620009e98262000871565b9150620009f68362000871565b92508262000a095762000a086200093a565b5b828204905092915050565b62000a1f8162000871565b82525050565b600060208201905062000a3c600083018462000a14565b92915050565b6156688062000a526000396000f3fe6080604052600436106102295760003560e01c80638da5cb5b11610123578063adf18693116100ab578063d16336491161006f578063d16336491461085c578063d44e586e14610878578063d6c180bf146108a3578063dd62ed3e146108ce578063f2fde38b1461090b57610230565b8063adf186931461078d578063b609995e146107b6578063b6f7f681146107df578063bfb693fe14610808578063cec10c111461083357610230565b80639af1d35a116100f25780639af1d35a14610692578063a457c2d7146106bf578063a9059cbb146106fc578063aa4bde2814610739578063aaa867a01461076457610230565b80638da5cb5b146105ea578063906e9dd01461061557806395d89b411461063e5780639a7a23d61461066957610230565b80632d838119116101b157806355724b871161017557806355724b8714610507578063637930dd146105305780636dd3d39f1461055957806370a0823114610596578063715018a6146105d357610230565b80632d838119146103e8578063313ce5671461042557806339509351146104505780633bbac5791461048d5780634fbee193146104ca57610230565b8063111e0376116101f8578063111e037614610303578063131447441461032c57806318160ddd1461035757806323b872dd1461038257806327a14fc2146103bf57610230565b806303c0f5d41461023557806306fdde031461025e578063095ea7b3146102895780630e832273146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613ecd565b610934565b005b34801561026a57600080fd5b50610273610a9e565b6040516102809190613fa6565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190613ffe565b610adb565b6040516102bd919061404d565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190614068565b610af9565b6040516102fa919061404d565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190614068565b610b19565b005b34801561033857600080fd5b50610341610db4565b60405161034e91906140a4565b60405180910390f35b34801561036357600080fd5b5061036c610dba565b60405161037991906140a4565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a491906140bf565b610dc4565b6040516103b6919061404d565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190614112565b610ebc565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190614112565b610f93565b60405161041c91906140a4565b60405180910390f35b34801561043157600080fd5b5061043a610ffa565b604051610447919061415b565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613ffe565b611003565b604051610484919061404d565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af9190614068565b6110af565b6040516104c1919061404d565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190614068565b6110cf565b6040516104fe919061404d565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190614176565b6110ef565b005b34801561053c57600080fd5b5061055760048036038101906105529190614112565b611188565b005b34801561056557600080fd5b50610580600480360381019061057b9190614068565b61120e565b60405161058d919061404d565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190614068565b61122e565b6040516105ca91906140a4565b60405180910390f35b3480156105df57600080fd5b506105e8611319565b005b3480156105f657600080fd5b506105ff6113a1565b60405161060c91906141b2565b60405180910390f35b34801561062157600080fd5b5061063c6004803603810190610637919061420b565b6113ca565b005b34801561064a57600080fd5b5061065361151b565b6040516106609190613fa6565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190613ecd565b611558565b005b34801561069e57600080fd5b506106a7611721565b6040516106b693929190614238565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613ffe565b611739565b6040516106f3919061404d565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613ffe565b611824565b604051610730919061404d565b60405180910390f35b34801561074557600080fd5b5061074e611842565b60405161075b91906140a4565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190613ecd565b611848565b005b34801561079957600080fd5b506107b460048036038101906107af9190613ecd565b6119b2565b005b3480156107c257600080fd5b506107dd60048036038101906107d89190614068565b611b1c565b005b3480156107eb57600080fd5b506108066004803603810190610801919061426f565b611e52565b005b34801561081457600080fd5b5061081d611f84565b60405161082a919061404d565b60405180910390f35b34801561083f57600080fd5b5061085a600480360381019061085591906142af565b611f97565b005b61087660048036038101906108719190614112565b6120b0565b005b34801561088457600080fd5b5061088d6125d9565b60405161089a91906140a4565b60405180910390f35b3480156108af57600080fd5b506108b86125df565b6040516108c591906140a4565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190614302565b6125e5565b60405161090291906140a4565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190614068565b61266c565b005b61093c612764565b73ffffffffffffffffffffffffffffffffffffffff1661095a6113a1565b73ffffffffffffffffffffffffffffffffffffffff16146109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a79061438e565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a90614420565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600881526020017f53686962616d6f6e000000000000000000000000000000000000000000000000815250905090565b6000610aef610ae8612764565b848461276c565b6001905092915050565b60056020528060005260406000206000915054906101000a900460ff1681565b610b21612764565b73ffffffffffffffffffffffffffffffffffffffff16610b3f6113a1565b73ffffffffffffffffffffffffffffffffffffffff1614610b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8c9061438e565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c199061448c565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610cf657610cb2600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f93565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b6000600954905090565b6000610dd1848484612937565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e1c612764565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061451e565b60405180910390fd5b610eb085610ea8612764565b85840361276c565b60019150509392505050565b610ec4612764565b73ffffffffffffffffffffffffffffffffffffffff16610ee26113a1565b73ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f9061438e565b60405180910390fd5b60c8600954610f47919061459c565b811015610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f809061463f565b60405180910390fd5b80600d8190555050565b6000600a54821115610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd1906146d1565b60405180910390fd5b6000610fe4612fb3565b90508083610ff2919061459c565b915050919050565b60006009905090565b60006110a5611010612764565b84846003600061101e612764565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a091906146f1565b61276c565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b6110f7612764565b73ffffffffffffffffffffffffffffffffffffffff166111156113a1565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111629061438e565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b611190612764565b73ffffffffffffffffffffffffffffffffffffffff166111ae6113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb9061438e565b60405180910390fd5b8060128190555050565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112c957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611314565b611311600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f93565b90505b919050565b611321612764565b73ffffffffffffffffffffffffffffffffffffffff1661133f6113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061438e565b60405180910390fd5b61139f6000612fd7565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113d2612764565b73ffffffffffffffffffffffffffffffffffffffff166113f06113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d9061438e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce906147b9565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600881526020017f53484942414d4f4e000000000000000000000000000000000000000000000000815250905090565b611560612764565b73ffffffffffffffffffffffffffffffffffffffff1661157e6113a1565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb9061438e565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e9061484b565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561171d576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60148060000154908060010154908060020154905083565b60008060036000611748612764565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc906148dd565b60405180910390fd5b611819611810612764565b8585840361276c565b600191505092915050565b6000611838611831612764565b8484612937565b6001905092915050565b600d5481565b611850612764565b73ffffffffffffffffffffffffffffffffffffffff1661186e6113a1565b73ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb9061438e565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90614420565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6119ba612764565b73ffffffffffffffffffffffffffffffffffffffff166119d86113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a259061438e565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab890614420565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b24612764565b73ffffffffffffffffffffffffffffffffffffffff16611b426113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f9061438e565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90614949565b60405180910390fd5b60005b600780549050811015611e4e578173ffffffffffffffffffffffffffffffffffffffff1660078281548110611c5f57611c5e614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e3b5760076001600780549050611cba9190614998565b81548110611ccb57611cca614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110611d0a57611d09614969565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480611e0157611e006149cc565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611e4e565b8080611e46906149fb565b915050611c27565b5050565b611e5a612764565b73ffffffffffffffffffffffffffffffffffffffff16611e786113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec59061438e565b60405180910390fd5b610190600954611ede919061459c565b821015611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1790614ab6565b60405180910390fd5b610190600954611f30919061459c565b811015611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6990614b48565b60405180910390fd5b81600b8190555080600c819055505050565b601160019054906101000a900460ff1681565b611f9f612764565b73ffffffffffffffffffffffffffffffffffffffff16611fbd6113a1565b73ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a9061438e565b60405180910390fd5b601481838561202291906146f1565b61202c91906146f1565b111561206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614bda565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506014600082015181600001556020820151816001015560408201518160020155905050505050565b6120b8612764565b73ffffffffffffffffffffffffffffffffffffffff166120d66113a1565b73ffffffffffffffffffffffffffffffffffffffff161461212c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121239061438e565b60405180910390fd5b6000309050601360149054906101000a900460ff1615612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890614c46565b60405180910390fd5b8161218b8261122e565b10156121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614cd8565b60405180910390fd5b6000341161220f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220690614d6a565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561227957600080fd5b505afa15801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b19190614d9f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539683601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561233557600080fd5b505afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d9190614d9f565b6040518363ffffffff1660e01b815260040161238a929190614dcc565b602060405180830381600087803b1580156123a457600080fd5b505af11580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190614d9f565b90506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124db82601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61276c565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193484866000806125276113a1565b426040518863ffffffff1660e01b815260040161254996959493929190614e3a565b6060604051808303818588803b15801561256257600080fd5b505af1158015612576573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061259b9190614eb0565b5050506001601160016101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550505050565b600c5481565b600b5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612674612764565b73ffffffffffffffffffffffffffffffffffffffff166126926113a1565b73ffffffffffffffffffffffffffffffffffffffff16146126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df9061438e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614f75565b60405180910390fd5b61276181612fd7565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d390615007565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390615099565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161292a91906140a4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e9061512b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e906151bd565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9b90615229565b60405180910390fd5b60008111612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade906152bb565b60405180910390fd5b612af08361122e565b811115612b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b299061534d565b60405180910390fd5b6000600d54118015612b8e5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612be45750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c4257600d5481612bf68461122e565b612c0091906146f1565b1115612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c38906153df565b60405180910390fd5b5b6000600e54148015612c9d5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612caa5743600e819055505b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d505750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508015612eb157601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612db157600c54612db5565b600b545b821115612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dee90615471565b60405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e525750600e544311155b15612eb0576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b6000612ebc3061122e565b9050600c54811115612ece57600c5490505b601160019054906101000a900460ff168015612ef75750601160009054906101000a900460ff16155b8015612f0557506012548110155b8015612f5b5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fa0576001601160006101000a81548160ff021916908315150217905550612f848161309b565b6000601160006101000a81548160ff0219169083151502179055505b612fac858585856131ad565b5050505050565b6000806000612fc06134c4565b915091508082612fd0919061459c565b9250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601160006101000a81548160ff02191690831515021790555060006014600201546014600101546130ce91906146f1565b905060008114156130df575061318f565b600081601460010154846130f39190615491565b6130fd919061459c565b90506000818461310d9190614998565b905061311882613762565b5061312281613a1f565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561318a573d6000803e3d6000fd5b505050505b6000601160006101000a81548160ff02191690831515021790555050565b60006131b98383613b64565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132645782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461325c9190614998565b925050819055505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613311578060800151600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330991906146f1565b925050819055505b8060000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133649190614998565b925050819055508060200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133be91906146f1565b925050819055508115613454576133d88160400151613bb5565b6133ea81606001518260c00151613bd1565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161344b91906140a4565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516134b591906140a4565b60405180910390a35050505050565b6000806000600a5490506000600954905060005b60078054905081101561372c578260016000600784815481106134fe576134fd614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135ec575081600260006007848154811061358457613583614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561360357600a546009549450945050505061375e565b600160006007838154811061361b5761361a614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361368c9190614998565b925060026000600783815481106136a6576136a5614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137179190614998565b91508080613724906149fb565b9150506134d8565b50600954600a5461373d919061459c565b82101561375557600a5460095493509350505061375e565b81819350935050505b9091565b6000803090506000600267ffffffffffffffff811115613785576137846154eb565b5b6040519080825280602002602001820160405280156137b35781602001602082028036833780820191505090505b50905081816000815181106137cb576137ca614969565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561386d57600080fd5b505afa158015613881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a59190614d9f565b816001815181106138b9576138b8614969565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394082601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61276c565b60008273ffffffffffffffffffffffffffffffffffffffff16319050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008587426040518663ffffffff1660e01b81526004016139c09594939291906155d8565b600060405180830381600087803b1580156139da57600080fd5b505af11580156139ee573d6000803e3d6000fd5b50505050808373ffffffffffffffffffffffffffffffffffffffff1631613a159190614998565b9350505050919050565b60003090506000600283613a33919061459c565b905060008184613a439190614998565b90506000613a5083613762565b9050613a9f84601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61276c565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982868560008061dead426040518863ffffffff1660e01b8152600401613b0896959493929190614e3a565b6060604051808303818588803b158015613b2157600080fd5b505af1158015613b35573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b5a9190614eb0565b5050505050505050565b613b6c613df5565b613b768383613cda565b9050613b8b818484613b86612fb3565b613d81565b84600001856020018660400187606001848152508481525084815250848152505050505092915050565b80600a6000828254613bc79190614998565b9250508190555050565b600030905082600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c2591906146f1565b92505081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613cd55781600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ccd91906146f1565b925050819055505b505050565b613ce2613df5565b81613cf65782816080018181525050613d7b565b606460146000015484613d099190615491565b613d13919061459c565b8160a00181815250506064601460020154601460010154613d3491906146f1565b84613d3f9190615491565b613d49919061459c565b8160c00181815250508060c001518160a0015184613d679190614998565b613d719190614998565b8160800181815250505b92915050565b6000806000808487613d939190615491565b935085613dac5783846000809350935093509350613dea565b848860a00151613dbc9190615491565b9150848860c00151613dce9190615491565b9050808285613ddd9190614998565b613de79190614998565b92505b945094509450949050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e6282613e37565b9050919050565b613e7281613e57565b8114613e7d57600080fd5b50565b600081359050613e8f81613e69565b92915050565b60008115159050919050565b613eaa81613e95565b8114613eb557600080fd5b50565b600081359050613ec781613ea1565b92915050565b60008060408385031215613ee457613ee3613e32565b5b6000613ef285828601613e80565b9250506020613f0385828601613eb8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f47578082015181840152602081019050613f2c565b83811115613f56576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f7882613f0d565b613f828185613f18565b9350613f92818560208601613f29565b613f9b81613f5c565b840191505092915050565b60006020820190508181036000830152613fc08184613f6d565b905092915050565b6000819050919050565b613fdb81613fc8565b8114613fe657600080fd5b50565b600081359050613ff881613fd2565b92915050565b6000806040838503121561401557614014613e32565b5b600061402385828601613e80565b925050602061403485828601613fe9565b9150509250929050565b61404781613e95565b82525050565b6000602082019050614062600083018461403e565b92915050565b60006020828403121561407e5761407d613e32565b5b600061408c84828501613e80565b91505092915050565b61409e81613fc8565b82525050565b60006020820190506140b96000830184614095565b92915050565b6000806000606084860312156140d8576140d7613e32565b5b60006140e686828701613e80565b93505060206140f786828701613e80565b925050604061410886828701613fe9565b9150509250925092565b60006020828403121561412857614127613e32565b5b600061413684828501613fe9565b91505092915050565b600060ff82169050919050565b6141558161413f565b82525050565b6000602082019050614170600083018461414c565b92915050565b60006020828403121561418c5761418b613e32565b5b600061419a84828501613eb8565b91505092915050565b6141ac81613e57565b82525050565b60006020820190506141c760008301846141a3565b92915050565b60006141d882613e37565b9050919050565b6141e8816141cd565b81146141f357600080fd5b50565b600081359050614205816141df565b92915050565b60006020828403121561422157614220613e32565b5b600061422f848285016141f6565b91505092915050565b600060608201905061424d6000830186614095565b61425a6020830185614095565b6142676040830184614095565b949350505050565b6000806040838503121561428657614285613e32565b5b600061429485828601613fe9565b92505060206142a585828601613fe9565b9150509250929050565b6000806000606084860312156142c8576142c7613e32565b5b60006142d686828701613fe9565b93505060206142e786828701613fe9565b92505060406142f886828701613fe9565b9150509250925092565b6000806040838503121561431957614318613e32565b5b600061432785828601613e80565b925050602061433885828601613e80565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614378602083613f18565b915061438382614342565b602082019050919050565b600060208201905081810360008301526143a78161436b565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686973207660008201527f616c756500000000000000000000000000000000000000000000000000000000602082015250565b600061440a602483613f18565b9150614415826143ae565b604082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614476601b83613f18565b915061448182614440565b602082019050919050565b600060208201905081810360008301526144a581614469565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614508602883613f18565b9150614513826144ac565b604082019050919050565b60006020820190508181036000830152614537816144fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145a782613fc8565b91506145b283613fc8565b9250826145c2576145c161453e565b5b828204905092915050565b7f4d75737420736574206d61782077616c6c657420746f206174206c656173742060008201527f302e3525206f6620746f74616c20737570706c79000000000000000000000000602082015250565b6000614629603483613f18565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006146bb602a83613f18565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b60006146fc82613fc8565b915061470783613fc8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561473c5761473b61456d565b5b828201905092915050565b7f4d61726b6574696e67206164647265737320697320616c72656164792073657460008201527f20746f20746869732076616c7565000000000000000000000000000000000000602082015250565b60006147a3602e83613f18565b91506147ae82614747565b604082019050919050565b600060208201905081810360008301526147d281614796565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000614835603883613f18565b9150614840826147d9565b604082019050919050565b6000602082019050818103600083015261486481614828565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006148c7602583613f18565b91506148d28261486b565b604082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b6000614933601783613f18565b915061493e826148fd565b602082019050919050565b6000602082019050818103600083015261496281614926565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006149a382613fc8565b91506149ae83613fc8565b9250828210156149c1576149c061456d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614a0682613fc8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a3957614a3861456d565b5b600182019050919050565b7f4d75737420736574206d61782062757920746f206174206c6561737420302e3260008201527f3525206f6620746f74616c20737570706c790000000000000000000000000000602082015250565b6000614aa0603283613f18565b9150614aab82614a44565b604082019050919050565b60006020820190508181036000830152614acf81614a93565b9050919050565b7f4d75737420736574206d61782073656c6c20746f206174206c6561737420302e60008201527f323525206f6620746f74616c20737570706c7900000000000000000000000000602082015250565b6000614b32603383613f18565b9150614b3d82614ad6565b604082019050919050565b60006020820190508181036000830152614b6181614b25565b9050919050565b7f43616e6e6f7420736574206665657320746f2061626f7665206120636f6d626960008201527f6e656420746f74616c206f662032302500000000000000000000000000000000602082015250565b6000614bc4603083613f18565b9150614bcf82614b68565b604082019050919050565b60006020820190508181036000830152614bf381614bb7565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000614c30601783613f18565b9150614c3b82614bfa565b602082019050919050565b60006020820190508181036000830152614c5f81614c23565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206960008201527f6e697469616c206c697175696469747900000000000000000000000000000000602082015250565b6000614cc2603083613f18565b9150614ccd82614c66565b604082019050919050565b60006020820190508181036000830152614cf181614cb5565b9050919050565b7f496e73756666696369656e742045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614d54602683613f18565b9150614d5f82614cf8565b604082019050919050565b60006020820190508181036000830152614d8381614d47565b9050919050565b600081519050614d9981613e69565b92915050565b600060208284031215614db557614db4613e32565b5b6000614dc384828501614d8a565b91505092915050565b6000604082019050614de160008301856141a3565b614dee60208301846141a3565b9392505050565b6000819050919050565b6000819050919050565b6000614e24614e1f614e1a84614df5565b614dff565b613fc8565b9050919050565b614e3481614e09565b82525050565b600060c082019050614e4f60008301896141a3565b614e5c6020830188614095565b614e696040830187614e2b565b614e766060830186614e2b565b614e8360808301856141a3565b614e9060a0830184614095565b979650505050505050565b600081519050614eaa81613fd2565b92915050565b600080600060608486031215614ec957614ec8613e32565b5b6000614ed786828701614e9b565b9350506020614ee886828701614e9b565b9250506040614ef986828701614e9b565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f5f602683613f18565b9150614f6a82614f03565b604082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ff1602483613f18565b9150614ffc82614f95565b604082019050919050565b6000602082019050818103600083015261502081614fe4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615083602283613f18565b915061508e82615027565b604082019050919050565b600060208201905081810360008301526150b281615076565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615115602583613f18565b9150615120826150b9565b604082019050919050565b6000602082019050818103600083015261514481615108565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151a7602383613f18565b91506151b28261514b565b604082019050919050565b600060208201905081810360008301526151d68161519a565b9050919050565b7f45524332303a206164647265737320626c61636b6c69737465642028626f7429600082015250565b6000615213602083613f18565b915061521e826151dd565b602082019050919050565b6000602082019050818103600083015261524281615206565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006152a5602983613f18565b91506152b082615249565b604082019050919050565b600060208201905081810360008301526152d481615298565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000615337603183613f18565b9150615342826152db565b604082019050919050565b600060208201905081810360008301526153668161532a565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20746865206d61782077616c6c657420616d6f756e74000000000000602082015250565b60006153c9603a83613f18565b91506153d48261536d565b604082019050919050565b600060208201905081810360008301526153f8816153bc565b9050919050565b7f596f752061726520747279696e6720746f207472616e7366657220746f6f206d60008201527f616e7920746f6b656e7300000000000000000000000000000000000000000000602082015250565b600061545b602a83613f18565b9150615466826153ff565b604082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b600061549c82613fc8565b91506154a783613fc8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154e0576154df61456d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61554f81613e57565b82525050565b60006155618383615546565b60208301905092915050565b6000602082019050919050565b60006155858261551a565b61558f8185615525565b935061559a83615536565b8060005b838110156155cb5781516155b28882615555565b97506155bd8361556d565b92505060018101905061559e565b5085935050505092915050565b600060a0820190506155ed6000830188614095565b6155fa6020830187614e2b565b818103604083015261560c818661557a565b905061561b60608301856141a3565b6156286080830184614095565b969550505050505056fea2646970667358221220accbcfcef2a1998dd4d469525d68da78b506e7b848f77f941bc3dc7d23fb7d7d64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638da5cb5b11610123578063adf18693116100ab578063d16336491161006f578063d16336491461085c578063d44e586e14610878578063d6c180bf146108a3578063dd62ed3e146108ce578063f2fde38b1461090b57610230565b8063adf186931461078d578063b609995e146107b6578063b6f7f681146107df578063bfb693fe14610808578063cec10c111461083357610230565b80639af1d35a116100f25780639af1d35a14610692578063a457c2d7146106bf578063a9059cbb146106fc578063aa4bde2814610739578063aaa867a01461076457610230565b80638da5cb5b146105ea578063906e9dd01461061557806395d89b411461063e5780639a7a23d61461066957610230565b80632d838119116101b157806355724b871161017557806355724b8714610507578063637930dd146105305780636dd3d39f1461055957806370a0823114610596578063715018a6146105d357610230565b80632d838119146103e8578063313ce5671461042557806339509351146104505780633bbac5791461048d5780634fbee193146104ca57610230565b8063111e0376116101f8578063111e037614610303578063131447441461032c57806318160ddd1461035757806323b872dd1461038257806327a14fc2146103bf57610230565b806303c0f5d41461023557806306fdde031461025e578063095ea7b3146102895780630e832273146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613ecd565b610934565b005b34801561026a57600080fd5b50610273610a9e565b6040516102809190613fa6565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190613ffe565b610adb565b6040516102bd919061404d565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190614068565b610af9565b6040516102fa919061404d565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190614068565b610b19565b005b34801561033857600080fd5b50610341610db4565b60405161034e91906140a4565b60405180910390f35b34801561036357600080fd5b5061036c610dba565b60405161037991906140a4565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a491906140bf565b610dc4565b6040516103b6919061404d565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190614112565b610ebc565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190614112565b610f93565b60405161041c91906140a4565b60405180910390f35b34801561043157600080fd5b5061043a610ffa565b604051610447919061415b565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190613ffe565b611003565b604051610484919061404d565b60405180910390f35b34801561049957600080fd5b506104b460048036038101906104af9190614068565b6110af565b6040516104c1919061404d565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec9190614068565b6110cf565b6040516104fe919061404d565b60405180910390f35b34801561051357600080fd5b5061052e60048036038101906105299190614176565b6110ef565b005b34801561053c57600080fd5b5061055760048036038101906105529190614112565b611188565b005b34801561056557600080fd5b50610580600480360381019061057b9190614068565b61120e565b60405161058d919061404d565b60405180910390f35b3480156105a257600080fd5b506105bd60048036038101906105b89190614068565b61122e565b6040516105ca91906140a4565b60405180910390f35b3480156105df57600080fd5b506105e8611319565b005b3480156105f657600080fd5b506105ff6113a1565b60405161060c91906141b2565b60405180910390f35b34801561062157600080fd5b5061063c6004803603810190610637919061420b565b6113ca565b005b34801561064a57600080fd5b5061065361151b565b6040516106609190613fa6565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b9190613ecd565b611558565b005b34801561069e57600080fd5b506106a7611721565b6040516106b693929190614238565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613ffe565b611739565b6040516106f3919061404d565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613ffe565b611824565b604051610730919061404d565b60405180910390f35b34801561074557600080fd5b5061074e611842565b60405161075b91906140a4565b60405180910390f35b34801561077057600080fd5b5061078b60048036038101906107869190613ecd565b611848565b005b34801561079957600080fd5b506107b460048036038101906107af9190613ecd565b6119b2565b005b3480156107c257600080fd5b506107dd60048036038101906107d89190614068565b611b1c565b005b3480156107eb57600080fd5b506108066004803603810190610801919061426f565b611e52565b005b34801561081457600080fd5b5061081d611f84565b60405161082a919061404d565b60405180910390f35b34801561083f57600080fd5b5061085a600480360381019061085591906142af565b611f97565b005b61087660048036038101906108719190614112565b6120b0565b005b34801561088457600080fd5b5061088d6125d9565b60405161089a91906140a4565b60405180910390f35b3480156108af57600080fd5b506108b86125df565b6040516108c591906140a4565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190614302565b6125e5565b60405161090291906140a4565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190614068565b61266c565b005b61093c612764565b73ffffffffffffffffffffffffffffffffffffffff1661095a6113a1565b73ffffffffffffffffffffffffffffffffffffffff16146109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a79061438e565b60405180910390fd5b801515600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a90614420565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606040518060400160405280600881526020017f53686962616d6f6e000000000000000000000000000000000000000000000000815250905090565b6000610aef610ae8612764565b848461276c565b6001905092915050565b60056020528060005260406000206000915054906101000a900460ff1681565b610b21612764565b73ffffffffffffffffffffffffffffffffffffffff16610b3f6113a1565b73ffffffffffffffffffffffffffffffffffffffff1614610b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8c9061438e565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c199061448c565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610cf657610cb2600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f93565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b6000600954905090565b6000610dd1848484612937565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e1c612764565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939061451e565b60405180910390fd5b610eb085610ea8612764565b85840361276c565b60019150509392505050565b610ec4612764565b73ffffffffffffffffffffffffffffffffffffffff16610ee26113a1565b73ffffffffffffffffffffffffffffffffffffffff1614610f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2f9061438e565b60405180910390fd5b60c8600954610f47919061459c565b811015610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f809061463f565b60405180910390fd5b80600d8190555050565b6000600a54821115610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd1906146d1565b60405180910390fd5b6000610fe4612fb3565b90508083610ff2919061459c565b915050919050565b60006009905090565b60006110a5611010612764565b84846003600061101e612764565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a091906146f1565b61276c565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b6110f7612764565b73ffffffffffffffffffffffffffffffffffffffff166111156113a1565b73ffffffffffffffffffffffffffffffffffffffff161461116b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111629061438e565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b611190612764565b73ffffffffffffffffffffffffffffffffffffffff166111ae6113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb9061438e565b60405180910390fd5b8060128190555050565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112c957600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611314565b611311600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f93565b90505b919050565b611321612764565b73ffffffffffffffffffffffffffffffffffffffff1661133f6113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138c9061438e565b60405180910390fd5b61139f6000612fd7565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113d2612764565b73ffffffffffffffffffffffffffffffffffffffff166113f06113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611446576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143d9061438e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ce906147b9565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600881526020017f53484942414d4f4e000000000000000000000000000000000000000000000000815250905090565b611560612764565b73ffffffffffffffffffffffffffffffffffffffff1661157e6113a1565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb9061438e565b60405180910390fd5b801515601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e9061484b565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561171d576001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b60148060000154908060010154908060020154905083565b60008060036000611748612764565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc906148dd565b60405180910390fd5b611819611810612764565b8585840361276c565b600191505092915050565b6000611838611831612764565b8484612937565b6001905092915050565b600d5481565b611850612764565b73ffffffffffffffffffffffffffffffffffffffff1661186e6113a1565b73ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb9061438e565b60405180910390fd5b801515600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90614420565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6119ba612764565b73ffffffffffffffffffffffffffffffffffffffff166119d86113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a259061438e565b60405180910390fd5b801515600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab890614420565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611b24612764565b73ffffffffffffffffffffffffffffffffffffffff16611b426113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8f9061438e565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90614949565b60405180910390fd5b60005b600780549050811015611e4e578173ffffffffffffffffffffffffffffffffffffffff1660078281548110611c5f57611c5e614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611e3b5760076001600780549050611cba9190614998565b81548110611ccb57611cca614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110611d0a57611d09614969565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007805480611e0157611e006149cc565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611e4e565b8080611e46906149fb565b915050611c27565b5050565b611e5a612764565b73ffffffffffffffffffffffffffffffffffffffff16611e786113a1565b73ffffffffffffffffffffffffffffffffffffffff1614611ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec59061438e565b60405180910390fd5b610190600954611ede919061459c565b821015611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1790614ab6565b60405180910390fd5b610190600954611f30919061459c565b811015611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6990614b48565b60405180910390fd5b81600b8190555080600c819055505050565b601160019054906101000a900460ff1681565b611f9f612764565b73ffffffffffffffffffffffffffffffffffffffff16611fbd6113a1565b73ffffffffffffffffffffffffffffffffffffffff1614612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a9061438e565b60405180910390fd5b601481838561202291906146f1565b61202c91906146f1565b111561206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490614bda565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506014600082015181600001556020820151816001015560408201518160020155905050505050565b6120b8612764565b73ffffffffffffffffffffffffffffffffffffffff166120d66113a1565b73ffffffffffffffffffffffffffffffffffffffff161461212c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121239061438e565b60405180910390fd5b6000309050601360149054906101000a900460ff1615612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890614c46565b60405180910390fd5b8161218b8261122e565b10156121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614cd8565b60405180910390fd5b6000341161220f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220690614d6a565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561227957600080fd5b505afa15801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b19190614d9f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539683601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561233557600080fd5b505afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236d9190614d9f565b6040518363ffffffff1660e01b815260040161238a929190614dcc565b602060405180830381600087803b1580156123a457600080fd5b505af11580156123b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dc9190614d9f565b90506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506124db82601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61276c565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193484866000806125276113a1565b426040518863ffffffff1660e01b815260040161254996959493929190614e3a565b6060604051808303818588803b15801561256257600080fd5b505af1158015612576573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061259b9190614eb0565b5050506001601160016101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550505050565b600c5481565b600b5481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612674612764565b73ffffffffffffffffffffffffffffffffffffffff166126926113a1565b73ffffffffffffffffffffffffffffffffffffffff16146126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df9061438e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274f90614f75565b60405180910390fd5b61276181612fd7565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d390615007565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390615099565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161292a91906140a4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e9061512b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0e906151bd565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9b90615229565b60405180910390fd5b60008111612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade906152bb565b60405180910390fd5b612af08361122e565b811115612b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b299061534d565b60405180910390fd5b6000600d54118015612b8e5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612be45750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c4257600d5481612bf68461122e565b612c0091906146f1565b1115612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c38906153df565b60405180910390fd5b5b6000600e54148015612c9d5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612caa5743600e819055505b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d505750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508015612eb157601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612db157600c54612db5565b600b545b821115612df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dee90615471565b60405180910390fd5b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e525750600e544311155b15612eb0576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b6000612ebc3061122e565b9050600c54811115612ece57600c5490505b601160019054906101000a900460ff168015612ef75750601160009054906101000a900460ff16155b8015612f0557506012548110155b8015612f5b5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612fa0576001601160006101000a81548160ff021916908315150217905550612f848161309b565b6000601160006101000a81548160ff0219169083151502179055505b612fac858585856131ad565b5050505050565b6000806000612fc06134c4565b915091508082612fd0919061459c565b9250505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601160006101000a81548160ff02191690831515021790555060006014600201546014600101546130ce91906146f1565b905060008114156130df575061318f565b600081601460010154846130f39190615491565b6130fd919061459c565b90506000818461310d9190614998565b905061311882613762565b5061312281613a1f565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561318a573d6000803e3d6000fd5b505050505b6000601160006101000a81548160ff02191690831515021790555050565b60006131b98383613b64565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132645782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461325c9190614998565b925050819055505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613311578060800151600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461330991906146f1565b925050819055505b8060000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133649190614998565b925050819055508060200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133be91906146f1565b925050819055508115613454576133d88160400151613bb5565b6133ea81606001518260c00151613bd1565b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161344b91906140a4565b60405180910390a35b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516134b591906140a4565b60405180910390a35050505050565b6000806000600a5490506000600954905060005b60078054905081101561372c578260016000600784815481106134fe576134fd614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806135ec575081600260006007848154811061358457613583614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561360357600a546009549450945050505061375e565b600160006007838154811061361b5761361a614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361368c9190614998565b925060026000600783815481106136a6576136a5614969565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054826137179190614998565b91508080613724906149fb565b9150506134d8565b50600954600a5461373d919061459c565b82101561375557600a5460095493509350505061375e565b81819350935050505b9091565b6000803090506000600267ffffffffffffffff811115613785576137846154eb565b5b6040519080825280602002602001820160405280156137b35781602001602082028036833780820191505090505b50905081816000815181106137cb576137ca614969565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561386d57600080fd5b505afa158015613881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a59190614d9f565b816001815181106138b9576138b8614969565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061394082601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61276c565b60008273ffffffffffffffffffffffffffffffffffffffff16319050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008587426040518663ffffffff1660e01b81526004016139c09594939291906155d8565b600060405180830381600087803b1580156139da57600080fd5b505af11580156139ee573d6000803e3d6000fd5b50505050808373ffffffffffffffffffffffffffffffffffffffff1631613a159190614998565b9350505050919050565b60003090506000600283613a33919061459c565b905060008184613a439190614998565b90506000613a5083613762565b9050613a9f84601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61276c565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982868560008061dead426040518863ffffffff1660e01b8152600401613b0896959493929190614e3a565b6060604051808303818588803b158015613b2157600080fd5b505af1158015613b35573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b5a9190614eb0565b5050505050505050565b613b6c613df5565b613b768383613cda565b9050613b8b818484613b86612fb3565b613d81565b84600001856020018660400187606001848152508481525084815250848152505050505092915050565b80600a6000828254613bc79190614998565b9250508190555050565b600030905082600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c2591906146f1565b92505081905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613cd55781600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ccd91906146f1565b925050819055505b505050565b613ce2613df5565b81613cf65782816080018181525050613d7b565b606460146000015484613d099190615491565b613d13919061459c565b8160a00181815250506064601460020154601460010154613d3491906146f1565b84613d3f9190615491565b613d49919061459c565b8160c00181815250508060c001518160a0015184613d679190614998565b613d719190614998565b8160800181815250505b92915050565b6000806000808487613d939190615491565b935085613dac5783846000809350935093509350613dea565b848860a00151613dbc9190615491565b9150848860c00151613dce9190615491565b9050808285613ddd9190614998565b613de79190614998565b92505b945094509450949050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e6282613e37565b9050919050565b613e7281613e57565b8114613e7d57600080fd5b50565b600081359050613e8f81613e69565b92915050565b60008115159050919050565b613eaa81613e95565b8114613eb557600080fd5b50565b600081359050613ec781613ea1565b92915050565b60008060408385031215613ee457613ee3613e32565b5b6000613ef285828601613e80565b9250506020613f0385828601613eb8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f47578082015181840152602081019050613f2c565b83811115613f56576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f7882613f0d565b613f828185613f18565b9350613f92818560208601613f29565b613f9b81613f5c565b840191505092915050565b60006020820190508181036000830152613fc08184613f6d565b905092915050565b6000819050919050565b613fdb81613fc8565b8114613fe657600080fd5b50565b600081359050613ff881613fd2565b92915050565b6000806040838503121561401557614014613e32565b5b600061402385828601613e80565b925050602061403485828601613fe9565b9150509250929050565b61404781613e95565b82525050565b6000602082019050614062600083018461403e565b92915050565b60006020828403121561407e5761407d613e32565b5b600061408c84828501613e80565b91505092915050565b61409e81613fc8565b82525050565b60006020820190506140b96000830184614095565b92915050565b6000806000606084860312156140d8576140d7613e32565b5b60006140e686828701613e80565b93505060206140f786828701613e80565b925050604061410886828701613fe9565b9150509250925092565b60006020828403121561412857614127613e32565b5b600061413684828501613fe9565b91505092915050565b600060ff82169050919050565b6141558161413f565b82525050565b6000602082019050614170600083018461414c565b92915050565b60006020828403121561418c5761418b613e32565b5b600061419a84828501613eb8565b91505092915050565b6141ac81613e57565b82525050565b60006020820190506141c760008301846141a3565b92915050565b60006141d882613e37565b9050919050565b6141e8816141cd565b81146141f357600080fd5b50565b600081359050614205816141df565b92915050565b60006020828403121561422157614220613e32565b5b600061422f848285016141f6565b91505092915050565b600060608201905061424d6000830186614095565b61425a6020830185614095565b6142676040830184614095565b949350505050565b6000806040838503121561428657614285613e32565b5b600061429485828601613fe9565b92505060206142a585828601613fe9565b9150509250929050565b6000806000606084860312156142c8576142c7613e32565b5b60006142d686828701613fe9565b93505060206142e786828701613fe9565b92505060406142f886828701613fe9565b9150509250925092565b6000806040838503121561431957614318613e32565b5b600061432785828601613e80565b925050602061433885828601613e80565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614378602083613f18565b915061438382614342565b602082019050919050565b600060208201905081810360008301526143a78161436b565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f2074686973207660008201527f616c756500000000000000000000000000000000000000000000000000000000602082015250565b600061440a602483613f18565b9150614415826143ae565b604082019050919050565b60006020820190508181036000830152614439816143fd565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000614476601b83613f18565b915061448182614440565b602082019050919050565b600060208201905081810360008301526144a581614469565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614508602883613f18565b9150614513826144ac565b604082019050919050565b60006020820190508181036000830152614537816144fb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145a782613fc8565b91506145b283613fc8565b9250826145c2576145c161453e565b5b828204905092915050565b7f4d75737420736574206d61782077616c6c657420746f206174206c656173742060008201527f302e3525206f6620746f74616c20737570706c79000000000000000000000000602082015250565b6000614629603483613f18565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006146bb602a83613f18565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b60006146fc82613fc8565b915061470783613fc8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561473c5761473b61456d565b5b828201905092915050565b7f4d61726b6574696e67206164647265737320697320616c72656164792073657460008201527f20746f20746869732076616c7565000000000000000000000000000000000000602082015250565b60006147a3602e83613f18565b91506147ae82614747565b604082019050919050565b600060208201905081810360008301526147d281614796565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000614835603883613f18565b9150614840826147d9565b604082019050919050565b6000602082019050818103600083015261486481614828565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006148c7602583613f18565b91506148d28261486b565b604082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f4163636f756e74206973206e6f74206578636c75646564000000000000000000600082015250565b6000614933601783613f18565b915061493e826148fd565b602082019050919050565b6000602082019050818103600083015261496281614926565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006149a382613fc8565b91506149ae83613fc8565b9250828210156149c1576149c061456d565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614a0682613fc8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a3957614a3861456d565b5b600182019050919050565b7f4d75737420736574206d61782062757920746f206174206c6561737420302e3260008201527f3525206f6620746f74616c20737570706c790000000000000000000000000000602082015250565b6000614aa0603283613f18565b9150614aab82614a44565b604082019050919050565b60006020820190508181036000830152614acf81614a93565b9050919050565b7f4d75737420736574206d61782073656c6c20746f206174206c6561737420302e60008201527f323525206f6620746f74616c20737570706c7900000000000000000000000000602082015250565b6000614b32603383613f18565b9150614b3d82614ad6565b604082019050919050565b60006020820190508181036000830152614b6181614b25565b9050919050565b7f43616e6e6f7420736574206665657320746f2061626f7665206120636f6d626960008201527f6e656420746f74616c206f662032302500000000000000000000000000000000602082015250565b6000614bc4603083613f18565b9150614bcf82614b68565b604082019050919050565b60006020820190508181036000830152614bf381614bb7565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000614c30601783613f18565b9150614c3b82614bfa565b602082019050919050565b60006020820190508181036000830152614c5f81614c23565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520666f72206960008201527f6e697469616c206c697175696469747900000000000000000000000000000000602082015250565b6000614cc2603083613f18565b9150614ccd82614c66565b604082019050919050565b60006020820190508181036000830152614cf181614cb5565b9050919050565b7f496e73756666696369656e742045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614d54602683613f18565b9150614d5f82614cf8565b604082019050919050565b60006020820190508181036000830152614d8381614d47565b9050919050565b600081519050614d9981613e69565b92915050565b600060208284031215614db557614db4613e32565b5b6000614dc384828501614d8a565b91505092915050565b6000604082019050614de160008301856141a3565b614dee60208301846141a3565b9392505050565b6000819050919050565b6000819050919050565b6000614e24614e1f614e1a84614df5565b614dff565b613fc8565b9050919050565b614e3481614e09565b82525050565b600060c082019050614e4f60008301896141a3565b614e5c6020830188614095565b614e696040830187614e2b565b614e766060830186614e2b565b614e8360808301856141a3565b614e9060a0830184614095565b979650505050505050565b600081519050614eaa81613fd2565b92915050565b600080600060608486031215614ec957614ec8613e32565b5b6000614ed786828701614e9b565b9350506020614ee886828701614e9b565b9250506040614ef986828701614e9b565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f5f602683613f18565b9150614f6a82614f03565b604082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ff1602483613f18565b9150614ffc82614f95565b604082019050919050565b6000602082019050818103600083015261502081614fe4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615083602283613f18565b915061508e82615027565b604082019050919050565b600060208201905081810360008301526150b281615076565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615115602583613f18565b9150615120826150b9565b604082019050919050565b6000602082019050818103600083015261514481615108565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151a7602383613f18565b91506151b28261514b565b604082019050919050565b600060208201905081810360008301526151d68161519a565b9050919050565b7f45524332303a206164647265737320626c61636b6c69737465642028626f7429600082015250565b6000615213602083613f18565b915061521e826151dd565b602082019050919050565b6000602082019050818103600083015261524281615206565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006152a5602983613f18565b91506152b082615249565b604082019050919050565b600060208201905081810360008301526152d481615298565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000615337603183613f18565b9150615342826152db565b604082019050919050565b600060208201905081810360008301526153668161532a565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20746865206d61782077616c6c657420616d6f756e74000000000000602082015250565b60006153c9603a83613f18565b91506153d48261536d565b604082019050919050565b600060208201905081810360008301526153f8816153bc565b9050919050565b7f596f752061726520747279696e6720746f207472616e7366657220746f6f206d60008201527f616e7920746f6b656e7300000000000000000000000000000000000000000000602082015250565b600061545b602a83613f18565b9150615466826153ff565b604082019050919050565b6000602082019050818103600083015261548a8161544e565b9050919050565b600061549c82613fc8565b91506154a783613fc8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154e0576154df61456d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61554f81613e57565b82525050565b60006155618383615546565b60208301905092915050565b6000602082019050919050565b60006155858261551a565b61558f8185615525565b935061559a83615536565b8060005b838110156155cb5781516155b28882615555565b97506155bd8361556d565b92505060018101905061559e565b5085935050505092915050565b600060a0820190506155ed6000830188614095565b6155fa6020830187614e2b565b818103604083015261560c818661557a565b905061561b60608301856141a3565b6156286080830184614095565b969550505050505056fea2646970667358221220accbcfcef2a1998dd4d469525d68da78b506e7b848f77f941bc3dc7d23fb7d7d64736f6c63430008090033

Deployed Bytecode Sourcemap

219:14437:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13798:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2658:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3477:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;844:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4850:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1470:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2896:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3628:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13978:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4617:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2818:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4036:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;984:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;790:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13034:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13143:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;901:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2986:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:5;;;;;;;;;;;;;:::i;:::-;;966:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13599:194:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2736:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12376:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1672:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;4240:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3182:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1225:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14171:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14405:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5168:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13257:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1424:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12691:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11594:777;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1176:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1128:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3339:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13798:175:6;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13895:5:6::1;13877:23;;:5;:14;13883:7;13877:14;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;;13869:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;13963:5;13946;:14;13952:7;13946:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;13798:175:::0;;:::o;2658:73::-;2695:13;2722:4;;;;;;;;;;;;;;;;;2715:11;;2658:73;:::o;3477:146::-;3552:4;3563:39;3572:12;:10;:12::i;:::-;3586:7;3595:6;3563:8;:39::i;:::-;3614:4;3607:11;;3477:146;;;;:::o;844:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;4850:313::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4928:21:6::1;:30;4950:7;4928:30;;;;;;;;;;;;;;;;;;;;;;;;;4927:31;4919:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:1;5001:6;:15;5008:7;5001:15;;;;;;;;;;;;;;;;:19;4997:91;;;5046:36;5066:6;:15;5073:7;5066:15;;;;;;;;;;;;;;;;5046:19;:36::i;:::-;5028:6;:15;5035:7;5028:15;;;;;;;;;;;;;;;:54;;;;4997:91;5127:4;5094:21;:30;5116:7;5094:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;5136:8;5150:7;5136:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4850:313:::0;:::o;1470:52::-;;;;:::o;2896:85::-;2949:7;2970:6;;2963:13;;2896:85;:::o;3628:403::-;3726:4;3737:36;3747:6;3755:9;3766:6;3737:9;:36::i;:::-;3780:24;3807:10;:18;3818:6;3807:18;;;;;;;;;;;;;;;:32;3826:12;:10;:12::i;:::-;3807:32;;;;;;;;;;;;;;;;3780:59;;3872:6;3852:16;:26;;3844:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3946:57;3955:6;3963:12;:10;:12::i;:::-;3996:6;3977:16;:25;3946:8;:57::i;:::-;4022:4;4015:11;;;3628:403;;;;;:::o;13978:188::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14072:3:6::1;14063:6;;:12;;;;:::i;:::-;14053:5;:23;;14045:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;14156:5;14138:15;:23;;;;13978:188:::0;:::o;4617:228::-;4684:7;4717:6;;4706:7;:17;;4698:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4775:19;4797:10;:8;:10::i;:::-;4775:32;;4829:11;4819:7;:21;;;;:::i;:::-;4812:28;;;4617:228;;;:::o;2818:73::-;2859:5;410:1;2871:15;;2818:73;:::o;4036:199::-;4124:4;4135:79;4144:12;:10;:12::i;:::-;4158:7;4203:10;4167;:24;4178:12;:10;:12::i;:::-;4167:24;;;;;;;;;;;;;;;:33;4192:7;4167:33;;;;;;;;;;;;;;;;:46;;;;:::i;:::-;4135:8;:79::i;:::-;4226:4;4219:11;;4036:199;;;;:::o;984:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;790:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;13034:104::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13128:5:6::1;13103:22;;:30;;;;;;;;;;;;;;;;;;13034:104:::0;:::o;13143:109::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13242:5:6::1;13217:22;:30;;;;13143:109:::0;:::o;901:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;2986:191::-;3052:7;3070:21;:30;3092:7;3070:30;;;;;;;;;;;;;;;;;;;;;;;;;3066:58;;;3109:6;:15;3116:7;3109:15;;;;;;;;;;;;;;;;3102:22;;;;3066:58;3136:36;3156:6;:15;3163:7;3156:15;;;;;;;;;;;;;;;;3136:19;:36::i;:::-;3129:43;;2986:191;;;;:::o;1598:92:5:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;966:85::-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;13599:194:6:-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13703:5:6::1;13683:25;;:16;;;;;;;;;;;:25;;;;13675:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;13783:5;13764:16;;:24;;;;;;;;;;;;;;;;;;13599:194:::0;:::o;2736:77::-;2775:13;2802:6;;;;;;;;;;;;;;;;;2795:13;;2736:77;:::o;12376:310::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12506:5:6::1;12471:40;;:25;:31;12497:4;12471:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;12463:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;12611:5;12577:25;:31;12603:4;12577:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;12627:5;12623:59;;;12672:4;12640:23;:29;12664:4;12640:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;12623:59;12376:310:::0;;:::o;1672:91::-;;;;;;;;;;;;;;;;;;;:::o;4240:372::-;4333:4;4344:24;4371:10;:24;4382:12;:10;:12::i;:::-;4371:24;;;;;;;;;;;;;;;:33;4396:7;4371:33;;;;;;;;;;;;;;;;4344:60;;4437:15;4417:16;:35;;4409:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4517:67;4526:12;:10;:12::i;:::-;4540:7;4568:15;4549:16;:34;4517:8;:67::i;:::-;4603:4;4596:11;;;4240:372;;;;:::o;3182:152::-;3260:4;3271:42;3281:12;:10;:12::i;:::-;3295:9;3306:6;3271:9;:42::i;:::-;3325:4;3318:11;;3182:152;;;;:::o;1225:45::-;;;;:::o;14171:229::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14304:5:6::1;14268:41;;:23;:32;14292:7;14268:32;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;14260:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;14390:5;14355:23;:32;14379:7;14355:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;14171:229:::0;;:::o;14405:214::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14528:5:6::1;14497:36;;:18;:27;14516:7;14497:27;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;14489:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14609:5;14579:18;:27;14598:7;14579:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;14405:214:::0;;:::o;5168:390::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5243:21:6::1;:30;5265:7;5243:30;;;;;;;;;;;;;;;;;;;;;;;;;5235:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5313:9;5308:246;5332:8;:15;;;;5328:1;:19;5308:246;;;5379:7;5364:22;;:8;5373:1;5364:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:22;;;5360:189;;;5409:8;5436:1;5418:8;:15;;;;:19;;;;:::i;:::-;5409:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5395:8;5404:1;5395:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;5463:1;5445:6;:15;5452:7;5445:15;;;;;;;;;;;;;;;:19;;;;5504:5;5471:21;:30;5493:7;5471:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;5516:8;:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5537:5;;5360:189;5349:3;;;;;:::i;:::-;;;;5308:246;;;;5168:390:::0;:::o;13257:337::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13376:3:6::1;13367:6;;:12;;;;:::i;:::-;13356:6;:24;;13348:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;13469:3;13460:6;;:12;;;;:::i;:::-;13448:7;:25;;13440:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;13553:6;13536:14;:23;;;;13582:7;13564:15;:25;;;;13257:337:::0;;:::o;1424:42::-;;;;;;;;;;;;;:::o;12691:338::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12850:2:6::1;12833:12;12818;12805:10;:25;;;;:::i;:::-;:40;;;;:::i;:::-;12804:48;;12796:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;12919:105;;;;;;;;12944:10;12919:105;;;;12974:12;12919:105;;;;13006:12;12919:105;;::::0;12912:4:::1;:112;;;;;;;;;;;;;;;;;;;;;;;;;;;12691:338:::0;;;:::o;11594:777::-;1189:12:5;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11675:12:6::1;11698:4;11675:28;;11717:13;;;;;;;;;;;11716:14;11708:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;11790:18;11771:15;11781:4;11771:9;:15::i;:::-;:37;;11763:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;11886:1;11874:9;:13;11866:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11954:19;11988:6;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11976:40;;;12017:4;12023:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11976:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11954:83;;12083:4;12042:25;:38;12068:11;12042:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;12131:4;12092:23;:36;12116:11;12092:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;12161:41;12170:4;12184:6;;;;;;;;;;;445:12;12161:8;:41::i;:::-;12207:6;;;;;;;;;;;:22;;;12237:9;12248:4;12254:18;12274:1;12277::::0;12280:7:::1;:5;:7::i;:::-;12289:15;12207:98;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12337:4;12312:22;;:29;;;;;;;;;;;;;;;;;;12362:4;12346:13;;:20;;;;;;;;;;;;;;;;;;11670:701;;11594:777:::0;:::o;1176:45::-;;;;:::o;1128:44::-;;;;:::o;3339:133::-;3420:7;3441:10;:17;3452:5;3441:17;;;;;;;;;;;;;;;:26;3459:7;3441:26;;;;;;;;;;;;;;;;3434:33;;3339:133;;;;:::o;1839:189:5:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;7385:315:6:-;590:1;7472:21;;:5;:21;;;;7464:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;590:1;7547:23;;:7;:23;;;;7539:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7645:6;7616:10;:17;7627:5;7616:17;;;;;;;;;;;;;;;:26;7634:7;7616:26;;;;;;;;;;;;;;;:35;;;;7679:7;7663:32;;7672:5;7663:32;;;7688:6;7663:32;;;;;;:::i;:::-;;;;;;;;7385:315;;;:::o;7705:1530::-;590:1;7787:20;;:4;:20;;;;7779:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;590:1;7862:18;;:2;:18;;;;7854:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;7934:5;:11;7940:4;7934:11;;;;;;;;;;;;;;;;;;;;;;;;;7933:12;7925:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8004:1;7995:6;:10;7987:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8074:15;8084:4;8074:9;:15::i;:::-;8064:6;:25;;8056:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;8172:1;8154:15;;:19;:53;;;;;8178:25;:29;8204:2;8178:29;;;;;;;;;;;;;;;;;;;;;;;;;8177:30;8154:53;:85;;;;;8212:23;:27;8236:2;8212:27;;;;;;;;;;;;;;;;;;;;;;;;;8211:28;8154:85;8150:217;;;8283:15;;8272:6;8256:13;8266:2;8256:9;:13::i;:::-;:22;;;;:::i;:::-;8255:43;;8247:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;8150:217;8391:1;8377:10;;:15;:48;;;;;8396:25;:29;8422:2;8396:29;;;;;;;;;;;;;;;;;;;;;;;;;8377:48;8373:91;;;8446:12;8433:10;:25;;;;8373:91;8470:19;8493:18;:24;8512:4;8493:24;;;;;;;;;;;;;;;;;;;;;;;;;8492:25;:52;;;;;8522:18;:22;8541:2;8522:22;;;;;;;;;;;;;;;;;;;;;;;;;8521:23;8492:52;8470:74;;8553:14;8549:269;;;8594:25;:31;8620:4;8594:31;;;;;;;;;;;;;;;;;;;;;;;;;:66;;8645:15;;8594:66;;;8628:14;;8594:66;8583:6;:78;;8575:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;8720:25;:31;8746:4;8720:31;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;;8771:10;;8755:12;:26;;8720:61;8716:97;;;8802:4;8790:5;:9;8796:2;8790:9;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;8716:97;8549:269;8824:15;8842:24;8860:4;8842:9;:24::i;:::-;8824:42;;8887:15;;8877:7;:25;8873:68;;;8920:15;;8910:25;;8873:68;8951:22;;;;;;;;;;;:48;;;;;8978:21;;;;;;;;;;;8977:22;8951:48;:85;;;;;9014:22;;9003:7;:33;;8951:85;:121;;;;;9041:25;:31;9067:4;9041:31;;;;;;;;;;;;;;;;;;;;;;;;;9040:32;8951:121;8947:229;;;9104:4;9080:21;;:28;;;;;;;;;;;;;;;;;;9114:21;9127:7;9114:12;:21::i;:::-;9165:5;9141:21;;:29;;;;;;;;;;;;;;;;;;8947:229;9182:48;9197:4;9203:2;9207:6;9215:14;9182;:48::i;:::-;7774:1461;;7705:1530;;;:::o;6779:146::-;6821:7;6836:15;6853;6872:19;:17;:19::i;:::-;6835:56;;;;6913:7;6903;:17;;;;:::i;:::-;6896:24;;;;6779:146;:::o;2034:169:5:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;10229:492:6:-;2020:4;1996:21;;:28;;;;;;;;;;;;;;;;;;10292:14:::1;10329:4;:17;;;10309:4;:17;;;:37;;;;:::i;:::-;10292:54;;10365:1;10355:6;:11;10351:24;;;10368:7;;;10351:24;10404:26;10462:6;10442:4;:17;;;10433:6;:26;;;;:::i;:::-;:35;;;;:::i;:::-;10404:64;;10473:26;10511:18;10502:6;:27;;;;:::i;:::-;10473:56;;10555:42;10578:18;10555:22;:42::i;:::-;;10602:33;10616:18;10602:13;:33::i;:::-;10668:16;;;;;;;;;;;:25;;:48;10694:21;10668:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;10287:434;;;2029:1;2059:5:::0;2035:21;;:29;;;;;;;;;;;;;;;;;;10229:492;:::o;9552:672::-;9662:26;9691:35;9702:7;9711:14;9691:10;:35::i;:::-;9662:64;;9737:21;:29;9759:6;9737:29;;;;;;;;;;;;;;;;;;;;;;;;;9733:72;;;9792:7;9774:6;:14;9781:6;9774:14;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;9733:72;9815:21;:32;9837:9;9815:32;;;;;;;;;;;;;;;;;;;;;;;;;9811:90;;;9876:3;:19;;;9855:6;:17;9862:9;9855:17;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;9811:90;9925:3;:11;;;9907:6;:14;9914:6;9907:14;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;9962:3;:19;;;9941:6;:17;9948:9;9941:17;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;9992:14;9988:172;;;10014:33;10031:3;:15;;;10014:16;:33::i;:::-;10053:44;10068:3;:13;;;10083:3;:13;;;10053:14;:44::i;:::-;10133:4;10108:46;;10117:6;10108:46;;;10140:3;:13;;;10108:46;;;;;;:::i;:::-;;;;;;;;9988:172;10188:9;10171:48;;10180:6;10171:48;;;10199:3;:19;;;10171:48;;;;;;:::i;:::-;;;;;;;;9657:567;9552:672;;;;:::o;6930:450::-;6981:7;6990;7004:15;7022:6;;7004:24;;7033:15;7051:6;;7033:24;;7069:9;7064:221;7088:8;:15;;;;7084:1;:19;7064:221;;;7142:7;7120:6;:19;7127:8;7136:1;7127:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7120:19;;;;;;;;;;;;;;;;:29;:62;;;;7175:7;7153:6;:19;7160:8;7169:1;7160:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7153:19;;;;;;;;;;;;;;;;:29;7120:62;7116:91;;;7192:6;;7200;;7184:23;;;;;;;;;7116:91;7224:6;:19;7231:8;7240:1;7231:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7224:19;;;;;;;;;;;;;;;;7213:30;;;;;:::i;:::-;;;7260:6;:19;7267:8;7276:1;7267:11;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7260:19;;;;;;;;;;;;;;;;7249:30;;;;;:::i;:::-;;;7105:3;;;;;:::i;:::-;;;;7064:221;;;;7314:6;;7305;;:15;;;;:::i;:::-;7295:7;:25;7291:54;;;7330:6;;7338;;7322:23;;;;;;;;7291:54;7358:7;7367;7350:25;;;;;;6930:450;;;:::o;11142:447::-;11209:7;11223:12;11246:4;11223:28;;11258:21;11296:1;11282:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11258:40;;11313:4;11303;11308:1;11303:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;11332:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11322:4;11327:1;11322:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;11352:41;11361:4;11375:6;;;;;;;;;;;445:12;11352:8;:41::i;:::-;11400:23;11426:4;:12;;;11400:38;;11443:6;;;;;;;;;;;:57;;;11501:8;11511:1;11514:4;11520;11526:15;11443:99;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:15;11554:4;:12;;;:30;;;;:::i;:::-;11547:37;;;;;11142:447;;;:::o;10726:411::-;10778:12;10801:4;10778:28;;10813:20;10845:1;10836:6;:10;;;;:::i;:::-;10813:33;;10851:26;10889:12;10880:6;:21;;;;:::i;:::-;10851:50;;10908:23;10934:36;10957:12;10934:22;:36::i;:::-;10908:62;;10977:41;10986:4;11000:6;;;;;;;;;;;445:12;10977:8;:41::i;:::-;11023:6;;;;;;;;;;;:22;;;11053:15;11070:4;11076:18;11096:1;11099;636:5;11116:15;11023:109;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10773:364;;;;10726:411;:::o;5563:281::-;5636:26;;:::i;:::-;5675:29;5687:7;5696;5675:11;:29::i;:::-;5669:35;;5778:46;5790:3;5795:7;5804;5813:10;:8;:10::i;:::-;5778:11;:46::i;:::-;5710:3;:11;;5723:3;:19;;5744:3;:15;;5761:3;:13;;5709:115;;;;;;;;;;;;;;;;;;;;5563:281;;;;:::o;9240:86::-;9310:11;9300:6;;:21;;;;;;;:::i;:::-;;;;;;;;9240:86;:::o;9331:216::-;9406:12;9429:4;9406:28;;9457:9;9441:6;:12;9448:4;9441:12;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;9477:21;:27;9499:4;9477:27;;;;;;;;;;;;;;;;;;;;;;;;;9473:70;;;9528:9;9512:6;:12;9519:4;9512:12;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;9473:70;9401:146;9331:216;;:::o;5849:399::-;5923:26;;:::i;:::-;5961:7;5956:71;;5998:7;5976:3;:19;;:29;;;;;6011:10;;5956:71;6079:3;6061:4;:15;;;6051:7;:25;;;;:::i;:::-;:31;;;;:::i;:::-;6033:3;:15;;:49;;;;;6155:3;6134:4;:17;;;6114:4;:17;;;:37;;;;:::i;:::-;6103:7;:49;;;;:::i;:::-;:55;;;;:::i;:::-;6087:3;:13;;:71;;;;;6213:3;:13;;;6195:3;:15;;;6185:7;:25;;;;:::i;:::-;:41;;;;:::i;:::-;6163:3;:19;;:63;;;;;5849:399;;;;;:::o;6253:521::-;6376:15;6393:23;6418:19;6439:17;6483:11;6473:7;:21;;;;:::i;:::-;6463:31;;6506:7;6501:57;;6529:7;6538;6547:1;6550;6521:31;;;;;;;;;;6501:57;6596:11;6578:3;:15;;;:29;;;;:::i;:::-;6564:43;;6640:11;6624:3;:13;;;:27;;;;:::i;:::-;6612:39;;6698:9;6684:11;6674:7;:21;;;;:::i;:::-;:33;;;;:::i;:::-;6656:51;;6253:521;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:7:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:99::-;1724:6;1758:5;1752:12;1742:22;;1672:99;;;:::o;1777:169::-;1861:11;1895:6;1890:3;1883:19;1935:4;1930:3;1926:14;1911:29;;1777:169;;;;:::o;1952:307::-;2020:1;2030:113;2044:6;2041:1;2038:13;2030:113;;;2129:1;2124:3;2120:11;2114:18;2110:1;2105:3;2101:11;2094:39;2066:2;2063:1;2059:10;2054:15;;2030:113;;;2161:6;2158:1;2155:13;2152:101;;;2241:1;2232:6;2227:3;2223:16;2216:27;2152:101;2001:258;1952:307;;;:::o;2265:102::-;2306:6;2357:2;2353:7;2348:2;2341:5;2337:14;2333:28;2323:38;;2265:102;;;:::o;2373:364::-;2461:3;2489:39;2522:5;2489:39;:::i;:::-;2544:71;2608:6;2603:3;2544:71;:::i;:::-;2537:78;;2624:52;2669:6;2664:3;2657:4;2650:5;2646:16;2624:52;:::i;:::-;2701:29;2723:6;2701:29;:::i;:::-;2696:3;2692:39;2685:46;;2465:272;2373:364;;;;:::o;2743:313::-;2856:4;2894:2;2883:9;2879:18;2871:26;;2943:9;2937:4;2933:20;2929:1;2918:9;2914:17;2907:47;2971:78;3044:4;3035:6;2971:78;:::i;:::-;2963:86;;2743:313;;;;:::o;3062:77::-;3099:7;3128:5;3117:16;;3062:77;;;:::o;3145:122::-;3218:24;3236:5;3218:24;:::i;:::-;3211:5;3208:35;3198:63;;3257:1;3254;3247:12;3198:63;3145:122;:::o;3273:139::-;3319:5;3357:6;3344:20;3335:29;;3373:33;3400:5;3373:33;:::i;:::-;3273:139;;;;:::o;3418:474::-;3486:6;3494;3543:2;3531:9;3522:7;3518:23;3514:32;3511:119;;;3549:79;;:::i;:::-;3511:119;3669:1;3694:53;3739:7;3730:6;3719:9;3715:22;3694:53;:::i;:::-;3684:63;;3640:117;3796:2;3822:53;3867:7;3858:6;3847:9;3843:22;3822:53;:::i;:::-;3812:63;;3767:118;3418:474;;;;;:::o;3898:109::-;3979:21;3994:5;3979:21;:::i;:::-;3974:3;3967:34;3898:109;;:::o;4013:210::-;4100:4;4138:2;4127:9;4123:18;4115:26;;4151:65;4213:1;4202:9;4198:17;4189:6;4151:65;:::i;:::-;4013:210;;;;:::o;4229:329::-;4288:6;4337:2;4325:9;4316:7;4312:23;4308:32;4305:119;;;4343:79;;:::i;:::-;4305:119;4463:1;4488:53;4533:7;4524:6;4513:9;4509:22;4488:53;:::i;:::-;4478:63;;4434:117;4229:329;;;;:::o;4564:118::-;4651:24;4669:5;4651:24;:::i;:::-;4646:3;4639:37;4564:118;;:::o;4688:222::-;4781:4;4819:2;4808:9;4804:18;4796:26;;4832:71;4900:1;4889:9;4885:17;4876:6;4832:71;:::i;:::-;4688:222;;;;:::o;4916:619::-;4993:6;5001;5009;5058:2;5046:9;5037:7;5033:23;5029:32;5026:119;;;5064:79;;:::i;:::-;5026:119;5184:1;5209:53;5254:7;5245:6;5234:9;5230:22;5209:53;:::i;:::-;5199:63;;5155:117;5311:2;5337:53;5382:7;5373:6;5362:9;5358:22;5337:53;:::i;:::-;5327:63;;5282:118;5439:2;5465:53;5510:7;5501:6;5490:9;5486:22;5465:53;:::i;:::-;5455:63;;5410:118;4916:619;;;;;:::o;5541:329::-;5600:6;5649:2;5637:9;5628:7;5624:23;5620:32;5617:119;;;5655:79;;:::i;:::-;5617:119;5775:1;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5746:117;5541:329;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:323::-;6362:6;6411:2;6399:9;6390:7;6386:23;6382:32;6379:119;;;6417:79;;:::i;:::-;6379:119;6537:1;6562:50;6604:7;6595:6;6584:9;6580:22;6562:50;:::i;:::-;6552:60;;6508:114;6306:323;;;;:::o;6635:118::-;6722:24;6740:5;6722:24;:::i;:::-;6717:3;6710:37;6635:118;;:::o;6759:222::-;6852:4;6890:2;6879:9;6875:18;6867:26;;6903:71;6971:1;6960:9;6956:17;6947:6;6903:71;:::i;:::-;6759:222;;;;:::o;6987:104::-;7032:7;7061:24;7079:5;7061:24;:::i;:::-;7050:35;;6987:104;;;:::o;7097:138::-;7178:32;7204:5;7178:32;:::i;:::-;7171:5;7168:43;7158:71;;7225:1;7222;7215:12;7158:71;7097:138;:::o;7241:155::-;7295:5;7333:6;7320:20;7311:29;;7349:41;7384:5;7349:41;:::i;:::-;7241:155;;;;:::o;7402:345::-;7469:6;7518:2;7506:9;7497:7;7493:23;7489:32;7486:119;;;7524:79;;:::i;:::-;7486:119;7644:1;7669:61;7722:7;7713:6;7702:9;7698:22;7669:61;:::i;:::-;7659:71;;7615:125;7402:345;;;;:::o;7753:442::-;7902:4;7940:2;7929:9;7925:18;7917:26;;7953:71;8021:1;8010:9;8006:17;7997:6;7953:71;:::i;:::-;8034:72;8102:2;8091:9;8087:18;8078:6;8034:72;:::i;:::-;8116;8184:2;8173:9;8169:18;8160:6;8116:72;:::i;:::-;7753:442;;;;;;:::o;8201:474::-;8269:6;8277;8326:2;8314:9;8305:7;8301:23;8297:32;8294:119;;;8332:79;;:::i;:::-;8294:119;8452:1;8477:53;8522:7;8513:6;8502:9;8498:22;8477:53;:::i;:::-;8467:63;;8423:117;8579:2;8605:53;8650:7;8641:6;8630:9;8626:22;8605:53;:::i;:::-;8595:63;;8550:118;8201:474;;;;;:::o;8681:619::-;8758:6;8766;8774;8823:2;8811:9;8802:7;8798:23;8794:32;8791:119;;;8829:79;;:::i;:::-;8791:119;8949:1;8974:53;9019:7;9010:6;8999:9;8995:22;8974:53;:::i;:::-;8964:63;;8920:117;9076:2;9102:53;9147:7;9138:6;9127:9;9123:22;9102:53;:::i;:::-;9092:63;;9047:118;9204:2;9230:53;9275:7;9266:6;9255:9;9251:22;9230:53;:::i;:::-;9220:63;;9175:118;8681:619;;;;;:::o;9306:474::-;9374:6;9382;9431:2;9419:9;9410:7;9406:23;9402:32;9399:119;;;9437:79;;:::i;:::-;9399:119;9557:1;9582:53;9627:7;9618:6;9607:9;9603:22;9582:53;:::i;:::-;9572:63;;9528:117;9684:2;9710:53;9755:7;9746:6;9735:9;9731:22;9710:53;:::i;:::-;9700:63;;9655:118;9306:474;;;;;:::o;9786:182::-;9926:34;9922:1;9914:6;9910:14;9903:58;9786:182;:::o;9974:366::-;10116:3;10137:67;10201:2;10196:3;10137:67;:::i;:::-;10130:74;;10213:93;10302:3;10213:93;:::i;:::-;10331:2;10326:3;10322:12;10315:19;;9974:366;;;:::o;10346:419::-;10512:4;10550:2;10539:9;10535:18;10527:26;;10599:9;10593:4;10589:20;10585:1;10574:9;10570:17;10563:47;10627:131;10753:4;10627:131;:::i;:::-;10619:139;;10346:419;;;:::o;10771:223::-;10911:34;10907:1;10899:6;10895:14;10888:58;10980:6;10975:2;10967:6;10963:15;10956:31;10771:223;:::o;11000:366::-;11142:3;11163:67;11227:2;11222:3;11163:67;:::i;:::-;11156:74;;11239:93;11328:3;11239:93;:::i;:::-;11357:2;11352:3;11348:12;11341:19;;11000:366;;;:::o;11372:419::-;11538:4;11576:2;11565:9;11561:18;11553:26;;11625:9;11619:4;11615:20;11611:1;11600:9;11596:17;11589:47;11653:131;11779:4;11653:131;:::i;:::-;11645:139;;11372:419;;;:::o;11797:177::-;11937:29;11933:1;11925:6;11921:14;11914:53;11797:177;:::o;11980:366::-;12122:3;12143:67;12207:2;12202:3;12143:67;:::i;:::-;12136:74;;12219:93;12308:3;12219:93;:::i;:::-;12337:2;12332:3;12328:12;12321:19;;11980:366;;;:::o;12352:419::-;12518:4;12556:2;12545:9;12541:18;12533:26;;12605:9;12599:4;12595:20;12591:1;12580:9;12576:17;12569:47;12633:131;12759:4;12633:131;:::i;:::-;12625:139;;12352:419;;;:::o;12777:227::-;12917:34;12913:1;12905:6;12901:14;12894:58;12986:10;12981:2;12973:6;12969:15;12962:35;12777:227;:::o;13010:366::-;13152:3;13173:67;13237:2;13232:3;13173:67;:::i;:::-;13166:74;;13249:93;13338:3;13249:93;:::i;:::-;13367:2;13362:3;13358:12;13351:19;;13010:366;;;:::o;13382:419::-;13548:4;13586:2;13575:9;13571:18;13563:26;;13635:9;13629:4;13625:20;13621:1;13610:9;13606:17;13599:47;13663:131;13789:4;13663:131;:::i;:::-;13655:139;;13382:419;;;:::o;13807:180::-;13855:77;13852:1;13845:88;13952:4;13949:1;13942:15;13976:4;13973:1;13966:15;13993:180;14041:77;14038:1;14031:88;14138:4;14135:1;14128:15;14162:4;14159:1;14152:15;14179:185;14219:1;14236:20;14254:1;14236:20;:::i;:::-;14231:25;;14270:20;14288:1;14270:20;:::i;:::-;14265:25;;14309:1;14299:35;;14314:18;;:::i;:::-;14299:35;14356:1;14353;14349:9;14344:14;;14179:185;;;;:::o;14370:239::-;14510:34;14506:1;14498:6;14494:14;14487:58;14579:22;14574:2;14566:6;14562:15;14555:47;14370:239;:::o;14615:366::-;14757:3;14778:67;14842:2;14837:3;14778:67;:::i;:::-;14771:74;;14854:93;14943:3;14854:93;:::i;:::-;14972:2;14967:3;14963:12;14956:19;;14615:366;;;:::o;14987:419::-;15153:4;15191:2;15180:9;15176:18;15168:26;;15240:9;15234:4;15230:20;15226:1;15215:9;15211:17;15204:47;15268:131;15394:4;15268:131;:::i;:::-;15260:139;;14987:419;;;:::o;15412:229::-;15552:34;15548:1;15540:6;15536:14;15529:58;15621:12;15616:2;15608:6;15604:15;15597:37;15412:229;:::o;15647:366::-;15789:3;15810:67;15874:2;15869:3;15810:67;:::i;:::-;15803:74;;15886:93;15975:3;15886:93;:::i;:::-;16004:2;15999:3;15995:12;15988:19;;15647:366;;;:::o;16019:419::-;16185:4;16223:2;16212:9;16208:18;16200:26;;16272:9;16266:4;16262:20;16258:1;16247:9;16243:17;16236:47;16300:131;16426:4;16300:131;:::i;:::-;16292:139;;16019:419;;;:::o;16444:305::-;16484:3;16503:20;16521:1;16503:20;:::i;:::-;16498:25;;16537:20;16555:1;16537:20;:::i;:::-;16532:25;;16691:1;16623:66;16619:74;16616:1;16613:81;16610:107;;;16697:18;;:::i;:::-;16610:107;16741:1;16738;16734:9;16727:16;;16444:305;;;;:::o;16755:233::-;16895:34;16891:1;16883:6;16879:14;16872:58;16964:16;16959:2;16951:6;16947:15;16940:41;16755:233;:::o;16994:366::-;17136:3;17157:67;17221:2;17216:3;17157:67;:::i;:::-;17150:74;;17233:93;17322:3;17233:93;:::i;:::-;17351:2;17346:3;17342:12;17335:19;;16994:366;;;:::o;17366:419::-;17532:4;17570:2;17559:9;17555:18;17547:26;;17619:9;17613:4;17609:20;17605:1;17594:9;17590:17;17583:47;17647:131;17773:4;17647:131;:::i;:::-;17639:139;;17366:419;;;:::o;17791:243::-;17931:34;17927:1;17919:6;17915:14;17908:58;18000:26;17995:2;17987:6;17983:15;17976:51;17791:243;:::o;18040:366::-;18182:3;18203:67;18267:2;18262:3;18203:67;:::i;:::-;18196:74;;18279:93;18368:3;18279:93;:::i;:::-;18397:2;18392:3;18388:12;18381:19;;18040:366;;;:::o;18412:419::-;18578:4;18616:2;18605:9;18601:18;18593:26;;18665:9;18659:4;18655:20;18651:1;18640:9;18636:17;18629:47;18693:131;18819:4;18693:131;:::i;:::-;18685:139;;18412:419;;;:::o;18837:224::-;18977:34;18973:1;18965:6;18961:14;18954:58;19046:7;19041:2;19033:6;19029:15;19022:32;18837:224;:::o;19067:366::-;19209:3;19230:67;19294:2;19289:3;19230:67;:::i;:::-;19223:74;;19306:93;19395:3;19306:93;:::i;:::-;19424:2;19419:3;19415:12;19408:19;;19067:366;;;:::o;19439:419::-;19605:4;19643:2;19632:9;19628:18;19620:26;;19692:9;19686:4;19682:20;19678:1;19667:9;19663:17;19656:47;19720:131;19846:4;19720:131;:::i;:::-;19712:139;;19439:419;;;:::o;19864:173::-;20004:25;20000:1;19992:6;19988:14;19981:49;19864:173;:::o;20043:366::-;20185:3;20206:67;20270:2;20265:3;20206:67;:::i;:::-;20199:74;;20282:93;20371:3;20282:93;:::i;:::-;20400:2;20395:3;20391:12;20384:19;;20043:366;;;:::o;20415:419::-;20581:4;20619:2;20608:9;20604:18;20596:26;;20668:9;20662:4;20658:20;20654:1;20643:9;20639:17;20632:47;20696:131;20822:4;20696:131;:::i;:::-;20688:139;;20415:419;;;:::o;20840:180::-;20888:77;20885:1;20878:88;20985:4;20982:1;20975:15;21009:4;21006:1;20999:15;21026:191;21066:4;21086:20;21104:1;21086:20;:::i;:::-;21081:25;;21120:20;21138:1;21120:20;:::i;:::-;21115:25;;21159:1;21156;21153:8;21150:34;;;21164:18;;:::i;:::-;21150:34;21209:1;21206;21202:9;21194:17;;21026:191;;;;:::o;21223:180::-;21271:77;21268:1;21261:88;21368:4;21365:1;21358:15;21392:4;21389:1;21382:15;21409:233;21448:3;21471:24;21489:5;21471:24;:::i;:::-;21462:33;;21517:66;21510:5;21507:77;21504:103;;;21587:18;;:::i;:::-;21504:103;21634:1;21627:5;21623:13;21616:20;;21409:233;;;:::o;21648:237::-;21788:34;21784:1;21776:6;21772:14;21765:58;21857:20;21852:2;21844:6;21840:15;21833:45;21648:237;:::o;21891:366::-;22033:3;22054:67;22118:2;22113:3;22054:67;:::i;:::-;22047:74;;22130:93;22219:3;22130:93;:::i;:::-;22248:2;22243:3;22239:12;22232:19;;21891:366;;;:::o;22263:419::-;22429:4;22467:2;22456:9;22452:18;22444:26;;22516:9;22510:4;22506:20;22502:1;22491:9;22487:17;22480:47;22544:131;22670:4;22544:131;:::i;:::-;22536:139;;22263:419;;;:::o;22688:238::-;22828:34;22824:1;22816:6;22812:14;22805:58;22897:21;22892:2;22884:6;22880:15;22873:46;22688:238;:::o;22932:366::-;23074:3;23095:67;23159:2;23154:3;23095:67;:::i;:::-;23088:74;;23171:93;23260:3;23171:93;:::i;:::-;23289:2;23284:3;23280:12;23273:19;;22932:366;;;:::o;23304:419::-;23470:4;23508:2;23497:9;23493:18;23485:26;;23557:9;23551:4;23547:20;23543:1;23532:9;23528:17;23521:47;23585:131;23711:4;23585:131;:::i;:::-;23577:139;;23304:419;;;:::o;23729:235::-;23869:34;23865:1;23857:6;23853:14;23846:58;23938:18;23933:2;23925:6;23921:15;23914:43;23729:235;:::o;23970:366::-;24112:3;24133:67;24197:2;24192:3;24133:67;:::i;:::-;24126:74;;24209:93;24298:3;24209:93;:::i;:::-;24327:2;24322:3;24318:12;24311:19;;23970:366;;;:::o;24342:419::-;24508:4;24546:2;24535:9;24531:18;24523:26;;24595:9;24589:4;24585:20;24581:1;24570:9;24566:17;24559:47;24623:131;24749:4;24623:131;:::i;:::-;24615:139;;24342:419;;;:::o;24767:173::-;24907:25;24903:1;24895:6;24891:14;24884:49;24767:173;:::o;24946:366::-;25088:3;25109:67;25173:2;25168:3;25109:67;:::i;:::-;25102:74;;25185:93;25274:3;25185:93;:::i;:::-;25303:2;25298:3;25294:12;25287:19;;24946:366;;;:::o;25318:419::-;25484:4;25522:2;25511:9;25507:18;25499:26;;25571:9;25565:4;25561:20;25557:1;25546:9;25542:17;25535:47;25599:131;25725:4;25599:131;:::i;:::-;25591:139;;25318:419;;;:::o;25743:235::-;25883:34;25879:1;25871:6;25867:14;25860:58;25952:18;25947:2;25939:6;25935:15;25928:43;25743:235;:::o;25984:366::-;26126:3;26147:67;26211:2;26206:3;26147:67;:::i;:::-;26140:74;;26223:93;26312:3;26223:93;:::i;:::-;26341:2;26336:3;26332:12;26325:19;;25984:366;;;:::o;26356:419::-;26522:4;26560:2;26549:9;26545:18;26537:26;;26609:9;26603:4;26599:20;26595:1;26584:9;26580:17;26573:47;26637:131;26763:4;26637:131;:::i;:::-;26629:139;;26356:419;;;:::o;26781:225::-;26921:34;26917:1;26909:6;26905:14;26898:58;26990:8;26985:2;26977:6;26973:15;26966:33;26781:225;:::o;27012:366::-;27154:3;27175:67;27239:2;27234:3;27175:67;:::i;:::-;27168:74;;27251:93;27340:3;27251:93;:::i;:::-;27369:2;27364:3;27360:12;27353:19;;27012:366;;;:::o;27384:419::-;27550:4;27588:2;27577:9;27573:18;27565:26;;27637:9;27631:4;27627:20;27623:1;27612:9;27608:17;27601:47;27665:131;27791:4;27665:131;:::i;:::-;27657:139;;27384:419;;;:::o;27809:143::-;27866:5;27897:6;27891:13;27882:22;;27913:33;27940:5;27913:33;:::i;:::-;27809:143;;;;:::o;27958:351::-;28028:6;28077:2;28065:9;28056:7;28052:23;28048:32;28045:119;;;28083:79;;:::i;:::-;28045:119;28203:1;28228:64;28284:7;28275:6;28264:9;28260:22;28228:64;:::i;:::-;28218:74;;28174:128;27958:351;;;;:::o;28315:332::-;28436:4;28474:2;28463:9;28459:18;28451:26;;28487:71;28555:1;28544:9;28540:17;28531:6;28487:71;:::i;:::-;28568:72;28636:2;28625:9;28621:18;28612:6;28568:72;:::i;:::-;28315:332;;;;;:::o;28653:85::-;28698:7;28727:5;28716:16;;28653:85;;;:::o;28744:60::-;28772:3;28793:5;28786:12;;28744:60;;;:::o;28810:158::-;28868:9;28901:61;28919:42;28928:32;28954:5;28928:32;:::i;:::-;28919:42;:::i;:::-;28901:61;:::i;:::-;28888:74;;28810:158;;;:::o;28974:147::-;29069:45;29108:5;29069:45;:::i;:::-;29064:3;29057:58;28974:147;;:::o;29127:807::-;29376:4;29414:3;29403:9;29399:19;29391:27;;29428:71;29496:1;29485:9;29481:17;29472:6;29428:71;:::i;:::-;29509:72;29577:2;29566:9;29562:18;29553:6;29509:72;:::i;:::-;29591:80;29667:2;29656:9;29652:18;29643:6;29591:80;:::i;:::-;29681;29757:2;29746:9;29742:18;29733:6;29681:80;:::i;:::-;29771:73;29839:3;29828:9;29824:19;29815:6;29771:73;:::i;:::-;29854;29922:3;29911:9;29907:19;29898:6;29854:73;:::i;:::-;29127:807;;;;;;;;;:::o;29940:143::-;29997:5;30028:6;30022:13;30013:22;;30044:33;30071:5;30044:33;:::i;:::-;29940:143;;;;:::o;30089:663::-;30177:6;30185;30193;30242:2;30230:9;30221:7;30217:23;30213:32;30210:119;;;30248:79;;:::i;:::-;30210:119;30368:1;30393:64;30449:7;30440:6;30429:9;30425:22;30393:64;:::i;:::-;30383:74;;30339:128;30506:2;30532:64;30588:7;30579:6;30568:9;30564:22;30532:64;:::i;:::-;30522:74;;30477:129;30645:2;30671:64;30727:7;30718:6;30707:9;30703:22;30671:64;:::i;:::-;30661:74;;30616:129;30089:663;;;;;:::o;30758:225::-;30898:34;30894:1;30886:6;30882:14;30875:58;30967:8;30962:2;30954:6;30950:15;30943:33;30758:225;:::o;30989:366::-;31131:3;31152:67;31216:2;31211:3;31152:67;:::i;:::-;31145:74;;31228:93;31317:3;31228:93;:::i;:::-;31346:2;31341:3;31337:12;31330:19;;30989:366;;;:::o;31361:419::-;31527:4;31565:2;31554:9;31550:18;31542:26;;31614:9;31608:4;31604:20;31600:1;31589:9;31585:17;31578:47;31642:131;31768:4;31642:131;:::i;:::-;31634:139;;31361:419;;;:::o;31786:223::-;31926:34;31922:1;31914:6;31910:14;31903:58;31995:6;31990:2;31982:6;31978:15;31971:31;31786:223;:::o;32015:366::-;32157:3;32178:67;32242:2;32237:3;32178:67;:::i;:::-;32171:74;;32254:93;32343:3;32254:93;:::i;:::-;32372:2;32367:3;32363:12;32356:19;;32015:366;;;:::o;32387:419::-;32553:4;32591:2;32580:9;32576:18;32568:26;;32640:9;32634:4;32630:20;32626:1;32615:9;32611:17;32604:47;32668:131;32794:4;32668:131;:::i;:::-;32660:139;;32387:419;;;:::o;32812:221::-;32952:34;32948:1;32940:6;32936:14;32929:58;33021:4;33016:2;33008:6;33004:15;32997:29;32812:221;:::o;33039:366::-;33181:3;33202:67;33266:2;33261:3;33202:67;:::i;:::-;33195:74;;33278:93;33367:3;33278:93;:::i;:::-;33396:2;33391:3;33387:12;33380:19;;33039:366;;;:::o;33411:419::-;33577:4;33615:2;33604:9;33600:18;33592:26;;33664:9;33658:4;33654:20;33650:1;33639:9;33635:17;33628:47;33692:131;33818:4;33692:131;:::i;:::-;33684:139;;33411:419;;;:::o;33836:224::-;33976:34;33972:1;33964:6;33960:14;33953:58;34045:7;34040:2;34032:6;34028:15;34021:32;33836:224;:::o;34066:366::-;34208:3;34229:67;34293:2;34288:3;34229:67;:::i;:::-;34222:74;;34305:93;34394:3;34305:93;:::i;:::-;34423:2;34418:3;34414:12;34407:19;;34066:366;;;:::o;34438:419::-;34604:4;34642:2;34631:9;34627:18;34619:26;;34691:9;34685:4;34681:20;34677:1;34666:9;34662:17;34655:47;34719:131;34845:4;34719:131;:::i;:::-;34711:139;;34438:419;;;:::o;34863:222::-;35003:34;34999:1;34991:6;34987:14;34980:58;35072:5;35067:2;35059:6;35055:15;35048:30;34863:222;:::o;35091:366::-;35233:3;35254:67;35318:2;35313:3;35254:67;:::i;:::-;35247:74;;35330:93;35419:3;35330:93;:::i;:::-;35448:2;35443:3;35439:12;35432:19;;35091:366;;;:::o;35463:419::-;35629:4;35667:2;35656:9;35652:18;35644:26;;35716:9;35710:4;35706:20;35702:1;35691:9;35687:17;35680:47;35744:131;35870:4;35744:131;:::i;:::-;35736:139;;35463:419;;;:::o;35888:182::-;36028:34;36024:1;36016:6;36012:14;36005:58;35888:182;:::o;36076:366::-;36218:3;36239:67;36303:2;36298:3;36239:67;:::i;:::-;36232:74;;36315:93;36404:3;36315:93;:::i;:::-;36433:2;36428:3;36424:12;36417:19;;36076:366;;;:::o;36448:419::-;36614:4;36652:2;36641:9;36637:18;36629:26;;36701:9;36695:4;36691:20;36687:1;36676:9;36672:17;36665:47;36729:131;36855:4;36729:131;:::i;:::-;36721:139;;36448:419;;;:::o;36873:228::-;37013:34;37009:1;37001:6;36997:14;36990:58;37082:11;37077:2;37069:6;37065:15;37058:36;36873:228;:::o;37107:366::-;37249:3;37270:67;37334:2;37329:3;37270:67;:::i;:::-;37263:74;;37346:93;37435:3;37346:93;:::i;:::-;37464:2;37459:3;37455:12;37448:19;;37107:366;;;:::o;37479:419::-;37645:4;37683:2;37672:9;37668:18;37660:26;;37732:9;37726:4;37722:20;37718:1;37707:9;37703:17;37696:47;37760:131;37886:4;37760:131;:::i;:::-;37752:139;;37479:419;;;:::o;37904:236::-;38044:34;38040:1;38032:6;38028:14;38021:58;38113:19;38108:2;38100:6;38096:15;38089:44;37904:236;:::o;38146:366::-;38288:3;38309:67;38373:2;38368:3;38309:67;:::i;:::-;38302:74;;38385:93;38474:3;38385:93;:::i;:::-;38503:2;38498:3;38494:12;38487:19;;38146:366;;;:::o;38518:419::-;38684:4;38722:2;38711:9;38707:18;38699:26;;38771:9;38765:4;38761:20;38757:1;38746:9;38742:17;38735:47;38799:131;38925:4;38799:131;:::i;:::-;38791:139;;38518:419;;;:::o;38943:245::-;39083:34;39079:1;39071:6;39067:14;39060:58;39152:28;39147:2;39139:6;39135:15;39128:53;38943:245;:::o;39194:366::-;39336:3;39357:67;39421:2;39416:3;39357:67;:::i;:::-;39350:74;;39433:93;39522:3;39433:93;:::i;:::-;39551:2;39546:3;39542:12;39535:19;;39194:366;;;:::o;39566:419::-;39732:4;39770:2;39759:9;39755:18;39747:26;;39819:9;39813:4;39809:20;39805:1;39794:9;39790:17;39783:47;39847:131;39973:4;39847:131;:::i;:::-;39839:139;;39566:419;;;:::o;39991:229::-;40131:34;40127:1;40119:6;40115:14;40108:58;40200:12;40195:2;40187:6;40183:15;40176:37;39991:229;:::o;40226:366::-;40368:3;40389:67;40453:2;40448:3;40389:67;:::i;:::-;40382:74;;40465:93;40554:3;40465:93;:::i;:::-;40583:2;40578:3;40574:12;40567:19;;40226:366;;;:::o;40598:419::-;40764:4;40802:2;40791:9;40787:18;40779:26;;40851:9;40845:4;40841:20;40837:1;40826:9;40822:17;40815:47;40879:131;41005:4;40879:131;:::i;:::-;40871:139;;40598:419;;;:::o;41023:348::-;41063:7;41086:20;41104:1;41086:20;:::i;:::-;41081:25;;41120:20;41138:1;41120:20;:::i;:::-;41115:25;;41308:1;41240:66;41236:74;41233:1;41230:81;41225:1;41218:9;41211:17;41207:105;41204:131;;;41315:18;;:::i;:::-;41204:131;41363:1;41360;41356:9;41345:20;;41023:348;;;;:::o;41377:180::-;41425:77;41422:1;41415:88;41522:4;41519:1;41512:15;41546:4;41543:1;41536:15;41563:114;41630:6;41664:5;41658:12;41648:22;;41563:114;;;:::o;41683:184::-;41782:11;41816:6;41811:3;41804:19;41856:4;41851:3;41847:14;41832:29;;41683:184;;;;:::o;41873:132::-;41940:4;41963:3;41955:11;;41993:4;41988:3;41984:14;41976:22;;41873:132;;;:::o;42011:108::-;42088:24;42106:5;42088:24;:::i;:::-;42083:3;42076:37;42011:108;;:::o;42125:179::-;42194:10;42215:46;42257:3;42249:6;42215:46;:::i;:::-;42293:4;42288:3;42284:14;42270:28;;42125:179;;;;:::o;42310:113::-;42380:4;42412;42407:3;42403:14;42395:22;;42310:113;;;:::o;42459:732::-;42578:3;42607:54;42655:5;42607:54;:::i;:::-;42677:86;42756:6;42751:3;42677:86;:::i;:::-;42670:93;;42787:56;42837:5;42787:56;:::i;:::-;42866:7;42897:1;42882:284;42907:6;42904:1;42901:13;42882:284;;;42983:6;42977:13;43010:63;43069:3;43054:13;43010:63;:::i;:::-;43003:70;;43096:60;43149:6;43096:60;:::i;:::-;43086:70;;42942:224;42929:1;42926;42922:9;42917:14;;42882:284;;;42886:14;43182:3;43175:10;;42583:608;;;42459:732;;;;:::o;43197:831::-;43460:4;43498:3;43487:9;43483:19;43475:27;;43512:71;43580:1;43569:9;43565:17;43556:6;43512:71;:::i;:::-;43593:80;43669:2;43658:9;43654:18;43645:6;43593:80;:::i;:::-;43720:9;43714:4;43710:20;43705:2;43694:9;43690:18;43683:48;43748:108;43851:4;43842:6;43748:108;:::i;:::-;43740:116;;43866:72;43934:2;43923:9;43919:18;43910:6;43866:72;:::i;:::-;43948:73;44016:3;44005:9;44001:19;43992:6;43948:73;:::i;:::-;43197:831;;;;;;;;:::o

Swarm Source

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