Token IMPACTXPRIME

 

Overview [ERC-20]

Max Total Supply:
1,000,000,000 IXP

Holders:
2,338

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IMPACTXPRIMEToken

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-23
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.16;

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

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

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

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

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

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

	event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

	function WETH() external pure returns (address);

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

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

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

library SafeMath {

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

		return c;
	}

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

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

		return c;
	}

	function mul(uint256 a, uint256 b) internal pure returns (uint256) {
		// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
		// benefit is lost if 'b' is also tested.
		// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
		if (a == 0) {
			return 0;
		}

		uint256 c = a * b;
		require(c / a == b, "SafeMath: multiplication overflow");

		return c;
	}

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

	function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b > 0, errorMessage);
		uint256 c = a / b;
		// assert(a == b * c + a % b); // There is no case in which this doesn't hold

		return c;
	}

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

	function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
		require(b != 0, errorMessage);
		return a % b;
	}
}

library Address {
	function isContract(address account) internal view returns (bool) {
		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

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

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

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

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

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

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

	function functionStaticCall(address target, bytes memory data)
	internal
	view
	returns (bytes memory)
	{
		return
		functionStaticCall(
			target,
			data,
			"Address: low-level static call failed"
		);
	}

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

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

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

	function _verifyCallResult(
		bool success,
		bytes memory returndata,
		string memory errorMessage
	) private pure returns (bytes memory) {
		if (success) {
			return returndata;
		} else {
			if (returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			} else {
				revert(errorMessage);
			}
		}
	}
}

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

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

contract Ownable is Context {
	address private _owner;

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

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

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

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

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

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

contract IMPACTXPRIMEToken is IERC20, Ownable {
	using Address for address;
	using SafeMath for uint256;

	IRouter public uniswapV2Router;
	address public immutable uniswapV2Pair;

	string private constant _name =  "IMPACTXPRIME";
	string private constant _symbol = "IXP";
	uint8 private constant _decimals = 18;

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

	uint256 private constant MAX = ~uint256(0);
	uint256 private constant _tTotal = 1000000000 * 10**18;
	uint256 private _rTotal = (MAX - (MAX % _tTotal));
	uint256 private _tFeeTotal;

	bool public isTradingEnabled;

	// max wallet is 2.0% of _tTotal
	uint256 public maxWalletAmount = _tTotal * 200 / 10000;

    // max buy and sell tx is 1.0% of _tTotal
	uint256 public maxTxAmount = _tTotal * 100 / 10000;

	bool private _swapping;
	uint256 public minimumTokensBeforeSwap = _tTotal * 25 / 100000;

    address public liquidityWallet;
	address public marketingWallet;
	address public buyBackWallet;
    address public gamingWallet;

	struct CustomTaxPeriod {
		bytes23 periodName;
		uint8 blocksInPeriod;
		uint256 timeInPeriod;
		uint8 liquidityFeeOnBuy;
		uint8 liquidityFeeOnSell;
		uint8 marketingFeeOnBuy;
		uint8 marketingFeeOnSell;
		uint8 buyBackFeeOnBuy;
		uint8 buyBackFeeOnSell;
        uint8 gamingFeeOnBuy;
        uint8 gamingFeeOnSell;
		uint8 holdersFeeOnBuy;
		uint8 holdersFeeOnSell;
	}

	// Base taxes
	CustomTaxPeriod private _base = CustomTaxPeriod('base',0,0,6,8,0,0,0,0,0,0,0,0);

	uint256 public launchTokens;
	uint256 private _launchStartTimestamp;
	uint256 private _launchBlockNumber;
	bool public _launchTokensClaimed;
	mapping (address => bool) private _isBlocked;
	mapping (address => bool) private _isExcludedFromFee;
	mapping (address => bool) private _isExcludedFromMaxTransactionLimit;
	mapping (address => bool) private _isExcludedFromMaxWalletLimit;
	mapping (address => bool) private _isAllowedToTradeWhenDisabled;
	mapping (address => bool) private _isExcludedFromDividends;
    mapping (address => bool) private _feeOnSelectedWalletTransfers;
	address[] private _excludedFromDividends;
	mapping (address => bool) public automatedMarketMakerPairs;

	uint8 private _liquidityFee;
	uint8 private _marketingFee;
	uint8 private _buyBackFee;
    uint8 private _gamingFee;
	uint8 private _holdersFee;
	uint8 private _totalFee;

	event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value);
	event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress);
	event BlockedAccountChange(address indexed holder, bool indexed status);
	event WalletChange(string indexed walletIdentifier, address indexed newWallet, address indexed oldWallet);
	event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 buyBackFee, uint8 gamingFee, uint8 holdersFee);
	event CustomTaxPeriodChange(uint8 indexed newValue, uint8 indexed oldValue, string indexed taxType, bytes23 period);
    event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue);
	event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue);
	event ExcludeFromFeesChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxTransferChange(address indexed account, bool isExcluded);
	event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded);
	event ExcludeFromDividendsChange(address indexed account, bool isExcluded);
	event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity);
    event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue);
	event ClaimOverflow(address tokenAddress, uint256 amount);
	event TradingStatusChange(bool indexed newValue, bool indexed oldValue);
	event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded);

	constructor() {
		liquidityWallet = owner();
        marketingWallet = owner();
		buyBackWallet = owner();
        gamingWallet = owner();

		IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
		address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair(
			address(this),
			_uniswapV2Router.WETH()
		);
		uniswapV2Router = _uniswapV2Router;
		uniswapV2Pair = _uniswapV2Pair;
		_setAutomatedMarketMakerPair(_uniswapV2Pair, true);

		_isExcludedFromFee[owner()] = true;
		_isExcludedFromFee[address(this)] = true;

		excludeFromDividends(address(0), true);
		excludeFromDividends(address(_uniswapV2Router), true);
		excludeFromDividends(address(_uniswapV2Pair), true);

		_isAllowedToTradeWhenDisabled[owner()] = true;

		_isExcludedFromMaxTransactionLimit[address(this)] = true;
		_isExcludedFromMaxTransactionLimit[owner()] = true;

		_isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
		_isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
		_isExcludedFromMaxWalletLimit[address(this)] = true;
		_isExcludedFromMaxWalletLimit[owner()] = true;

		_rOwned[owner()] = _rTotal;
		emit Transfer(address(0), owner(), _tTotal);
	}

	receive() external payable {}

	// Setters
	function transfer(address recipient, uint256 amount) external override returns (bool) {
		_transfer(_msgSender(), recipient, amount);
		return true;
	}
	function approve(address spender, uint256 amount) public override returns (bool) {
		_approve(_msgSender(), spender, amount);
		return true;
	}
	function transferFrom( address sender,address recipient,uint256 amount) external override returns (bool) {
		_transfer(sender, recipient, amount);
		_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount,"ERC20: transfer amount exceeds allowance"));
		return true;
	}
	function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool){
		_approve(_msgSender(),spender,_allowances[_msgSender()][spender].add(addedValue));
		return true;
	}
	function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
		_approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero"));
		return true;
	}
	function _approve(address owner,address spender,uint256 amount) private {
		require(owner != address(0), "ERC20: approve from the zero address");
		require(spender != address(0), "ERC20: approve to the zero address");
		_allowances[owner][spender] = amount;
		emit Approval(owner, spender, amount);
	}
	function activateTrading() external onlyOwner {
		isTradingEnabled = true;
        if (_launchStartTimestamp == 0) {
            _launchStartTimestamp = block.timestamp;
            _launchBlockNumber = block.number;
        }
		emit TradingStatusChange(true, false);
	}
	function deactivateTrading() external onlyOwner {
		isTradingEnabled = false;
		emit TradingStatusChange(false, true);
	}
	function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner {
		_isAllowedToTradeWhenDisabled[account] = allowed;
		emit AllowedWhenTradingDisabledChange(account, allowed);
	}
    function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner {
		require(_feeOnSelectedWalletTransfers[account] != value, "ImpactXP: The selected wallet is already set to the value");
		_feeOnSelectedWalletTransfers[account] = value;
		emit FeeOnSelectedWalletTransfersChange(account, value);
	}
	function _setAutomatedMarketMakerPair(address pair, bool value) private {
		require(automatedMarketMakerPairs[pair] != value, "ImpactXP: Automated market maker pair is already set to that value");
		automatedMarketMakerPairs[pair] = value;
		emit AutomatedMarketMakerPairChange(pair, value);
	}
	function blockAccount(address account) external onlyOwner {
		require(!_isBlocked[account], "ImpactXP: Account is already blocked");
		if (_launchStartTimestamp > 0) {
			require((block.timestamp - _launchStartTimestamp) < 172800, "ImpactXP: Time to block accounts has expired");
		}
		_isBlocked[account] = true;
		emit BlockedAccountChange(account, true);
	}
	function unblockAccount(address account) external onlyOwner {
		require(_isBlocked[account], "ImpactXP: Account is not blcoked");
		_isBlocked[account] = false;
		emit BlockedAccountChange(account, false);
	}
	function excludeFromFees(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromFee[account] != excluded, "ImpactXP: Account is already the value of 'excluded'");
		_isExcludedFromFee[account] = excluded;
		emit ExcludeFromFeesChange(account, excluded);
	}
	function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxTransactionLimit[account] != excluded, "ImpactXP: Account is already the value of 'excluded'");
		_isExcludedFromMaxTransactionLimit[account] = excluded;
		emit ExcludeFromMaxTransferChange(account, excluded);
	}
	function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner {
		require(_isExcludedFromMaxWalletLimit[account] != excluded, "ImpactXP: Account is already the value of 'excluded'");
		_isExcludedFromMaxWalletLimit[account] = excluded;
		emit ExcludeFromMaxWalletChange(account, excluded);
	}
	function excludeFromDividends(address account, bool excluded) public onlyOwner {
		require(_isExcludedFromDividends[account] != excluded, "ImpactXP: Account is already the value of 'excluded'");
		if(excluded) {
			if(_rOwned[account] > 0) {
				_tOwned[account] = tokenFromReflection(_rOwned[account]);
			}
			_isExcludedFromDividends[account] = excluded;
			_excludedFromDividends.push(account);
		} else {
			for (uint256 i = 0; i < _excludedFromDividends.length; i++) {
				if (_excludedFromDividends[i] == account) {
					_excludedFromDividends[i] = _excludedFromDividends[_excludedFromDividends.length - 1];
					_tOwned[account] = 0;
					_isExcludedFromDividends[account] = false;
					_excludedFromDividends.pop();
					break;
				}
			}
		}
		emit ExcludeFromDividendsChange(account, excluded);
	}
	function setWallets(address newLiquidityWallet, address newMarketingWallet, address newBuyBackWallet, address newGamingWallet) external onlyOwner {
		if(liquidityWallet != newLiquidityWallet) {
			require(newLiquidityWallet != address(0), "ImpactXP: The liquidityWallet cannot be 0");
			emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet);
			liquidityWallet = newLiquidityWallet;
		}
		if(marketingWallet != newMarketingWallet) {
			require(newMarketingWallet != address(0), "ImpactXP: The marketingWallet cannot be 0");
			emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet);
			marketingWallet = newMarketingWallet;
		}
		if(buyBackWallet != newBuyBackWallet) {
			require(newBuyBackWallet != address(0), "ImpactXP: The buyBackWallet cannot be 0");
			emit WalletChange('buyBackWallet', newBuyBackWallet, buyBackWallet);
			buyBackWallet = newBuyBackWallet;
		}
        if(gamingWallet != newGamingWallet) {
			require(newGamingWallet != address(0), "ImpactXP: The gamingWallet cannot be 0");
			emit WalletChange('gamingWallet', newGamingWallet, gamingWallet);
			gamingWallet = newGamingWallet;
		}
	}
	function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _buyBackFeeOnBuy, uint8 _gamingFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner {
		_setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _gamingFeeOnBuy, _holdersFeeOnBuy);
		emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _buyBackFeeOnBuy, _gamingFeeOnBuy, _holdersFeeOnBuy);
	}
	function setBaseFeesOnSell(uint8 _liquidityFeeOnSell,uint8 _marketingFeeOnSell, uint8 _buyBackFeeOnSell, uint8 _gamingFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner {
		_setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _gamingFeeOnSell, _holdersFeeOnSell);
		emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _buyBackFeeOnSell, _gamingFeeOnSell, _holdersFeeOnSell);
	}
	function setUniswapRouter(address newAddress) external onlyOwner {
		require(newAddress != address(uniswapV2Router), "ImpactXP: The router already has that address");
		emit UniswapV2RouterChange(newAddress, address(uniswapV2Router));
		uniswapV2Router = IRouter(newAddress);
	}
	function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxTxAmount, "ImpactXP: Cannot update maxTxAmount to same value");
		emit MaxTransactionAmountChange(newValue, maxTxAmount);
		maxTxAmount = newValue;
	}
	function setMaxWalletAmount(uint256 newValue) external onlyOwner {
		require(newValue != maxWalletAmount, "ImpactXP: Cannot update maxWalletAmount to same value");
		emit MaxWalletAmountChange(newValue, maxWalletAmount);
		maxWalletAmount = newValue;
	}
	function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
		require(newValue != minimumTokensBeforeSwap, "ImpactXP: Cannot update minimumTokensBeforeSwap to same value");
		emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
		minimumTokensBeforeSwap = newValue;
	}
	function claimLaunchTokens() external onlyOwner {
		require(_launchStartTimestamp > 0, "ImpactXP: Launch must have occurred");
		require(!_launchTokensClaimed, "ImpactXP: Launch tokens have already been claimed");
		require(block.number - _launchBlockNumber > 5, "ImpactXP: Only claim launch tokens after launch");
		uint256 tokenBalance = balanceOf(address(this));
		_launchTokensClaimed = true;
		require(launchTokens <= tokenBalance, "ImpactXP: A swap and liquify has already occurred");
		uint256 amount = launchTokens;
		launchTokens = 0;
		(bool success) = IERC20(address(this)).transfer(owner(), amount);
		if (success){
			emit ClaimOverflow(address(this), amount);
		}
	}
	function claimETHOverflow(uint256 amount) external onlyOwner {
		require(amount <= address(this).balance, "ImpactXP: Cannot send more than contract balance");
		(bool success,) = address(owner()).call{value : amount}("");
		if (success){
			emit ClaimOverflow(uniswapV2Router.WETH(), amount);
		}
	}

	// Getters
	function name() external pure returns (string memory) {
		return _name;
	}
	function symbol() external pure returns (string memory) {
		return _symbol;
	}
	function decimals() external view virtual returns (uint8) {
		return _decimals;
	}
	function totalSupply() external pure override returns (uint256) {
		return _tTotal;
	}
	function balanceOf(address account) public view override returns (uint256) {
		if (_isExcludedFromDividends[account]) return _tOwned[account];
		return tokenFromReflection(_rOwned[account]);
	}
	function totalFees() external view returns (uint256) {
		return _tFeeTotal;
	}
	function allowance(address owner, address spender) external view override returns (uint256) {
		return _allowances[owner][spender];
	}
	function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.buyBackFeeOnBuy, _base.gamingFeeOnBuy, _base.holdersFeeOnBuy);
	}
	function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){
		return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.buyBackFeeOnSell, _base.gamingFeeOnSell, _base.holdersFeeOnSell);
	}
	function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
		require(rAmount <= _rTotal, "ImpactXP: Amount must be less than total reflections");
		uint256 currentRate =  _getRate();
		return rAmount / currentRate;
	}
	function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) {
		require(tAmount <= _tTotal, "ImpactXP: Amount must be less than supply");
		uint256 currentRate = _getRate();
		uint256 rAmount  = tAmount * currentRate;
		if (!deductTransferFee) {
			return rAmount;
		}
		else {
			uint256 rTotalFee  = tAmount * _totalFee / 100 * currentRate;
			uint256 rTransferAmount = rAmount - rTotalFee;
			return rTransferAmount;
		}
	}

	// Main
	function _transfer(
	address from,
	address to,
	uint256 amount
	) internal {
		require(from != address(0), "ERC20: transfer from the zero address");
		require(to != address(0), "ERC20: transfer to the zero address");
		require(amount > 0, "ImpactXP: Transfer amount must be greater than zero");
		require(amount <= balanceOf(from), "ImpactXP: Cannot transfer more than balance");

		if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) {
			require(isTradingEnabled, "ImpactXP: Trading is currently disabled.");
			require(!_isBlocked[to], "ImpactXP: Account is blocked");
			require(!_isBlocked[from], "ImpactXP: Account is blocked");
			if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) {
				require(amount <= maxTxAmount, "ImpactXP: Buy amount exceeds the maxTxBuyAmount.");
			}
			if (!_isExcludedFromMaxWalletLimit[to]) {
				require((balanceOf(to) + amount) <= maxWalletAmount, "ImpactXP: Expected wallet amount exceeds the maxWalletAmount.");
			}
		}

		_adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], to, from);
		bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

		if (
			isTradingEnabled &&
			canSwap &&
			!_swapping &&
			_totalFee > 0 &&
			automatedMarketMakerPairs[to]
		) {
			_swapping = true;
			_swapAndLiquify();
			_swapping = false;
		}

		bool takeFee = !_swapping && isTradingEnabled;

		if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
			takeFee = false;
		}

		_tokenTransfer(from, to, amount, takeFee);

	}
	function _tokenTransfer(address sender,address recipient, uint256 tAmount, bool takeFee) private {
		(uint256 tTransferAmount,uint256 tFee, uint256 tOther) = _getTValues(tAmount, takeFee);
		(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 rOther) = _getRValues(tAmount, tFee, tOther, _getRate());

		if (_isExcludedFromDividends[sender]) {
			_tOwned[sender] = _tOwned[sender] - tAmount;
		}
		if (_isExcludedFromDividends[recipient]) {
			_tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
		}
		_rOwned[sender] = _rOwned[sender] - rAmount;
		_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
		_reflectFee(rFee, tFee, rOther, tOther);
		emit Transfer(sender, recipient, tTransferAmount);
	}
	function _reflectFee(uint256 rFee, uint256 tFee, uint256 rOther, uint256 tOther) private {
		_rTotal -= rFee;
		_tFeeTotal += tFee;

		if (_launchStartTimestamp > 0 && (block.number - _launchBlockNumber <= 5)) {
			launchTokens += tOther;
		}

        if (_isExcludedFromDividends[address(this)]) {
			_tOwned[address(this)] += tOther;
		}
		_rOwned[address(this)] += rOther;
	}
	function _getTValues(uint256 tAmount, bool takeFee) private view returns (uint256,uint256,uint256){
		if (!takeFee) {
			return (tAmount, 0, 0);
		}
		else {
			uint256 tFee = tAmount * _holdersFee / 100;
			uint256 tOther = tAmount * (_liquidityFee + _marketingFee + _buyBackFee + _gamingFee) / 100;
			uint256 tTransferAmount = tAmount - (tFee + tOther);
			return (tTransferAmount, tFee, tOther);
		}
	}
	function _getRValues(
		uint256 tAmount,
		uint256 tFee,
		uint256 tOther,
		uint256 currentRate
		) private pure returns ( uint256, uint256, uint256, uint256) {
		uint256 rAmount = tAmount * currentRate;
		uint256 rFee = tFee * currentRate;
		uint256 rOther = tOther * currentRate;
		uint256 rTransferAmount = rAmount - (rFee + rOther);
		return (rAmount, rTransferAmount, rFee, rOther);
	}
	function _getRate() private view returns (uint256) {
		(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
		return rSupply.div(tSupply);
	}
	function _getCurrentSupply() private view returns (uint256, uint256) {
		uint256 rSupply = _rTotal;
		uint256 tSupply = _tTotal;
		for (uint256 i = 0; i < _excludedFromDividends.length; i++) {
			if (
				_rOwned[_excludedFromDividends[i]] > rSupply ||
				_tOwned[_excludedFromDividends[i]] > tSupply
			) return (_rTotal, _tTotal);
			rSupply = rSupply - _rOwned[_excludedFromDividends[i]];
			tSupply = tSupply - _tOwned[_excludedFromDividends[i]];
		}
		if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
		return (rSupply, tSupply);
	}
	function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp, address to, address from) private {
		_liquidityFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _gamingFee = 0;
        _holdersFee = 0;

        if (isBuyFromLp) {
			if (_launchStartTimestamp > 0 && (block.number - _launchBlockNumber <= 5)) {
				_liquidityFee = 100;
			}
			else {
                _liquidityFee = _base.liquidityFeeOnBuy;
                _marketingFee = _base.marketingFeeOnBuy;
                _buyBackFee = _base.buyBackFeeOnBuy;
                _gamingFee = _base.gamingFeeOnBuy;
                _holdersFee = _base.holdersFeeOnBuy;
            }
		}
		if (isSelltoLp) {
			_liquidityFee = _base.liquidityFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
            _gamingFee = _base.gamingFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;
		}
		if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) {
			_liquidityFee = _base.liquidityFeeOnSell;
			_marketingFee = _base.marketingFeeOnSell;
			_buyBackFee = _base.buyBackFeeOnSell;
            _gamingFee = _base.gamingFeeOnSell;
			_holdersFee = _base.holdersFeeOnSell;
		}
		_totalFee = _liquidityFee + _marketingFee + _buyBackFee + _gamingFee + _holdersFee;
	}
	function _setCustomSellTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnSell,
		uint8 _marketingFeeOnSell,
		uint8 _buyBackFeeOnSell,
        uint8 _gamingFeeOnSell,
		uint8 _holdersFeeOnSell
		) private {
        require((_liquidityFeeOnSell+_marketingFeeOnSell+_buyBackFeeOnSell+_gamingFeeOnSell+_holdersFeeOnSell) <= 8, "ImpactXP: Sell tax must be less than 8%");

        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
			emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName);
			map.liquidityFeeOnSell = _liquidityFeeOnSell;
		}
		if (map.marketingFeeOnSell != _marketingFeeOnSell) {
			emit CustomTaxPeriodChange(_marketingFeeOnSell, map.marketingFeeOnSell, 'marketingFeeOnSell', map.periodName);
			map.marketingFeeOnSell = _marketingFeeOnSell;
		}
		if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
			emit CustomTaxPeriodChange(_buyBackFeeOnSell, map.buyBackFeeOnSell, 'buyBackFeeOnSell', map.periodName);
			map.buyBackFeeOnSell = _buyBackFeeOnSell;
		}
        if (map.gamingFeeOnSell != _gamingFeeOnSell) {
			emit CustomTaxPeriodChange(_gamingFeeOnSell, map.gamingFeeOnSell, 'gamingFeeOnSell', map.periodName);
			map.gamingFeeOnSell = _gamingFeeOnSell;
		}
		if (map.holdersFeeOnSell != _holdersFeeOnSell) {
			emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName);
			map.holdersFeeOnSell = _holdersFeeOnSell;
		}
	}
	function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map,
		uint8 _liquidityFeeOnBuy,
		uint8 _marketingFeeOnBuy,
		uint8 _buyBackFeeOnBuy,
        uint8 _gamingFeeOnBuy,
		uint8 _holdersFeeOnBuy
		) private {
        require((_liquidityFeeOnBuy+_marketingFeeOnBuy+_buyBackFeeOnBuy+_gamingFeeOnBuy+_holdersFeeOnBuy) <= 6, "ImpactXP: Buy tax must be less than 6%");

		if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
			emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName);
			map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
		}
		if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
			emit CustomTaxPeriodChange(_marketingFeeOnBuy, map.marketingFeeOnBuy, 'marketingFeeOnBuy', map.periodName);
			map.marketingFeeOnBuy = _marketingFeeOnBuy;
		}
		if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
			emit CustomTaxPeriodChange(_buyBackFeeOnBuy, map.buyBackFeeOnBuy, 'buyBackFeeOnBuy', map.periodName);
			map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
		}
        if (map.gamingFeeOnBuy != _gamingFeeOnBuy) {
			emit CustomTaxPeriodChange(_gamingFeeOnBuy, map.gamingFeeOnBuy, 'gamingFeeOnBuy', map.periodName);
			map.gamingFeeOnBuy = _gamingFeeOnBuy;
		}
		if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
			emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName);
			map.holdersFeeOnBuy = _holdersFeeOnBuy;
		}
	}
	function _swapAndLiquify() private {
		uint256 contractBalance = balanceOf(address(this));
		uint256 initialEthBalance = address(this).balance;

		uint8 totalFeePrior = _totalFee;
		uint8 liquidityFeePrior = _liquidityFee;
		uint8 marketingFeePrior = _marketingFee;
		uint8 buyBackFeePrior  = _buyBackFee;
        uint8 gamingFeePrior = _gamingFee;
		uint8 holdersFeePrior = _holdersFee;

		uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2;
		uint256 amountToSwap = contractBalance - amountToLiquify;

		_swapTokensForEth(amountToSwap);

		uint256 ethBalanceAfterSwap = address(this).balance - initialEthBalance;
		uint256 totalEthFee = totalFeePrior - (liquidityFeePrior / 2) - (holdersFeePrior);
		uint256 amountEthLiquidity = ethBalanceAfterSwap * liquidityFeePrior / totalEthFee / 2;
		uint256 amountEthMarketing = ethBalanceAfterSwap * marketingFeePrior / totalEthFee;
        uint256 amountEthGaming = ethBalanceAfterSwap * gamingFeePrior / totalEthFee;
		uint256 amountEthBuyBack = ethBalanceAfterSwap - (amountEthLiquidity + amountEthMarketing + amountEthGaming);

		payable(marketingWallet).transfer(amountEthMarketing);
		payable(buyBackWallet).transfer(amountEthBuyBack);
        payable(gamingWallet).transfer(amountEthGaming);

		if (amountToLiquify > 0) {
			_addLiquidity(amountToLiquify, amountEthLiquidity);
			emit SwapAndLiquify(amountToSwap, amountEthLiquidity, amountToLiquify);
		}

		_totalFee = totalFeePrior;
		_liquidityFee = liquidityFeePrior;
		_marketingFee = marketingFeePrior;
		_buyBackFee = buyBackFeePrior;
        _gamingFee = gamingFeePrior;
		_holdersFee = holdersFeePrior;
	}
	function _swapTokensForEth(uint256 tokenAmount) private {
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = uniswapV2Router.WETH();
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
			tokenAmount,
			0, // accept any amount of ETH
			path,
			address(this),
			block.timestamp
		);
	}
	function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
		_approve(address(this), address(uniswapV2Router), tokenAmount);
		uniswapV2Router.addLiquidityETH{value: ethAmount}(
			address(this),
			tokenAmount,
			0, // slippage is unavoidable
			0, // slippage is unavoidable
			liquidityWallet,
			block.timestamp
		);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimOverflow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"newValue","type":"uint8"},{"indexed":true,"internalType":"uint8","name":"oldValue","type":"uint8"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"CustomTaxPeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxWalletChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"gamingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"newValue","type":"bool"}],"name":"FeeOnSelectedWalletTransfersChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"walletIdentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"WalletChange","type":"event"},{"inputs":[],"name":"_launchTokensClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimETHOverflow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimLaunchTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gamingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_gamingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_gamingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeOnSelectedWalletTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newBuyBackWallet","type":"address"},{"internalType":"address","name":"newGamingWallet","type":"address"}],"name":"setWallets","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526200001e6b033b2e3c9fd0803ce800000060001962000d2e565b6200002c9060001962000d5b565b6005556127106200004b6b033b2e3c9fd0803ce800000060c862000d71565b62000057919062000d93565b600855612710620000766b033b2e3c9fd0803ce8000000606462000d71565b62000082919062000d93565b600955620186a0620000a26b033b2e3c9fd0803ce8000000601962000d71565b620000ae919062000d93565b600b55604080516101a081018252636261736560e01b8152600060208201819052918101829052600660608201526008608082015260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018001819052601080546001600160c01b031916636261736560981b179055601155601280546001600160501b0319166108061790553480156200015c57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008054600c80546001600160a01b039092166001600160a01b03199283168117909155600d8054831682179055600e8054831682179055600f80549092161790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025b919062000daa565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cf919062000daa565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200031d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000343919062000daa565b600180546001600160a01b0319166001600160a01b03858116919091178255821660805290915062000377908290620005ba565b600160186000620003906000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526018909252812080549092166001908117909255620003de91620006b5565b620003eb826001620006b5565b620003f8816001620006b5565b6001601b6000620004116000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260199283905290812080549093166001908117909355620004696000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790558582168152601a9384905282812080548616600190811790915580549092168152828120805486168317905530815291822080549094168117909355620004e66000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600554906002906200052b6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005586000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b033b2e3c9fd0803ce8000000604051620005aa91815260200190565b60405180910390a3505062000e6d565b6001600160a01b0382166000908152601f602052604090205481151560ff909116151503620006615760405162461bcd60e51b815260206004820152604260248201527f496d7061637458503a204175746f6d61746564206d61726b6574206d616b657260448201527f207061697220697320616c72656164792073657420746f20746861742076616c606482015261756560f01b608482015260a4015b60405180910390fd5b6001600160a01b0382166000818152601f6020526040808220805460ff191685151590811790915590519092917fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a91a35050565b6000546001600160a01b03163314620007115760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000658565b6001600160a01b0382166000908152601c602052604090205481151560ff909116151503620007a95760405162461bcd60e51b815260206004820152603460248201527f496d7061637458503a204163636f756e7420697320616c72656164792074686560448201527f2076616c7565206f6620276578636c7564656427000000000000000000000000606482015260840162000658565b801562000876576001600160a01b038216600090815260026020526040902054156200080d576001600160a01b038216600090815260026020526040902054620007f390620009f7565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601c60205260408120805460ff1916841515179055601e805460018101825591527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319169091179055620009ad565b60005b601e54811015620009ab57826001600160a01b0316601e8281548110620008a457620008a462000dd5565b6000918252602090912001546001600160a01b0316036200099657601e8054620008d19060019062000d5b565b81548110620008e457620008e462000dd5565b600091825260209091200154601e80546001600160a01b03909216918390811062000913576200091362000dd5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601c90925220805460ff19169055601e8054806200096e576200096e62000deb565b600082815260209020810160001990810180546001600160a01b0319169055019055620009ab565b80620009a28162000e01565b91505062000879565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051620009eb911515815260200190565b60405180910390a25050565b600060055482111562000a735760405162461bcd60e51b815260206004820152603460248201527f496d7061637458503a20416d6f756e74206d757374206265206c65737320746860448201527f616e20746f74616c207265666c656374696f6e73000000000000000000000000606482015260840162000658565b600062000a7f62000a94565b905062000a8d818462000d93565b9392505050565b6000808062000aa262000ac7565b9150915062000ac0818362000c8960201b6200248e1790919060201c565b9250505090565b60055460009081906b033b2e3c9fd0803ce8000000825b601e5481101562000c42578260026000601e848154811062000b045762000b0462000dd5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000b7357508160036000601e848154811062000b4c5762000b4c62000dd5565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000b93575050600554936b033b2e3c9fd0803ce80000009350915050565b60026000601e838154811062000bad5762000bad62000dd5565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000bde908462000d5b565b925060036000601e838154811062000bfa5762000bfa62000dd5565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000c2b908362000d5b565b91508062000c398162000e01565b91505062000ade565b506b033b2e3c9fd0803ce800000060055462000c5f919062000d93565b82101562000c80575050600554926b033b2e3c9fd0803ce800000092509050565b90939092509050565b600062000cd383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000cdc60201b60201c565b90505b92915050565b6000818362000d005760405162461bcd60e51b815260040162000658919062000e1d565b50600062000d0f848662000d93565b95945050505050565b634e487b7160e01b600052601260045260246000fd5b60008262000d405762000d4062000d18565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000cd65762000cd662000d45565b600081600019048311821515161562000d8e5762000d8e62000d45565b500290565b60008262000da55762000da562000d18565b500490565b60006020828403121562000dbd57600080fd5b81516001600160a01b038116811462000a8d57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820162000e165762000e1662000d45565b5060010190565b600060208083528351808285015260005b8181101562000e4c5785810183015185820160400152820162000e2e565b506000604082860101526040601f19601f8301168501019250505092915050565b60805161463a62000e8960003960006105f6015261463a6000f3fe6080604052600436106102e85760003560e01c806370a0823111610190578063aa4bde28116100dc578063cd43e22811610095578063d46980161161006f578063d46980161461093a578063dd62ed3e1461095a578063f2fde38b146109a0578063fe017535146109c057600080fd5b8063cd43e22814610893578063d2d7ad8314610904578063d32215761461091a57600080fd5b8063aa4bde28146107cd578063aee50b1e146107e3578063b1ba39ea14610803578063b62496f514610823578063bea9849e14610853578063c02466681461087357600080fd5b8063880bcbc11161014957806395d89b411161012357806395d89b41146107415780639fad96831461076d578063a457c2d71461078d578063a9059cbb146107ad57600080fd5b8063880bcbc1146106ed5780638c0b5e221461070d5780638da5cb5b1461072357600080fd5b806370a0823114610638578063715018a61461065857806375f0a8741461066d578063781edb3c1461068d5780637c0a893d146106ad57806383672f3e146106cd57600080fd5b80631e293c101161024f578063313ce567116102085780634549b039116101e25780634549b039146105a457806345a42329146105c457806349bd5a5e146105e45780634d78fdc61461061857600080fd5b8063313ce5671461055357806334cf1fea1461056f578063395093511461058457600080fd5b80631e293c10146104a85780631fcfefcd146104c857806323b872dd146104de57806327a14fc2146104fe5780632cc25d141461051e5780632d8381191461053357600080fd5b80630e631859116102a15780630e631859146103d857806313114a9d1461041057806314fbc5f31461042f5780631694505e1461044957806318160ddd146104695780631cd348c01461048857600080fd5b80630483f7a0146102f4578063064a59d01461031657806306fdde0314610345578063095ea7b314610383578063098df585146103a35780630bd05b69146103c357600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b5061031461030f36600461408c565b610a06565b005b34801561032257600080fd5b506007546103309060ff1681565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5060408051808201909152600c81526b494d50414354585052494d4560a01b60208201525b60405161033c91906140c5565b34801561038f57600080fd5b5061033061039e366004614113565b610cad565b3480156103af57600080fd5b506103146103be36600461413f565b610cc4565b3480156103cf57600080fd5b50610314610e66565b3480156103e457600080fd5b50600f546103f8906001600160a01b031681565b6040516001600160a01b03909116815260200161033c565b34801561041c57600080fd5b506006545b60405190815260200161033c565b34801561043b57600080fd5b506016546103309060ff1681565b34801561045557600080fd5b506001546103f8906001600160a01b031681565b34801561047557600080fd5b506b033b2e3c9fd0803ce8000000610421565b34801561049457600080fd5b50600e546103f8906001600160a01b031681565b3480156104b457600080fd5b506103146104c336600461413f565b610ee0565b3480156104d457600080fd5b5061042160135481565b3480156104ea57600080fd5b506103306104f9366004614158565b610fa8565b34801561050a57600080fd5b5061031461051936600461413f565b611011565b34801561052a57600080fd5b506103146110dd565b34801561053f57600080fd5b5061042161054e36600461413f565b6113a9565b34801561055f57600080fd5b506040516012815260200161033c565b34801561057b57600080fd5b50610314611437565b34801561059057600080fd5b5061033061059f366004614113565b61149b565b3480156105b057600080fd5b506104216105bf366004614199565b6114d1565b3480156105d057600080fd5b506103146105df36600461408c565b6115b6565b3480156105f057600080fd5b506103f87f000000000000000000000000000000000000000000000000000000000000000081565b34801561062457600080fd5b506103146106333660046141be565b6116ce565b34801561064457600080fd5b506104216106533660046141be565b6117ad565b34801561066457600080fd5b5061031461180c565b34801561067957600080fd5b50600d546103f8906001600160a01b031681565b34801561069957600080fd5b506103146106a836600461408c565b611880565b3480156106b957600080fd5b506103146106c83660046141be565b611942565b3480156106d957600080fd5b506103146106e83660046141db565b611aaf565b3480156106f957600080fd5b5061031461070836600461408c565b611e65565b34801561071957600080fd5b5061042160095481565b34801561072f57600080fd5b506000546001600160a01b03166103f8565b34801561074d57600080fd5b5060408051808201909152600381526204958560ec1b6020820152610376565b34801561077957600080fd5b5061031461078836600461424d565b611f27565b34801561079957600080fd5b506103306107a8366004614113565b611fde565b3480156107b957600080fd5b506103306107c8366004614113565b61202d565b3480156107d957600080fd5b5061042160085481565b3480156107ef57600080fd5b506103146107fe36600461413f565b61203a565b34801561080f57600080fd5b5061031461081e36600461424d565b61210e565b34801561082f57600080fd5b5061033061083e3660046141be565b601f6020526000908152604090205460ff1681565b34801561085f57600080fd5b5061031461086e3660046141be565b612165565b34801561087f57600080fd5b5061031461088e36600461408c565b612260565b34801561089f57600080fd5b5060125460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a00161033c565b34801561091057600080fd5b50610421600b5481565b34801561092657600080fd5b5061031461093536600461408c565b612322565b34801561094657600080fd5b50600c546103f8906001600160a01b031681565b34801561096657600080fd5b506104216109753660046142b2565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b3480156109ac57600080fd5b506103146109bb3660046141be565b6123a4565b3480156109cc57600080fd5b5060125460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b909104166108d0565b6000546001600160a01b03163314610a395760405162461bcd60e51b8152600401610a30906142e0565b60405180910390fd5b6001600160a01b0382166000908152601c602052604090205481151560ff909116151503610a795760405162461bcd60e51b8152600401610a3090614315565b8015610b41576001600160a01b03821660009081526002602052604090205415610ad9576001600160a01b038216600090815260026020526040902054610abf906113a9565b6001600160a01b0383166000908152600360205260409020555b6001600160a01b0382166000818152601c60205260408120805460ff1916841515179055601e805460018101825591527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319169091179055610c64565b60005b601e54811015610c6257826001600160a01b0316601e8281548110610b6b57610b6b614369565b6000918252602090912001546001600160a01b031603610c5057601e8054610b9590600190614395565b81548110610ba557610ba5614369565b600091825260209091200154601e80546001600160a01b039092169183908110610bd157610bd1614369565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600382526040808220829055601c90925220805460ff19169055601e805480610c2957610c296143a8565b600082815260209020810160001990810180546001600160a01b0319169055019055610c62565b80610c5a816143be565b915050610b44565b505b816001600160a01b03167fcb9d59a6e9da25dee1a9ddef81481537dfd94e20b1593b58b08193bea9e9baa982604051610ca1911515815260200190565b60405180910390a25050565b6000610cba3384846124d0565b5060015b92915050565b6000546001600160a01b03163314610cee5760405162461bcd60e51b8152600401610a30906142e0565b47811115610d575760405162461bcd60e51b815260206004820152603060248201527f496d7061637458503a2043616e6e6f742073656e64206d6f7265207468616e2060448201526f636f6e74726163742062616c616e636560801b6064820152608401610a30565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610da4576040519150601f19603f3d011682016040523d82523d6000602084013e610da9565b606091505b505090508015610e6257600154604080516315ab88c960e31b815290517fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4091906143d7565b604080516001600160a01b039092168252602082018590520160405180910390a15b5050565b6000546001600160a01b03163314610e905760405162461bcd60e51b8152600401610a30906142e0565b6007805460ff19166001179055601454600003610eb05742601455436015555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610f0a5760405162461bcd60e51b8152600401610a30906142e0565b6009548103610f755760405162461bcd60e51b815260206004820152603160248201527f496d7061637458503a2043616e6e6f7420757064617465206d61785478416d6f604482015270756e7420746f2073616d652076616c756560781b6064820152608401610a30565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610fb58484846125f4565b611007843361100285604051806060016040528060288152602001614598602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190612ba7565b6124d0565b5060019392505050565b6000546001600160a01b0316331461103b5760405162461bcd60e51b8152600401610a30906142e0565b60085481036110aa5760405162461bcd60e51b815260206004820152603560248201527f496d7061637458503a2043616e6e6f7420757064617465206d617857616c6c6560448201527474416d6f756e7420746f2073616d652076616c756560581b6064820152608401610a30565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b031633146111075760405162461bcd60e51b8152600401610a30906142e0565b6000601454116111655760405162461bcd60e51b815260206004820152602360248201527f496d7061637458503a204c61756e6368206d7573742068617665206f636375726044820152621c995960ea1b6064820152608401610a30565b60165460ff16156111d25760405162461bcd60e51b815260206004820152603160248201527f496d7061637458503a204c61756e636820746f6b656e73206861766520616c726044820152701958591e481899595b8818db185a5b5959607a1b6064820152608401610a30565b6005601554436111e29190614395565b116112475760405162461bcd60e51b815260206004820152602f60248201527f496d7061637458503a204f6e6c7920636c61696d206c61756e636820746f6b6560448201526e0dce640c2cce8cae440d8c2eadcc6d608b1b6064820152608401610a30565b6000611252306117ad565b6016805460ff191660011790556013549091508110156112ce5760405162461bcd60e51b815260206004820152603160248201527f496d7061637458503a2041207377617020616e64206c6971756966792068617360448201527008185b1c9958591e481bd8d8dd5c9c9959607a1b6064820152608401610a30565b60138054600091829055903063a9059cbb6112f16000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561133e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136291906143f4565b905080156113a45760408051308152602081018490527fb16273d5dd95f4997020a9e2e429331d472940f09fe08af28db9672639cc251d910160405180910390a15b505050565b600060055482111561141a5760405162461bcd60e51b815260206004820152603460248201527f496d7061637458503a20416d6f756e74206d757374206265206c657373207468604482015273616e20746f74616c207265666c656374696f6e7360601b6064820152608401610a30565b6000611424612be1565b90506114308184614427565b9392505050565b6000546001600160a01b031633146114615760405162461bcd60e51b8152600401610a30906142e0565b6007805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610cba9185906110029086612c04565b60006b033b2e3c9fd0803ce80000008311156115415760405162461bcd60e51b815260206004820152602960248201527f496d7061637458503a20416d6f756e74206d757374206265206c657373207468604482015268616e20737570706c7960b81b6064820152608401610a30565b600061154b612be1565b90506000611559828661443b565b905083611569579150610cbe9050565b602054600090839060649061158890600160281b900460ff168961443b565b6115929190614427565b61159c919061443b565b905060006115aa8284614395565b9450610cbe9350505050565b6000546001600160a01b031633146115e05760405162461bcd60e51b8152600401610a30906142e0565b6001600160a01b0382166000908152601d602052604090205481151560ff9091161515036116765760405162461bcd60e51b815260206004820152603960248201527f496d7061637458503a205468652073656c65637465642077616c6c657420697360448201527f20616c72656164792073657420746f207468652076616c7565000000000000006064820152608401610a30565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527fe70512a569cf898db2e20aa3b4cc3f0dd13377b82a493840d326ab5a196668779101610ca1565b6000546001600160a01b031633146116f85760405162461bcd60e51b8152600401610a30906142e0565b6001600160a01b03811660009081526017602052604090205460ff166117605760405162461bcd60e51b815260206004820181905260248201527f496d7061637458503a204163636f756e74206973206e6f7420626c636f6b65646044820152606401610a30565b6001600160a01b038116600081815260176020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6001600160a01b0381166000908152601c602052604081205460ff16156117ea57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610cbe906113a9565b6000546001600160a01b031633146118365760405162461bcd60e51b8152600401610a30906142e0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118aa5760405162461bcd60e51b8152600401610a30906142e0565b6001600160a01b0382166000908152601a602052604090205481151560ff9091161515036118ea5760405162461bcd60e51b8152600401610a3090614315565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527ff5133f371b17bf21ce0df4ae2c1b6e11ca7c2f27257eb55282edb1ccfd4ecb2e9101610ca1565b6000546001600160a01b0316331461196c5760405162461bcd60e51b8152600401610a30906142e0565b6001600160a01b03811660009081526017602052604090205460ff16156119e15760405162461bcd60e51b8152602060048201526024808201527f496d7061637458503a204163636f756e7420697320616c726561647920626c6f60448201526318dad95960e21b6064820152608401610a30565b60145415611a5d576202a300601454426119fb9190614395565b10611a5d5760405162461bcd60e51b815260206004820152602c60248201527f496d7061637458503a2054696d6520746f20626c6f636b206163636f756e747360448201526b081a185cc8195e1c1a5c995960a21b6064820152608401610a30565b6001600160a01b038116600081815260176020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611ad95760405162461bcd60e51b8152600401610a30906142e0565b600c546001600160a01b03858116911614611bbd576001600160a01b038416611b565760405162461bcd60e51b815260206004820152602960248201527f496d7061637458503a20546865206c697175696469747957616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610a30565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691861690600f016040519081900381209060008051602061457883398151915290600090a4600c80546001600160a01b0319166001600160a01b0386161790555b600d546001600160a01b03848116911614611ca1576001600160a01b038316611c3a5760405162461bcd60e51b815260206004820152602960248201527f496d7061637458503a20546865206d61726b6574696e6757616c6c657420636160448201526806e6e6f7420626520360bc1b6064820152608401610a30565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691851690600f016040519081900381209060008051602061457883398151915290600090a4600d80546001600160a01b0319166001600160a01b0385161790555b600e546001600160a01b03838116911614611d81576001600160a01b038216611d1c5760405162461bcd60e51b815260206004820152602760248201527f496d7061637458503a20546865206275794261636b57616c6c65742063616e6e60448201526606f7420626520360cc1b6064820152608401610a30565b600e546040516c189d5e509858dad5d85b1b195d609a1b81526001600160a01b0391821691841690600d016040519081900381209060008051602061457883398151915290600090a4600e80546001600160a01b0319166001600160a01b0384161790555b600f546001600160a01b03828116911614611e5f576001600160a01b038116611dfb5760405162461bcd60e51b815260206004820152602660248201527f496d7061637458503a205468652067616d696e6757616c6c65742063616e6e6f60448201526507420626520360d41b6064820152608401610a30565b600f546040516b19d85b5a5b99d5d85b1b195d60a21b81526001600160a01b0391821691831690600c016040519081900381209060008051602061457883398151915290600090a4600f80546001600160a01b0319166001600160a01b0383161790555b50505050565b6000546001600160a01b03163314611e8f5760405162461bcd60e51b8152600401610a30906142e0565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503611ecf5760405162461bcd60e51b8152600401610a3090614315565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a409101610ca1565b6000546001600160a01b03163314611f515760405162461bcd60e51b8152600401610a30906142e0565b611f6060108686868686612c63565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b6000610cba3384611002856040518060600160405280602581526020016145e0602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190612ba7565b6000610cba3384846125f4565b6000546001600160a01b031633146120645760405162461bcd60e51b8152600401610a30906142e0565b600b5481036120db5760405162461bcd60e51b815260206004820152603d60248201527f496d7061637458503a2043616e6e6f7420757064617465206d696e696d756d5460448201527f6f6b656e734265666f72655377617020746f2073616d652076616c75650000006064820152608401610a30565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146121385760405162461bcd60e51b8152600401610a30906142e0565b61214760108686868686612fd7565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d01611f79565b6000546001600160a01b0316331461218f5760405162461bcd60e51b8152600401610a30906142e0565b6001546001600160a01b03908116908216036122035760405162461bcd60e51b815260206004820152602d60248201527f496d7061637458503a2054686520726f7574657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610a30565b6001546040516001600160a01b03918216918316907f2afbff3ed601a8723765c7072d8ea8445e08f6f1874afd34a2b747a272c3ebad90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461228a5760405162461bcd60e51b8152600401610a30906142e0565b6001600160a01b03821660009081526018602052604090205481151560ff9091161515036122ca5760405162461bcd60e51b8152600401610a3090614315565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b9101610ca1565b6000546001600160a01b0316331461234c5760405162461bcd60e51b8152600401610a30906142e0565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d3509101610ca1565b6000546001600160a01b031633146123ce5760405162461bcd60e51b8152600401610a30906142e0565b6001600160a01b0381166124335760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a30565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061143083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613368565b6001600160a01b0383166125325760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a30565b6001600160a01b0382166125935760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a30565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166126585760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a30565b6001600160a01b0382166126ba5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a30565b600081116127265760405162461bcd60e51b815260206004820152603360248201527f496d7061637458503a205472616e7366657220616d6f756e74206d7573742062604482015272652067726561746572207468616e207a65726f60681b6064820152608401610a30565b61272f836117ad565b8111156127925760405162461bcd60e51b815260206004820152602b60248201527f496d7061637458503a2043616e6e6f74207472616e73666572206d6f7265207460448201526a68616e2062616c616e636560a81b6064820152608401610a30565b6001600160a01b0383166000908152601b602052604090205460ff161580156127d457506001600160a01b0382166000908152601b602052604090205460ff16155b15612a6b5760075460ff1661283c5760405162461bcd60e51b815260206004820152602860248201527f496d7061637458503a2054726164696e672069732063757272656e746c79206460448201526734b9b0b13632b21760c11b6064820152608401610a30565b6001600160a01b03821660009081526017602052604090205460ff16156128a55760405162461bcd60e51b815260206004820152601c60248201527f496d7061637458503a204163636f756e7420697320626c6f636b6564000000006044820152606401610a30565b6001600160a01b03831660009081526017602052604090205460ff161561290e5760405162461bcd60e51b815260206004820152601c60248201527f496d7061637458503a204163636f756e7420697320626c6f636b6564000000006044820152606401610a30565b6001600160a01b03821660009081526019602052604090205460ff1615801561295057506001600160a01b03831660009081526019602052604090205460ff16155b156129c0576009548111156129c05760405162461bcd60e51b815260206004820152603060248201527f496d7061637458503a2042757920616d6f756e7420657863656564732074686560448201526f1036b0bc2a3c213abca0b6b7bab73a1760811b6064820152608401610a30565b6001600160a01b0382166000908152601a602052604090205460ff16612a6b57600854816129ed846117ad565b6129f7919061445a565b1115612a6b5760405162461bcd60e51b815260206004820152603d60248201527f496d7061637458503a2045787065637465642077616c6c657420616d6f756e7460448201527f206578636565647320746865206d617857616c6c6574416d6f756e742e0000006064820152608401610a30565b6001600160a01b038084166000908152601f6020526040808220549285168252902054612aa09160ff90811691168486613396565b6000600b54612aae306117ad565b600754911115915060ff168015612ac25750805b8015612ad15750600a5460ff16155b8015612ae85750602054600160281b900460ff1615155b8015612b0c57506001600160a01b0383166000908152601f602052604090205460ff165b15612b3157600a805460ff19166001179055612b2661360e565b600a805460ff191690555b600a5460009060ff16158015612b49575060075460ff165b6001600160a01b03861660009081526018602052604090205490915060ff1680612b8b57506001600160a01b03841660009081526018602052604090205460ff165b15612b94575060005b612ba085858584613900565b5050505050565b60008184841115612bcb5760405162461bcd60e51b8152600401610a3091906140c5565b506000612bd88486614395565b95945050505050565b6000806000612bee613ac9565b9092509050612bfd828261248e565b9250505090565b600080612c11838561445a565b9050838110156114305760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a30565b6006818385612c72888a61446d565b612c7c919061446d565b612c86919061446d565b612c90919061446d565b60ff161115612cf05760405162461bcd60e51b815260206004820152602660248201527f496d7061637458503a2042757920746178206d757374206265206c657373207460448201526568616e20362560d01b6064820152608401610a30565b600286015460ff868116911614612d7157604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff91821692918916916000805160206145c083398151915291612d579160481b90614486565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff858116620100009092041614612e0557604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff62010000909204821692918816916000805160206145c083398151915291612de49160481b90614486565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b9092041614612e9c576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b909204821692918716916000805160206145c083398151915291612e789160481b90614486565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b9092041614612f34576040516d67616d696e674665654f6e42757960901b8152600e0160405190819003812060028801548854919260ff600160301b909204821692918616916000805160206145c083398151915291612f0e9160481b90614486565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b9092041614612fcf576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b909204821692918516916000805160206145c083398151915291612fa79160481b90614486565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b6008818385612fe6888a61446d565b612ff0919061446d565b612ffa919061446d565b613004919061446d565b60ff1611156130655760405162461bcd60e51b815260206004820152602760248201527f496d7061637458503a2053656c6c20746178206d757374206265206c657373206044820152667468616e20382560c81b6064820152608401610a30565b600286015460ff86811661010090920416146130f657604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff610100909204821692918916916000805160206145c0833981519152916130d79160481b90614486565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff8581166301000000909204161461318f57604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff6301000000909204821692918816916000805160206145c08339815191529161316c9160481b90614486565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614613228576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b909204821692918716916000805160206145c0833981519152916132039160481b90614486565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b90920416146132c2576040516e19d85b5a5b99d1995953db94d95b1b608a1b8152600f0160405190819003812060028801548854919260ff600160381b909204821692918616916000805160206145c08339815191529161329b9160481b90614486565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b9092041614612fcf576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b909204821692918516916000805160206145c0833981519152916133369160481b90614486565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b600081836133895760405162461bcd60e51b8152600401610a3091906140c5565b506000612bd88486614427565b6020805464ffffffffff1916905583156134555760006014541180156133ca57506005601554436133c79190614395565b11155b156133e1576020805460ff19166064179055613455565b6012546020805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b82156134d0576012546020805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b821580156134dc575083155b801561352257506001600160a01b0381166000908152601d602052604090205460ff168061352257506001600160a01b0382166000908152601d602052604090205460ff165b1561359c576012546020805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60205460ff600160201b8204811691630100000081048216916201000082048116916135d09161010082048116911661446d565b6135da919061446d565b6135e4919061446d565b6135ee919061446d565b602060056101000a81548160ff021916908360ff16021790555050505050565b6000613619306117ad565b602054909150479060ff600160281b820481169181811691610100820481169162010000810482169163010000008204811691600160201b9004166000600287613663888c61443b565b61366d9190614427565b6136779190614427565b90506000613685828b614395565b905061369081613c72565b600061369c8a47614395565b90506000846136ac60028b61449d565b6136b6908c6144bf565b6136c091906144bf565b60ff16905060006002828b60ff16856136d9919061443b565b6136e39190614427565b6136ed9190614427565b90506000826136ff60ff8c168661443b565b6137099190614427565b905060008361371b60ff8b168761443b565b6137259190614427565b9050600081613734848661445a565b61373e919061445a565b6137489087614395565b600d546040519192506001600160a01b03169084156108fc029085906000818181858888f19350505050158015613783573d6000803e3d6000fd5b50600e546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156137be573d6000803e3d6000fd5b50600f546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156137f9573d6000803e3d6000fd5b50871561384c5761380a8885613dc4565b60408051888152602081018690529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b8d602060056101000a81548160ff021916908360ff1602179055508c602060006101000a81548160ff021916908360ff1602179055508b602060016101000a81548160ff021916908360ff1602179055508a602060026101000a81548160ff021916908360ff16021790555089602060036101000a81548160ff021916908360ff16021790555088602060046101000a81548160ff021916908360ff16021790555050505050505050505050505050505050565b600080600061390f8585613e71565b92509250925060008060008061392e898787613929612be1565b613f3b565b6001600160a01b038f166000908152601c60205260409020549397509195509350915060ff1615613997576001600160a01b038b1660009081526003602052604090205461397d908a90614395565b6001600160a01b038c166000908152600360205260409020555b6001600160a01b038a166000908152601c602052604090205460ff16156139f6576001600160a01b038a166000908152600360205260409020546139dc90889061445a565b6001600160a01b038b166000908152600360205260409020555b6001600160a01b038b16600090815260026020526040902054613a1a908590614395565b6001600160a01b03808d1660009081526002602052604080822093909355908c1681522054613a4a90849061445a565b6001600160a01b038b16600090815260026020526040902055613a6f82878388613f93565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef89604051613ab491815260200190565b60405180910390a35050505050505050505050565b60055460009081906b033b2e3c9fd0803ce8000000825b601e54811015613c2e578260026000601e8481548110613b0257613b02614369565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613b6d57508160036000601e8481548110613b4657613b46614369565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613b8c575050600554936b033b2e3c9fd0803ce80000009350915050565b60026000601e8381548110613ba357613ba3614369565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613bd29084614395565b925060036000601e8381548110613beb57613beb614369565b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c1a9083614395565b915080613c26816143be565b915050613ae0565b506b033b2e3c9fd0803ce8000000600554613c499190614427565b821015613c69575050600554926b033b2e3c9fd0803ce800000092509050565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613ca757613ca7614369565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d2491906143d7565b81600181518110613d3757613d37614369565b6001600160a01b039283166020918202929092010152600154613d5d91309116846124d0565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790613d969085906000908690309042906004016144d8565b600060405180830381600087803b158015613db057600080fd5b505af1158015612fcf573d6000803e3d6000fd5b600154613ddc9030906001600160a01b0316846124d0565b600154600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613e4c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ba09190614549565b600080600083613e8957508391506000905080613f34565b602054600090606490613ea690600160201b900460ff168861443b565b613eb09190614427565b60205490915060009060649060ff63010000008204811691620100008104821691613ee39161010081048216911661446d565b613eed919061446d565b613ef7919061446d565b613f049060ff168961443b565b613f0e9190614427565b90506000613f1c828461445a565b613f269089614395565b95509193509150613f349050565b9250925092565b600080808080613f4b868a61443b565b90506000613f59878a61443b565b90506000613f67888a61443b565b90506000613f75828461445a565b613f7f9085614395565b939c939b5091995097509095505050505050565b8360056000828254613fa59190614395565b925050819055508260066000828254613fbe919061445a565b909155505060145415801590613fe25750600560155443613fdf9190614395565b11155b15613fff578060136000828254613ff9919061445a565b90915550505b306000908152601c602052604090205460ff161561403c57306000908152600360205260408120805483929061403690849061445a565b90915550505b306000908152600260205260408120805484929061405b90849061445a565b909155505050505050565b6001600160a01b038116811461407b57600080fd5b50565b801515811461407b57600080fd5b6000806040838503121561409f57600080fd5b82356140aa81614066565b915060208301356140ba8161407e565b809150509250929050565b600060208083528351808285015260005b818110156140f2578581018301518582016040015282016140d6565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561412657600080fd5b823561413181614066565b946020939093013593505050565b60006020828403121561415157600080fd5b5035919050565b60008060006060848603121561416d57600080fd5b833561417881614066565b9250602084013561418881614066565b929592945050506040919091013590565b600080604083850312156141ac57600080fd5b8235915060208301356140ba8161407e565b6000602082840312156141d057600080fd5b813561143081614066565b600080600080608085870312156141f157600080fd5b84356141fc81614066565b9350602085013561420c81614066565b9250604085013561421c81614066565b9150606085013561422c81614066565b939692955090935050565b803560ff8116811461424857600080fd5b919050565b600080600080600060a0868803121561426557600080fd5b61426e86614237565b945061427c60208701614237565b935061428a60408701614237565b925061429860608701614237565b91506142a660808701614237565b90509295509295909350565b600080604083850312156142c557600080fd5b82356142d081614066565b915060208301356140ba81614066565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526034908201527f496d7061637458503a204163636f756e7420697320616c7265616479207468656040820152732076616c7565206f6620276578636c756465642760601b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610cbe57610cbe61437f565b634e487b7160e01b600052603160045260246000fd5b6000600182016143d0576143d061437f565b5060010190565b6000602082840312156143e957600080fd5b815161143081614066565b60006020828403121561440657600080fd5b81516114308161407e565b634e487b7160e01b600052601260045260246000fd5b60008261443657614436614411565b500490565b60008160001904831182151516156144555761445561437f565b500290565b80820180821115610cbe57610cbe61437f565b60ff8181168382160190811115610cbe57610cbe61437f565b68ffffffffffffffffff1991909116815260200190565b600060ff8316806144b0576144b0614411565b8060ff84160491505092915050565b60ff8281168282160390811115610cbe57610cbe61437f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145285784516001600160a01b031683529383019391830191600101614503565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561455e57600080fd5b835192506020840151915060408401519050925092509256fe4af24be54adc5e716fbcaa3fca0ad593e28dff90dffd49487c0a33b1547c6b5245524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365e4c649bdef80a9884d04138447ed68ee6c8a76c0f3f220dfa855dec4ffadc63845524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d6288844bc36225ec4e974b5c1ee84fbe4134ae13d7d3522c6a26677947719c264736f6c63430008100033

