<?xml version="1.2" encoding="UTF-8"?>
<plugin name="(JD)Store appearance" version_long="10004" version_human="1.0.3" author="Doka" website="https://vk.com/jonic.doka" update_check="https://vk.com/jonic.doka"><hooks><hook type="C" class="\IPS\nexus\modules\front\store\store" filename="Store appearance"><![CDATA[//<?php

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	exit;
}

class hook16234 extends _HOOK_CLASS_
{
	protected function manage()
	{
		try
		{
			try
			{
				try
				{
					return $this->_enhancedStore();
					
					\call_user_func_array( 'parent::manage', \func_get_args() );
				}
				catch ( \RuntimeException $e )
				{
					if ( method_exists( get_parent_class(), __FUNCTION__ ) )
					{
						return \call_user_func_array( 'parent::' . __FUNCTION__, \func_get_args() );
					}
					else
					{
						throw $e;
					}
				}
			}
			catch ( \RuntimeException $e )
			{
				if ( method_exists( get_parent_class(), __FUNCTION__ ) )
				{
					return \call_user_func_array( 'parent::' . __FUNCTION__, \func_get_args() );
				}
				else
				{
					throw $e;
				}
			}
		}
		catch ( \RuntimeException $e )
		{
			if ( method_exists( get_parent_class(), __FUNCTION__ ) )
			{
				return \call_user_func_array( 'parent::' . __FUNCTION__, \func_get_args() );
			}
			else
			{
				throw $e;
			}
		}
	}
	
	protected function _enhancedStore()
	{
		try
		{
			try
			{
				$allProductsJoins = array();
				$allProductsWhere = array();
				
				$url = \IPS\Http\Url::internal( 'app=nexus&module=store&controller=store', 'front', 'store' );
				if( !\IPS\Request::i()->tab )
				{
					$url = $url->setQueryString( 'tab', NULL );
				}
				
				if( \IPS\Settings::i()->enhancedstore_main_tab_setting == 1 AND !\IPS\Request::i()->tab )
				{
					$allProductsWhere['featured'] = array( 'p_featured=?', 1 );
				}
				
				$allProductsWhere[] = array( 'p_store=?', 1 );
				$allProductsWhere[] = array( "( p_member_groups='*' OR " . \IPS\Db::i()->findInSet( 'p_member_groups', \IPS\Member::loggedIn()->groups ) . ' )' );
				
				if( \IPS\Request::i()->tab AND \is_numeric( \IPS\Request::i()->tab ) AND \floatval( \IPS\Request::i()->tab ) > 0 )
				{
					$allProductsWhere['group_id'] = array( 'p_group=?', \IPS\Request::i()->tab );
					$url = $url->setQueryString( 'tab', \IPS\Request::i()->tab );
				}
				
				if ( isset( \IPS\Request::i()->filter ) and \is_array( \IPS\Request::i()->filter ) )
				{
					$url = $url->setQueryString( 'filter', \IPS\Request::i()->filter );
					foreach ( \IPS\Request::i()->filter as $filterId => $allowedValues )
					{
						$allProductsWhere[] = array( \IPS\Db::i()->findInSet( "filter{$filterId}.pfm_values", array_map( 'intval', explode( ',', $allowedValues ) ) ) );
						$allProductsJoins[] = array( 'table' => array( 'nexus_package_filters_map', "filter{$filterId}" ), 'on' => array( "filter{$filterId}.pfm_package=p_id AND filter{$filterId}.pfm_filter=?", $filterId ) );
					}
				}
				
				foreach ( array( 'minCost' => '>', 'maxCost' => '<' ) as $k => $v )
				{
					if ( isset( \IPS\Request::i()->$k ) and \is_numeric( \IPS\Request::i()->$k ) and \floatval( \IPS\Request::i()->$k ) > 0 )
					{
						$url = $url->setQueryString( $k, \IPS\Request::i()->$k );
						$allProductsJoins['nexus_package_base_prices'] = array( 'table' => 'nexus_package_base_prices', 'on' => array( 'id=p_id' ) );
						$allProductsWhere[] = array( $this->currency . $v . '=?', \floatval( \IPS\Request::i()->$k ) );
					}
				}
				
				if ( isset( \IPS\Request::i()->minRating ) and \is_numeric( \IPS\Request::i()->minRating ) and \floatval( \IPS\Request::i()->minRating ) > 0 )
				{
					$url = $url->setQueryString( 'minRating', \IPS\Request::i()->minRating );
					$allProductsWhere[] = array( 'p_rating>=?', \intval( \IPS\Request::i()->minRating ) );
				}
				
				if ( isset( \IPS\Request::i()->inStock ) )
				{
					$url = $url->setQueryString( 'inStock', \IPS\Request::i()->inStock );
					$allProductsWhere[] = array( '( p_stock>0 OR ( p_stock=-2 AND (?)>0 ) OR p_stock=-1 )', \IPS\Db::i()->select( 'MAX(opt_stock)', 'nexus_product_options', 'opt_package=p_id' ) );
				}
				
				switch ( \IPS\Request::i()->sortby )
				{
					case 'name':
						$allProductsJoins['core_sys_lang_words'] = array( 'table' => 'core_sys_lang_words', 'on' => array( "word_app='nexus' AND word_key=CONCAT( 'nexus_package_', p_id ) AND lang_id=?", \IPS\Member::loggedIn()->language()->id ) );
						$allProductsSortBy = 'word_custom';
						$url = $url->setQueryString( 'sortby', \IPS\Request::i()->sortby );
						break;
						
					case 'price_low':
					case 'price_high':
						$allProductsJoins['nexus_package_base_prices'] = array( 'table' => 'nexus_package_base_prices', 'on' => array( 'id=p_id' ) );
						$allProductsSortBy = \IPS\Request::i()->sortby == 'price_low' ? $this->currency : ( $this->currency . ' DESC' );
						$url = $url->setQueryString( 'sortby', \IPS\Request::i()->sortby );
						break;
						
					case 'rating':
						$allProductsSortBy = 'p_rating DESC';
						$url = $url->setQueryString( 'sortby', \IPS\Request::i()->sortby );
						break;
						
					default:
						$allProductsSortBy = 'p_position';
						$url = $url->setQueryString( 'sortby', NULL );
						break;
				}
				
				$allProductsSQL = \IPS\Db::i()->select( '*', 'nexus_packages', $allProductsWhere, $allProductsSortBy );
				foreach ( $allProductsJoins as $allProductsJoin )
				{
					$allProductsSQL->join( $allProductsJoin['table'], $allProductsJoin['on'] );
				}
				$allProducts = new \IPS\Patterns\ActiveRecordIterator( $allProductsSQL, 'IPS\nexus\Package' );
				$allProductsCount = \count( $allProducts );
				
				$groups = array();
				$groupProducts = array();
				$groupProductsJoins = array();
				$groupProductsWhere = array();
				$groupProductsCount = array();
				
				if( \IPS\Settings::i()->enhancedstore_main_tab_setting == 1 )
				{
					unset( $allProductsWhere['featured'] );
				}
					
				foreach( \IPS\nexus\Package\Group::rootsWithViewablePackages() as $group )
				{
					$groups[] = $group;
					
					unset( $allProductsWhere['group_id'] );
					
					$groupProductsWhere = array();
					$groupProductsWhere['group_id'] = array( 'p_group=?', $group->id );
					
					$groupProductsSQL = \IPS\Db::i()->select( '*', 'nexus_packages', array_merge( $groupProductsWhere, $allProductsWhere ) );
					foreach ( $allProductsJoins as $groupProductsJoin )
					{
						$groupProductsSQL->join( $groupProductsJoin['table'], $groupProductsJoin['on'] );
					}
					$groupProducts[$group->id] = new \IPS\Patterns\ActiveRecordIterator( $groupProductsSQL, 'IPS\nexus\Package' );
					$groupProductsCount[$group->id] = \count( $groupProducts[$group->id] );
				}
				
				if( \IPS\Request::i()->tab AND \is_numeric( \IPS\Request::i()->tab ) AND \floatval( \IPS\Request::i()->tab ) > 0 )
				{
					$allProductsCount = array_sum( $groupProductsCount );
				}
				
				if ( \IPS\Request::i()->isAjax() )
				{
					\IPS\Output::i()->json( array(
						'contents' 	=> \IPS\Theme::i()->getTemplate('plugins', 'core', 'global' )->enhancedStore( $allProducts, $groups, $groupProducts, \IPS\nexus\Customer::loggedIn()->cm_credits[ $this->currency ], $url, $groupProductsCount, $allProductsCount ),
						'sidebar'	=> \IPS\Theme::i()->getTemplate('plugins', 'core', 'global' )->enhancedStoreSideBar( $this->currency, $url )
					)) ;
					return;
				}
				else
				{
					\IPS\Output::i()->globalControllers[] = 'plugins.enhancedstore';
					\IPS\Output::i()->globalControllers[] = 'nexus.front.store.category';
					\IPS\Output::i()->sidebar['contextual'] = \IPS\Theme::i()->getTemplate('plugins', 'core', 'global' )->enhancedStoreSideBar( $this->currency, $url );
					\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('module__nexus_store');
					\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('plugins', 'core', 'global' )->enhancedStore( $allProducts, $groups, $groupProducts, \IPS\nexus\Customer::loggedIn()->cm_credits[ $this->currency ], $url, $groupProductsCount, $allProductsCount );
				}
			}
			catch ( \RuntimeException $e )
			{
				if ( method_exists( get_parent_class(), __FUNCTION__ ) )
				{
					return \call_user_func_array( 'parent::' . __FUNCTION__, \func_get_args() );
				}
				else
				{
					throw $e;
				}
			}
		}
		catch ( \RuntimeException $e )
		{
			if ( method_exists( get_parent_class(), __FUNCTION__ ) )
			{
				return \call_user_func_array( 'parent::' . __FUNCTION__, \func_get_args() );
			}
			else
			{
				throw $e;
			}
		}
	}
}
]]></hook><hook type="C" class="\IPS\nexus\modules\front\store\product" filename="NexusViewProduct"><![CDATA[//<?php

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	exit;
}

class hook16235 extends _HOOK_CLASS_
{
	
}
]]></hook></hooks><settings><setting><key>enhancedstore_price_filters</key><default/></setting><setting><key>enhancedstore_stock_filter</key><default>0</default></setting><setting><key>enhancedstore_rating_filter</key><default>0</default></setting><setting><key>enhancedstore_main_tab_setting</key><default>0</default></setting><setting><key>enhancedstore_grid_size</key><default>0</default></setting></settings><settingsCode><![CDATA[//<?php

$priceFilters = array();
if ( \IPS\Settings::i()->enhancedstore_price_filters )
{
	foreach ( json_decode( \IPS\Settings::i()->enhancedstore_price_filters, TRUE ) as $currency => $prices )
	{
		foreach ( $prices as $i => $price )
		{
			$priceFilters[ $i ][ $currency ] = $price;
		}
	}
}

$form->add( new \IPS\Helpers\Form\Select( 'enhancedstore_main_tab_setting', \IPS\Settings::i()->enhancedstore_main_tab_setting, FALSE, array( 'options' => array( 0 => 'All Products', 1 => 'Featured Products' ) ) ) );
$form->add( new \IPS\Helpers\Form\Select( 'enhancedstore_grid_size', \IPS\Settings::i()->enhancedstore_grid_size, FALSE, array( 'options' => array( 0 => 'Large Boxes', 1 => 'Small Boxes' ) ) ) );
$form->add( new \IPS\Helpers\Form\Stack( 'enhancedstore_price_filters', $priceFilters, FALSE, array( 'stackFieldType' => 'IPS\nexus\Form\Money' ) ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'enhancedstore_rating_filter', \IPS\Settings::i()->enhancedstore_rating_filter, FALSE, array(  ) ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'enhancedstore_stock_filter', \IPS\Settings::i()->enhancedstore_stock_filter, FALSE, array(  ) ) );

if ( $values = $form->values() )
{
	$priceFilters = array();
	foreach ( $values['enhancedstore_price_filters'] as $filter )
	{
		foreach ( $filter as $currency => $amount )
		{
			$priceFilters[ $currency ][] = $amount->amount->jsonSerialize();
		}
	}
	$values['enhancedstore_price_filters'] = \count( $priceFilters ) ? json_encode( $priceFilters ) : NULL;
	
	\IPS\Db::i()->update( 'core_sys_conf_settings', array( 'conf_value' => $values['enhancedstore_price_filters'] ), array( 'conf_key=?', 'enhancedstore_price_filters' ) );
	\IPS\Db::i()->update( 'core_sys_conf_settings', array( 'conf_value' => $values['enhancedstore_rating_filter'] ), array( 'conf_key=?', 'enhancedstore_rating_filter' ) );
	\IPS\Db::i()->update( 'core_sys_conf_settings', array( 'conf_value' => $values['enhancedstore_stock_filter'] ), array( 'conf_key=?', 'enhancedstore_stock_filter' ) );
	\IPS\Db::i()->update( 'core_sys_conf_settings', array( 'conf_value' => $values['enhancedstore_main_tab_setting'] ), array( 'conf_key=?', 'enhancedstore_main_tab_setting' ) );
	\IPS\Db::i()->update( 'core_sys_conf_settings', array( 'conf_value' => $values['enhancedstore_grid_size'] ), array( 'conf_key=?', 'enhancedstore_grid_size' ) );
	unset( \IPS\Data\Store::i()->settings );
	
	return TRUE;
}

return $form;]]></settingsCode><htmlFiles><html filename="enhancedStore.phtml">PGlwczp0ZW1wbGF0ZSBwYXJhbWV0ZXJzPSIkYWxsUHJvZHVjdHMsICRncm91cHMsICRncm91cFByb2R1Y3RzLCAkY3JlZGl0cywgJHVybCwgJGdyb3VwUHJvZHVjdHNDb3VudCwgJGFsbFByb2R1Y3RzQ291bnQiIC8+DQo8c3R5bGU+DQouaXBzVGFicy5pcHNUYWJzX3N0cmV0Y2ggW3JvbGU9InRhYmxpc3QiXSB7DQoJei1pbmRleDogMTsNCn0NCjwvc3R5bGU+DQp7dGVtcGxhdGU9InBhZ2VIZWFkZXIiIGdyb3VwPSJnbG9iYWwiIGFwcD0iY29yZSIgcGFyYW1zPSJcSVBTXE1lbWJlcjo6bG9nZ2VkSW4oKS0+bGFuZ3VhZ2UoKS0+YWRkVG9TdGFjaygnc3RvcmUnKSJ9DQoNCnt7aWYgJGNyZWRpdHMtPmFtb3VudC0+aXNHcmVhdGVyVGhhblplcm8oKX19DQoJPGRpdiBjbGFzcz0naXBzTWVzc2FnZSBpcHNNZXNzYWdlX2dlbmVyYWwnPg0KCQl7bGFuZz0ic3RvcmVfY3JlZGl0X21lc3NhZ2UiIHNwcmludGY9IiRjcmVkaXRzIn0NCgk8L2Rpdj4NCnt7ZW5kaWZ9fQ0KDQo8ZGl2IGNsYXNzPSdpcHNCb3gnIGRhdGEtcm9sZT0icGFja2FnZUxpc3RDb250YWluZXIiPg0KCXt0ZW1wbGF0ZT0iZW5oYW5jZWRTdG9yZUNvbnRlbnRzIiBncm91cD0icGx1Z2lucyIgbG9jYXRpb249Imdsb2JhbCIgYXBwPSJjb3JlIiBwYXJhbXM9IiRhbGxQcm9kdWN0cywgJGdyb3VwcywgJGdyb3VwUHJvZHVjdHMsICRjcmVkaXRzLCAkdXJsLCAkZ3JvdXBQcm9kdWN0c0NvdW50LCAkYWxsUHJvZHVjdHNDb3VudCJ9DQo8L2Rpdj4=</html><html filename="enhancedStoreContents.phtml">PGlwczp0ZW1wbGF0ZSBwYXJhbWV0ZXJzPSIkYWxsUHJvZHVjdHMsICRncm91cHMsICRncm91cFByb2R1Y3RzLCAkY3JlZGl0cywgJHVybCwgJGdyb3VwUHJvZHVjdHNDb3VudCwgJGFsbFByb2R1Y3RzQ291bnQiIC8+DQo8ZGl2IGNsYXNzPSdpcHNUYWJzIGlwc1RhYnNfbWVkaXVtIGlwc1RhYnNfc3RyZXRjaCBpcHNDbGVhcmZpeCcgaWQ9J2VsTmV4dXNHcm91cHMnPg0KCTxhIGhyZWY9JyNlbE5leHVzR3JvdXBzJyBkYXRhLWFjdGlvbj0nZXhwYW5kVGFicyc+PGkgY2xhc3M9J2ZhIGZhLWNhcmV0LWRvd24nPjwvaT48L2E+DQoJPHVsIHJvbGU9InRhYmxpc3QiPg0KCQk8bGk+DQoJCQk8YSBocmVmPSJ7JHVybC0+c2V0UXVlcnlTdHJpbmcoIGFycmF5KCAndGFiJyA9PiBOVUxMLCAnZmlsdGVyJyA9PiBOVUxMICkgKX0iIGNsYXNzPSdpcHNUYWJzX2l0ZW0ge3tpZiAhXElQU1xSZXF1ZXN0OjppKCktPnRhYiB9fWlwc1RhYnNfYWN0aXZlSXRlbXt7ZW5kaWZ9fSBpcHNUeXBlX2NlbnRlcicgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIHt7aWYgIVxJUFNcUmVxdWVzdDo6aSgpLT50YWIgfX1hcmlhLXNlbGVjdGVkPSd0cnVlJ3t7ZW5kaWZ9fT4NCgkJCQl7e2lmIFxJUFNcU2V0dGluZ3M6OmkoKS0+ZW5oYW5jZWRzdG9yZV9tYWluX3RhYl9zZXR0aW5nID09IDB9fQ0KCQkJCQl7bGFuZz0iZW5oYW5jZWRzdG9yZV9hbGxfcHJvZHVjdHMifSAoeyRhbGxQcm9kdWN0c0NvdW50fSkNCgkJCQl7e2Vsc2V9fQ0KCQkJCQl7bGFuZz0iZW5oYW5jZWRzdG9yZV9mZWF0dXJlZF9wcm9kdWN0cyJ9DQoJCQkJe3tlbmRpZn19DQoJCQk8L2E+DQoJCTwvbGk+DQoJCXt7Zm9yZWFjaCAkZ3JvdXBzIGFzICRncm91cH19DQoJCQk8bGk+DQoJCQkJPGEgaHJlZj0ieyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCBhcnJheSggJ3RhYicgPT4gJGdyb3VwLT5pZCwgJ2ZpbHRlcicgPT4gTlVMTCApICl9IiBjbGFzcz0naXBzVGFic19pdGVtIHt7aWYgXElQU1xSZXF1ZXN0OjppKCktPnRhYiBBTkQgXElQU1xSZXF1ZXN0OjppKCktPnRhYiA9PSAkZ3JvdXAtPmlkIH19aXBzVGFic19hY3RpdmVJdGVte3tlbmRpZn19IGlwc1R5cGVfY2VudGVyJyBkYXRhLWFjdGlvbj0iY2hhbmdlVGFicyIge3tpZiBcSVBTXFJlcXVlc3Q6OmkoKS0+dGFiIEFORCBcSVBTXFJlcXVlc3Q6OmkoKS0+dGFiID09ICRncm91cC0+aWQgfX1hcmlhLXNlbGVjdGVkPSd0cnVlJ3t7ZW5kaWZ9fT4NCgkJCQkJeyRncm91cC0+X3RpdGxlfQ0KCQkJCTwvYT4NCgkJCTwvbGk+DQoJCXt7ZW5kZm9yZWFjaH19DQoJPC91bD4NCjwvZGl2Pg0KPHNlY3Rpb24gaWQ9J2VsTmV4dXNHcm91cHNfY29udGVudCcgY2xhc3M9J2lwc1dpZGdldF9pbm5lcicgZGF0YS1yb2xlPSJwYWNrYWdlTGlzdCI+DQoJPGRpdiBpZD0iaXBzVGFic19lbE5leHVzR3JvdXBzX2VsTmV4dXNfQWxsX3BhbmVsIiBjbGFzcz0naXBzVGFic19wYW5lbCBpcHNQYWQnPg0KCQl7e2lmIFxJUFNcU2V0dGluZ3M6OmkoKS0+ZW5oYW5jZWRzdG9yZV9ncmlkX3NpemUgPT0gMCB9fQ0KCQkJe3RlbXBsYXRlPSJlbmhhbmNlZFN0b3JlR3JpZCIgZ3JvdXA9InBsdWdpbnMiIGxvY2F0aW9uPSJnbG9iYWwiIGFwcD0iY29yZSIgcGFyYW1zPSIkYWxsUHJvZHVjdHMifQ0KCQl7e2Vsc2V9fQ0KCQkJe3RlbXBsYXRlPSJlbmhhbmNlZFN0b3JlR3JpZFNtYWxsIiBncm91cD0icGx1Z2lucyIgbG9jYXRpb249Imdsb2JhbCIgYXBwPSJjb3JlIiBwYXJhbXM9IiRhbGxQcm9kdWN0cyJ9DQoJCXt7ZW5kaWZ9fQ0KCTwvZGl2Pg0KPC9zZWN0aW9uPg==</html><html filename="enhancedStoreGrid.phtml">PGlwczp0ZW1wbGF0ZSBwYXJhbWV0ZXJzPSIkYWxsUHJvZHVjdHMiIC8+DQo8c3BhbiBjbGFzcz0iaXBzU3RyZWFtIGlwc0xpc3RfcmVzZXQgY1N0cmVhbV9tZW1iZXJzIGlwc0dyaWQgaXBzR3JpZF9jb2xsYXBzZVBob25lIiBkYXRhLWlwc0dyaWQgZGF0YS1pcHNHcmlkLWVxdWFsSGVpZ2h0cz0ncm93JyBkYXRhLWlwc0dyaWQtbWluSXRlbVNpemU9JzI1MCcgZGF0YS1pcHNHcmlkLW1heEl0ZW1TaXplPSc0MDAnPg0KCXt7aWYgIVxjb3VudCgkYWxsUHJvZHVjdHMpfX0NCgkJPGxpIGNsYXNzPSJpcHNQYWQgaXBzVHlwZV9jZW50ZXIgaXBzVHlwZV9saWdodCBpcHNUeXBlX2xhcmdlIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+DQoJCQl7bGFuZz0iZW5oYW5jZWRzdG9yZV9ub19wcm9kdWN0c19mb3VuZCJ9DQoJCTwvbGk+DQoJe3tlbmRpZn19DQoJe3tmb3JlYWNoICRhbGxQcm9kdWN0cyBhcyAkcGFja2FnZX19DQoJCTxsaSBjbGFzcz0iaXBzR3JpZF9zcGFuNCBpcHNTdHJlYW1JdGVtIGlwc1N0cmVhbUl0ZW1fY29udGVudEJsb2NrIGlwc0FyZWFCYWNrZ3JvdW5kX3Jlc2V0IGlwc1BhZCBpcHNUeXBlX2NlbnRlciIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPg0KCQkJPGRpdiBjbGFzcz0naXBzU3RyZWFtSXRlbV9jb250YWluZXInPg0KCQkJCTxjZW50ZXI+DQoJCQkJCTxhIGhyZWY9InskcGFja2FnZS0+dXJsKCl9IiB0aXRsZT0nJHBhY2thZ2UtPl90aXRsZSc+DQoJCQkJCQl7e2lmICRwYWNrYWdlLT5pbWFnZX19DQoJCQkJCQkJPHNwYW4gc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHVybCggeyRwYWNrYWdlLT5pbWFnZX0gKTsgaGVpZ2h0OiAxNTBweDsgYmFja2dyb3VuZC1zaXplOiBjb250YWluOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCUgNTAlOyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsiIGNsYXNzPSJpcHNUaHVtYiBpcHNUaHVtYl9iZyI+DQoJCQkJCQkJCTxpbWcgc3JjPSJ7JHBhY2thZ2UtPmltYWdlfSIgYWx0PSIiPg0KCQkJCQkJCTwvc3Bhbj4NCgkJCQkJCXt7ZWxzZX19DQoJCQkJCQkJPGRpdiBjbGFzcz0naXBzTm9UaHVtYiBpcHNOb1RodW1iX3Byb2R1Y3QnPiZuYnNwOzwvZGl2Pg0KCQkJCQkJe3tlbmRpZn19DQoJCQkJCTwvYT4NCgkJCQk8L2NlbnRlcj4NCgkJCQk8ZGl2IGNsYXNzPSdpcHNTdHJlYW1JdGVtX2hlYWRlciBpcHNTcGFjZXJfdG9wIGlwc1NwYWNlcl9oYWxmJz4NCgkJCQkJe3tpZiAkcGFja2FnZS0+cmV2aWV3YWJsZX19DQoJCQkJCQk8c3Bhbj4NCgkJCQkJCQl7dGVtcGxhdGU9InJhdGluZyIgZ3JvdXA9Imdsb2JhbCIgYXBwPSJjb3JlIiBwYXJhbXM9IidtZWRpdW0nLCAkcGFja2FnZS0+aXRlbSgpLT5hdmVyYWdlUmV2aWV3UmF0aW5nKCksIFxJUFNcU2V0dGluZ3M6OmkoKS0+cmV2aWV3c19yYXRpbmdfb3V0X29mLCAkcGFja2FnZS0+aXRlbSgpLT5tZW1iZXJSZXZpZXdSYXRpbmcoKSJ9IDxzcGFuIGNsYXNzPSdpcHNUeXBlX3NtYWxsJz4oeyRwYWNrYWdlLT5pdGVtKCktPnJldmlld3N9KTwvc3Bhbj4NCgkJCQkJCTwvc3Bhbj4NCgkJCQkJe3tlbmRpZn19DQoJCQkJCTxoMiBjbGFzcz0naXBzVHlwZV9yZXNldCBpcHNTdHJlYW1JdGVtX3RpdGxlIGlwc1RydW5jYXRlIGlwc1RydW5jYXRlX2xpbmUnPg0KCQkJCQkJPGEgaHJlZj0ieyRwYWNrYWdlLT51cmwoKX0iIGRhdGEtcm9sZT0ncHJvZHVjdExpbmsnIGNsYXNzPSdpcHNUcnVuY2F0ZSBpcHNUcnVuY2F0ZV9saW5lJyB0aXRsZT0ieyRwYWNrYWdlLT5fdGl0bGV9Ij57JHBhY2thZ2UtPl90aXRsZX08L2E+DQoJCQkJCTwvaDI+DQoJCQkJCTxociBjbGFzcz0naXBzSHIgaXBzSHJfc21hbGwnPg0KCQkJCQk8cCBjbGFzcz0naXBzVHlwZV9yZXNldCBpcHNUeXBlX2xhcmdlIGlwc1R5cGVfbGlnaHQnPjxzcGFuIGRhdGEtcm9sZT0icHJpY2UiPnskcGFja2FnZS0+cHJpY2VUb0Rpc3BsYXkoKXxyYXd9PC9zcGFuPjwvcD4NCgkJCQkJe3tpZiAkcGFja2FnZS0+cGh5c2ljYWx9fQ0KCQkJCQkJe3tpZiAkcGFja2FnZS0+c3RvY2sgIT09IDB9fQ0KCQkJCQkJCTxzcGFuIGNsYXNzPSdpcHNUeXBlX3NtYWxsIGNOZXh1c1N0b2NrIGNOZXh1c1N0b2NrX2luU3RvY2snPnt7aWYgc2V0dGluZ3MubmV4dXNfc2hvd19zdG9jayAmJiAkcGFja2FnZS0+c3RvY2sgIT09IC0xICYmICRwYWNrYWdlLT5zdG9jayAhPT0gLTJ9fXtsYW5nPSJ4X2luX3N0b2NrIiBwbHVyYWxpemU9IiRwYWNrYWdlLT5zdG9jayJ9e3tlbHNlfX17bGFuZz0iaW5fc3RvY2sifXt7ZW5kaWZ9fTwvc3Bhbj4NCgkJCQkJCXt7ZWxzZX19DQoJCQkJCQkJPHNwYW4gY2xhc3M9J2lwc1R5cGVfc21hbGwgY05leHVzU3RvY2sgY05leHVzU3RvY2tfbm90SW5TdG9jayBpcHNUeXBlX3dhcm5pbmcnPntsYW5nPSJvdXRfb2Zfc3RvY2sifTwvc3Bhbj4NCgkJCQkJCXt7ZW5kaWZ9fQ0KCQkJCQl7e2VuZGlmfX0NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQk8L2xpPg0KCXt7ZW5kZm9yZWFjaH19DQo8L3NwYW4+</html><html filename="enhancedStoreGridSmall.phtml">PGlwczp0ZW1wbGF0ZSBwYXJhbWV0ZXJzPSIkYWxsUHJvZHVjdHMiIC8+DQo8c3BhbiBjbGFzcz0iaXBzU3RyZWFtIGlwc0xpc3RfcmVzZXQgY1N0cmVhbV9tZW1iZXJzIGlwc0dyaWQgaXBzR3JpZF9jb2xsYXBzZVBob25lIiBkYXRhLWlwc0dyaWQgZGF0YS1pcHNHcmlkLWVxdWFsSGVpZ2h0cz0ncm93JyBkYXRhLWlwc0dyaWQtbWluSXRlbVNpemU9JzIwMCcgZGF0YS1pcHNHcmlkLW1heEl0ZW1TaXplPSczNTAnPg0KCXt7aWYgIVxjb3VudCgkYWxsUHJvZHVjdHMpfX0NCgkJPGxpIGNsYXNzPSJpcHNQYWQgaXBzVHlwZV9jZW50ZXIgaXBzVHlwZV9saWdodCBpcHNUeXBlX2xhcmdlIiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4OyI+DQoJCQl7bGFuZz0iZW5oYW5jZWRzdG9yZV9ub19wcm9kdWN0c19mb3VuZCJ9DQoJCTwvbGk+DQoJe3tlbmRpZn19DQoJe3tmb3JlYWNoICRhbGxQcm9kdWN0cyBhcyAkcGFja2FnZX19DQoJCTxsaSBjbGFzcz0iaXBzR3JpZF9zcGFuNCBpcHNTdHJlYW1JdGVtIGlwc1N0cmVhbUl0ZW1fY29udGVudEJsb2NrIGlwc0FyZWFCYWNrZ3JvdW5kX3Jlc2V0IGlwc1BhZCBpcHNUeXBlX2NlbnRlciIgc3R5bGU9Im1hcmdpbi10b3A6MTBweDsiPg0KCQkJPGRpdiBjbGFzcz0naXBzU3RyZWFtSXRlbV9jb250YWluZXInPg0KCQkJCTxjZW50ZXI+DQoJCQkJCTxhIGhyZWY9InskcGFja2FnZS0+dXJsKCl9IiB0aXRsZT0nJHBhY2thZ2UtPl90aXRsZScgPg0KCQkJCQkJe3tpZiAkcGFja2FnZS0+aW1hZ2V9fQ0KCQkJCQkJCTxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoIHskcGFja2FnZS0+aW1hZ2V9ICk7IGhlaWdodDogMTUwcHg7IGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IiBjbGFzcz0iaXBzVGh1bWIgaXBzVGh1bWJfYmciID4NCgkJCQkJCQkJPGltZyBzcmM9InskcGFja2FnZS0+aW1hZ2V9IiBhbHQ9IiI+DQoJCQkJCQkJPC9zcGFuPg0KCQkJCQkJe3tlbHNlfX0NCgkJCQkJCQk8ZGl2IGNsYXNzPSdpcHNOb1RodW1iIGlwc05vVGh1bWJfcHJvZHVjdCcgc3R5bGU9J3dpZHRoOjE1MHB4OyBoZWlnaHQ6MTUwcHg7Jz4mbmJzcDs8L2Rpdj4NCgkJCQkJCXt7ZW5kaWZ9fQ0KCQkJCQk8L2E+DQoJCQkJPC9jZW50ZXI+DQoJCQkJPGRpdiBjbGFzcz0naXBzU3RyZWFtSXRlbV9oZWFkZXIgaXBzU3BhY2VyX3RvcCBpcHNTcGFjZXJfaGFsZic+DQoJCQkJCXt7aWYgJHBhY2thZ2UtPnJldmlld2FibGV9fQ0KCQkJCQkJPHNwYW4+DQoJCQkJCQkJe3RlbXBsYXRlPSJyYXRpbmciIGdyb3VwPSJnbG9iYWwiIGFwcD0iY29yZSIgcGFyYW1zPSInbWVkaXVtJywgJHBhY2thZ2UtPml0ZW0oKS0+YXZlcmFnZVJldmlld1JhdGluZygpLCBcSVBTXFNldHRpbmdzOjppKCktPnJldmlld3NfcmF0aW5nX291dF9vZiwgJHBhY2thZ2UtPml0ZW0oKS0+bWVtYmVyUmV2aWV3UmF0aW5nKCkifSA8c3BhbiBjbGFzcz0naXBzVHlwZV9zbWFsbCc+KHskcGFja2FnZS0+aXRlbSgpLT5yZXZpZXdzfSk8L3NwYW4+DQoJCQkJCQk8L3NwYW4+DQoJCQkJCXt7ZW5kaWZ9fQ0KCQkJCQk8aDIgY2xhc3M9J2lwc1R5cGVfbm9ybWFsIGlwc1R5cGVfcmVzZXQgaXBzVHJ1bmNhdGUgaXBzVHJ1bmNhdGVfbGluZSc+DQoJCQkJCQk8YSBocmVmPSJ7JHBhY2thZ2UtPnVybCgpfSIgZGF0YS1yb2xlPSdwcm9kdWN0TGluaycgY2xhc3M9J2lwc1RydW5jYXRlIGlwc1RydW5jYXRlX2xpbmUnIHRpdGxlPSJ7JHBhY2thZ2UtPl90aXRsZX0iICA+eyRwYWNrYWdlLT5fdGl0bGV9PC9hPg0KCQkJCQk8L2gyPg0KCQkJCQk8aHIgY2xhc3M9J2lwc0hyIGlwc0hyX3NtYWxsJz4NCgkJCQkJPHAgY2xhc3M9J2lwc1R5cGVfcmVzZXQgaXBzVHlwZV9sYXJnZSBpcHNUeXBlX2xpZ2h0Jz48c3BhbiBkYXRhLXJvbGU9InByaWNlIj57JHBhY2thZ2UtPnByaWNlVG9EaXNwbGF5KCl8cmF3fTwvc3Bhbj48L3A+DQoJCQkJCXt7aWYgJHBhY2thZ2UtPnBoeXNpY2FsfX0NCgkJCQkJCXt7aWYgJHBhY2thZ2UtPnN0b2NrICE9PSAwfX0NCgkJCQkJCQk8c3BhbiBjbGFzcz0naXBzVHlwZV9zbWFsbCBjTmV4dXNTdG9jayBjTmV4dXNTdG9ja19pblN0b2NrJz57e2lmIHNldHRpbmdzLm5leHVzX3Nob3dfc3RvY2sgJiYgJHBhY2thZ2UtPnN0b2NrICE9PSAtMSAmJiAkcGFja2FnZS0+c3RvY2sgIT09IC0yfX17bGFuZz0ieF9pbl9zdG9jayIgcGx1cmFsaXplPSIkcGFja2FnZS0+c3RvY2sifXt7ZWxzZX19e2xhbmc9ImluX3N0b2NrIn17e2VuZGlmfX08L3NwYW4+DQoJCQkJCQl7e2Vsc2V9fQ0KCQkJCQkJCTxzcGFuIGNsYXNzPSdpcHNUeXBlX3NtYWxsIGNOZXh1c1N0b2NrIGNOZXh1c1N0b2NrX25vdEluU3RvY2sgaXBzVHlwZV93YXJuaW5nJz57bGFuZz0ib3V0X29mX3N0b2NrIn08L3NwYW4+DQoJCQkJCQl7e2VuZGlmfX0NCgkJCQkJe3tlbmRpZn19DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj4NCgkJPC9saT4NCgl7e2VuZGZvcmVhY2h9fQ0KPC9zcGFuPg==</html><html filename="enhancedStoreSideBar.phtml">PGlwczp0ZW1wbGF0ZSBwYXJhbWV0ZXJzPSIkY3VycmVuY3k9TlVMTCwgJHVybCIgLz4KCjxkaXYgZGF0YS1yb2xlPSJjYXRlZ29yeVNpZGViYXIiPgoJe3RlbXBsYXRlPSJjaG9vc2VDdXJyZW5jeSIgZ3JvdXA9InN0b3JlIiBwYXJhbXM9IiR1cmwifTxicj4KCTxkaXYgY2xhc3M9J2lwc0JveCBpcHNTcGFjZXJfYm90dG9tJyBpZD0nZWxOZXh1c1NvcnRCb3gnPgoJCTxoMiBjbGFzcz0naXBzVHlwZV9zZWN0aW9uVGl0bGUgaXBzVHlwZV9yZXNldCc+CgkJCXt7aWYgXElQU1xSZXF1ZXN0OjppKCktPnNvcnRieX19CgkJCQk8YSBocmVmPSJ7JHVybC0+c2V0UXVlcnlTdHJpbmcoICdzb3J0YnknLCBOVUxMICl9IiBkYXRhLWFjdGlvbj0iY2hhbmdlVGFicyIgY2xhc3M9Imlwc1Bvc19yaWdodCBpcHNCdXR0b24gaXBzQnV0dG9uX3ZlcnlMaWdodCBpcHNCdXR0b25fdmVyeVZlcnlTbWFsbCBpcHNTaWRlTWVudV90aXRsZUV4dHJhIj4KCQkJCQl7bGFuZz0iZW5oYW5jZWRzdG9yZV9jbGVhcl9zb3J0In0KCQkJCTwvYT4KCQkJe3tlbmRpZn19CgkJCXtsYW5nPSJlbmhhbmNlZHN0b3JlX3NvcnRfYnkifQoJCTwvaDI+CgkJPGRpdiBjbGFzcz0naXBzUGFkX2hhbGYnPgoJCQk8ZGl2IGNsYXNzPSJpcHNTaWRlTWVudSBpcHNTaWRlTWVudV93aXRoUmFkaW9zIGlwc1R5cGVfbWVkaXVtIj4KCQkJCTx1bCBjbGFzcz0naXBzU2lkZU1lbnVfbGlzdCc+CgkJCQkJe3tmb3JlYWNoIGFycmF5KCAnbmFtZScsICdwcmljZV9sb3cnLCAncHJpY2VfaGlnaCcsICdyYXRpbmcnICkgYXMgJGt9fQoJCQkJCQl7eyRzb3J0QWN0aXZlID0gRkFMU0U7fX0KCQkJCQkJe3tpZiAoIFxJUFNcUmVxdWVzdDo6aSgpLT5zb3J0YnkgYW5kIFxJUFNcUmVxdWVzdDo6aSgpLT5zb3J0YnkgPT0gJGsgKSBvciAoICFcSVBTXFJlcXVlc3Q6OmkoKS0+c29ydGJ5IGFuZCAkayA9PT0gJ2RlZmF1bHQnICl9fQoJCQkJCQkJe3skc29ydEFjdGl2ZSA9IFRSVUU7fX0KCQkJCQkJe3tlbmRpZn19CgkJCQkJCTxsaT4KCQkJCQkJCXt7aWYgJHNvcnRBY3RpdmV9fQoJCQkJCQkJCTxhIGhyZWY9InskdXJsLT5zZXRRdWVyeVN0cmluZyggJ3NvcnRieScsIE5VTEwgKX0iIGRhdGEtYWN0aW9uPSJjaGFuZ2VUYWJzIiBjbGFzcz0naXBzU2lkZU1lbnVfaXRlbSBpcHNUcnVuY2F0ZSBpcHNUcnVuY2F0ZV9saW5lIHt7aWYgJHNvcnRBY3RpdmV9fWlwc1NpZGVNZW51X2l0ZW1BY3RpdmV7e2VuZGlmfX0nPgoJCQkJCQkJCQl7bGFuZz0icHJvZHVjdHNfc29ydF97JGt9In0KCQkJCQkJCQk8L2E+CgkJCQkJCQl7e2Vsc2V9fQoJCQkJCQkJCTxhIGhyZWY9InskdXJsLT5zZXRRdWVyeVN0cmluZyggJ3NvcnRieScsICRrICl9IiBkYXRhLWFjdGlvbj0iY2hhbmdlVGFicyIgY2xhc3M9J2lwc1NpZGVNZW51X2l0ZW0gaXBzVHJ1bmNhdGUgaXBzVHJ1bmNhdGVfbGluZSB7e2lmICRzb3J0QWN0aXZlfX1pcHNTaWRlTWVudV9pdGVtQWN0aXZle3tlbmRpZn19Jz4KCQkJCQkJCQkJe2xhbmc9InByb2R1Y3RzX3NvcnRfeyRrfSJ9CgkJCQkJCQkJPC9hPgoJCQkJCQkJe3tlbmRpZn19CgkJCQkJCTwvbGk+CgkJCQkJe3tlbmRmb3JlYWNofX0KCQkJCTwvdWw+CgkJCTwvZGl2PgkJCQkKCQk8L2Rpdj4KCTwvZGl2PiAgICAKCXt7aWYgXElQU1xTZXR0aW5nczo6aSgpLT5lbmhhbmNlZHN0b3JlX3ByaWNlX2ZpbHRlcnMgb3IgXElQU1xTZXR0aW5nczo6aSgpLT5lbmhhbmNlZHN0b3JlX3JhdGluZ19maWx0ZXIgb3IgXElQU1xTZXR0aW5nczo6aSgpLT5lbmhhbmNlZHN0b3JlX3N0b2NrX2ZpbHRlcn19CgkJPGRpdiBjbGFzcz0naXBzQm94IGlwc1NwYWNlcl9ib3R0b20nIGlkPSdlbE5leHVzRmlsdGVyc0JveCc+CgkJCTxoMiBjbGFzcz0naXBzVHlwZV9zZWN0aW9uVGl0bGUgaXBzVHlwZV9yZXNldCc+CgkJCQl7e2lmIFxJUFNcUmVxdWVzdDo6aSgpLT5taW5Db3N0IG9yIFxJUFNcUmVxdWVzdDo6aSgpLT5tYXhDb3N0IG9yIFxJUFNcUmVxdWVzdDo6aSgpLT5taW5SYXRpbmcgb3IgXElQU1xSZXF1ZXN0OjppKCktPmluU3RvY2sgb3IgXElQU1xSZXF1ZXN0OjppKCktPmZpbHRlcn19CgkJCQkJPGEgaHJlZj0ieyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCBhcnJheSggJ21pbkNvc3QnID0+IE5VTEwsICdtYXhDb3N0JyA9PiBOVUxMLCAnbWluUmF0aW5nJyA9PiBOVUxMLCAnaW5TdG9jaycgPT4gTlVMTCwgJ2ZpbHRlcicgPT4gTlVMTCApICl9IiBkYXRhLWFjdGlvbj0iY2hhbmdlVGFicyIgY2xhc3M9Imlwc1Bvc19yaWdodCBpcHNCdXR0b24gaXBzQnV0dG9uX3ZlcnlMaWdodCBpcHNCdXR0b25fdmVyeVZlcnlTbWFsbCBpcHNTaWRlTWVudV90aXRsZUV4dHJhIj4KCQkJCQkJe2xhbmc9InN0b3JlX2NsZWFyX2ZpbHRlcnMifQoJCQkJCTwvYT4KCQkJCXt7ZW5kaWZ9fQoJCQkJe2xhbmc9InN0b3JlX2ZpbHRlcl9ieSJ9CgkJCTwvaDI+CgkJCTxkaXYgY2xhc3M9J2lwc1BhZF9oYWxmJz4KCQkJCXt7JGNhdGVnb3J5ID0gTlVMTDt9fQoJCQkJe3tpZiBcSVBTXFJlcXVlc3Q6OmkoKS0+dGFiIH19CgkJCQkJe3skY2F0ZWdvcnkgPSBcSVBTXG5leHVzXFBhY2thZ2VcR3JvdXA6OmxvYWQoIFxJUFNcUmVxdWVzdDo6aSgpLT50YWIgKTt9fQoJCQkJCXt7Zm9yZWFjaCAkY2F0ZWdvcnktPmZpbHRlcnMoIFxJUFNcTWVtYmVyOjpsb2dnZWRJbigpLT5sYW5ndWFnZSgpICkgYXMgJGZpbHRlcklkID0+ICR2YWx1ZXN9fQoJCQkJCQk8ZGl2IGNsYXNzPSJpcHNTaWRlTWVudSBpcHNTaWRlTWVudV93aXRoUmFkaW9zIGlwc1R5cGVfbWVkaXVtIj4KCQkJCQkJCTxoNCBjbGFzcz0naXBzU2lkZU1lbnVfdGl0bGUgaXBzU3BhY2VyX3RvcCBpcHNTcGFjZXJfaGFsZic+e2xhbmc9Im5leHVzX3Byb2R1Y3RfZmlsdGVyXyRmaWx0ZXJJZCJ9PC9oND4KCQkJCQkJCTx1bCBjbGFzcz0naXBzU2lkZU1lbnVfbGlzdCc+CgkJCQkJCQkJe3tmb3JlYWNoICR2YWx1ZXMgYXMgJHZhbHVlSWQgPT4gJHZhbHVlfX0KCQkJCQkJCQkJPGxpPgoJCQkJCQkJCQkJe3skYWN0aXZlID0gKCBpc3NldCggXElQU1xSZXF1ZXN0OjppKCktPmZpbHRlclsgJGZpbHRlcklkIF0gKSBhbmQgXGluX2FycmF5KCAkdmFsdWVJZCwgZXhwbG9kZSggJywnLCBcSVBTXFJlcXVlc3Q6OmkoKS0+ZmlsdGVyWyAkZmlsdGVySWQgXSApICkgKTt9fQoJCQkJCQkJCQkJPGEgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIGhyZWY9J3t7aWYgJGFjdGl2ZX19eyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCAnZmlsdGVyJywgXElQU1xuZXh1c1xQYWNrYWdlXEZpbHRlcjo6cXVlcnlTdHJpbmcoIFxJUFNcUmVxdWVzdDo6aSgpLT5maWx0ZXIsICRmaWx0ZXJJZCwgTlVMTCwgJHZhbHVlSWQgKSApfXt7ZWxzZX19eyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCAnZmlsdGVyJywgXElQU1xuZXh1c1xQYWNrYWdlXEZpbHRlcjo6cXVlcnlTdHJpbmcoIFxJUFNcUmVxdWVzdDo6aSgpLT5maWx0ZXIsICRmaWx0ZXJJZCwgJHZhbHVlSWQgKSApfXt7ZW5kaWZ9fScgY2xhc3M9J2lwc1NpZGVNZW51X2l0ZW0gaXBzVHJ1bmNhdGUgaXBzVHJ1bmNhdGVfbGluZSB7e2lmICRhY3RpdmV9fWlwc1NpZGVNZW51X2l0ZW1BY3RpdmV7e2VuZGlmfX0nPgoJCQkJCQkJCQkJCXskdmFsdWV9CgkJCQkJCQkJCQk8L2E+CgkJCQkJCQkJCTwvbGk+CgkJCQkJCQkJe3tlbmRmb3JlYWNofX0KCQkJCQkJCTwvdWw+CgkJCQkJCTwvZGl2PgoJCQkJCXt7ZW5kZm9yZWFjaH19CgkJCQl7e2VuZGlmfX0KCQkJCXt7aWYgXElQU1xTZXR0aW5nczo6aSgpLT5lbmhhbmNlZHN0b3JlX3ByaWNlX2ZpbHRlcnN9fQoJCQkJCTxkaXYgY2xhc3M9Imlwc1NpZGVNZW51IGlwc1NpZGVNZW51X3dpdGhSYWRpb3MgaXBzVHlwZV9tZWRpdW0iPgoJCQkJCQk8aDQgY2xhc3M9J2lwc1NpZGVNZW51X3RpdGxlIGlwc1NwYWNlcl90b3AgaXBzU3BhY2VyX2hhbGYnPntsYW5nPSJwcmljZSJ9PC9oND4KCQkJCQkJPHVsIGNsYXNzPSdpcHNTaWRlTWVudV9saXN0Jz4KCQkJCQkJCXt7aWYgJGNhdGVnb3J5IEFORCAkY2F0ZWdvcnktPnByaWNlX2ZpbHRlcnMgfX0KCQkJCQkJCQl7eyRoYXNQcmljZUZpbHRlcnMgPSAoICRjYXRlZ29yeS0+cHJpY2VfZmlsdGVycyBhbmQgJHByaWNlRmlsdGVycyA9IGpzb25fZGVjb2RlKCAkY2F0ZWdvcnktPnByaWNlX2ZpbHRlcnMsIFRSVUUgKSBhbmQgaXNzZXQoICRwcmljZUZpbHRlcnNbICRjdXJyZW5jeSBdICkgYW5kIFxjb3VudCggJHByaWNlRmlsdGVyc1sgJGN1cnJlbmN5IF0gKSApOyAkbGFzdEFtb3VudCA9IDA7ICRwcmljZUZpbHRlckFjdGl2ZSA9IEZBTFNFO319CgkJCQkJCQl7e2Vsc2V9fQoJCQkJCQkJCXt7JGhhc1ByaWNlRmlsdGVycyA9ICggXElQU1xTZXR0aW5nczo6aSgpLT5lbmhhbmNlZHN0b3JlX3ByaWNlX2ZpbHRlcnMgYW5kICRwcmljZUZpbHRlcnMgPSBqc29uX2RlY29kZSggXElQU1xTZXR0aW5nczo6aSgpLT5lbmhhbmNlZHN0b3JlX3ByaWNlX2ZpbHRlcnMsIFRSVUUgKSBhbmQgaXNzZXQoICRwcmljZUZpbHRlcnNbICRjdXJyZW5jeSBdICkgYW5kIFxjb3VudCggJHByaWNlRmlsdGVyc1sgJGN1cnJlbmN5IF0gKSApOyAkbGFzdEFtb3VudCA9IDA7ICRwcmljZUZpbHRlckFjdGl2ZSA9IEZBTFNFO319CgkJCQkJCQl7e2VuZGlmfX0KCQkJCQkJCXt7aWYgJGhhc1ByaWNlRmlsdGVyc319CgkJCQkJCQkJe3tmb3JlYWNoICRwcmljZUZpbHRlcnNbICRjdXJyZW5jeSBdIGFzICRhbW91bnR9fQoJCQkJCQkJCQk8bGk+CgkJCQkJCQkJCQl7e2lmICRsYXN0QW1vdW50fX0KCQkJCQkJCQkJCQl7e2lmIFxJUFNcUmVxdWVzdDo6aSgpLT5taW5Db3N0IGFuZCBcSVBTXFJlcXVlc3Q6OmkoKS0+bWF4Q29zdCBhbmQgXElQU1xSZXF1ZXN0OjppKCktPm1pbkNvc3QgPT0gJGxhc3RBbW91bnQgYW5kIFxJUFNcUmVxdWVzdDo6aSgpLT5tYXhDb3N0ID09ICRhbW91bnR9fQoJCQkJCQkJCQkJCQl7eyRwcmljZUZpbHRlckFjdGl2ZSA9IFRSVUU7fX0KCQkJCQkJCQkJCQkJPGEgaHJlZj0ieyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCAnbWluQ29zdCcsIE5VTEwgKS0+c2V0UXVlcnlTdHJpbmcoICdtYXhDb3N0JywgTlVMTCApfSIgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIGNsYXNzPSdpcHNTaWRlTWVudV9pdGVtIGlwc1RydW5jYXRlIGlwc1RydW5jYXRlX2xpbmUgaXBzU2lkZU1lbnVfaXRlbUFjdGl2ZSc+CgkJCQkJCQkJCQkJCQl7bW9uZXk9IiRsYXN0QW1vdW50IiBjdXJyZW5jeT0iJGN1cnJlbmN5In0mbmRhc2g7e21vbmV5PSIkYW1vdW50IiBjdXJyZW5jeT0iJGN1cnJlbmN5In0KCQkJCQkJCQkJCQkJPC9hPgoJCQkJCQkJCQkJCXt7ZWxzZX19CgkJCQkJCQkJCQkJCTxhIGhyZWY9InskdXJsLT5zZXRRdWVyeVN0cmluZyggJ21pbkNvc3QnLCAkbGFzdEFtb3VudCApLT5zZXRRdWVyeVN0cmluZyggJ21heENvc3QnLCAkYW1vdW50ICl9IiBkYXRhLWFjdGlvbj0iY2hhbmdlVGFicyIgY2xhc3M9J2lwc1NpZGVNZW51X2l0ZW0gaXBzVHJ1bmNhdGUgaXBzVHJ1bmNhdGVfbGluZSc+CgkJCQkJCQkJCQkJCQl7bW9uZXk9IiRsYXN0QW1vdW50IiBjdXJyZW5jeT0iJGN1cnJlbmN5In0mbmRhc2g7e21vbmV5PSIkYW1vdW50IiBjdXJyZW5jeT0iJGN1cnJlbmN5In0KCQkJCQkJCQkJCQkJPC9hPgoJCQkJCQkJCQkJCXt7ZW5kaWZ9fQoJCQkJCQkJCQkJe3tlbHNlfX0KCQkJCQkJCQkJCQl7e2lmIFxJUFNcUmVxdWVzdDo6aSgpLT5tYXhDb3N0IGFuZCBcSVBTXFJlcXVlc3Q6OmkoKS0+bWF4Q29zdCA9PSAkYW1vdW50IGFuZCAhXElQU1xSZXF1ZXN0OjppKCktPm1pbkNvc3R9fQoJCQkJCQkJCQkJCQl7eyRwcmljZUZpbHRlckFjdGl2ZSA9IFRSVUU7fX0KCQkJCQkJCQkJCQkJPGEgaHJlZj0ieyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCAnbWF4Q29zdCcsIE5VTEwgKS0+c2V0UXVlcnlTdHJpbmcoICdtaW5Db3N0JywgTlVMTCApfSIgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIGNsYXNzPSdpcHNTaWRlTWVudV9pdGVtIGlwc1RydW5jYXRlIGlwc1RydW5jYXRlX2xpbmUgaXBzU2lkZU1lbnVfaXRlbUFjdGl2ZSc+CgkJCQkJCQkJCQkJCQl7bW9uZXk9IjAiIGN1cnJlbmN5PSIkY3VycmVuY3kifSZuZGFzaDt7bW9uZXk9IiRhbW91bnQiIGN1cnJlbmN5PSIkY3VycmVuY3kifQoJCQkJCQkJCQkJCQk8L2E+CgkJCQkJCQkJCQkJe3tlbHNlfX0KCQkJCQkJCQkJCQkJPGEgaHJlZj0ieyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCAnbWF4Q29zdCcsICRhbW91bnQgKS0+c2V0UXVlcnlTdHJpbmcoICdtaW5Db3N0JywgTlVMTCApfSIgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIGNsYXNzPSdpcHNTaWRlTWVudV9pdGVtIGlwc1RydW5jYXRlIGlwc1RydW5jYXRlX2xpbmUnPgoJCQkJCQkJCQkJCQkJe21vbmV5PSIwIiBjdXJyZW5jeT0iJGN1cnJlbmN5In0mbmRhc2g7e21vbmV5PSIkYW1vdW50IiBjdXJyZW5jeT0iJGN1cnJlbmN5In0KCQkJCQkJCQkJCQkJPC9hPgoJCQkJCQkJCQkJCXt7ZW5kaWZ9fQoJCQkJCQkJCQkJe3tlbmRpZn19CgkJCQkJCQkJCTwvbGk+CgkJCQkJCQkJCXt7JGxhc3RBbW91bnQgPSAkYW1vdW50O319CgkJCQkJCQkJe3tlbmRmb3JlYWNofX0KCQkJCQkJCQk8bGk+CgkJCQkJCQkJCXt7aWYgXElQU1xSZXF1ZXN0OjppKCktPm1pbkNvc3QgYW5kIFxJUFNcUmVxdWVzdDo6aSgpLT5taW5Db3N0ID09ICRsYXN0QW1vdW50IGFuZCAhXElQU1xSZXF1ZXN0OjppKCktPm1heENvc3R9fQoJCQkJCQkJCQkJe3skcHJpY2VGaWx0ZXJBY3RpdmUgPSBUUlVFO319CgkJCQkJCQkJCQk8YSBocmVmPSd7JHVybC0+c2V0UXVlcnlTdHJpbmcoICdtaW5Db3N0JywgTlVMTCApLT5zZXRRdWVyeVN0cmluZyggJ21heENvc3QnLCBOVUxMICl9JyBkYXRhLWFjdGlvbj0iY2hhbmdlVGFicyIgY2xhc3M9J2lwc1NpZGVNZW51X2l0ZW0gaXBzVHJ1bmNhdGUgaXBzVHJ1bmNhdGVfbGluZSBpcHNTaWRlTWVudV9pdGVtQWN0aXZlJz4KCQkJCQkJCQkJCQl7bW9uZXk9IiRsYXN0QW1vdW50IiBjdXJyZW5jeT0iJGN1cnJlbmN5In0rCgkJCQkJCQkJCQk8L2E+CgkJCQkJCQkJCXt7ZWxzZX19CgkJCQkJCQkJCQk8YSBocmVmPSd7JHVybC0+c2V0UXVlcnlTdHJpbmcoICdtaW5Db3N0JywgJGxhc3RBbW91bnQgKS0+c2V0UXVlcnlTdHJpbmcoICdtYXhDb3N0JywgTlVMTCApfScgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIGNsYXNzPSdpcHNTaWRlTWVudV9pdGVtIGlwc1RydW5jYXRlIGlwc1RydW5jYXRlX2xpbmUnPgoJCQkJCQkJCQkJCXttb25leT0iJGxhc3RBbW91bnQiIGN1cnJlbmN5PSIkY3VycmVuY3kifSsKCQkJCQkJCQkJCTwvYT4KCQkJCQkJCQkJe3tlbmRpZn19CgkJCQkJCQkJPC9saT4KCQkJCQkJCXt7ZW5kaWZ9fQoJCQkJCQkJe3tpZiAhJHByaWNlRmlsdGVyQWN0aXZlIGFuZCAoIFxJUFNcUmVxdWVzdDo6aSgpLT5taW5Db3N0IG9yIFxJUFNcUmVxdWVzdDo6aSgpLT5tYXhDb3N0ICl9fQoJCQkJCQkJCTxsaT4KCQkJCQkJCQkJPGEgaHJlZj0neyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCAnbWluQ29zdCcsIE5VTEwgKS0+c2V0UXVlcnlTdHJpbmcoICdtYXhDb3N0JywgTlVMTCApfScgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIGNsYXNzPSdpcHNTaWRlTWVudV9pdGVtIGlwc1RydW5jYXRlIGlwc1RydW5jYXRlX2xpbmUgaXBzU2lkZU1lbnVfaXRlbUFjdGl2ZSc+CgkJCQkJCQkJCQl7e2lmIFxJUFNcUmVxdWVzdDo6aSgpLT5taW5Db3N0IGFuZCBcSVBTXFJlcXVlc3Q6OmkoKS0+bWF4Q29zdH19CgkJCQkJCQkJCQkJe21vbmV5PSJcSVBTXFJlcXVlc3Q6OmkoKS0+bWluQ29zdCIgY3VycmVuY3k9IiRjdXJyZW5jeSJ9Jm5kYXNoO3ttb25leT0iXElQU1xSZXF1ZXN0OjppKCktPm1heENvc3QiIGN1cnJlbmN5PSIkY3VycmVuY3kifQoJCQkJCQkJCQkJe3tlbHNlaWYgXElQU1xSZXF1ZXN0OjppKCktPm1pbkNvc3R9fQoJCQkJCQkJCQkJCXttb25leT0iXElQU1xSZXF1ZXN0OjppKCktPm1pbkNvc3QiIGN1cnJlbmN5PSIkY3VycmVuY3kifSsKCQkJCQkJCQkJCXt7ZWxzZX19CgkJCQkJCQkJCQkJe21vbmV5PSIwIiBjdXJyZW5jeT0iJGN1cnJlbmN5In0mbmRhc2g7e21vbmV5PSJcSVBTXFJlcXVlc3Q6OmkoKS0+bWF4Q29zdCIgY3VycmVuY3k9IiRjdXJyZW5jeSJ9CgkJCQkJCQkJCQl7e2VuZGlmfX0KCQkJCQkJCQkJPC9hPgoJCQkJCQkJCTwvbGk+CgkJCQkJCQl7e2VuZGlmfX0KCQkJCQkJPC91bD4KCQkJCQk8L2Rpdj4KCQkJCXt7ZW5kaWZ9fQkKCQkJCXt7aWYgXElQU1xTZXR0aW5nczo6aSgpLT5lbmhhbmNlZHN0b3JlX3JhdGluZ19maWx0ZXJ9fQkKCQkJCQk8ZGl2IGNsYXNzPSJpcHNTaWRlTWVudSBpcHNTaWRlTWVudV93aXRoUmFkaW9zIGlwc1R5cGVfbWVkaXVtIj4KCQkJCQkJPGg0IGNsYXNzPSdpcHNTaWRlTWVudV90aXRsZSBpcHNTcGFjZXJfdG9wIGlwc1NwYWNlcl9oYWxmJz57bGFuZz0ibWluUmF0aW5nIn08L2g0PgoJCQkJCQk8dWwgY2xhc3M9J2lwc1NpZGVNZW51X2xpc3QnPgoJCQkJCQkJe3tmb3JlYWNoIHJhbmdlKCA1LCAxICkgYXMgJG1pbmltdW1SYXRpbmd9fQoJCQkJCQkJCTxsaT4KCQkJCQkJCQkJPGEgaHJlZj0ieyR1cmwtPnNldFF1ZXJ5U3RyaW5nKCAnbWluUmF0aW5nJywgXElQU1xSZXF1ZXN0OjppKCktPm1pblJhdGluZyA9PSAkbWluaW11bVJhdGluZyA/IE5VTEwgOiAkbWluaW11bVJhdGluZyApfSIgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIGNsYXNzPSdpcHNTaWRlTWVudV9pdGVtIGlwc1RydW5jYXRlIGlwc1RydW5jYXRlX2xpbmUge3tpZiBcSVBTXFJlcXVlc3Q6OmkoKS0+bWluUmF0aW5nIGFuZCBcSVBTXFJlcXVlc3Q6OmkoKS0+bWluUmF0aW5nID09ICRtaW5pbXVtUmF0aW5nfX1pcHNTaWRlTWVudV9pdGVtQWN0aXZle3tlbmRpZn19Jz4KCQkJCQkJCQkJCXt0ZW1wbGF0ZT0icmF0aW5nIiBncm91cD0iZ2xvYmFsIiBhcHA9ImNvcmUiIHBhcmFtcz0iJ2xhcmdlJywgJG1pbmltdW1SYXRpbmcsIFxJUFNcU2V0dGluZ3M6OmkoKS0+cmV2aWV3c19yYXRpbmdfb3V0X29mIn0KCQkJCQkJCQkJPC9hPgoJCQkJCQkJCTwvbGk+CgkJCQkJCQl7e2VuZGZvcmVhY2h9fQoJCQkJCQk8L3VsPgoJCQkJCTwvZGl2PgoJCQkJe3tlbmRpZn19CgkJCQl7e2lmIFxJUFNcU2V0dGluZ3M6OmkoKS0+ZW5oYW5jZWRzdG9yZV9zdG9ja19maWx0ZXJ9fQkKCQkJCQk8ZGl2IGNsYXNzPSJpcHNTaWRlTWVudSBpcHNTaWRlTWVudV93aXRoUmFkaW9zIGlwc1R5cGVfbWVkaXVtIj4KCQkJCQkJPGg0IGNsYXNzPSdpcHNTaWRlTWVudV90aXRsZSBpcHNTcGFjZXJfdG9wIGlwc1NwYWNlcl9oYWxmJz57bGFuZz0ibmV4dXNfc3RvY2sifTwvaDQ+CgkJCQkJCTx1bCBjbGFzcz0naXBzU2lkZU1lbnVfbGlzdCc+CgkJCQkJCQk8bGk+CgkJCQkJCQkJPGEgZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiIGhyZWY9InskdXJsLT5zZXRRdWVyeVN0cmluZyggJ2luU3RvY2snLCBcSVBTXFJlcXVlc3Q6OmkoKS0+aW5TdG9jayA/IE5VTEwgOiAxICl9IiBjbGFzcz0naXBzU2lkZU1lbnVfaXRlbSBpcHNUcnVuY2F0ZSBpcHNUcnVuY2F0ZV9saW5lIHt7aWYgXElQU1xSZXF1ZXN0OjppKCktPmluU3RvY2sgYW5kIFxJUFNcUmVxdWVzdDo6aSgpLT5pblN0b2NrID09IDF9fWlwc1NpZGVNZW51X2l0ZW1BY3RpdmV7e2VuZGlmfX0nPgoJCQkJCQkJCQl7bGFuZz0iaW5fc3RvY2tfb25seSJ9CgkJCQkJCQkJPC9hPgoJCQkJCQkJPC9saT4KCQkJCQkJPC91bD4KCQkJCQk8L2Rpdj4KCQkJCXt7ZW5kaWZ9fQoJCQk8L2Rpdj4KCQk8L2Rpdj4KCXt7ZW5kaWZ9fQo8L2Rpdj4=</html></htmlFiles><cssFiles/><jsFiles><js filename="enhancedstore.js">OyggZnVuY3Rpb24oJCwgXywgdW5kZWZpbmVkKXsNCgkidXNlIHN0cmljdCI7DQoJDQoJaXBzLmNvbnRyb2xsZXIucmVnaXN0ZXIoJ3BsdWdpbnMuZW5oYW5jZWRzdG9yZScsIHsNCgkNCgkJaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkgew0KCQkJdGhpcy5vbiggZG9jdW1lbnQsICdjbGljaycsICdbZGF0YS1hY3Rpb249ImNoYW5nZVRhYnMiXScsIHRoaXMuY2hhbmdlVGFicyApOw0KCQkJdGhpcy5vbiggZG9jdW1lbnQsICdjbGljaycsICdbZGF0YS1hY3Rpb249InZpZXdQcm9kdWN0Il0nLCB0aGlzLnZpZXdQcm9kdWN0ICk7DQoJCQl0aGlzLm9uKCBkb2N1bWVudCwgJ2NsaWNrJywgJ1tkYXRhLWFjdGlvbj0ic3RvcmVGcm9udCJdJywgdGhpcy5zdG9yZUZyb250ICk7DQoJCX0sDQoJCQ0KCQlzZXR1cDogZnVuY3Rpb24gKCkgew0KCQkJDQoJCX0sDQoJCQ0KCQljaGFuZ2VUYWJzOiBmdW5jdGlvbiAoZSkgew0KCQkJZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJDQoJCQl2YXIgYWpheHVybCA9ICQoIGUuY3VycmVudFRhcmdldCApLmF0dHIoJ2hyZWYnKTsNCgkJCSQoJyNpcHNMYXlvdXRfbWFpbkFyZWEnKS5hcHBlbmQoICI8ZGl2IGNsYXNzPSdpcHNNb2RhbCc+PC9kaXY+PGRpdiBpZD0nZWxBamF4TG9hZGluZycgY2xhc3M9J2VsQWpheExvYWRpbmcnPjxpIGNsYXNzPSdpY29uLXNwaW5uZXIyIGlwc0xvYWRpbmdfdGlueUljb24gZmEtc3Bpbic+PC9pPiAmbmJzcDsmbmJzcDtsb2FkaW5nLi4uPC9kaXY+IiApOw0KCQkJDQoJCQlpcHMuZ2V0QWpheCgpKCBhamF4dXJsICkNCgkJCS5kb25lKCBmdW5jdGlvbiAocmVzcG9uc2UpIHsNCgkJCQlpZihyZXNwb25zZSkNCgkJCQl7DQoJCQkJCSQoJyNpcHNMYXlvdXRfbWFpbkFyZWEnKS5odG1sKHJlc3BvbnNlLmNvbnRlbnRzKTsNCgkJCQkJaXBzLnV0aWxzLmFuaW0uZ28oICdmYWRlSW4nLCAkKCcjZWxOZXh1c0dyb3Vwc19jb250ZW50JykgKTsNCgkJCQkJJCgnW2RhdGEtcm9sZT0iY2F0ZWdvcnlTaWRlYmFyIl0nKS5odG1sKHJlc3BvbnNlLnNpZGViYXIpOw0KCQkJCQkkKCBkb2N1bWVudCApLnRyaWdnZXIoICdjb250ZW50Q2hhbmdlJywgWyAkKCdbZGF0YS1yb2xlPSJwYWNrYWdlTGlzdENvbnRhaW5lciJdJyksICQoJ1tkYXRhLXJvbGU9ImNhdGVnb3J5U2lkZWJhciJdJykgXSApOw0KCQkJCQlIaXN0b3J5LnB1c2hTdGF0ZSggbnVsbCwgZG9jdW1lbnQudGl0bGUsIGFqYXh1cmwgKTsNCgkJCQl9DQoJCQl9KQ0KCQkJLmZhaWwoIGZ1bmN0aW9uIChyZXNwb25zZSkgew0KCQkJCQ0KCQkJfSkJDQoJCQkuYWx3YXlzKCBmdW5jdGlvbiAoKSB7DQoJCQkJJCgnLmVsQWpheExvYWRpbmcnKS5yZW1vdmUoKTsNCgkJCQkkKCcuaXBzTW9kYWwnKS5yZW1vdmUoKTsNCgkJCX0pOw0KCQl9LA0KCQkNCgkJdmlld1Byb2R1Y3Q6IGZ1bmN0aW9uIChlKSB7DQoJCQllLnByZXZlbnREZWZhdWx0KCk7DQoJCQkNCgkJCXZhciBhamF4dXJsID0gJCggZS5jdXJyZW50VGFyZ2V0ICkuYXR0cignaHJlZicpOw0KCQkJJCgnI2lwc0xheW91dF9tYWluQXJlYScpLmFwcGVuZCggIjxkaXYgY2xhc3M9J2lwc01vZGFsJz48L2Rpdj48ZGl2IGlkPSdlbEFqYXhMb2FkaW5nJyBjbGFzcz0nZWxBamF4TG9hZGluZyc+PGkgY2xhc3M9J2ljb24tc3Bpbm5lcjIgaXBzTG9hZGluZ190aW55SWNvbiBmYS1zcGluJz48L2k+ICZuYnNwOyZuYnNwO2xvYWRpbmcuLi48L2Rpdj4iICk7DQoJCQkNCgkJCWlwcy5nZXRBamF4KCkoIGFqYXh1cmwgKQ0KCQkJLmRvbmUoIGZ1bmN0aW9uIChyZXNwb25zZSkgew0KCQkJCWlmKHJlc3BvbnNlKQ0KCQkJCXsNCgkJCQkJJCgnI2lwc0xheW91dF9tYWluQXJlYScpLmh0bWwocmVzcG9uc2UuY29udGVudHMpOw0KCQkJCQkkKCcjaXBzTGF5b3V0X21haW5BcmVhJykucHJlcGVuZCggJzx1bCBjbGFzcz0iaXBzVG9vbExpc3QgaXBzVG9vbExpc3RfaG9yaXpvbnRhbCBpcHNDbGVhcmZpeCBpcHNQb3NfcmlnaHQiPjxsaSBjbGFzcz0iaXBzVG9vbExpc3RfcHJpbWFyeUFjdGlvbiI+PGEgY2xhc3M9Imlwc1Bvc19yaWdodCBpcHNCdXR0b24gaXBzQnV0dG9uX3NtYWxsIGlwc0J1dHRvbl9wcmltYXJ5IiBkYXRhLWFjdGlvbj0ic3RvcmVGcm9udCI+QmFjayBUbyBTdG9yZTwvYT48L2xpPjwvdWw+JyApOw0KCQkJCQkkKCcjaXBzTGF5b3V0X3NpZGViYXInKS5oaWRlKCk7DQoJCQkJCSQoIGRvY3VtZW50ICkudHJpZ2dlciggJ2NvbnRlbnRDaGFuZ2UnLCBbICQoJyNpcHNMYXlvdXRfbWFpbkFyZWEnKSBdICk7DQoJCQkJCUhpc3RvcnkucHVzaFN0YXRlKCBudWxsLCBkb2N1bWVudC50aXRsZSwgYWpheHVybCApOw0KCQkJCX0NCgkJCX0pDQoJCQkuZmFpbCggZnVuY3Rpb24gKHJlc3BvbnNlKSB7DQoJCQkJDQoJCQl9KQkNCgkJCS5hbHdheXMoIGZ1bmN0aW9uICgpIHsNCgkJCQkkKCcuZWxBamF4TG9hZGluZycpLnJlbW92ZSgpOw0KCQkJCSQoJy5pcHNNb2RhbCcpLnJlbW92ZSgpOw0KCQkJfSk7DQoJCX0sDQoJCQ0KCQlzdG9yZUZyb250OiBmdW5jdGlvbiAoZSkgew0KCQkJZS5wcmV2ZW50RGVmYXVsdCgpOw0KCQkJDQoJCQl2YXIgYWpheHVybCA9IGlwcy5nZXRTZXR0aW5nKCdiYXNlVVJMJykgKyAiP2FwcD1uZXh1cyZtb2R1bGU9c3RvcmUmY29udHJvbGxlcj1zdG9yZSI7DQoJCQkkKCcjaXBzTGF5b3V0X21haW5BcmVhJykuYXBwZW5kKCAiPGRpdiBjbGFzcz0naXBzTW9kYWwnPjwvZGl2PjxkaXYgaWQ9J2VsQWpheExvYWRpbmcnIGNsYXNzPSdlbEFqYXhMb2FkaW5nJz48aSBjbGFzcz0naWNvbi1zcGlubmVyMiBpcHNMb2FkaW5nX3RpbnlJY29uIGZhLXNwaW4nPjwvaT4gJm5ic3A7Jm5ic3A7bG9hZGluZy4uLjwvZGl2PiIgKTsNCgkJCQ0KCQkJaXBzLmdldEFqYXgoKSggYWpheHVybCApDQoJCQkuZG9uZSggZnVuY3Rpb24gKHJlc3BvbnNlKSB7DQoJCQkJaWYocmVzcG9uc2UpDQoJCQkJew0KCQkJCQkkKCcjaXBzTGF5b3V0X21haW5BcmVhJykuaHRtbChyZXNwb25zZS5jb250ZW50cyk7DQoJCQkJCSQoJyNpcHNMYXlvdXRfc2lkZWJhcicpLnNob3coKTsNCgkJCQkJJCggZG9jdW1lbnQgKS50cmlnZ2VyKCAnY29udGVudENoYW5nZScsIFsgJCgnI2lwc0xheW91dF9tYWluQXJlYScpLCAkKCcjaXBzTGF5b3V0X3NpZGViYXInKSBdICk7DQoJCQkJCUhpc3RvcnkucHVzaFN0YXRlKCBudWxsLCBkb2N1bWVudC50aXRsZSwgYWpheHVybCApOw0KCQkJCX0NCgkJCX0pDQoJCQkuZmFpbCggZnVuY3Rpb24gKHJlc3BvbnNlKSB7DQoJCQkJDQoJCQl9KQkNCgkJCS5hbHdheXMoIGZ1bmN0aW9uICgpIHsNCgkJCQkkKCcuZWxBamF4TG9hZGluZycpLnJlbW92ZSgpOw0KCQkJCSQoJy5pcHNNb2RhbCcpLnJlbW92ZSgpOw0KCQkJfSk7DQoJCX0NCg0KCX0pOw0KfShqUXVlcnksIF8pKTs=</js></jsFiles><resourcesFiles/><lang><word key="enhancedstore_all_products" js="0">All Products</word><word key="enhancedstore_featured_products" js="0">Featured Products</word><word key="enhancedstore_price_filters" js="0">Price Filters</word><word key="enhancedstore_price_filters_desc" js="0"><![CDATA[If you enter values $10 and $25, the user will see three filters: $0–$10, $10–$25, and $25+.<br>NOTE... If a category has it's own price filters set then they will override this filter with the category one]]></word><word key="enhancedstore_no_products_found" js="0">We could not find any products</word><word key="enhancedstore_rating_filter" js="0">Show Ratings Filter?</word><word key="enhancedstore_rating_filter_desc" js="0">If you allow reviews on you products you can allow members to filter the products by their ratings</word><word key="enhancedstore_stock_filter" js="0">Show In-stock Filter?</word><word key="enhancedstore_stock_filter_desc" js="0">If you sell physical products with stock amounts you can allow members to filter out all the out of stock items</word><word key="enhancedstore_sort_by" js="0">Sort By</word><word key="enhancedstore_clear_sort" js="0">Clear Sort</word><word key="enhancedstore_main_tab_setting" js="0">Main Tab</word><word key="enhancedstore_grid_size" js="0">Grid Size</word></lang><versions><version long="10000" human="1.0.0"><![CDATA[//<?php


/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * Install Code
 */
class ips_plugins_setup_install
{
	/**
	 * ...
	 *
	 * @return	array	If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
	 */
	public function step1()
	{
		

		return TRUE;
	}
	
	// You can create as many additional methods (step2, step3, etc.) as is necessary.
	// Each step will be executed in a new HTTP request
}]]></version><version long="10001" human="1.0.1"><![CDATA[//<?php


/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * 1.0.1 Upgrade Code
 */
class ips_plugins_setup_upg_10001
{
	/**
	 * ...
	 *
	 * @return	array	If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
	 */
	public function step1()
	{
		

		return TRUE;
	}
	
	// You can create as many additional methods (step2, step3, etc.) as is necessary.
	// Each step will be executed in a new HTTP request
}]]></version><version long="10002" human="1.0.2"><![CDATA[//<?php


/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * 1.0.2 Upgrade Code
 */
class ips_plugins_setup_upg_10002
{
	/**
	 * ...
	 *
	 * @return	array	If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
	 */
	public function step1()
	{
		

		return TRUE;
	}
	
	// You can create as many additional methods (step2, step3, etc.) as is necessary.
	// Each step will be executed in a new HTTP request
}]]></version><version long="10003" human="1.0.3"><![CDATA[//<?php


/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * 1.0.3 Upgrade Code
 */
class ips_plugins_setup_upg_10003
{
	/**
	 * ...
	 *
	 * @return	array	If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
	 */
	public function step1()
	{
		

		return TRUE;
	}
	
	// You can create as many additional methods (step2, step3, etc.) as is necessary.
	// Each step will be executed in a new HTTP request
}]]></version></versions></plugin>