Deployed ByteCode Sourcemap

7734:27504:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17262:828;;;;;;;;;;-1:-1:-1;17262:828:0;;;;;:::i;:::-;;:::i;:::-;;8420:28;;;;;;;;;;-1:-1:-1;8420:28:0;;;;;;;;;;;825:14:1;;818:22;800:41;;788:2;773:18;8420:28:0;;;;;;;;22274:76;;;;;;;;;;-1:-1:-1;22340:5:0;;;;;;;;;;;;-1:-1:-1;;;22340:5:0;;;;22274:76;;;;;;;:::i;13268:146::-;;;;;;;;;;-1:-1:-1;13268:146:0;;;;;:::i;:::-;;:::i;21951:305::-;;;;;;;;;;-1:-1:-1;21951:305:0;;;;;:::i;:::-;;:::i;14482:277::-;;;;;;;;;;;;;:::i;8852:27::-;;;;;;;;;;-1:-1:-1;8852:27:0;;;;-1:-1:-1;;;;;8852:27:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;8852:27:0;1910:203:1;22813:80:0;;;;;;;;;;-1:-1:-1;22878:10:0;;22813:80;;;2264:25:1;;;2252:2;2237:18;22813:80:0;2118:177:1;9485:32:0;;;;;;;;;;-1:-1:-1;9485:32:0;;;;;;;;7845:30;;;;;;;;;;-1:-1:-1;7845:30:0;;;;-1:-1:-1;;;;;7845:30:0;;;22523:88;;;;;;;;;;-1:-1:-1;8312:19:0;22523:88;;8817:28;;;;;;;;;;-1:-1:-1;8817:28:0;;;;-1:-1:-1;;;;;8817:28:0;;;20432:251;;;;;;;;;;-1:-1:-1;20432:251:0;;;;;:::i;:::-;;:::i;9375:27::-;;;;;;;;;;;;;;;;13417:292;;;;;;;;;;-1:-1:-1;13417:292:0;;;;;:::i;:::-;;:::i;20686:257::-;;;;;;;;;;-1:-1:-1;20686:257:0;;;;;:::i;:::-;;:::i;21255:693::-;;;;;;;;;;;;;:::i;23483:239::-;;;;;;;;;;-1:-1:-1;23483:239:0;;;;;:::i;:::-;;:::i;22436:84::-;;;;;;;;;;-1:-1:-1;22436:84:0;;8052:2;3126:36:1;;3114:2;3099:18;22436:84:0;2984:184:1;14762:124:0;;;;;;;;;;;;;:::i;13712:202::-;;;;;;;;;;-1:-1:-1;13712:202:0;;;;;:::i;:::-;;:::i;23725:480::-;;;;;;;;;;-1:-1:-1;23725:480:0;;;;;:::i;:::-;;:::i;15097:327::-;;;;;;;;;;-1:-1:-1;15097:327:0;;;;;:::i;:::-;;:::i;7879:38::-;;;;;;;;;;;;;;;16098:212;;;;;;;;;;-1:-1:-1;16098:212:0;;;;;:::i;:::-;;:::i;22614:196::-;;;;;;;;;;-1:-1:-1;22614:196:0;;;;;:::i;:::-;;:::i;7366:133::-;;;;;;;;;;;;;:::i;8783:30::-;;;;;;;;;;-1:-1:-1;8783:30:0;;;;-1:-1:-1;;;;;8783:30:0;;;16939:320;;;;;;;;;;-1:-1:-1;16939:320:0;;;;;:::i;:::-;;:::i;15728:367::-;;;;;;;;;;-1:-1:-1;15728:367:0;;;;;:::i;:::-;;:::i;18093:1172::-;;;;;;;;;;-1:-1:-1;18093:1172:0;;;;;:::i;:::-;;:::i;16599:337::-;;;;;;;;;;-1:-1:-1;16599:337:0;;;;;:::i;:::-;;:::i;8596:50::-;;;;;;;;;;;;;;;;7182:70;;;;;;;;;;-1:-1:-1;7220:7:0;7241:6;-1:-1:-1;;;;;7241:6:0;7182:70;;22353:80;;;;;;;;;;-1:-1:-1;22421:7:0;;;;;;;;;;;;-1:-1:-1;;;22421:7:0;;;;22353:80;;19268:428;;;;;;;;;;-1:-1:-1;19268:428:0;;;;;:::i;:::-;;:::i;13917:253::-;;;;;;;;;;-1:-1:-1;13917:253:0;;;;;:::i;:::-;;:::i;13111:154::-;;;;;;;;;;-1:-1:-1;13111:154:0;;;;;:::i;:::-;;:::i;8489:54::-;;;;;;;;;;;;;;;;20946:306;;;;;;;;;;-1:-1:-1;20946:306:0;;;;;:::i;:::-;;:::i;19699:445::-;;;;;;;;;;-1:-1:-1;19699:445:0;;;;;:::i;:::-;;:::i;10007:58::-;;;;;;;;;;-1:-1:-1;10007:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20147:282;;;;;;;;;;-1:-1:-1;20147:282:0;;;;;:::i;:::-;;:::i;16313:283::-;;;;;;;;;;-1:-1:-1;16313:283:0;;;;;:::i;:::-;;:::i;23035:218::-;;;;;;;;;;-1:-1:-1;23131:23:0;;;;;;;23156;;;;;;-1:-1:-1;;;23181:21:0;;;;;-1:-1:-1;;;23204:20:0;;;;;-1:-1:-1;;;23226:21:0;;;;23035:218;;;;5314:4:1;5302:17;;;5284:36;;5356:17;;;5351:2;5336:18;;5329:45;5410:17;;;5390:18;;;5383:45;;;;5464:17;;5459:2;5444:18;;5437:45;5519:17;;;5513:3;5498:19;;5491:46;5271:3;5256:19;23035:218:0;5045:498:1;8678:62:0;;;;;;;;;;;;;;;;14889:202;;;;;;;;;;-1:-1:-1;14889:202:0;;;;;:::i;:::-;;:::i;8749:30::-;;;;;;;;;;-1:-1:-1;8749:30:0;;;;-1:-1:-1;;;;;8749:30:0;;;22896:136;;;;;;;;;;-1:-1:-1;22896:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;23000:18:0;;;22979:7;23000:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22896:136;7504:223;;;;;;;;;;-1:-1:-1;7504:223:0;;;;;:::i;:::-;;:::i;23256:224::-;;;;;;;;;;-1:-1:-1;23353:24:0;;;;;;;;;23379;;;;;;-1:-1:-1;;;23405:22:0;;;;;-1:-1:-1;;;23429:21:0;;;;;-1:-1:-1;;;23452:22:0;;;;23256:224;;17262:828;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;17354:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;;:45;::::1;;:33;::::0;;::::1;:45;;::::0;17346:110:::1;;;;-1:-1:-1::0;;;17346:110:0::1;;;;;;;:::i;:::-;17464:8;17461:570;;;-1:-1:-1::0;;;;;17483:16:0;::::1;17502:1;17483:16:::0;;;:7:::1;:16;::::0;;;;;:20;17480:95:::1;;-1:-1:-1::0;;;;;17551:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;17531:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;17512:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;17480:95:::1;-1:-1:-1::0;;;;;17580:33:0;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;17580:44:0::1;::::0;::::1;;;::::0;;17630:22:::1;:36:::0;;-1:-1:-1;17630:36:0;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;17630:36:0::1;::::0;;::::1;::::0;;17461:570:::1;;;17689:9;17684:342;17708:22;:29:::0;17704:33;::::1;17684:342;;;17784:7;-1:-1:-1::0;;;;;17755:36:0::1;:22;17778:1;17755:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;17755:25:0::1;:36:::0;17751:269:::1;;17829:22;17852:29:::0;;:33:::1;::::0;17884:1:::1;::::0;17852:33:::1;:::i;:::-;17829:57;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;17801:22:::1;:25:::0;;-1:-1:-1;;;;;17829:57:0;;::::1;::::0;17824:1;;17801:25;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:85:::0;;-1:-1:-1;;;;;;17801:85:0::1;-1:-1:-1::0;;;;;17801:85:0;;::::1;;::::0;;17894:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;17922:24:::1;:33:::0;;;;:41;;-1:-1:-1;;17922:41:0::1;::::0;;17971:22:::1;:28:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;17971:28:0;;;;;-1:-1:-1;;;;;;17971:28:0::1;::::0;;;;;18007:5:::1;;17751:269;17739:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17684:342;;;;17461:570;18067:7;-1:-1:-1::0;;;;;18040:45:0::1;;18076:8;18040:45;;;;825:14:1::0;818:22;800:41;;788:2;773:18;;660:187;18040:45:0::1;;;;;;;;17262:828:::0;;:::o;13268:146::-;13343:4;13354:39;6648:10;13377:7;13386:6;13354:8;:39::i;:::-;-1:-1:-1;13405:4:0;13268:146;;;;;:::o;21951:305::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;22035:21:::1;22025:6;:31;;22017:92;;;::::0;-1:-1:-1;;;22017:92:0;;7594:2:1;22017:92:0::1;::::0;::::1;7576:21:1::0;7633:2;7613:18;;;7606:30;7672:34;7652:18;;;7645:62;-1:-1:-1;;;7723:18:1;;;7716:46;7779:19;;22017:92:0::1;7392:412:1::0;22017:92:0::1;22115:12;7241:6:::0;;22132:41:::1;::::0;-1:-1:-1;;;;;7241:6:0;;;;22162;;22115:12;22132:41;22115:12;22132:41;22162:6;7241;22132:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22114:59;;;22182:7;22178:74;;;22215:15;::::0;:22:::1;::::0;;-1:-1:-1;;;22215:22:0;;;;22201:45:::1;::::0;-1:-1:-1;;;;;22215:15:0::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22201:45;::::0;;-1:-1:-1;;;;;8467:32:1;;;8449:51;;8531:2;8516:18;;8509:34;;;8422:18;22201:45:0::1;;;;;;;22178:74;22012:244;21951:305:::0;:::o;14482:277::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14533:16:::1;:23:::0;;-1:-1:-1;;14533:23:0::1;14552:4;14533:23;::::0;;14571:21:::1;::::0;14533:16:::1;14571:26:::0;14567:146:::1;;14638:15;14614:21;:39:::0;14689:12:::1;14668:18;:33:::0;14567:146:::1;14722:32;::::0;14748:5:::1;::::0;14722:32;;::::1;::::0;14748:5;;14722:32:::1;14482:277::o:0;20432:251::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20527:11:::1;;20515:8;:23:::0;20507:85:::1;;;::::0;-1:-1:-1;;;20507:85:0;;8756:2:1;20507:85:0::1;::::0;::::1;8738:21:1::0;8795:2;8775:18;;;8768:30;8834:34;8814:18;;;8807:62;-1:-1:-1;;;8885:18:1;;;8878:47;8942:19;;20507:85:0::1;8554:413:1::0;20507:85:0::1;20639:11;::::0;20602:49:::1;::::0;20629:8;;20602:49:::1;::::0;;;::::1;20656:11;:22:::0;20432:251::o;13417:292::-;13516:4;13527:36;13537:6;13545:9;13556:6;13527:9;:36::i;:::-;13568:120;13577:6;6648:10;13599:88;13637:6;13599:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13599:19:0;;;;;;:11;:19;;;;;;;;6648:10;13599:33;;;;;;;;;;:37;:88::i;:::-;13568:8;:120::i;:::-;-1:-1:-1;13700:4:0;13417:292;;;;;:::o;20686:257::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20776:15:::1;;20764:8;:27:::0;20756:93:::1;;;::::0;-1:-1:-1;;;20756:93:0;;9174:2:1;20756:93:0::1;::::0;::::1;9156:21:1::0;9213:2;9193:18;;;9186:30;9252:34;9232:18;;;9225:62;-1:-1:-1;;;9303:18:1;;;9296:51;9364:19;;20756:93:0::1;8972:417:1::0;20756:93:0::1;20891:15;::::0;20859:48:::1;::::0;20881:8;;20859:48:::1;::::0;;;::::1;20912:15;:26:::0;20686:257::o;21255:693::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;21340:1:::1;21316:21;;:25;21308:73;;;::::0;-1:-1:-1;;;21308:73:0;;9596:2:1;21308:73:0::1;::::0;::::1;9578:21:1::0;9635:2;9615:18;;;9608:30;9674:34;9654:18;;;9647:62;-1:-1:-1;;;9725:18:1;;;9718:33;9768:19;;21308:73:0::1;9394:399:1::0;21308:73:0::1;21395:20;::::0;::::1;;21394:21;21386:83;;;::::0;-1:-1:-1;;;21386:83:0;;10000:2:1;21386:83:0::1;::::0;::::1;9982:21:1::0;10039:2;10019:18;;;10012:30;10078:34;10058:18;;;10051:62;-1:-1:-1;;;10129:18:1;;;10122:47;10186:19;;21386:83:0::1;9798:413:1::0;21386:83:0::1;21518:1;21497:18;;21482:12;:33;;;;:::i;:::-;:37;21474:97;;;::::0;-1:-1:-1;;;21474:97:0;;10418:2:1;21474:97:0::1;::::0;::::1;10400:21:1::0;10457:2;10437:18;;;10430:30;10496:34;10476:18;;;10469:62;-1:-1:-1;;;10547:18:1;;;10540:45;10602:19;;21474:97:0::1;10216:411:1::0;21474:97:0::1;21576:20;21599:24;21617:4;21599:9;:24::i;:::-;21628:20;:27:::0;;-1:-1:-1;;21628:27:0::1;21651:4;21628:27;::::0;;21668:12:::1;::::0;21576:47;;-1:-1:-1;21668:28:0;-1:-1:-1;21668:28:0::1;21660:90;;;::::0;-1:-1:-1;;;21660:90:0;;10834:2:1;21660:90:0::1;::::0;::::1;10816:21:1::0;10873:2;10853:18;;;10846:30;10912:34;10892:18;;;10885:62;-1:-1:-1;;;10963:18:1;;;10956:47;11020:19;;21660:90:0::1;10632:413:1::0;21660:90:0::1;21772:12;::::0;;21755:14:::1;21789:16:::0;;;;21772:12;21842:4:::1;21827:30;21858:7;7220::::0;7241:6;-1:-1:-1;;;;;7241:6:0;;7182:70;21858:7:::1;21827:47;::::0;-1:-1:-1;;;;;;21827:47:0::1;::::0;;;;;;-1:-1:-1;;;;;8467:32:1;;;21827:47:0::1;::::0;::::1;8449:51:1::0;8516:18;;;8509:34;;;8422:18;;21827:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21810:64;;21883:7;21879:65;;;21902:36;::::0;;21924:4:::1;8449:51:1::0;;8531:2;8516:18;;8509:34;;;21902:36:0::1;::::0;8422:18:1;21902:36:0::1;;;;;;;21879:65;21303:645;;;21255:693::o:0;23483:239::-;23549:7;23582;;23571;:18;;23563:83;;;;-1:-1:-1;;;23563:83:0;;11502:2:1;23563:83:0;;;11484:21:1;11541:2;11521:18;;;11514:30;11580:34;11560:18;;;11553:62;-1:-1:-1;;;11631:18:1;;;11624:50;11691:19;;23563:83:0;11300:416:1;23563:83:0;23651:19;23674:10;:8;:10::i;:::-;23651:33;-1:-1:-1;23696:21:0;23651:33;23696:7;:21;:::i;:::-;23689:28;23483:239;-1:-1:-1;;;23483:239:0:o;14762:124::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;14815:16:::1;:24:::0;;-1:-1:-1;;14815:24:0::1;::::0;;14849:32:::1;::::0;14815:24;;14834:5:::1;::::0;14849:32:::1;::::0;14834:5;;14849:32:::1;14762:124::o:0;13712:202::-;6648:10;13802:4;13842:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13842:34:0;;;;;;;;;;13802:4;;13812:81;;13834:7;;13842:50;;13881:10;13842:38;:50::i;23725:480::-;23818:7;8312:19;23840:7;:18;;23832:72;;;;-1:-1:-1;;;23832:72:0;;12180:2:1;23832:72:0;;;12162:21:1;12219:2;12199:18;;;12192:30;12258:34;12238:18;;;12231:62;-1:-1:-1;;;12309:18:1;;;12302:39;12358:19;;23832:72:0;11978:405:1;23832:72:0;23909:19;23931:10;:8;:10::i;:::-;23909:32;-1:-1:-1;23946:15:0;23965:21;23909:32;23965:7;:21;:::i;:::-;23946:40;;23996:17;23991:210;;24028:7;-1:-1:-1;24021:14:0;;-1:-1:-1;24021:14:0;23991:210;24087:9;;24056:17;;24105:11;;24099:3;;24077:19;;-1:-1:-1;;;24087:9:0;;;;24077:7;:19;:::i;:::-;:25;;;;:::i;:::-;:39;;;;:::i;:::-;24056:60;-1:-1:-1;24122:23:0;24148:19;24056:60;24148:7;:19;:::i;:::-;24122:45;-1:-1:-1;24173:22:0;;-1:-1:-1;;;;24173:22:0;15097:327;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15199:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:47;::::1;;:38;::::0;;::::1;:47;;::::0;15191:117:::1;;;::::0;-1:-1:-1;;;15191:117:0;;12763:2:1;15191:117:0::1;::::0;::::1;12745:21:1::0;12802:2;12782:18;;;12775:30;12841:34;12821:18;;;12814:62;12912:27;12892:18;;;12885:55;12957:19;;15191:117:0::1;12561:421:1::0;15191:117:0::1;-1:-1:-1::0;;;;;15313:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;15313:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15369:50;;800:41:1;;;15369:50:0::1;::::0;773:18:1;15369:50:0::1;660:187:1::0;16098:212:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16171:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;16163:64;;;::::0;-1:-1:-1;;;16163:64:0;;13189:2:1;16163:64:0::1;::::0;::::1;13171:21:1::0;;;13208:18;;;13201:30;13267:34;13247:18;;;13240:62;13319:18;;16163:64:0::1;12987:356:1::0;16163:64:0::1;-1:-1:-1::0;;;;;16232:19:0;::::1;16254:5;16232:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;16232:27:0::1;::::0;;16269:36;16254:5;;16232:19;16269:36:::1;::::0;16254:5;;16269:36:::1;16098:212:::0;:::o;22614:196::-;-1:-1:-1;;;;;22698:33:0;;22680:7;22698:33;;;:24;:33;;;;;;;;22694:62;;;-1:-1:-1;;;;;;22740:16:0;;;;;:7;:16;;;;;;;22614:196::o;22694:62::-;-1:-1:-1;;;;;22788:16:0;;;;;;:7;:16;;;;;;22768:37;;:19;:37::i;7366:133::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;7467:1:::1;7451:6:::0;;7430:40:::1;::::0;-1:-1:-1;;;;;7451:6:0;;::::1;::::0;7430:40:::1;::::0;7467:1;;7430:40:::1;7492:1;7475:19:::0;;-1:-1:-1;;;;;;7475:19:0::1;::::0;;7366:133::o;16939:320::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17038:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;17030:115:::1;;;;-1:-1:-1::0;;;17030:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17150:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;17150:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17209:45;;800:41:1;;;17209:45:0::1;::::0;773:18:1;17209:45:0::1;660:187:1::0;15728:367:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15800:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;15799:20;15791:69;;;::::0;-1:-1:-1;;;15791:69:0;;13550:2:1;15791:69:0::1;::::0;::::1;13532:21:1::0;13589:2;13569:18;;;13562:30;13628:34;13608:18;;;13601:62;-1:-1:-1;;;13679:18:1;;;13672:34;13723:19;;15791:69:0::1;13348:400:1::0;15791:69:0::1;15869:21;::::0;:25;15865:150:::1;;15954:6;15929:21;;15911:15;:39;;;;:::i;:::-;15910:50;15902:107;;;::::0;-1:-1:-1;;;15902:107:0;;13955:2:1;15902:107:0::1;::::0;::::1;13937:21:1::0;13994:2;13974:18;;;13967:30;14033:34;14013:18;;;14006:62;-1:-1:-1;;;14084:18:1;;;14077:42;14136:19;;15902:107:0::1;13753:408:1::0;15902:107:0::1;-1:-1:-1::0;;;;;16019:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;16019:26:0::1;16041:4;16019:26:::0;;::::1;::::0;;;16055:35;;16041:4;;16019:19;16055:35:::1;::::0;::::1;15728:367:::0;:::o;18093:1172::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;18247:15:::1;::::0;-1:-1:-1;;;;;18247:37:0;;::::1;:15:::0;::::1;:37;18244:261;;-1:-1:-1::0;;;;;18300:32:0;::::1;18292:86;;;::::0;-1:-1:-1;;;18292:86:0;;14368:2:1;18292:86:0::1;::::0;::::1;14350:21:1::0;14407:2;14387:18;;;14380:30;14446:34;14426:18;;;14419:62;-1:-1:-1;;;14497:18:1;;;14490:39;14546:19;;18292:86:0::1;14166:405:1::0;18292:86:0::1;18441:15;::::0;18389:68:::1;::::0;-1:-1:-1;;;14778:30:1;;-1:-1:-1;;;;;18441:15:0;;::::1;::::0;18389:68;::::1;::::0;14833:2:1;14824:12;18389:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18389:68:0;;;::::1;18463:15;:36:::0;;-1:-1:-1;;;;;;18463:36:0::1;-1:-1:-1::0;;;;;18463:36:0;::::1;;::::0;;18244:261:::1;18512:15;::::0;-1:-1:-1;;;;;18512:37:0;;::::1;:15:::0;::::1;:37;18509:261;;-1:-1:-1::0;;;;;18565:32:0;::::1;18557:86;;;::::0;-1:-1:-1;;;18557:86:0;;15049:2:1;18557:86:0::1;::::0;::::1;15031:21:1::0;15088:2;15068:18;;;15061:30;15127:34;15107:18;;;15100:62;-1:-1:-1;;;15178:18:1;;;15171:39;15227:19;;18557:86:0::1;14847:405:1::0;18557:86:0::1;18706:15;::::0;18654:68:::1;::::0;-1:-1:-1;;;15459:30:1;;-1:-1:-1;;;;;18706:15:0;;::::1;::::0;18654:68;::::1;::::0;15514:2:1;15505:12;18654:68:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18654:68:0;;;::::1;18728:15;:36:::0;;-1:-1:-1;;;;;;18728:36:0::1;-1:-1:-1::0;;;;;18728:36:0;::::1;;::::0;;18509:261:::1;18777:13;::::0;-1:-1:-1;;;;;18777:33:0;;::::1;:13:::0;::::1;:33;18774:243;;-1:-1:-1::0;;;;;18826:30:0;::::1;18818:82;;;::::0;-1:-1:-1;;;18818:82:0;;15730:2:1;18818:82:0::1;::::0;::::1;15712:21:1::0;15769:2;15749:18;;;15742:30;15808:34;15788:18;;;15781:62;-1:-1:-1;;;15859:18:1;;;15852:37;15906:19;;18818:82:0::1;15528:403:1::0;18818:82:0::1;18959:13;::::0;18911:62:::1;::::0;-1:-1:-1;;;16138:28:1;;-1:-1:-1;;;;;18959:13:0;;::::1;::::0;18911:62;::::1;::::0;16191:2:1;16182:12;18911:62:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;18911:62:0;;;::::1;18979:13;:32:::0;;-1:-1:-1;;;;;;18979:32:0::1;-1:-1:-1::0;;;;;18979:32:0;::::1;;::::0;;18774:243:::1;19030:12;::::0;-1:-1:-1;;;;;19030:31:0;;::::1;:12:::0;::::1;:31;19027:234;;-1:-1:-1::0;;;;;19077:29:0;::::1;19069:80;;;::::0;-1:-1:-1;;;19069:80:0;;16407:2:1;19069:80:0::1;::::0;::::1;16389:21:1::0;16446:2;16426:18;;;16419:30;16485:34;16465:18;;;16458:62;-1:-1:-1;;;16536:18:1;;;16529:36;16582:19;;19069:80:0::1;16205:402:1::0;19069:80:0::1;19206:12;::::0;19160:59:::1;::::0;-1:-1:-1;;;16814:27:1;;-1:-1:-1;;;;;19206:12:0;;::::1;::::0;19160:59;::::1;::::0;16866:2:1;16857:12;19160:59:0::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;19160:59:0;;;::::1;19225:12;:30:::0;;-1:-1:-1;;;;;;19225:30:0::1;-1:-1:-1::0;;;;;19225:30:0;::::1;;::::0;;19027:234:::1;18093:1172:::0;;;;:::o;16599:337::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16703:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;16695:120:::1;;;;-1:-1:-1::0;;;16695:120:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16820:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;16820:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16884:47;;800:41:1;;;16884:47:0::1;::::0;773:18:1;16884:47:0::1;660:187:1::0;19268:428:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19441:122:::1;19464:5;19471:18;19491;19511:16;19529:15;19546:16;19441:22;:122::i;:::-;19573:118;::::0;-1:-1:-1;;;17082:27:1;;17134:2;17125:12;19573:118:0::1;;::::0;;;;;::::1;::::0;;5314:4:1;5302:17;;;5284:36;;5356:17;;;5351:2;5336:18;;5329:45;5410:17;;;5390:18;;;5383:45;5464:17;;;5459:2;5444:18;;5437:45;5519:17;;5513:3;5498:19;;5491:46;19573:118:0;;;;::::1;::::0;;;;;5271:3:1;19573:118:0;;::::1;19268:428:::0;;;;;:::o;13917:253::-;14012:4;14023:126;6648:10;14045:7;14053:95;14092:15;14053:95;;;;;;;;;;;;;;;;;6648:10;14053:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14053:34:0;;;;;;;;;;;;:38;:95::i;13111:154::-;13191:4;13202:42;6648:10;13226:9;13237:6;13202:9;:42::i;20946:306::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;21044:23:::1;;21032:8;:35:::0;21024:109:::1;;;::::0;-1:-1:-1;;;21024:109:0;;17350:2:1;21024:109:0::1;::::0;::::1;17332:21:1::0;17389:2;17369:18;;;17362:30;17428:34;17408:18;;;17401:62;17499:31;17479:18;;;17472:59;17548:19;;21024:109:0::1;17148:425:1::0;21024:109:0::1;21184:23;::::0;21143:65:::1;::::0;21174:8;;21143:65:::1;::::0;;;::::1;21213:23;:34:::0;20946:306::o;19699:445::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;19877:128:::1;19901:5;19908:19;19929;19950:17;19969:16;19987:17;19877:23;:128::i;:::-;20015:124;::::0;-1:-1:-1;;;17780:28:1;;17833:2;17824:12;20015:124:0::1;17578:264:1::0;20147:282:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;20247:15:::1;::::0;-1:-1:-1;;;;;20247:15:0;;::::1;20225:38:::0;;::::1;::::0;20217:96:::1;;;::::0;-1:-1:-1;;;20217:96:0;;18049:2:1;20217:96:0::1;::::0;::::1;18031:21:1::0;18088:2;18068:18;;;18061:30;18127:34;18107:18;;;18100:62;-1:-1:-1;;;18178:18:1;;;18171:43;18231:19;;20217:96:0::1;17847:409:1::0;20217:96:0::1;20365:15;::::0;20323:59:::1;::::0;-1:-1:-1;;;;;20365:15:0;;::::1;::::0;20323:59;::::1;::::0;::::1;::::0;20365:15:::1;::::0;20323:59:::1;20387:15;:37:::0;;-1:-1:-1;;;;;;20387:37:0::1;-1:-1:-1::0;;;;;20387:37:0;;;::::1;::::0;;;::::1;::::0;;20147:282::o;16313:283::-;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16402:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;16394:104:::1;;;;-1:-1:-1::0;;;16394:104:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16503:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;16503:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;16551:40;;800:41:1;;;16551:40:0::1;::::0;773:18:1;16551:40:0::1;660:187:1::0;14889:202:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14978:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;14978:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;15036:50;;800:41:1;;;15036:50:0::1;::::0;773:18:1;15036:50:0::1;660:187:1::0;7504:223:0;7291:6;;-1:-1:-1;;;;;7291:6:0;6648:10;7291:22;7283:67;;;;-1:-1:-1;;;7283:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7587:22:0;::::1;7579:73;;;::::0;-1:-1:-1;;;7579:73:0;;18463:2:1;7579:73:0::1;::::0;::::1;18445:21:1::0;18502:2;18482:18;;;18475:30;18541:34;18521:18;;;18514:62;-1:-1:-1;;;18592:18:1;;;18585:36;18638:19;;7579:73:0::1;18261:402:1::0;7579:73:0::1;7683:6;::::0;;7662:38:::1;::::0;-1:-1:-1;;;;;7662:38:0;;::::1;::::0;7683:6;::::1;::::0;7662:38:::1;::::0;::::1;7705:6;:17:::0;;-1:-1:-1;;;;;;7705:17:0::1;-1:-1:-1::0;;;;;7705:17:0;;;::::1;::::0;;;::::1;::::0;;7504:223::o;2663:123::-;2721:7;2742:39;2746:1;2749;2742:39;;;;;;;;;;;;;;;;;:3;:39::i;14173:306::-;-1:-1:-1;;;;;14258:19:0;;14250:68;;;;-1:-1:-1;;;14250:68:0;;18870:2:1;14250:68:0;;;18852:21:1;18909:2;18889:18;;;18882:30;18948:34;18928:18;;;18921:62;-1:-1:-1;;;18999:18:1;;;18992:34;19043:19;;14250:68:0;18668:400:1;14250:68:0;-1:-1:-1;;;;;14331:21:0;;14323:68;;;;-1:-1:-1;;;14323:68:0;;19275:2:1;14323:68:0;;;19257:21:1;19314:2;19294:18;;;19287:30;19353:34;19333:18;;;19326:62;-1:-1:-1;;;19404:18:1;;;19397:32;19446:19;;14323:68:0;19073:398:1;14323:68:0;-1:-1:-1;;;;;14396:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14442:32;;2264:25:1;;;14442:32:0;;2237:18:1;14442:32:0;;;;;;;14173:306;;;:::o;24220:1606::-;-1:-1:-1;;;;;24313:18:0;;24305:68;;;;-1:-1:-1;;;24305:68:0;;19678:2:1;24305:68:0;;;19660:21:1;19717:2;19697:18;;;19690:30;19756:34;19736:18;;;19729:62;-1:-1:-1;;;19807:18:1;;;19800:35;19852:19;;24305:68:0;19476:401:1;24305:68:0;-1:-1:-1;;;;;24386:16:0;;24378:64;;;;-1:-1:-1;;;24378:64:0;;20084:2:1;24378:64:0;;;20066:21:1;20123:2;20103:18;;;20096:30;20162:34;20142:18;;;20135:62;-1:-1:-1;;;20213:18:1;;;20206:33;20256:19;;24378:64:0;19882:399:1;24378:64:0;24464:1;24455:6;:10;24447:74;;;;-1:-1:-1;;;24447:74:0;;20488:2:1;24447:74:0;;;20470:21:1;20527:2;20507:18;;;20500:30;20566:34;20546:18;;;20539:62;-1:-1:-1;;;20617:18:1;;;20610:49;20676:19;;24447:74:0;20286:415:1;24447:74:0;24544:15;24554:4;24544:9;:15::i;:::-;24534:6;:25;;24526:81;;;;-1:-1:-1;;;24526:81:0;;20908:2:1;24526:81:0;;;20890:21:1;20947:2;20927:18;;;20920:30;20986:34;20966:18;;;20959:62;-1:-1:-1;;;21037:18:1;;;21030:41;21088:19;;24526:81:0;20706:407:1;24526:81:0;-1:-1:-1;;;;;24618:35:0;;;;;;:29;:35;;;;;;;;24617:36;:74;;;;-1:-1:-1;;;;;;24658:33:0;;;;;;:29;:33;;;;;;;;24657:34;24617:74;24614:653;;;24707:16;;;;24699:69;;;;-1:-1:-1;;;24699:69:0;;21320:2:1;24699:69:0;;;21302:21:1;21359:2;21339:18;;;21332:30;21398:34;21378:18;;;21371:62;-1:-1:-1;;;21449:18:1;;;21442:38;21497:19;;24699:69:0;21118:404:1;24699:69:0;-1:-1:-1;;;;;24783:14:0;;;;;;:10;:14;;;;;;;;24782:15;24774:56;;;;-1:-1:-1;;;24774:56:0;;21729:2:1;24774:56:0;;;21711:21:1;21768:2;21748:18;;;21741:30;21807;21787:18;;;21780:58;21855:18;;24774:56:0;21527:352:1;24774:56:0;-1:-1:-1;;;;;24845:16:0;;;;;;:10;:16;;;;;;;;24844:17;24836:58;;;;-1:-1:-1;;;24836:58:0;;21729:2:1;24836:58:0;;;21711:21:1;21768:2;21748:18;;;21741:30;21807;21787:18;;;21780:58;21855:18;;24836:58:0;21527:352:1;24836:58:0;-1:-1:-1;;;;;24905:38:0;;;;;;:34;:38;;;;;;;;24904:39;:84;;;;-1:-1:-1;;;;;;24948:40:0;;;;;;:34;:40;;;;;;;;24947:41;24904:84;24900:186;;;25015:11;;25005:6;:21;;24997:82;;;;-1:-1:-1;;;24997:82:0;;22086:2:1;24997:82:0;;;22068:21:1;22125:2;22105:18;;;22098:30;22164:34;22144:18;;;22137:62;-1:-1:-1;;;22215:18:1;;;22208:46;22271:19;;24997:82:0;21884:412:1;24997:82:0;-1:-1:-1;;;;;25096:33:0;;;;;;:29;:33;;;;;;;;25091:171;;25174:15;;25163:6;25147:13;25157:2;25147:9;:13::i;:::-;:22;;;;:::i;:::-;25146:43;;25138:117;;;;-1:-1:-1;;;25138:117:0;;22633:2:1;25138:117:0;;;22615:21:1;22672:2;22652:18;;;22645:30;22711:34;22691:18;;;22684:62;22782:31;22762:18;;;22755:59;22831:19;;25138:117:0;22431:425:1;25138:117:0;-1:-1:-1;;;;;25286:31:0;;;;;;;:25;:31;;;;;;;25319:29;;;;;;;;25273:86;;25286:31;;;;;25319:29;25345:2;25312:4;25273:12;:86::i;:::-;25364:12;25407:23;;25379:24;25397:4;25379:9;:24::i;:::-;25446:16;;25379:51;-1:-1:-1;25379:51:0;;-1:-1:-1;25446:16:0;;:31;;;;;25470:7;25446:31;:49;;;;-1:-1:-1;25486:9:0;;;;25485:10;25446:49;:70;;;;-1:-1:-1;25503:9:0;;-1:-1:-1;;;25503:9:0;;;;:13;;25446:70;:107;;;;-1:-1:-1;;;;;;25524:29:0;;;;;;:25;:29;;;;;;;;25446:107;25437:196;;;25565:9;:16;;-1:-1:-1;;25565:16:0;25577:4;25565:16;;;25587:17;:15;:17::i;:::-;25610:9;:17;;-1:-1:-1;;25610:17:0;;;25437:196;25655:9;;25639:12;;25655:9;;25654:10;:30;;;;-1:-1:-1;25668:16:0;;;;25654:30;-1:-1:-1;;;;;25694:24:0;;;;;;:18;:24;;;;;;25639:45;;-1:-1:-1;25694:24:0;;;:50;;-1:-1:-1;;;;;;25722:22:0;;;;;;:18;:22;;;;;;;;25694:50;25691:81;;;-1:-1:-1;25761:5:0;25691:81;25778:41;25793:4;25799:2;25803:6;25811:7;25778:14;:41::i;:::-;24300:1526;;24220:1606;;;:::o;2071:171::-;2157:7;2187:12;2179:6;;;;2171:29;;;;-1:-1:-1;;;2171:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2205:9:0;2217:5;2221:1;2217;:5;:::i;:::-;2205:17;2071:171;-1:-1:-1;;;;;2071:171:0:o;27789:149::-;27831:7;27846:15;27863;27882:19;:17;:19::i;:::-;27845:56;;-1:-1:-1;27845:56:0;-1:-1:-1;27913:20:0;27845:56;;27913:11;:20::i;:::-;27906:27;;;;27789:149;:::o;1774:160::-;1832:7;;1858:5;1862:1;1858;:5;:::i;:::-;1846:17;;1881:1;1876;:6;;1868:46;;;;-1:-1:-1;;;1868:46:0;;23063:2:1;1868:46:0;;;23045:21:1;23102:2;23082:18;;;23075:30;23141:29;23121:18;;;23114:57;23188:18;;1868:46:0;22861:351:1;31354:1432:0;31683:1;31662:16;31646:15;31629:16;31591:37;31610:18;31591;:37;:::i;:::-;:54;;;;:::i;:::-;:70;;;;:::i;:::-;:87;;;;:::i;:::-;31590:94;;;;31582:145;;;;-1:-1:-1;;;31582:145:0;;23572:2:1;31582:145:0;;;23554:21:1;23611:2;23591:18;;;23584:30;23650:34;23630:18;;;23623:62;-1:-1:-1;;;23701:18:1;;;23694:36;23747:19;;31582:145:0;23370:402:1;31582:145:0;31738:21;;;;:43;;;;:21;;:43;31734:215;;31794:101;;-1:-1:-1;;;23979:32:1;;24036:2;24027:12;31794:101:0;;;;;;;;31836:21;;;;31880:14;;31794:101;;31836:21;;;;;31794:101;;;;-1:-1:-1;;;;;;;;;;;31794:101:0;;;31880:14;;;31794:101;:::i;:::-;;;;;;;;31901:21;;;:42;;-1:-1:-1;;31901:42:0;;;;;;;31734:215;31957:21;;;;:43;;;;:21;;;;;:43;31953:215;;32013:101;;-1:-1:-1;;;24466:32:1;;24523:2;24514:12;32013:101:0;;;;;;;;32055:21;;;;32099:14;;32013:101;;32055:21;;;;;;;;32013:101;;;;-1:-1:-1;;;;;;;;;;;32013:101:0;;;32099:14;;;32013:101;:::i;:::-;;;;;;;;32120:21;;;:42;;-1:-1:-1;;32120:42:0;;;;;;;;;31953:215;32176:19;;;;:39;;;;-1:-1:-1;;;32176:19:0;;;;:39;32172:201;;32228:95;;-1:-1:-1;;;24739:30:1;;24794:2;24785:12;32228:95:0;;;;;;;;32268:19;;;;32308:14;;32228:95;;32268:19;-1:-1:-1;;;32268:19:0;;;;;;32228:95;;;;-1:-1:-1;;;;;;;;;;;32228:95:0;;;32308:14;;;32228:95;:::i;:::-;;;;;;;;32329:19;;;:38;;-1:-1:-1;;32329:38:0;-1:-1:-1;;;32329:38:0;;;;;;;32172:201;32387:18;;;;:37;;;;-1:-1:-1;;;32387:18:0;;;;:37;32383:194;;32437:92;;-1:-1:-1;;;25010:29:1;;25064:2;25055:12;32437:92:0;;;;;;;;32476:18;;;;32514:14;;32437:92;;32476:18;-1:-1:-1;;;32476:18:0;;;;;;32437:92;;;;-1:-1:-1;;;;;;;;;;;32437:92:0;;;32514:14;;;32437:92;:::i;:::-;;;;;;;;32535:18;;;:36;;-1:-1:-1;;32535:36:0;-1:-1:-1;;;32535:36:0;;;;;;;32383:194;32585:19;;;;:39;;;;-1:-1:-1;;;32585:19:0;;;;:39;32581:201;;32637:95;;-1:-1:-1;;;25280:30:1;;25335:2;25326:12;32637:95:0;;;;;;;;32677:19;;;;32717:14;;32637:95;;32677:19;-1:-1:-1;;;32677:19:0;;;;;;32637:95;;;;-1:-1:-1;;;;;;;;;;;32637:95:0;;;32717:14;;;32637:95;:::i;:::-;;;;;;;;32738:19;;;:38;;-1:-1:-1;;32738:38:0;-1:-1:-1;;;32738:38:0;;;;;;;32581:201;31354:1432;;;;;;:::o;29866:1485::-;30206:1;30184:17;30167:16;30149:17;30109:39;30129:19;30109;:39;:::i;:::-;:57;;;;:::i;:::-;:74;;;;:::i;:::-;:92;;;;:::i;:::-;30108:99;;;;30100:151;;;;-1:-1:-1;;;30100:151:0;;25551:2:1;30100:151:0;;;25533:21:1;25590:2;25570:18;;;25563:30;25629:34;25609:18;;;25602:62;-1:-1:-1;;;25680:18:1;;;25673:37;25727:19;;30100:151:0;25349:403:1;30100:151:0;30268:22;;;;:45;;;;:22;;;;;:45;30264:222;;30326:104;;-1:-1:-1;;;25959:33:1;;26017:2;26008:12;30326:104:0;;;;;;;;30369:22;;;;30415:14;;30326:104;;30369:22;;;;;;;;30326:104;;;;-1:-1:-1;;;;;;;;;;;30326:104:0;;;30415:14;;;30326:104;:::i;:::-;;;;;;;;30436:22;;;:44;;-1:-1:-1;;30436:44:0;;;;;;;;;30264:222;30494:22;;;;:45;;;;:22;;;;;:45;30490:222;;30552:104;;-1:-1:-1;;;26233:33:1;;26291:2;26282:12;30552:104:0;;;;;;;;30595:22;;;;30641:14;;30552:104;;30595:22;;;;;;;;30552:104;;;;-1:-1:-1;;;;;;;;;;;30552:104:0;;;30641:14;;;30552:104;:::i;:::-;;;;;;;;30662:22;;;:44;;-1:-1:-1;;30662:44:0;;;;;;;;;30490:222;30720:20;;;;:41;;;;-1:-1:-1;;;30720:20:0;;;;:41;30716:208;;30774:98;;-1:-1:-1;;;26507:31:1;;26563:2;26554:12;30774:98:0;;;;;;;;30815:20;;;;30857:14;;30774:98;;30815:20;-1:-1:-1;;;30815:20:0;;;;;;30774:98;;;;-1:-1:-1;;;;;;;;;;;30774:98:0;;;30857:14;;;30774:98;:::i;:::-;;;;;;;;30878:20;;;:40;;-1:-1:-1;;30878:40:0;-1:-1:-1;;;30878:40:0;;;;;;;30716:208;30938:19;;;;:39;;;;-1:-1:-1;;;30938:19:0;;;;:39;30934:201;;30990:95;;-1:-1:-1;;;26779:30:1;;26834:2;26825:12;30990:95:0;;;;;;;;31030:19;;;;31070:14;;30990:95;;31030:19;-1:-1:-1;;;31030:19:0;;;;;;30990:95;;;;-1:-1:-1;;;;;;;;;;;30990:95:0;;;31070:14;;;30990:95;:::i;:::-;;;;;;;;31091:19;;;:38;;-1:-1:-1;;31091:38:0;-1:-1:-1;;;31091:38:0;;;;;;;30934:201;31143:20;;;;:41;;;;-1:-1:-1;;;31143:20:0;;;;:41;31139:208;;31197:98;;-1:-1:-1;;;27050:31:1;;27106:2;27097:12;31197:98:0;;;;;;;;31238:20;;;;31280:14;;31197:98;;31238:20;-1:-1:-1;;;31238:20:0;;;;;;31197:98;;;;-1:-1:-1;;;;;;;;;;;31197:98:0;;;31280:14;;;31197:98;:::i;:::-;;;;;;;;31301:20;;;:40;;;;;-1:-1:-1;;;31301:40:0;-1:-1:-1;;31301:40:0;;;;;;29866:1485;;;;;;:::o;2791:251::-;2877:7;2906:12;2899:5;2891:28;;;;-1:-1:-1;;;2891:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2924:9:0;2936:5;2940:1;2936;:5;:::i;28506:1357::-;28602:13;:17;;-1:-1:-1;;28709:15:0;;;28737:438;;;;28788:1;28764:21;;:25;:69;;;;;28831:1;28809:18;;28794:12;:33;;;;:::i;:::-;:38;;28764:69;28760:410;;;28842:13;:19;;-1:-1:-1;;28842:19:0;28858:3;28842:19;;;28760:410;;;28913:23;;28897:13;:39;;28913:23;;;;-1:-1:-1;;28955:39:0;;;;;;;28913:23;28971;;;;;;28955:39;;;;;;;;-1:-1:-1;;29067:33:0;-1:-1:-1;;;29027:21:0;;;;;29013:35;;;;-1:-1:-1;;29067:33:0;;-1:-1:-1;;;29080:20:0;;;;29067:33;;;-1:-1:-1;;29119:35:0;-1:-1:-1;;;29133:21:0;;;;;;;29119:35;;;;;;;28760:410;29183:10;29179:247;;;29217:24;;29201:13;:40;;29217:24;;;;;;;;-1:-1:-1;;29247:40:0;;;;;;;29263:24;;;;;;29247:40;;;;;-1:-1:-1;;29344:34:0;-1:-1:-1;;;29307:22:0;;;;29293:36;;-1:-1:-1;;29344:34:0;;-1:-1:-1;;;29357:21:0;;;;29344:34;;;;;-1:-1:-1;;29384:36:0;-1:-1:-1;;;29398:22:0;;;;-1:-1:-1;;;29384:36:0;;;;;;;29179:247;29435:10;29434:11;:27;;;;;29450:11;29449:12;29434:27;:105;;;;-1:-1:-1;;;;;;29466:35:0;;;;;;:29;:35;;;;;;;;;:72;;-1:-1:-1;;;;;;29505:33:0;;;;;;:29;:33;;;;;;;;29466:72;29430:342;;;29563:24;;29547:13;:40;;29563:24;;;;;;;;-1:-1:-1;;29593:40:0;;;;;;;29609:24;;;;;;29593:40;;;;;-1:-1:-1;;29690:34:0;-1:-1:-1;;;29653:22:0;;;;29639:36;;-1:-1:-1;;29690:34:0;;-1:-1:-1;;;29703:21:0;;;;29690:34;;;;;-1:-1:-1;;29730:36:0;-1:-1:-1;;;29744:22:0;;;;-1:-1:-1;;;29730:36:0;;;;;;;29430:342;29847:11;;;-1:-1:-1;;;29847:11:0;;;;;29834:10;;;;;;29820:11;;;;;;29788:29;;29847:11;29804:13;;;;;29788;:29;:::i;:::-;:43;;;;:::i;:::-;:56;;;;:::i;:::-;:70;;;;:::i;:::-;29776:9;;:82;;;;;;;;;;;;;;;;;;28506:1357;;;;:::o;32789:1676::-;32829:23;32855:24;32873:4;32855:9;:24::i;:::-;32962:9;;32829:50;;-1:-1:-1;32912:21:0;;32962:9;-1:-1:-1;;;32962:9:0;;;;;33002:13;;;;32962:9;33046:13;;;;;33089:11;;;;;;33134:10;;;;;;-1:-1:-1;;;33173:11:0;;;32884:25;33089:11;32962:9;33217:31;33002:13;32829:50;33217:31;:::i;:::-;:43;;;;:::i;:::-;:47;;;;:::i;:::-;33191:73;-1:-1:-1;33269:20:0;33292:33;33191:73;33292:15;:33;:::i;:::-;33269:56;;33332:31;33350:12;33332:17;:31::i;:::-;33370:27;33400:41;33424:17;33400:21;:41;:::i;:::-;33370:71;-1:-1:-1;33446:19:0;33511:15;33485:21;33505:1;33485:17;:21;:::i;:::-;33468:39;;:13;:39;:::i;:::-;:59;;;;:::i;:::-;33446:81;;;;33532:26;33617:1;33603:11;33583:17;33561:39;;:19;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:57;;;;:::i;:::-;33532:86;-1:-1:-1;33623:26:0;33694:11;33652:39;;;;:19;:39;:::i;:::-;:53;;;;:::i;:::-;33623:82;-1:-1:-1;33716:23:0;33781:11;33742:36;;;;:19;:36;:::i;:::-;:50;;;;:::i;:::-;33716:76;-1:-1:-1;33797:24:0;33716:76;33847:39;33868:18;33847;:39;:::i;:::-;:57;;;;:::i;:::-;33824:81;;:19;:81;:::i;:::-;33920:15;;33912:53;;33797:108;;-1:-1:-1;;;;;;33920:15:0;;33912:53;;;;;33946:18;;33920:15;33912:53;33920:15;33912:53;33946:18;33920:15;33912:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33978:13:0;;33970:49;;-1:-1:-1;;;;;33978:13:0;;;;33970:49;;;;;34002:16;;33978:13;33970:49;33978:13;33970:49;34002:16;33978:13;33970:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34038:12:0;;34030:47;;-1:-1:-1;;;;;34038:12:0;;;;34030:47;;;;;34061:15;;34038:12;34030:47;34038:12;34030:47;34061:15;34038:12;34030:47;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34088:19:0;;34084:163;;34115:50;34129:15;34146:18;34115:13;:50::i;:::-;34176:65;;;27648:25:1;;;27704:2;27689:18;;27682:34;;;27732:18;;;27725:34;;;34176:65:0;;27636:2:1;27621:18;34176:65:0;;;;;;;34084:163;34265:13;34253:9;;:25;;;;;;;;;;;;;;;;;;34299:17;34283:13;;:33;;;;;;;;;;;;;;;;;;34337:17;34321:13;;:33;;;;;;;;;;;;;;;;;;34373:15;34359:11;;:29;;;;;;;;;;;;;;;;;;34412:14;34399:10;;:27;;;;;;;;;;;;;;;;;;34445:15;34431:11;;:29;;;;;;;;;;;;;;;;;;32824:1641;;;;;;;;;;;;;;;;32789:1676::o;25829:740::-;25932:23;25956:12;25970:14;25988:29;26000:7;26009;25988:11;:29::i;:::-;25931:86;;;;;;26023:15;26040:23;26065:12;26079:14;26097:46;26109:7;26118:4;26124:6;26132:10;:8;:10::i;:::-;26097:11;:46::i;:::-;-1:-1:-1;;;;;26154:32:0;;;;;;:24;:32;;;;;;26022:121;;-1:-1:-1;26022:121:0;;-1:-1:-1;26022:121:0;-1:-1:-1;26022:121:0;-1:-1:-1;26154:32:0;;26150:93;;;-1:-1:-1;;;;;26212:15:0;;;;;;:7;:15;;;;;;:25;;26230:7;;26212:25;:::i;:::-;-1:-1:-1;;;;;26194:15:0;;;;;;:7;:15;;;;;:43;26150:93;-1:-1:-1;;;;;26251:35:0;;;;;;:24;:35;;;;;;;;26247:110;;;-1:-1:-1;;;;;26315:18:0;;;;;;:7;:18;;;;;;:36;;26336:15;;26315:36;:::i;:::-;-1:-1:-1;;;;;26294:18:0;;;;;;:7;:18;;;;;:57;26247:110;-1:-1:-1;;;;;26379:15:0;;;;;;:7;:15;;;;;;:25;;26397:7;;26379:25;:::i;:::-;-1:-1:-1;;;;;26361:15:0;;;;;;;:7;:15;;;;;;:43;;;;26430:18;;;;;;;:36;;26451:15;;26430:36;:::i;:::-;-1:-1:-1;;;;;26409:18:0;;;;;;:7;:18;;;;;:57;26471:39;26483:4;26489;26495:6;26503;26471:11;:39::i;:::-;26537:9;-1:-1:-1;;;;;26520:44:0;26529:6;-1:-1:-1;;;;;26520:44:0;;26548:15;26520:44;;;;2264:25:1;;2252:2;2237:18;;2118:177;26520:44:0;;;;;;;;25926:643;;;;;;;25829:740;;;;:::o;27941:562::-;28033:7;;27992;;;;8312:19;27992:7;28075:331;28099:22;:29;28095:33;;28075:331;;;28188:7;28151;:34;28159:22;28182:1;28159:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28159:25:0;28151:34;;;;;;;;;;;;;:44;;:97;;;28241:7;28204;:34;28212:22;28235:1;28212:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28212:25:0;28204:34;;;;;;;;;;;;;:44;28151:97;28141:139;;;-1:-1:-1;;28263:7:0;;;8312:19;;-1:-1:-1;27941:562:0;-1:-1:-1;;27941:562:0:o;28141:139::-;28306:7;:34;28314:22;28337:1;28314:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28314:25:0;28306:34;;;;;;;;;;;;;28296:44;;:7;:44;:::i;:::-;28286:54;;28366:7;:34;28374:22;28397:1;28374:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28374:25:0;28366:34;;;;;;;;;;;;;28356:44;;:7;:44;:::i;:::-;28346:54;-1:-1:-1;28130:3:0;;;;:::i;:::-;;;;28075:331;;;;8312:19;28424:7;;:17;;;;:::i;:::-;28414:7;:27;28410:58;;;-1:-1:-1;;28451:7:0;;;8312:19;;-1:-1:-1;27941:562:0;-1:-1:-1;27941:562:0:o;28410:58::-;28481:7;;28490;;-1:-1:-1;27941:562:0;-1:-1:-1;27941:562:0:o;34468:416::-;34553:16;;;34567:1;34553:16;;;;;;;;34529:21;;34553:16;;;;;;;;;;-1:-1:-1;34553:16:0;34529:40;;34592:4;34574;34579:1;34574:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34574:23:0;;;:7;;;;;;;;;;:23;;;;34612:15;;:22;;;-1:-1:-1;;;34612:22:0;;;;:15;;;;;:20;;:22;;;;;34574:7;;34612:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34602:4;34607:1;34602:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34602:32:0;;;:7;;;;;;;;;:32;34671:15;;34639:62;;34656:4;;34671:15;34689:11;34639:8;:62::i;:::-;34706:15;;:173;;-1:-1:-1;;;34706:173:0;;-1:-1:-1;;;;;34706:15:0;;;;:66;;:173;;34778:11;;34706:15;;34830:4;;34848;;34859:15;;34706:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34887:348;34995:15;;34963:62;;34980:4;;-1:-1:-1;;;;;34995:15:0;35013:11;34963:8;:62::i;:::-;35030:15;;35189;;35030:200;;-1:-1:-1;;;35030:200:0;;35093:4;35030:200;;;29228:34:1;29278:18;;;29271:34;;;35030:15:0;29321:18:1;;;29314:34;;;29364:18;;;29357:34;-1:-1:-1;;;;;35189:15:0;;;29407:19:1;;;29400:44;35210:15:0;29460:19:1;;;29453:35;35030:15:0;;;:31;;35069:9;;29162:19:1;;35030:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26965:416::-;27039:7;27047;27055;27073;27068:309;;-1:-1:-1;27096:7:0;;-1:-1:-1;27105:1:0;;-1:-1:-1;27105:1:0;27088:22;;27068:309;27156:11;;27131:12;;27170:3;;27146:21;;-1:-1:-1;;;27156:11:0;;;;27146:7;:21;:::i;:::-;:27;;;;:::i;:::-;27253:10;;27131:42;;-1:-1:-1;27179:14:0;;27267:3;;27253:10;;;;;;;27239:11;;;;;;27207:29;;27253:10;27223:13;;;;;27207;:29;:::i;:::-;:43;;;;:::i;:::-;:56;;;;:::i;:::-;27196:68;;;;:7;:68;:::i;:::-;:74;;;;:::i;:::-;27179:91;-1:-1:-1;27276:23:0;27313:13;27179:91;27313:4;:13;:::i;:::-;27302:25;;:7;:25;:::i;:::-;27276:51;-1:-1:-1;27358:4:0;;-1:-1:-1;27364:6:0;-1:-1:-1;27333:38:0;;-1:-1:-1;27333:38:0;27068:309;26965:416;;;;;:::o;27384:402::-;27513:7;;;;;27572:21;27582:11;27572:7;:21;:::i;:::-;27554:39;-1:-1:-1;27598:12:0;27613:18;27620:11;27613:4;:18;:::i;:::-;27598:33;-1:-1:-1;27636:14:0;27653:20;27662:11;27653:6;:20;:::i;:::-;27636:37;-1:-1:-1;27678:23:0;27715:13;27636:37;27715:4;:13;:::i;:::-;27704:25;;:7;:25;:::i;:::-;27742:7;;;;-1:-1:-1;27768:4:0;;-1:-1:-1;27768:4:0;-1:-1:-1;27384:402:0;;-1:-1:-1;;;;;;27384:402:0:o;26572:390::-;26677:4;26666:7;;:15;;;;;;;:::i;:::-;;;;;;;;26700:4;26686:10;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;26715:21:0;;:25;;;;:69;;;26782:1;26760:18;;26745:12;:33;;;;:::i;:::-;:38;;26715:69;26711:109;;;26808:6;26792:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;26711:109:0;26869:4;26836:39;;;;:24;:39;;;;;;;;26832:89;;;26899:4;26883:22;;;;:7;:22;;;;;:32;;26909:6;;26883:22;:32;;26909:6;;26883:32;:::i;:::-;;;;-1:-1:-1;;26832:89:0;26941:4;26925:22;;;;:7;:22;;;;;:32;;26951:6;;26925:22;:32;;26951:6;;26925:32;:::i;:::-;;;;-1:-1:-1;;;;;;26572:390:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:118::-;236:5;229:13;222:21;215:5;212:32;202:60;;258:1;255;248:12;273:382;338:6;346;399:2;387:9;378:7;374:23;370:32;367:52;;;415:1;412;405:12;367:52;454:9;441:23;473:31;498:5;473:31;:::i;:::-;523:5;-1:-1:-1;580:2:1;565:18;;552:32;593:30;552:32;593:30;:::i;:::-;642:7;632:17;;;273:382;;;;;:::o;852:548::-;964:4;993:2;1022;1011:9;1004:21;1054:6;1048:13;1097:6;1092:2;1081:9;1077:18;1070:34;1122:1;1132:140;1146:6;1143:1;1140:13;1132:140;;;1241:14;;;1237:23;;1231:30;1207:17;;;1226:2;1203:26;1196:66;1161:10;;1132:140;;;1136:3;1321:1;1316:2;1307:6;1296:9;1292:22;1288:31;1281:42;1391:2;1384;1380:7;1375:2;1367:6;1363:15;1359:29;1348:9;1344:45;1340:54;1332:62;;;;852:548;;;;:::o;1405:315::-;1473:6;1481;1534:2;1522:9;1513:7;1509:23;1505:32;1502:52;;;1550:1;1547;1540:12;1502:52;1589:9;1576:23;1608:31;1633:5;1608:31;:::i;:::-;1658:5;1710:2;1695:18;;;;1682:32;;-1:-1:-1;;;1405:315:1:o;1725:180::-;1784:6;1837:2;1825:9;1816:7;1812:23;1808:32;1805:52;;;1853:1;1850;1843:12;1805:52;-1:-1:-1;1876:23:1;;1725:180;-1:-1:-1;1725:180:1:o;2523:456::-;2600:6;2608;2616;2669:2;2657:9;2648:7;2644:23;2640:32;2637:52;;;2685:1;2682;2675:12;2637:52;2724:9;2711:23;2743:31;2768:5;2743:31;:::i;:::-;2793:5;-1:-1:-1;2850:2:1;2835:18;;2822:32;2863:33;2822:32;2863:33;:::i;:::-;2523:456;;2915:7;;-1:-1:-1;;;2969:2:1;2954:18;;;;2941:32;;2523:456::o;3173:309::-;3238:6;3246;3299:2;3287:9;3278:7;3274:23;3270:32;3267:52;;;3315:1;3312;3305:12;3267:52;3351:9;3338:23;3328:33;;3411:2;3400:9;3396:18;3383:32;3424:28;3446:5;3424:28;:::i;3487:247::-;3546:6;3599:2;3587:9;3578:7;3574:23;3570:32;3567:52;;;3615:1;3612;3605:12;3567:52;3654:9;3641:23;3673:31;3698:5;3673:31;:::i;3739:671::-;3825:6;3833;3841;3849;3902:3;3890:9;3881:7;3877:23;3873:33;3870:53;;;3919:1;3916;3909:12;3870:53;3958:9;3945:23;3977:31;4002:5;3977:31;:::i;:::-;4027:5;-1:-1:-1;4084:2:1;4069:18;;4056:32;4097:33;4056:32;4097:33;:::i;:::-;4149:7;-1:-1:-1;4208:2:1;4193:18;;4180:32;4221:33;4180:32;4221:33;:::i;:::-;4273:7;-1:-1:-1;4332:2:1;4317:18;;4304:32;4345:33;4304:32;4345:33;:::i;:::-;3739:671;;;;-1:-1:-1;3739:671:1;;-1:-1:-1;;3739:671:1:o;4415:156::-;4481:20;;4541:4;4530:16;;4520:27;;4510:55;;4561:1;4558;4551:12;4510:55;4415:156;;;:::o;4576:464::-;4661:6;4669;4677;4685;4693;4746:3;4734:9;4725:7;4721:23;4717:33;4714:53;;;4763:1;4760;4753:12;4714:53;4786:27;4803:9;4786:27;:::i;:::-;4776:37;;4832:36;4864:2;4853:9;4849:18;4832:36;:::i;:::-;4822:46;;4887:36;4919:2;4908:9;4904:18;4887:36;:::i;:::-;4877:46;;4942:36;4974:2;4963:9;4959:18;4942:36;:::i;:::-;4932:46;;4997:37;5029:3;5018:9;5014:19;4997:37;:::i;:::-;4987:47;;4576:464;;;;;;;;:::o;5548:388::-;5616:6;5624;5677:2;5665:9;5656:7;5652:23;5648:32;5645:52;;;5693:1;5690;5683:12;5645:52;5732:9;5719:23;5751:31;5776:5;5751:31;:::i;:::-;5801:5;-1:-1:-1;5858:2:1;5843:18;;5830:32;5871:33;5830:32;5871:33;:::i;5941:356::-;6143:2;6125:21;;;6162:18;;;6155:30;6221:34;6216:2;6201:18;;6194:62;6288:2;6273:18;;5941:356::o;6302:416::-;6504:2;6486:21;;;6543:2;6523:18;;;6516:30;6582:34;6577:2;6562:18;;6555:62;-1:-1:-1;;;6648:2:1;6633:18;;6626:50;6708:3;6693:19;;6302:416::o;6723:127::-;6784:10;6779:3;6775:20;6772:1;6765:31;6815:4;6812:1;6805:15;6839:4;6836:1;6829:15;6855:127;6916:10;6911:3;6907:20;6904:1;6897:31;6947:4;6944:1;6937:15;6971:4;6968:1;6961:15;6987:128;7054:9;;;7075:11;;;7072:37;;;7089:18;;:::i;7120:127::-;7181:10;7176:3;7172:20;7169:1;7162:31;7212:4;7209:1;7202:15;7236:4;7233:1;7226:15;7252:135;7291:3;7312:17;;;7309:43;;7332:18;;:::i;:::-;-1:-1:-1;7379:1:1;7368:13;;7252:135::o;8019:251::-;8089:6;8142:2;8130:9;8121:7;8117:23;8113:32;8110:52;;;8158:1;8155;8148:12;8110:52;8190:9;8184:16;8209:31;8234:5;8209:31;:::i;11050:245::-;11117:6;11170:2;11158:9;11149:7;11145:23;11141:32;11138:52;;;11186:1;11183;11176:12;11138:52;11218:9;11212:16;11237:28;11259:5;11237:28;:::i;11721:127::-;11782:10;11777:3;11773:20;11770:1;11763:31;11813:4;11810:1;11803:15;11837:4;11834:1;11827:15;11853:120;11893:1;11919;11909:35;;11924:18;;:::i;:::-;-1:-1:-1;11958:9:1;;11853:120::o;12388:168::-;12428:7;12494:1;12490;12486:6;12482:14;12479:1;12476:21;12471:1;12464:9;12457:17;12453:45;12450:71;;;12501:18;;:::i;:::-;-1:-1:-1;12541:9:1;;12388:168::o;22301:125::-;22366:9;;;22387:10;;;22384:36;;;22400:18;;:::i;23217:148::-;23305:4;23284:12;;;23298;;;23280:31;;23323:13;;23320:39;;;23339:18;;:::i;24050:209::-;-1:-1:-1;;24214:38:1;;;;24196:57;;24184:2;24169:18;;24050:209::o;27120:165::-;27158:1;27192:4;27189:1;27185:12;27216:3;27206:37;;27223:18;;:::i;:::-;27275:3;27268:4;27265:1;27261:12;27257:22;27252:27;;;27120:165;;;;:::o;27290:151::-;27380:4;27373:12;;;27359;;;27355:31;;27398:14;;27395:40;;;27415:18;;:::i;27902:980::-;28164:4;28212:3;28201:9;28197:19;28243:6;28232:9;28225:25;28269:2;28307:6;28302:2;28291:9;28287:18;28280:34;28350:3;28345:2;28334:9;28330:18;28323:31;28374:6;28409;28403:13;28440:6;28432;28425:22;28478:3;28467:9;28463:19;28456:26;;28517:2;28509:6;28505:15;28491:29;;28538:1;28548:195;28562:6;28559:1;28556:13;28548:195;;;28627:13;;-1:-1:-1;;;;;28623:39:1;28611:52;;28718:15;;;;28683:12;;;;28659:1;28577:9;28548:195;;;-1:-1:-1;;;;;;;28799:32:1;;;;28794:2;28779:18;;28772:60;-1:-1:-1;;;28863:3:1;28848:19;28841:35;28760:3;27902:980;-1:-1:-1;;;27902:980:1:o;29499:306::-;29587:6;29595;29603;29656:2;29644:9;29635:7;29631:23;29627:32;29624:52;;;29672:1;29669;29662:12;29624:52;29701:9;29695:16;29685:26;;29751:2;29740:9;29736:18;29730:25;29720:35;;29795:2;29784:9;29780:18;29774:25;29764:35;;29499:306;;;;;:::o

Swarm Source

ipfs://d6288844bc36225ec4e974b5c1ee84fbe4134ae13d7d3522c6a26677947719c2

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.