Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla4/ |
| [Home] [System Details] [Kill Me] |
PK'C�[}��r
r
1Application/Admin/PluggedApplicationTypeAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\Framework\Plugin;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Application\Admin\ApplicationTypeAdmin;
use Nextend\SmartSlider3\Application\Admin\Slider\ControllerAjaxSlider;
use Nextend\SmartSlider3\Application\Admin\Slider\ControllerSlider;
use Nextend\SmartSlider3\Application\Admin\Sliders\ControllerAjaxSliders;
use
Nextend\SmartSlider3Pro\Application\Admin\Slider\License\ControllerAjaxLicense;
use
Nextend\SmartSlider3Pro\Application\Admin\Slider\License\ControllerLicense;
use
Nextend\SmartSlider3Pro\Application\Admin\Slider\PluggedControllerAjaxSlider;
use
Nextend\SmartSlider3Pro\Application\Admin\Slider\PluggedControllerSlider;
use
Nextend\SmartSlider3Pro\Application\Admin\Sliders\PluggedControllerAjaxSliders;
use
Nextend\SmartSlider3Pro\Application\Admin\Visual\ControllerAjaxPostBackgroundAnimation;
use
Nextend\SmartSlider3Pro\Application\Admin\Visual\ControllerAjaxSplitTextAnimation;
class PluggedApplicationTypeAdmin {
use GetAssetsPathTrait;
/** @var ApplicationTypeAdmin */
protected $applicationType;
/**
* PluggedApplicationTypeAdmin constructor.
*
* @param ApplicationTypeAdmin $applicationType
*/
public function __construct($applicationType) {
$this->applicationType = $applicationType;
ResourceTranslator::createResource('$ss3-pro-admin$',
self::getAssetsPath(), self::getAssetsUri());
$applicationType->addExternalController('postbackgroundanimation',
$this);
$applicationType->addExternalController('splittextanimation',
$this);
$applicationType->addExternalController('license',
$this);
Plugin::addAction('PluggableController\Nextend\SmartSlider3\Application\Admin\Sliders\ControllerAjaxSliders',
array(
$this,
'plugControllerAjaxSliders'
));
Plugin::addAction('PluggableController\Nextend\SmartSlider3\Application\Admin\Slider\ControllerSlider',
array(
$this,
'plugControllerSlider'
));
Plugin::addAction('PluggableController\Nextend\SmartSlider3\Application\Admin\Slider\ControllerAjaxSlider',
array(
$this,
'plugControllerAjaxSlider'
));
}
public function getControllerAjaxPostBackgroundAnimation() {
return new
ControllerAjaxPostBackgroundAnimation($this->applicationType);
}
public function getControllerAjaxSplitTextAnimation() {
return new
ControllerAjaxSplitTextAnimation($this->applicationType);
}
public function getControllerLicense() {
return new ControllerLicense($this->applicationType);
}
public function getControllerAjaxLicense() {
return new ControllerAjaxLicense($this->applicationType);
}
/**
* @param ControllerAjaxSliders $controller
*/
public function plugControllerAjaxSliders($controller) {
new PluggedControllerAjaxSliders($controller);
}
/**
* @param ControllerSlider $controller
*/
public function plugControllerSlider($controller) {
new PluggedControllerSlider($controller);
}
/**
* @param ControllerAjaxSlider $controller
*/
public function plugControllerAjaxSlider($controller) {
new PluggedControllerAjaxSlider($controller);
}
}PK'C�[�
=||:Application/Admin/Slider/License/ControllerAjaxLicense.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider\License;
use Nextend\Framework\Controller\Admin\AdminAjaxController;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
use Nextend\SmartSlider3\SmartSlider3Info;
class ControllerAjaxLicense extends AdminAjaxController {
use TraitAdminUrl;
public function actionAdd() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$licenseKey = Request::$REQUEST->getVar('licenseKey');
if (empty($licenseKey)) {
Notification::error(n2_('License key cannot be
empty!'));
$this->response->error();
}
$status = ModelLicense::getInstance()
->checkKey($licenseKey,
'licenseadd');
$hasError = SmartSlider3Info::hasApiError($status);
if ($hasError == 'dashboard') {
$this->response->redirect($this->getUrlDashboard());
} else if ($hasError !== false) {
$this->response->error();
}
ModelLicense::getInstance()
->setKey($licenseKey);
$this->response->respond(array(
'valid' => true
));
}
public function actionCheck() {
$this->validateToken();
$showErrors = Request::$REQUEST->getInt('showErrors',
1);
$status = ModelLicense::getInstance()
->isActive(Request::$REQUEST->getInt('cacheAccepted', 1));
if ($showErrors) {
$hasError = SmartSlider3Info::hasApiError($status);
if ($hasError == 'dashboard') {
$this->response->redirect($this->getUrlDashboard());
} else if ($hasError !== false) {
$this->response->error();
}
Notification::notice(n2_('License key is active!'));
$this->response->respond();
}
if ($status == 'OK') {
$this->response->respond();
}
$this->response->error();
}
}PK'C�[[w6Application/Admin/Slider/License/ControllerLicense.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider\License;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
use Nextend\SmartSlider3\SmartSlider3Info;
class ControllerLicense extends AbstractControllerAdmin {
public function actionDeAuthorize() {
$status = ModelLicense::getInstance()
->deAuthorize();
SmartSlider3Info::hasApiError($status);
$this->redirectToSliders();
}
}PK'C�[�����8Application/Admin/Slider/PluggedControllerAjaxSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\Slider\ControllerAjaxSlider;
use Nextend\SmartSlider3\Application\Admin\Slider\ViewAjaxSliderBox;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlidersXRef;
class PluggedControllerAjaxSlider {
/** @var ControllerAjaxSlider */
protected $controller;
public function __construct($controller) {
$this->controller = $controller;
$this->controller->addExternalAction('getGroupInfoBySliderID',
array(
$this,
'getGroupInfoBySliderID'
));
$this->controller->addExternalAction('changeGroup',
array(
$this,
'changeGroup'
));
$this->controller->addExternalAction('createGroup',
array(
$this,
'actionCreateGroup'
));
$this->controller->addExternalAction('addToGroup',
array(
$this,
'actionAddToGroup'
));
}
public function getGroupInfoBySliderID() {
$this->controller->validateToken();
$this->controller->validatePermission('smartslider_edit');
$sliderID = Request::$REQUEST->getInt('sliderID');
$this->controller->validateVariable($sliderID,
'slider');
$slidersModel = new ModelSliders($this->controller);
$xref = new ModelSlidersXRef($this->controller);
$this->controller->getResponse()
->respond(array(
'groups' =>
$slidersModel->getGroups('published'),
'linkedTo' =>
$xref->getGroupsIDs($sliderID)
));
}
public function changeGroup() {
$sliderID = Request::$REQUEST->getInt('sliderID');
$this->controller->validateVariable($sliderID,
'slider');
$toLink = array_map('intval',
Request::$POST->getVar('toLink', array()));
$toDelete = array_map('intval',
Request::$POST->getVar('toDelete', array()));
$xref = new ModelSlidersXRef($this->controller);
foreach ($toDelete as $groupID) {
$xref->deleteXref($groupID, $sliderID);
}
foreach ($toLink as $groupID) {
$xref->add($groupID, $sliderID);
}
$this->controller->getResponse()
->respond();
}
public function actionCreateGroup() {
$this->controller->validateToken();
$this->controller->validatePermission('smartslider_edit');
$slidersModel = new ModelSliders($this->controller);
$title = Request::$REQUEST->getVar('title');
$this->controller->validateVariable(!empty($title),
'group name');
$slider = array(
'type' => 'group',
'title' => $title
);
$sliderid = $slidersModel->create($slider);
$slider = $slidersModel->getWithThumbnail($sliderid);
$this->controller->validateDatabase($slider);
$view = new ViewAjaxSliderBox($this->controller);
$view->setSlider($slider);
$this->controller->getResponse()
->respond($view->display());
}
public function actionAddToGroup() {
$this->controller->validateToken();
$this->controller->validatePermission('smartslider_edit');
$actionType = Request::$REQUEST->getCmd('actionType');
$this->controller->validateVariable($actionType,
'Action');
$currentGroupID =
Request::$REQUEST->getInt('currentGroupID', 0);
$groupID = Request::$REQUEST->getInt('groupID');
$this->controller->validateVariable($groupID,
'group');
$sliders = Request::$REQUEST->getVar('sliders');
if (!is_array($sliders)) {
Notification::error(n2_('Missing sliders!'));
$this->controller->getResponse()
->error();
}
$slidersModel = new ModelSliders($this->controller);
$xref = new ModelSlidersXRef($this->controller);
foreach ($sliders as $sliderID) {
switch ($actionType) {
case 'copy':
$newSliderID = $slidersModel->duplicate($sliderID,
false);
$xref->add($groupID, $newSliderID);
break;
case 'link':
$xref->add($groupID, $sliderID);
break;
default:
$xref->deleteXref($currentGroupID, $sliderID);
$xref->add($groupID, $sliderID);
break;
}
}
$this->controller->getResponse()
->respond();
}
}PK'C�[�@�L L 4Application/Admin/Slider/PluggedControllerSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\Slider\ControllerSlider;
class PluggedControllerSlider {
/** @var ControllerSlider */
protected $controller;
public function __construct($controller) {
$this->controller = $controller;
$this->controller->addExternalAction('editGroup',
array(
$this,
'actionEditGroup'
));
$this->controller->addExternalAction('shapedivider', array(
$this,
'actionShapeDivider'
));
$this->controller->addExternalAction('shapedividerpreview',
array(
$this,
'actionShapeDividerPreview'
));
$this->controller->addExternalAction('particle',
array(
$this,
'actionParticle'
));
}
/**
* @param array $slider
*/
public function actionEditGroup($slider = array()) {
if (empty($slider)) {
$this->controller->redirectToSliders();
}
$this->controller->loadSliderManager();
$view = new ViewSliderEditGroup($this->controller);
$view->setSlider($slider);
$view->display();
}
public function actionShapeDivider() {
if ($this->controller->validateToken() &&
$this->controller->validatePermission('smartslider_edit'))
{
$view = new ViewSliderShapeDivider($this->controller);
$view->setSliderID($this->controller->getSliderID());
$view->display();
}
}
public function actionShapeDividerPreview() {
if ($this->controller->validateToken() &&
$this->controller->validatePermission('smartslider_edit'))
{
$view = new
ViewSliderShapeDividerPreview($this->controller);
$view->setSliderData(json_decode(Request::$POST->getVar('sliderData',
'[]'), true));
$view->setSliderID($this->controller->getSliderID());
$view->display();
}
}
public function actionParticle() {
if ($this->controller->validateToken() &&
$this->controller->validatePermission('smartslider_edit'))
{
$view = new ViewSliderParticle($this->controller);
$view->setSliderID($this->controller->getSliderID());
$view->display();
}
}
}PK'C�[�riUU/Application/Admin/Slider/Template/EditGroup.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Asset\Js\Js;
use Nextend\SmartSlider3\Settings;
/**
* @var $this ViewSliderEditGroup
*/
$slider = $this->getSlider();
JS::addInline('new _N2.GroupEdit(' . json_encode(array(
'previewInNewWindow' =>
!!Settings::get('preview-new-window', 0),
'saveAjaxUrl' =>
$this->getAjaxUrlSliderEdit($slider['id']),
'previewUrl' =>
$this->getUrlPreviewSlider($slider['id']),
'ajaxUrl' =>
$this->getAjaxUrlSliderEdit($slider['id']),
'formData' => $this->getFormData()
)) . ');');
?>
<div class="n2-ss-sliders-outer-container">
<?php
$this->renderSliderManager();
?>
</div>
<form id="n2-ss-edit-group-form" action="#"
method="post">
<?php
$this->renderForm();
?>
</form>PK'C�[�I�CC.Application/Admin/Slider/Template/Particle.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Request\Request;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\Slider\Slider;
/**
* @var $this ViewSliderParticle
*/
JS::addGlobalInline('document.documentElement.classList.add("n2_html--application-only");');
$postedSliderData =
(array)Request::$POST->getVar('slider', false);
$postedSliderData['desktop'] = 1; // Shape divider does
not work if slider is not visible.
$postedSliderData['playWhenVisible'] = 0;
$frontendSlider = new Slider($this, $this->getSliderID(), array(
'disableResponsive' => true,
'sliderData' => $postedSliderData
), true);
$frontendSlider->initAll();
$sliderHTML = $frontendSlider->render();
$externals = Settings::get('external-css-files');
if (!empty($externals)) {
$externals = explode("\n", $externals);
foreach ($externals as $external) {
echo "<link rel='stylesheet' href='" .
$external . "' type='text/css'
media='all'>";
}
}
Js::addStaticGroup(ResourceTranslator::toPath('$ss3-pro-frontend$/dist/particle.min.js'),
'particles');
$folder =
ResourceTranslator::toPath('$ss3-pro-frontend$/js/particle/presets/');
$files = Filesystem::files($folder);
$extension = 'json';
$types = array();
for ($i = 0; $i < count($files); $i++) {
$pathInfo = pathinfo($files[$i]);
if (isset($pathInfo['extension']) &&
$pathInfo['extension'] == $extension) {
$types[$pathInfo['filename']] = file_get_contents($folder
. $files[$i]);
}
}
Js::addFirstCode("
new _N2.ParticleAdminManager(" . $this->getSliderID() . ",
" . json_encode($types) . ");
");
$this->renderForm();
?>
<div class="n2_slider_preview_area">
<div class="n2_slider_preview_area__inner"
style="width:100%;max-width:<?php echo
$frontendSlider->features->responsive->sizes['desktopPortrait']['width'];
?>px;">
<?php
echo $sliderHTML;
?>
</div>
</div>PK'C�[�����2Application/Admin/Slider/Template/ShapeDivider.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Request\Request;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Sanitize;
/**
* @var $this ViewSliderShapeDivider
*/
JS::addGlobalInline('document.documentElement.classList.add("n2_html--application-only");');
$postedSliderData =
(array)Request::$POST->getVar('slider', false);
$postedSliderData['desktop'] = 1; // Shape divider does
not work if slider is not visible.
$postedSliderData['playWhenVisible'] = 0;
$folder =
ResourceTranslator::toPath('$ss3-pro-frontend$/shapedivider/');
$files = Filesystem::files($folder);
$extension = 'svg';
$types = array();
for ($i = 0; $i < count($files); $i++) {
$pathInfo = pathinfo($files[$i]);
if (isset($pathInfo['extension']) &&
$pathInfo['extension'] == $extension) {
$types['simple-' . $pathInfo['filename']] =
file_get_contents($folder . $files[$i]);
}
}
$folder .= 'bicolor/';
$files = Filesystem::files($folder);
for ($i = 0; $i < count($files); $i++) {
$pathInfo = pathinfo($files[$i]);
if (isset($pathInfo['extension']) &&
$pathInfo['extension'] == $extension) {
$types['bi-' . $pathInfo['filename']] =
file_get_contents($folder . $files[$i]);
}
}
Js::addFirstCode("
new _N2.ShapeDividerAdminManager(" . $this->getSliderID() .
", " . json_encode($types) . ");
");
$this->renderForm();
?>
<div class="n2_slider_preview_area"
style="min-height:0;">
<div class="n2_slider_preview_area__inner">
<form id="n2_shape_divider__frame_form"
target="n2_shape_divider__frame" action="<?php echo
$this->MVCHelper->createUrl(array(
'slider/shapedividerpreview',
array(
'sliderid' => $this->getSliderID()
)
), true); ?>" method="post"
style="display:none;">
<input type="hidden" name="sliderData"
value="<?php echo
Sanitize::esc_attr(json_encode($postedSliderData)); ?>">
</form>
<iframe name="n2_shape_divider__frame"
id="n2_shape_divider__frame" style="width:100%;height:
calc(100vh - 100px);"></iframe>
</div>
</div>PK'C�[&*`�||9Application/Admin/Slider/Template/ShapeDividerPreview.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Asset\Js\Js;
use Nextend\SmartSlider3\Settings;
/**
* @var $this ViewSliderShapeDividerPreview
*/
JS::addGlobalInline('document.documentElement.classList.add("n2_html--application-only");');
JS::addGlobalInline('document.documentElement.classList.add("n2_html--slider-preview");');
$slider = $this->renderSlider();
$externals = Settings::get('external-css-files');
if (!empty($externals)) {
$externals = explode("\n", $externals);
foreach ($externals as $external) {
echo "<link rel='stylesheet' href='" .
$external . "' type='text/css'
media='all'>";
}
}
echo $slider;
?>
<script>
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') {
parent.postMessage(JSON.stringify({action:
'cancel'}), "*");
}
});
</script>PK'C�[�{��''0Application/Admin/Slider/ViewSliderEditGroup.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Acl\Acl;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Fieldset\FieldsetRowPlain;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlainIcon;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenu;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenuItem;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderManager\BlockSliderManager;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Form\Element\PublishSlider;
class ViewSliderEditGroup extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $slider;
/**
* @var BlockHeader
*/
protected $blockHeader;
protected $formData = array();
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
public function getSlider() {
return $this->slider;
}
public function display() {
$this->layout = new LayoutDefault($this);
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--folderclosed');
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_button--inactive');
$buttonSave->addClass('n2_group_settings_save');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
$buttonBack->setUrl($this->getUrlDashboard());
$buttonBack->addClass('n2_group_settings_back');
$topBar->addPrimaryBlock($buttonBack);
$buttonPreview = new BlockButtonPlainIcon($this);
$buttonPreview->addClass('n2_top_bar_button_icon');
$buttonPreview->addClass('n2_top_bar_main__preview');
$buttonPreview->setIcon('ssi_24 ssi_24--preview');
$buttonPreview->addAttribute('data-n2tip',
n2_('Preview'));
$buttonPreview->setUrl($this->getUrlPreviewIndex($this->slider['id']));
$topBar->addPrimaryBlock($buttonPreview);
$this->displayHeader();
$this->layout->setTopBar($topBar->toHTML());
$this->layout->addContent($this->render('EditGroup'));
$this->layout->render();
}
protected function displayHeader() {
$this->blockHeader = new BlockHeader($this);
$this->blockHeader->setHeading($this->slider['title']);
$this->blockHeader->setHeadingAfter('ID: ' .
$this->slider['id']);
$this->addHeaderActions();
$this->layout->addContentBlock($this->blockHeader);
}
private function addHeaderActions() {
$accessEdit = Acl::canDo('smartslider_edit', $this);
$accessDelete = Acl::canDo('smartslider_delete', $this);
if ($accessEdit || $accessDelete) {
$sliderid = $this->slider['id'];
$actionsMenu = new BlockFloatingMenu($this);
$actions = new BlockButton($this);
$actions->setBig();
$actions->setLabel(n2_('Actions'));
$actions->setIcon('ssi_16 ssi_16--buttonarrow');
$actionsMenu->setButton($actions);
if ($accessEdit) {
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Clear cache'));
$item->setIcon('ssi_16 ssi_16--reset');
$item->setUrl($this->getUrlSliderClearCache($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(sprintf(n2_('Export %1$s as
HTML'), n2_('Group')));
$item->setIcon('ssi_16 ssi_16--download');
$item->setUrl($this->getUrlSliderExportHtml($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Export'));
$item->setIcon('ssi_16 ssi_16--download');
$item->setUrl($this->getUrlSliderExport($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Duplicate'));
$item->setIcon('ssi_16 ssi_16--duplicate');
$item->setUrl($this->getUrlSliderDuplicate($sliderid,
$this->groupID));
$actionsMenu->addMenuItem($item);
}
if ($accessDelete) {
$item = new BlockFloatingMenuItem($this);
$item->setRed();
$item->setLabel(n2_('Move to trash'));
$item->setIcon('ssi_16 ssi_16--delete');
$item->setUrl($this->getUrlSliderMoveToTrash($sliderid,
$this->groupID));
$actionsMenu->addMenuItem($item);
}
$this->blockHeader->addAction($actionsMenu->toHTML());
}
}
public function renderSliderManager() {
$sliderManager = new BlockSliderManager($this->layout);
$sliderManager->setGroupID($this->slider['id']);
$sliderManager->display();
}
public function renderForm() {
$slider = $this->slider;
$data = json_decode($slider['params'], true);
if ($data == null) $data = array();
$data['title'] = $slider['title'];
$data['type'] = $slider['type'];
$data['thumbnail'] = $slider['thumbnail'];
$data['alias'] = isset($slider['alias']) ?
$slider['alias'] : '';
$this->editGroupForm($data);
$this->formData = $data;
}
private function editGroupForm($data = array()) {
$form = new Form($this, 'slider');
$form->set('class',
'nextend-smart-slider-admin');
$form->loadArray($data);
$table = new ContainerTable($form->getContainer(),
'publish', n2_('Publish'));
$row = new FieldsetRowPlain($table, 'publish');
new PublishSlider($row);
$table = new ContainerTable($form->getContainer(),
'group', n2_('General'));
$row1 = $table->createRow('row-1');
new Text($row1, 'title', n2_('Name'),
n2_('Group'), array(
'style' => 'width:400px;'
));
new Text($row1, 'alias', n2_('Alias'),
'', array(
'style' => 'width:200px;'
));
new FieldImage($row1, 'thumbnail',
n2_('Thumbnail'));
new Hidden($row1, 'type', 'group');
echo $form->render();
}
/**
* @return array
*/
public function getFormData() {
return $this->formData;
}
}PK'C�[�Wj^^/Application/Admin/Slider/ViewSliderParticle.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Form;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonApply;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonCancel;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutIframe;
use Nextend\SmartSlider3Pro\Form\Element\ParticleSkin;
class ViewSliderParticle extends AbstractView {
/** @var integer */
protected $sliderID;
public function display() {
$this->layout = new LayoutIframe($this);
$this->layout->setLabel(n2_('Particle effect'));
$buttonCancel = new BlockButtonCancel($this);
$buttonCancel->addAttribute('id',
'n2-ss-form-cancel');
$buttonCancel->setBig();
$this->layout->addAction($buttonCancel);
$buttonSet = new BlockButtonApply($this);
$buttonSet->addAttribute('id',
'n2-ss-form-save');
$buttonSet->setBig();
$this->layout->addAction($buttonSet);
$this->layout->addContent($this->render('Particle'));
$this->layout->render();
}
/**
* @return integer
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @param integer $sliderID
*/
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
public function renderForm() {
$form = new Form($this, 'slider');
$table = new ContainerTable($form->getContainer(),
'particle', n2_('Particle effect'));
$settings = $table->createRow('row1');
new ParticleSkin($settings, 'preset',
n2_('Effect'), 0, array(
'relatedValueFields' => array(
array(
'values' => array(
'link',
'polygons',
'bloom',
'web',
'blackwidow',
'zodiac',
'fading-dots',
'pirouette',
'sparkling',
'custom'
),
'field' => array(
'slidermobile'
)
),
array(
'values' => array(
'link',
'polygons',
'bloom',
'web',
'blackwidow',
'zodiac',
'fading-dots',
'pirouette',
'sparkling'
),
'field' => array(
'slidercustomization'
)
),
array(
'values' => array(
'custom'
),
'field' => array(
'slidercustom',
'table-row-row2'
)
)
)
));
$customization = new Grouping($settings,
'customization');
new Color($customization, 'color',
n2_('Color'), 'FFFFFF80', array(
'alpha' => true
));
new Color($customization, 'line-color', n2_('Line
color'), 'FFFFFF66', array(
'alpha' => true
));
new NumberSlider($customization, 'speed',
n2_('Speed'), 2, array(
'style' => 'width:35px;',
'min' => 1,
'max' => 60
));
new NumberSlider($customization, 'number',
n2_('Number of particles'), 28, array(
'style' => 'width:35px;',
'min' => 10,
'max' => 200
));
new Select($customization, 'hover',
n2_('Hover'), 'off', array(
'options' => array(
'0' => n2_('Off'),
'grab' => n2_('Grab'),
'bubble' => n2_('Bubble'),
'repulse' => n2_('Repulse')
)
));
new Select($customization, 'click',
n2_('Click'), 'off', array(
'options' => array(
'0' => n2_('Off'),
'repulse' => n2_('Repulse'),
'push' => n2_('Push'),
'remove' => n2_('Remove'),
'bubble' => n2_('Bubble')
)
));
new Textarea($settings, 'custom',
n2_('Custom'), '', array(
'width' => 480,
'minHeight' => 200
));
new OnOff($settings, 'mobile', n2_('Hide on
mobile'), 0, array(
'invert' => true
));
$notice = $table->createRow('row2');
new Notice($notice, 'instructions',
'Instructions', 'You can generate at <a
target="_blank"
href="http://vincentgarreau.com/particles.js/">http://vincentgarreau.com/particles.js/</a>
Then <i>Download current config (json)</i> and paste content
into the field.');
echo $form->render();
}
}PK'C�[R�cff3Application/Admin/Slider/ViewSliderShapeDivider.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Tab;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Form;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonApply;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonCancel;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\DeviceZoom\BlockDeviceZoom;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutIframe;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3Pro\Form\Element\Select\ShapeDividerSelect;
class ViewSliderShapeDivider extends AbstractView {
use TraitAdminUrl;
/** @var integer */
protected $sliderID;
public function display() {
$this->layout = new LayoutIframe($this);
$this->layout->setLabel(n2_('Shape divider'));
$deviceZoom = new BlockDeviceZoom($this);
$this->layout->addAction($deviceZoom);
$buttonCancel = new BlockButtonCancel($this);
$buttonCancel->addAttribute('id',
'n2-ss-form-cancel');
$buttonCancel->setBig();
$this->layout->addAction($buttonCancel);
$buttonSet = new BlockButtonApply($this);
$buttonSet->addAttribute('id',
'n2-ss-form-save');
$buttonSet->setBig();
$this->layout->addAction($buttonSet);
$this->layout->addContent($this->render('ShapeDivider'));
$this->layout->render();
}
/**
* @return integer
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @param integer $sliderID
*/
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
public function renderForm() {
$form = new Form($this, 'slider');
$table = new ContainerTable($form->getContainer(),
'shapedivider', n2_('Shape divider'));
$table->setFieldsetPositionEnd();
new Tab($table->getFieldsetLabel(), 'position', false,
'bottom', array(
'options' => array(
'top' => n2_('Top'),
'bottom' => n2_('Bottom')
),
'relatedValueFields' => array(
array(
'values' => array(
'top'
),
'field' => array(
'table-row-shapedivider-top'
)
),
array(
'values' => array(
'bottom'
),
'field' => array(
'table-row-shapedivider-bottom'
)
)
)
));
$top = $table->createRow('shapedivider-top');
new ShapeDividerSelect($top, 'shapedivider-top-type',
n2_('Type'), '0', array(
'relatedFields' => array(
'slidershapedivider-top-group-container'
)
));
$groupingTopOptionsContainer = new Grouping($top,
'shapedivider-top-group-container');
new Color($groupingTopOptionsContainer,
'shapedivider-top-color', n2_('Color'),
'ffffffff', array(
'alpha' => true
));
new Color($groupingTopOptionsContainer,
'shapedivider-top-color2', n2_('Secondary'),
'FFFFFF80', array(
'alpha' => true
));
new NumberSlider($groupingTopOptionsContainer,
'shapedivider-top-width', n2_('Width'), 100, array(
'unit' => '%',
'style' => 'width:35px;',
'min' => 100,
'max' => 400,
'step' => 5,
'sliderMax' => 400,
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new NumberSlider($groupingTopOptionsContainer,
'shapedivider-top-height', n2_('Height'), 100, array(
'unit' => '%',
'style' => 'width:35px;',
'min' => 0,
'max' => 500,
'step' => 10,
'sliderMax' => 500,
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new OnOff($groupingTopOptionsContainer,
'shapedivider-top-flip', n2_('Flip'), 0);
new OnOff($groupingTopOptionsContainer,
'shapedivider-top-animate', n2_('Animate'), 0);
new NumberSlider($groupingTopOptionsContainer,
'shapedivider-top-speed', n2_('Speed'), 100, array(
'style' => 'width:35px;',
'unit' => '%',
'min' => 10,
'max' => 1000,
'step' => 1,
'sliderMax' => 100
));
new Select($groupingTopOptionsContainer,
'shapedivider-top-scroll', n2_('Scroll'),
'0', array(
'options' => array(
'0' => n2_('None'),
'grow' => n2_('Grow'),
'shrink' => n2_('Shrink')
)
));
$bottom = $table->createRow('shapedivider-bottom');
new ShapeDividerSelect($bottom,
'shapedivider-bottom-type', n2_('Type'), '0',
array(
'relatedFields' => array(
'slidershapedivider-bottom-group-container'
)
));
$groupingBottomOptionsContainer = new Grouping($bottom,
'shapedivider-bottom-group-container');
new Color($groupingBottomOptionsContainer,
'shapedivider-bottom-color', n2_('Color'),
'ffffffff', array(
'alpha' => true
));
new Color($groupingBottomOptionsContainer,
'shapedivider-bottom-color2', n2_('Secondary'),
'FFFFFF80', array(
'alpha' => true
));
new NumberSlider($groupingBottomOptionsContainer,
'shapedivider-bottom-width', n2_('Width'), 100, array(
'style' => 'width:35px;',
'unit' => '%',
'min' => 100,
'max' => 400,
'step' => 5,
'sliderMax' => 400,
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new NumberSlider($groupingBottomOptionsContainer,
'shapedivider-bottom-height', n2_('Height'), 100,
array(
'style' => 'width:35px;',
'unit' => '%',
'min' => 0,
'max' => 500,
'step' => 10,
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new OnOff($groupingBottomOptionsContainer,
'shapedivider-bottom-flip', n2_('Flip'), 0);
new OnOff($groupingBottomOptionsContainer,
'shapedivider-bottom-animate', n2_('Animate'), 0);
new NumberSlider($groupingBottomOptionsContainer,
'shapedivider-bottom-speed', n2_('Speed'), 100, array(
'style' => 'width:35px;',
'unit' => '%',
'min' => 10,
'max' => 1000,
'step' => 1,
'sliderMax' => 100
));
new Select($groupingBottomOptionsContainer,
'shapedivider-bottom-scroll', n2_('Scroll'),
'0', array(
'options' => array(
'0' => n2_('None'),
'grow' => n2_('Grow'),
'shrink' => n2_('Shrink')
)
));
echo $form->render();
}
}PK'C�[�o�Y��:Application/Admin/Slider/ViewSliderShapeDividerPreview.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Slider;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutEmpty;
use Nextend\SmartSlider3\SliderManager\SliderManager;
class ViewSliderShapeDividerPreview extends AbstractView {
/** @var integer */
protected $sliderID;
/** @var array */
protected $sliderData;
public function display() {
$this->layout = new LayoutEmpty($this);
$this->layout->addContent($this->render('ShapeDividerPreview'));
$this->layout->render();
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @param int $sliderID
*/
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
/**
* @return array
*/
public function getSliderData() {
return $this->sliderData;
}
/**
* @param array $sliderData
*/
public function setSliderData($sliderData) {
$this->sliderData = $sliderData;
}
public function renderSlider() {
$locale = setlocale(LC_NUMERIC, 0);
setlocale(LC_NUMERIC, "C");
$sliderManager = new SliderManager($this, $this->sliderID, true,
array(
'sliderData' => $this->getSliderData()
));
$sliderManager->allowDisplayWhenEmpty();
$sliderHTML = $sliderManager->render();
setlocale(LC_NUMERIC, $locale);
return $sliderHTML;
}
}PK'C�[BBύ��:Application/Admin/Sliders/PluggedControllerAjaxSliders.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Sliders;
use Nextend\SmartSlider3\Application\Admin\Sliders\ControllerAjaxSliders;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
class PluggedControllerAjaxSliders {
/** @var ControllerAjaxSliders */
protected $controller;
public function __construct($controller) {
$this->controller = $controller;
$this->controller->addExternalAction('listGroups',
array(
$this,
'actionListGroups'
));
}
public function actionListGroups() {
$this->controller->validateToken();
$slidersModel = new ModelSliders($this->controller);
$result = $slidersModel->getGroups('published');
$data = array();
foreach ($result as $r) {
$data[$r['id']] = $r['title'];
}
$this->controller->getResponse()
->respond($data);
}
}PK'C�[d]Xa��BApplication/Admin/Visual/ControllerAjaxPostBackgroundAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Visual;
use Nextend\Framework\Controller\Admin\AdminVisualManagerAjaxController;
use
Nextend\SmartSlider3Pro\PostBackgroundAnimation\ModelPostBackgroundAnimation;
class ControllerAjaxPostBackgroundAnimation extends
AdminVisualManagerAjaxController {
protected $type = 'postbackgroundanimation';
public function getModel() {
return new ModelPostBackgroundAnimation($this);
}
}PK'C�[G=b��=Application/Admin/Visual/ControllerAjaxSplitTextAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Admin\Visual;
use Nextend\Framework\Controller\Admin\AdminVisualManagerAjaxController;
use Nextend\SmartSlider3Pro\SplitText\ModelSplitText;
class ControllerAjaxSplitTextAnimation extends
AdminVisualManagerAjaxController {
protected $type = 'splittextanimation';
public function getModel() {
return new ModelSplitText($this);
}
}PK'C�[�?�ff7Application/Frontend/PluggedApplicationTypeFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application\Frontend;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Application\Frontend\ApplicationTypeFrontend;
class PluggedApplicationTypeFrontend {
use GetAssetsPathTrait;
/** @var ApplicationTypeFrontend */
protected $applicationType;
public function __construct($applicationType) {
$this->applicationType = $applicationType;
ResourceTranslator::createResource('$ss3-pro-frontend$',
self::getAssetsPath(), self::getAssetsUri());
}
}PK'C�[�h�XX1Application/PluggedApplicationSmartSlider3Pro.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Application;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Application\Admin\ApplicationTypeAdmin;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Application\Frontend\ApplicationTypeFrontend;
use Nextend\SmartSlider3Pro\Application\Admin\PluggedApplicationTypeAdmin;
use
Nextend\SmartSlider3Pro\Application\Frontend\PluggedApplicationTypeFrontend;
class PluggedApplicationSmartSlider3Pro {
/** @var ApplicationSmartSlider3 */
protected $application;
/**
* PluggedApplicationSmartSlider3Pro constructor.
*
* @param ApplicationSmartSlider3 $application
*/
public function __construct($application) {
$this->application = $application;
Plugin::addAction('PluggableApplicationType\Nextend\SmartSlider3\Application\Admin\ApplicationTypeAdmin',
array(
$this,
'plugApplicationTypeAdmin'
));
Plugin::addAction('PluggableApplicationType\Nextend\SmartSlider3\Application\Frontend\ApplicationTypeFrontend',
array(
$this,
'plugApplicationTypeFrontend'
));
}
/**
* @param ApplicationTypeAdmin $applicationTypeAdmin
*/
public function plugApplicationTypeAdmin($applicationTypeAdmin) {
new PluggedApplicationTypeAdmin($applicationTypeAdmin);
}
/**
* @param ApplicationTypeFrontend $applicationTypeFrontend
*/
public function plugApplicationTypeFrontend($applicationTypeFrontend) {
new PluggedApplicationTypeFrontend($applicationTypeFrontend);
}
}PK'C�[_ʫ**Form/Element/AutoplayPicker.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\AbstractField;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\AbstractFieldHidden;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\TraitFieldset;
class AutoplayPicker extends AbstractFieldHidden implements
ContainerInterface {
use TraitFieldset;
private static $separator = '|*|';
protected function fetchElement() {
$this->addAutoPlayPicker();
$default = explode(self::$separator, $this->defaultValue);
$value = explode(self::$separator, $this->getValue());
$value = $value + $default;
$html = '<div
class="n2_field_autoplaypicker">';
$html .= '<div
class="n2_field_autoplaypicker__label"></div><i
class="n2_field_autoplaypicker__arrow ssi_16
ssi_16--selectarrow"></i>';
$html .= '<div
class="n2_field_autoplaypicker__popover">';
$subElements = array();
$i = 0;
$element = $this->first;
while ($element) {
$element->setExposeName(false);
if (isset($value[$i])) {
$element->setDefaultValue($value[$i]);
}
$html .= $this->decorateElement($element);
$subElements[$i] = $element->getID();
$i++;
$element = $element->getNext();
}
$html .= '</div>';
$html .= parent::fetchElement();
$html .= '</div>';
Js::addInline('new _N2.FormElementAutoPlayPicker("'
. $this->fieldID . '", ' . json_encode($subElements) .
', "' . self::$separator . '");');
return $html;
}
/**
* @param AbstractField $element
*
* @return string
*/
public function decorateElement($element) {
return $this->parent->decorateElement($element);
}
protected function addAutoPlayPicker() {
new Number($this, $this->name . '-1',
n2_('Interval'), '', array(
'wide' => 3,
'min' => 1
));
new Select($this, $this->name . '-2',
n2_('Interval modifier'), '', array(
'options' => array(
'loop' => n2_x('loops',
'Autoplay modifier'),
'slide' => n2_x('slide count',
'Autoplay modifier'),
'slideindex' => n2_x('slide index',
'Autoplay modifier')
),
'relatedValueFields' => array(
array(
'values' => array(
'loop'
),
'field' => array(
$this->getControlName() . $this->name .
'-3'
)
)
),
));
new Select($this, $this->name . '-3', n2_('Stops
on'), '', array(
'options' => array(
'current' => n2_x('last slide',
'Autoplay modifier'),
'next' => n2_x('next slide',
'Autoplay modifier')
)
));
}
}PK'C�[���BB(Form/Element/CanvasLayerParentPicker.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractFieldHidden;
use Nextend\Framework\View\Html;
class CanvasLayerParentPicker extends AbstractFieldHidden {
protected function fetchElement() {
Js::addInline('new _N2.FormElementLayerPicker("' .
$this->fieldID . '");');
$this->renderRelatedFields();
return parent::fetchElement() . Html::tag('div', array(
'class' =>
'n2_ss_absolute_parent_picker'
), '<i class="ssi_16"></i>');
}
}PK'C�[�NH��Form/Element/Particle.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
use Nextend\Framework\Request\Request;
class Particle extends AbstractChooser {
protected function addScript() {
$MVCHelper = $this->getForm();
Js::addInline('new _N2.FormElementParticleManager("'
. $this->fieldID . '", ' . json_encode(array(
'editUrl' => $MVCHelper->createUrl(array(
'slider/particle',
array(
'sliderid' =>
Request::$GET->getInt('sliderid')
)
), true)
)) . ');');
}
}PK'C�[�?�
�
Form/Element/ParticleSkin.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Element\Select\Skin;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
class ParticleSkin extends Skin {
protected $fixed = true;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$labels = array(
'link' => n2_('Link'),
'polygons' => n2_('Polygons'),
'bloom' => n2_('Bloom'),
'web' => n2_('Web'),
'blackwidow' => n2_('Black widow'),
'zodiac' => n2_('Zodiac'),
'fading-dots' => n2_('Fading dots'),
'pirouette' => n2_('Pirouette'),
'sparkling' => n2_('Sparkling'),
);
$this->options = array(
'0' => array(
'label' => n2_('Disabled'),
'settings' => array()
)
);
$folder =
ResourceTranslator::toPath('$ss3-pro-frontend$/js/particle/presets/');
$files = Filesystem::files($folder);
$extension = 'json';
for ($i = 0; $i < count($files); $i++) {
$pathInfo = pathinfo($files[$i]);
if (isset($pathInfo['extension']) &&
$pathInfo['extension'] == $extension) {
$jsProp = json_decode(Filesystem::readFile($folder .
$pathInfo['filename'] . '.json'), true);
$this->options[$pathInfo['filename']] = array(
'label' =>
$labels[$pathInfo['filename']],
'settings' => array(
'color' =>
substr($jsProp['particles']["color"]["value"],
1) .
str_pad(dechex($jsProp['particles']["opacity"]["value"]
* 255), 2, "0", STR_PAD_LEFT),
'line-color' =>
substr($jsProp['particles']["line_linked"]["color"],
1) .
str_pad(dechex($jsProp['particles']["line_linked"]["opacity"]
* 255), 2, "0", STR_PAD_LEFT),
'hover' =>
$jsProp['interactivity']["events"]["onhover"]['enable']
?
$jsProp['interactivity']["events"]["onhover"]['mode']
: 0,
'click' =>
$jsProp['interactivity']["events"]["onclick"]['enable']
?
$jsProp['interactivity']["events"]["onclick"]['mode']
: 0,
'number' =>
$jsProp['particles']["number"]["value"],
'speed' =>
$jsProp['particles']["move"]["speed"]
)
);
}
}
$this->options['custom'] = array(
'label' => n2_('Custom'),
'settings' => array()
);
}
}PK'C�[py��vv(Form/Element/PostBackgroundAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
class PostBackgroundAnimation extends AbstractChooser {
protected function addScript() {
Js::addInline('new
_N2.FormElementPostAnimationManager("' . $this->fieldID .
'", "postbackgroundanimationManager");');
}
}PK'C�[youX��*Form/Element/Select/ShapeDividerSelect.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Form\Element\Select;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\View\Html;
class ShapeDividerSelect extends Select {
private static $_options;
public function __construct($insertAt, $name = '', $label =
'', $default = '', array $parameters = array()) {
if (self::$_options === null) {
self::$_options = array(
'simple-Arrow' =>
n2_('Arrow'),
'simple-Curve1' => n2_('Curve
1'),
'simple-Curve2' => n2_('Curve
2'),
'simple-Curve3' => n2_('Curve
3'),
'simple-Curve4' => n2_('Curve
4'),
'simple-Curves' =>
n2_('Curves'),
'simple-Fan1' => n2_('Fan
1'),
'simple-Fan2' => n2_('Fan
2'),
'simple-Fan3' => n2_('Fan
3'),
'simple-Hills' =>
n2_('Hills'),
'simple-Incline1' => n2_('Incline
1'),
'simple-Incline2' => n2_('Incline
2'),
'simple-Incline3' => n2_('Incline
3'),
'simple-InverseArrow' => n2_('Inverse
arrow'),
'simple-Rectangle' =>
n2_('Rectangle'),
'simple-Slopes' =>
n2_('Slopes'),
'simple-Tilt1' => n2_('Tilt
1'),
'simple-Tilt2' => n2_('Tilt
2'),
'simple-Triangle1' => n2_('Triangle
1'),
'simple-Triangle2' => n2_('Triangle
2'),
'simple-Wave1' => n2_('Wave
1'),
'simple-Wave2' => n2_('Wave
2'),
'simple-Waves' =>
n2_('Waves'),
'bicolor' => array(
'label' => n2_('2 Colors'),
'options' => array(
'bi-Fan' =>
n2_('Fan'),
'bi-MaskedWaves' => n2_('Masked
waves'),
'bi-Ribbon' =>
n2_('Ribbon'),
'bi-Waves' =>
n2_('Waves')
)
)
);
}
parent::__construct($insertAt, $name, $label, $default,
$parameters);
}
protected function renderOptions($options) {
$html = '<option value="0" ' .
$this->isSelected('0') . '>' .
n2_('Disabled') . '</option>';
$html .= $this->renderOptionsRecursive(self::$_options);
return $html;
}
private function renderOptionsRecursive($options) {
$html = '';
foreach ($options AS $value => $option) {
if (is_array($option)) {
$html .= Html::tag('optgroup',
array('label' => $option['label']),
$this->renderOptionsRecursive($option['options']));
} else {
$html .= '<option value="' . $value .
'" ' . $this->isSelected($value) . '>' .
$option . '</option>';
}
}
return $html;
}
}PK'C�[s昽��Form/Element/ShapeDivider.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
use Nextend\Framework\Request\Request;
class ShapeDivider extends AbstractChooser {
protected function addScript() {
$MVCHelper = $this->getForm();
Js::addInline('new
_N2.FormElementShapeDividerManager("' . $this->fieldID .
'", ' . json_encode(array(
'editUrl' => $MVCHelper->createUrl(array(
'slider/shapedivider',
array(
'sliderid' =>
Request::$GET->getInt('sliderid')
)
), true)
)) . ');');
}
}PK'C�[�
�#Form/Element/SplitTextAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
use Nextend\SmartSlider3Pro\SplitText\SplitTextManager;
class SplitTextAnimation extends AbstractChooser {
protected $relatedStyle = '';
protected $relatedFont = '';
protected $group = '';
protected $transformOrigin = '';
protected $preview = '';
protected $linkedRelatedFields = array();
protected function addScript() {
Js::addInline('new
_N2.FormElementSplitTextAnimationManager("' . $this->fieldID .
'", {
font: "' . $this->relatedFont . '",
style: "' . $this->relatedStyle . '",
preview: ' . json_encode($this->preview) . ',
group: "' . $this->group . '",
transformOrigin: "' . $this->transformOrigin .
'",
linkedRelatedFields: ' .
json_encode($this->linkedRelatedFields) . ',
});');
}
protected function fetchElement() {
SplitTextManager::enqueue($this->getForm()
->getMVCHelper());
return parent::fetchElement();
}
/**
* @param string $relatedStyle
*/
public function setRelatedStyle($relatedStyle) {
$this->relatedStyle = $relatedStyle;
}
/**
* @param string $relatedFont
*/
public function setRelatedFont($relatedFont) {
$this->relatedFont = $relatedFont;
}
/**
* @param string $group
*/
public function setGroup($group) {
$this->group = $group;
}
/**
* @param string $transformOrigin
*/
public function setTransformOrigin($transformOrigin) {
$this->transformOrigin = $transformOrigin;
}
/**
* @param string $preview
*/
public function setPreview($preview) {
$this->preview = $preview;
}
/**
* @param array $linkedRelatedFields
*/
public function setLinkedRelatedFields($linkedRelatedFields) {
$this->linkedRelatedFields = $linkedRelatedFields;
}
}PK'C�[S��+�+3Generator/Common/Facebook/ConfigurationFacebook.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Facebook;
use Facebook\Authentication\AccessToken;
use Facebook\Facebook;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\Framework\Router\Router;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroupConfiguration;
use
Nextend\SmartSlider3Pro\Generator\Common\Facebook\Elements\FacebookToken;
class ConfigurationFacebook extends AbstractGeneratorGroupConfiguration {
private $data;
/**
* N2SliderGeneratorFacebookConfiguration constructor.
*
* @param GeneratorGroupFacebook $group
*/
public function __construct($group) {
parent::__construct($group);
$this->data = new Data(array(
'appId' => '',
'secret' => '',
'accessToken' => ''
));
$this->data->loadJSON(StorageSectionManager::getStorage('smartslider')
->get('facebook'));
}
public function wellConfigured() {
if (!$this->data->get('appId') ||
!$this->data->get('secret') ||
!$this->data->get('accessToken')) {
return false;
}
$fb = $this->getApi();
try {
$fb->get('/me');
return true;
} catch (\Exception $e) {
return false;
}
}
/**
* @return Facebook|null
*/
public function getApi() {
if (!class_exists('Facebook')) {
require(dirname(__FILE__) .
'/Facebook/autoload.php');
}
$appId = $this->data->get('appId');
if (!empty($appId) &&
!empty($this->data->get('secret'))) {
$fb = new Facebook(array(
'app_id' =>
$this->data->get('appId'),
'app_secret' =>
$this->data->get('secret')
));
$accessToken = $this->data->get('accessToken');
if ($accessToken) {
$accessToken = json_decode($accessToken);
if (count($accessToken) == 2) {
$fb->setDefaultAccessToken(new
AccessToken($accessToken[0], $accessToken[1]));
}
}
return $fb;
} else if (!empty($appId) &&
empty($this->data->get('secret'))) {
Notification::error(n2_('The secret is empty. Please
insert that value too!'));
} else if (empty($appId) &&
!empty($this->data->get('secret'))) {
Notification::error(n2_('The App ID is empty. Please
insert that value too!'));
} else {
return null;
}
}
public function getData() {
return $this->data->toArray();
}
public function addData($data, $store = true) {
$this->data->loadArray($data);
if ($store) {
StorageSectionManager::getStorage('smartslider')
->set('facebook', null,
json_encode($this->data->toArray()));
}
}
public function render($MVCHelper) {
$form = new Form($MVCHelper, 'generator');
$form->loadArray($this->getData());
$table = new ContainerTable($form->getContainer(),
'facebook-generator', 'Facebook api');
$callBackUrl =
$this->getCallbackUrl($MVCHelper->getRouter());
if (substr($callBackUrl, 0, 8) !== 'https://') {
$warning =
$table->createRow('facebook-warning');
$warningText = sprintf(n2_('%1$s allows HTTPS Redirect
URIs only! You must move your site to HTTPS in order to use this generator!
- %2$s How to get SSL for my WordPress site? %3$s'),
'Facebook', '<a
href="https://www.wpbeginner.com/wp-tutorials/how-to-add-ssl-and-https-in-wordpress/"
target="_blank" rel="nofollow noopener
noreferrer">', '</a>');
new Warning($warning, 'warning', $warningText);
} else {
$instruction =
$table->createRow('facebook-instruction');
$instructionText = sprintf(n2_('%2$s Check the
documentation %3$s to learn how to configure your %1$s app.'),
'Facebook', '<a
href="https://smartslider.helpscoutdocs.com/article/1902-facebook-generator"
target="_blank">', '</a>');
new Notice($instruction, 'instruction',
n2_('Instruction'), $instructionText);
}
$settings = $table->createRow('facebook');
new Text($settings, 'appId', 'App ID',
'', array(
'style' => 'width:120px;'
));
new Text($settings, 'secret', 'Secret',
'', array(
'style' => 'width:250px;'
));
new OnOff($settings, 'pages_read_engagement',
n2_x('pages read engagement', "Facebook app
permission"), 1, array(
'tipLabel' => n2_('Pages read
engagement permission'),
'tipDescription' => n2_('You need
"pages_read_engagement" permission if you want to access datas of
Facebook pages, where you are an administrator. For other pages you still
need to turn this option on, but request access to "Page Public
Content Access" within your App.')
));
new OnOff($settings, 'user_photos', n2_x('user
photos', "Facebook app permission"), 1, array(
'tipLabel' => n2_('User photos
permission'),
'tipDescription' => n2_('You need
"user_photos" permission to access photos of users, except your
own user.')
));
new FacebookToken($settings, 'accessToken',
n2_('Token'));
new Notice($settings, 'callback', n2_('Callback
url'), $callBackUrl);
new Token($settings);
echo $form->render();
$fb = $this->getApi();
if (!empty($fb)) {
$accessToken = $fb->getDefaultAccessToken();
}
if (!empty($accessToken)) {
try {
/** @var Facebook\Authentication\AccessTokenMetadata
$result */
$result = $fb->getOAuth2Client()
->debugToken($accessToken);
if (!is_object($result)) {
Notification::error(n2_($result));
} else if ($result->getIsValid()) {
$result->validateExpiration();
Notification::notice('The token will expire on
' . date('F j, Y', $result->getExpiresAt()
->getTimestamp()));
} else {
Notification::error(n2_('The token expired. Please
request new token! '));
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
}
}
public function startAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
$this->addData(Request::$REQUEST->getVar('generator'),
false);
$_SESSION['data'] = $this->getData();
$permissions = array();
if ($_SESSION['data']['pages_read_engagement'])
{
$permissions[] = 'pages_read_engagement';
}
if ($_SESSION['data']['user_photos']) {
$permissions[] = 'user_photos';
}
$api = $this->getApi();
if ($api) {
return $api->getRedirectLoginHelper()
->getLoginUrl($MVCHelper->createUrl(array(
"generator/finishAuth",
array(
'group' =>
Request::$REQUEST->getVar('group')
)
)), $permissions);
}
throw new Exception('App ID missing!');
}
public function finishAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
$this->addData($_SESSION['data'], false);
unset($_SESSION['data']);
$fb = $this->getApi();
try {
$helper = $fb->getRedirectLoginHelper();
$accessToken =
$helper->getAccessToken($MVCHelper->createUrl(array(
"generator/finishAuth",
array(
'group' =>
Request::$REQUEST->getVar('group')
)
)));
if (!isset($accessToken)) {
echo 'Access token was not returned from Graph.';
exit;
}
} catch (\Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' .
$e->getMessage();
exit;
} catch (\Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' .
$e->getMessage();
exit;
}
if (!$accessToken->isLongLived()) {
// Exchanges a short-lived access token for a long-lived one
try {
// The OAuth 2.0 client handler helps us manage access
tokens
$oAuth2Client = $fb->getOAuth2Client();
$accessToken =
$oAuth2Client->getLongLivedAccessToken($accessToken);
} catch (\Facebook\Exceptions\FacebookSDKException $e) {
echo "<p>Error getting long-lived access token:
" . $helper->getMessage() . "</p>\n\n";
exit;
}
}
$fb->setDefaultAccessToken($accessToken);
try {
$user = $fb->get('/me');
if ($user) {
$data = $this->getData();
$data['accessToken'] = json_encode(array(
$accessToken->getValue(),
$accessToken->getExpiresAt()
->getTimestamp()
));
$this->addData($data);
return true;
}
return false;
} catch (\Exception $e) {
return $e;
}
}
public function getAlbums() {
$ID = Request::$REQUEST->getVar('facebookID');
$api = $this->getApi();
$apiRequest = $api->sendRequest('GET', $ID .
'/albums');
if (is_object($apiRequest)) {
$result = $apiRequest->getDecodedBody();
$albums = array();
if (count($result['data'])) {
foreach ($result['data'] AS $album) {
$albums[$album['id']] =
$album['name'];
}
}
return $albums;
} else {
Notification::error($apiRequest['response_error']);
return false;
}
}
/**
* @param Router $router
*
* @return string
*/
private function getCallbackUrl($router) {
return $router->createUrl(array(
"generator/finishAuth",
array(
'group' =>
Request::$REQUEST->getVar('group')
)
));
}
}PK'C�[7�mpBB8Generator/Common/Facebook/Elements/FacebookAlbumList.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Facebook\Elements;
use Facebook\Facebook;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
class FacebookAlbumList extends Select {
/** @var Facebook|null */
protected $api;
protected function fetchElement() {
$data = $this->getForm()
->createAjaxUrl(array(
"generator/getData",
array(
'group' =>
Request::$REQUEST->getVar('group'),
'type' =>
Request::$REQUEST->getVar('type')
)
));
Js::addInline('
new _N2.FormElementFacebookAlbums("' .
$this->fieldID . '", "' . $data . '");
');
try {
$id = $this->getForm()
->get('facebook-id',
'me');
$albums = $this->api->get($id . '/albums');
if (is_object($albums)) {
$result = $albums->getDecodedBody();
if (count($result['data'])) {
foreach ($result['data'] as $album) {
$this->options[$album['id']] =
$album['name'];
}
if ($this->getValue() == '') {
$this->setValue($result['data'][0]['id']);
}
}
} else {
Notification::error($albums['response_error']);
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
return parent::fetchElement();
}
/**
* @param Facebook|null $api
*/
public function setApi($api) {
$this->api = $api;
}
}
PK'C�[nj��4Generator/Common/Facebook/Elements/FacebookToken.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Facebook\Elements;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Request\Request;
class FacebookToken extends Text {
protected function fetchElement() {
$authUrl = $this->getForm()
->createAjaxUrl(array(
"generator/getAuthUrl",
array(
'group' =>
Request::$REQUEST->getVar('group'),
'type' =>
Request::$REQUEST->getVar('type')
)
));
Js::addInline('new _N2.FormElementFacebookToken("' .
$this->fieldID . '", "' . $authUrl .
'");');
return parent::fetchElement();
}
protected function post() {
return '<a class="n2_field_text__choose_text"
href="#">' . n2_('Request token') .
'</a>';
}
}
PK(C�[.`��AGenerator/Common/Facebook/Facebook/Authentication/AccessToken.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Authentication;
use DateTime;
/**
* Class AccessToken
*
* @package Facebook
*/
class AccessToken {
/**
* The access token value.
*
* @var string
*/
protected $value = '';
/**
* Date when token expires.
*
* @var DateTime|null
*/
protected $expiresAt;
/**
* Create a new access token entity.
*
* @param string $accessToken
* @param int $expiresAt
*/
public function __construct($accessToken, $expiresAt = 0) {
$this->value = $accessToken;
if ($expiresAt) {
$this->setExpiresAtFromTimeStamp($expiresAt);
}
}
/**
* Generate an app secret proof to sign a request to Graph.
*
* @param string $appSecret The app secret.
*
* @return string
*/
public function getAppSecretProof($appSecret) {
return hash_hmac('sha256', $this->value, $appSecret);
}
/**
* Getter for expiresAt.
*
* @return DateTime|null
*/
public function getExpiresAt() {
return $this->expiresAt;
}
/**
* Determines whether or not this is an app access token.
*
* @return bool
*/
public function isAppAccessToken() {
return strpos($this->value, '|') !== false;
}
/**
* Determines whether or not this is a long-lived token.
*
* @return bool
*/
public function isLongLived() {
if ($this->expiresAt) {
return $this->expiresAt->getTimestamp() > time() + (60
* 60 * 2);
}
if ($this->isAppAccessToken()) {
return true;
}
return false;
}
/**
* Checks the expiration of the access token.
*
* @return boolean|null
*/
public function isExpired() {
if ($this->getExpiresAt() instanceof DateTime) {
return $this->getExpiresAt()
->getTimestamp() < time();
}
if ($this->isAppAccessToken()) {
return false;
}
return null;
}
/**
* Returns the access token as a string.
*
* @return string
*/
public function getValue() {
return $this->value;
}
/**
* Returns the access token as a string.
*
* @return string
*/
public function __toString() {
return $this->getValue();
}
/**
* Setter for expires_at.
*
* @param int $timeStamp
*/
protected function setExpiresAtFromTimeStamp($timeStamp) {
$dt = new DateTime();
$dt->setTimestamp($timeStamp);
$this->expiresAt = $dt;
}
}
PK(C�[�m�&&IGenerator/Common/Facebook/Facebook/Authentication/AccessTokenMetadata.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Authentication;
use DateTime;
use Facebook\Exceptions\FacebookSDKException;
/**
* Class AccessTokenMetadata
*
* Represents metadata from an access token.
*
* @package Facebook
* @see
https://developers.facebook.com/docs/graph-api/reference/debug_token
*/
class AccessTokenMetadata {
/**
* The access token metadata.
*
* @var array
*/
protected $metadata = [];
/**
* Properties that should be cast as DateTime objects.
*
* @var array
*/
protected static $dateProperties = [
'expires_at',
'issued_at'
];
/**
* @param array $metadata
*
* @throws FacebookSDKException
*/
public function __construct(array $metadata) {
if (!isset($metadata['data'])) {
throw new FacebookSDKException('Unexpected debug token
response data.', 401);
}
$this->metadata = $metadata['data'];
$this->castTimestampsToDateTime();
}
/**
* Returns a value from the metadata.
*
* @param string $field The property to retrieve.
* @param mixed $default The default to return if the property
doesn't exist.
*
* @return mixed
*/
public function getField($field, $default = null) {
if (isset($this->metadata[$field])) {
return $this->metadata[$field];
}
return $default;
}
/**
* Returns a value from the metadata.
*
* @param string $field The property to retrieve.
* @param mixed $default The default to return if the property
doesn't exist.
*
* @return mixed
*
* @deprecated 5.0.0 getProperty() has been renamed to getField()
*/
public function getProperty($field, $default = null) {
return $this->getField($field, $default);
}
/**
* Returns a value from a child property in the metadata.
*
* @param string $parentField The parent property.
* @param string $field The property to retrieve.
* @param mixed $default The default to return if the property
doesn't exist.
*
* @return mixed
*/
public function getChildProperty($parentField, $field, $default = null)
{
if (!isset($this->metadata[$parentField])) {
return $default;
}
if (!isset($this->metadata[$parentField][$field])) {
return $default;
}
return $this->metadata[$parentField][$field];
}
/**
* Returns a value from the error metadata.
*
* @param string $field The property to retrieve.
* @param mixed $default The default to return if the property
doesn't exist.
*
* @return mixed
*/
public function getErrorProperty($field, $default = null) {
return $this->getChildProperty('error', $field,
$default);
}
/**
* Returns a value from the "metadata" metadata. *Brain
explodes*
*
* @param string $field The property to retrieve.
* @param mixed $default The default to return if the property
doesn't exist.
*
* @return mixed
*/
public function getMetadataProperty($field, $default = null) {
return $this->getChildProperty('metadata', $field,
$default);
}
/**
* The ID of the application this access token is for.
*
* @return string|null
*/
public function getAppId() {
return $this->getField('app_id');
}
/**
* Name of the application this access token is for.
*
* @return string|null
*/
public function getApplication() {
return $this->getField('application');
}
/**
* Any error that a request to the graph api
* would return due to the access token.
*
* @return bool|null
*/
public function isError() {
return $this->getField('error') !== null;
}
/**
* The error code for the error.
*
* @return int|null
*/
public function getErrorCode() {
return $this->getErrorProperty('code');
}
/**
* The error message for the error.
*
* @return string|null
*/
public function getErrorMessage() {
return $this->getErrorProperty('message');
}
/**
* The error subcode for the error.
*
* @return int|null
*/
public function getErrorSubcode() {
return $this->getErrorProperty('subcode');
}
/**
* DateTime when this access token expires.
*
* @return DateTime|null
*/
public function getExpiresAt() {
return $this->getField('expires_at');
}
/**
* Whether the access token is still valid or not.
*
* @return boolean|null
*/
public function getIsValid() {
return $this->getField('is_valid');
}
/**
* DateTime when this access token was issued.
*
* Note that the issued_at field is not returned
* for short-lived access tokens.
*
* @see
https://developers.facebook.com/docs/facebook-login/access-tokens#debug
*
* @return DateTime|null
*/
public function getIssuedAt() {
return $this->getField('issued_at');
}
/**
* General metadata associated with the access token.
* Can contain data like 'sso', 'auth_type',
'auth_nonce'.
*
* @return array|null
*/
public function getMetadata() {
return $this->getField('metadata');
}
/**
* The 'sso' child property from the 'metadata'
parent property.
*
* @return string|null
*/
public function getSso() {
return $this->getMetadataProperty('sso');
}
/**
* The 'auth_type' child property from the
'metadata' parent property.
*
* @return string|null
*/
public function getAuthType() {
return $this->getMetadataProperty('auth_type');
}
/**
* The 'auth_nonce' child property from the
'metadata' parent property.
*
* @return string|null
*/
public function getAuthNonce() {
return $this->getMetadataProperty('auth_nonce');
}
/**
* For impersonated access tokens, the ID of
* the page this token contains.
*
* @return string|null
*/
public function getProfileId() {
return $this->getField('profile_id');
}
/**
* List of permissions that the user has granted for
* the app in this access token.
*
* @return array
*/
public function getScopes() {
return $this->getField('scopes');
}
/**
* The ID of the user this access token is for.
*
* @return string|null
*/
public function getUserId() {
return $this->getField('user_id');
}
/**
* Ensures the app ID from the access token
* metadata is what we expect.
*
* @param string $appId
*
* @throws FacebookSDKException
*/
public function validateAppId($appId) {
if ($this->getAppId() !== $appId) {
throw new FacebookSDKException('Access token metadata
contains unexpected app ID.', 401);
}
}
/**
* Ensures the user ID from the access token
* metadata is what we expect.
*
* @param string $userId
*
* @throws FacebookSDKException
*/
public function validateUserId($userId) {
if ($this->getUserId() !== $userId) {
throw new FacebookSDKException('Access token metadata
contains unexpected user ID.', 401);
}
}
/**
* Ensures the access token has not expired yet.
*
* @throws FacebookSDKException
*/
public function validateExpiration() {
if (!$this->getExpiresAt() instanceof DateTime) {
return;
}
if ($this->getExpiresAt()
->getTimestamp() < time()) {
throw new FacebookSDKException('Inspection of access token
metadata shows that the access token has expired.', 401);
}
}
/**
* Converts a unix timestamp into a DateTime entity.
*
* @param int $timestamp
*
* @return DateTime
*/
private function convertTimestampToDateTime($timestamp) {
$dt = new DateTime();
$dt->setTimestamp($timestamp);
return $dt;
}
/**
* Casts the unix timestamps as DateTime entities.
*/
private function castTimestampsToDateTime() {
foreach (static::$dateProperties as $key) {
if (isset($this->metadata[$key]) &&
$this->metadata[$key] !== 0) {
$this->metadata[$key] =
$this->convertTimestampToDateTime($this->metadata[$key]);
}
}
}
}
PK(C�[�|�""BGenerator/Common/Facebook/Facebook/Authentication/OAuth2Client.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Authentication;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\Facebook;
use Facebook\FacebookApp;
use Facebook\FacebookClient;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
/**
* Class OAuth2Client
*
* @package Facebook
*/
class OAuth2Client {
/**
* @const string The base authorization URL.
*/
const BASE_AUTHORIZATION_URL = 'https://www.facebook.com';
/**
* The FacebookApp entity.
*
* @var FacebookApp
*/
protected $app;
/**
* The Facebook client.
*
* @var FacebookClient
*/
protected $client;
/**
* The version of the Graph API to use.
*
* @var string
*/
protected $graphVersion;
/**
* The last request sent to Graph.
*
* @var FacebookRequest|null
*/
protected $lastRequest;
/**
* @param FacebookApp $app
* @param FacebookClient $client
* @param string|null $graphVersion The version of the Graph API to
use.
*/
public function __construct(FacebookApp $app, FacebookClient $client,
$graphVersion = null) {
$this->app = $app;
$this->client = $client;
$this->graphVersion = $graphVersion ?:
Facebook::DEFAULT_GRAPH_VERSION;
}
/**
* Returns the last FacebookRequest that was sent.
* Useful for debugging and testing.
*
* @return FacebookRequest|null
*/
public function getLastRequest() {
return $this->lastRequest;
}
/**
* Get the metadata associated with the access token.
*
* @param AccessToken|string $accessToken The access token to debug.
*
* @return AccessTokenMetadata
*/
public function debugToken($accessToken) {
$accessToken = $accessToken instanceof AccessToken ?
$accessToken->getValue() : $accessToken;
$params = ['input_token' => $accessToken];
$this->lastRequest = new FacebookRequest($this->app,
$this->app->getAccessToken(), 'GET',
'/debug_token', $params, null, $this->graphVersion);
$response =
$this->client->sendRequest($this->lastRequest);
if (is_object($response)) {
$metadata = $response->getDecodedBody();
return new AccessTokenMetadata($metadata);
} else {
return $response['response_error'];
}
}
/**
* Generates an authorization URL to begin the process of
authenticating a user.
*
* @param string $redirectUrl The callback URL to redirect to.
* @param array $scope An array of permissions to request.
* @param string $state The CSPRNG-generated CSRF value.
* @param array $params An array of parameters to generate URL.
* @param string $separator The separator to use in
http_build_query().
*
* @return string
*/
public function getAuthorizationUrl($redirectUrl, $state, array $scope
= [], array $params = [], $separator = '&') {
$params += [
'client_id' => $this->app->getId(),
'state' => $state,
'response_type' => 'code',
'sdk' => 'php-sdk-' .
Facebook::VERSION,
'redirect_uri' => $redirectUrl,
'scope' => implode(',', $scope)
];
return static::BASE_AUTHORIZATION_URL . '/' .
$this->graphVersion . '/dialog/oauth?' .
http_build_query($params, null, $separator);
}
/**
* Get a valid access token from a code.
*
* @param string $code
* @param string $redirectUri
*
* @return AccessToken
*
* @throws FacebookSDKException
*/
public function getAccessTokenFromCode($code, $redirectUri =
'') {
$params = [
'code' => $code,
'redirect_uri' => $redirectUri,
];
return $this->requestAnAccessToken($params);
}
/**
* Exchanges a short-lived access token with a long-lived access token.
*
* @param AccessToken|string $accessToken
*
* @return AccessToken
*
* @throws FacebookSDKException
*/
public function getLongLivedAccessToken($accessToken) {
$accessToken = $accessToken instanceof AccessToken ?
$accessToken->getValue() : $accessToken;
$params = [
'grant_type' =>
'fb_exchange_token',
'fb_exchange_token' => $accessToken,
];
return $this->requestAnAccessToken($params);
}
/**
* Get a valid code from an access token.
*
* @param AccessToken|string $accessToken
* @param string $redirectUri
*
* @return AccessToken
*
* @throws FacebookSDKException
*/
public function getCodeFromLongLivedAccessToken($accessToken,
$redirectUri = '') {
$params = [
'redirect_uri' => $redirectUri,
];
$response =
$this->sendRequestWithClientParams('/oauth/client_code',
$params, $accessToken);
$data = $response->getDecodedBody();
if (!isset($data['code'])) {
throw new FacebookSDKException('Code was not returned from
Graph.', 401);
}
return $data['code'];
}
/**
* Send a request to the OAuth endpoint.
*
* @param array $params
*
* @return AccessToken
*
* @throws FacebookSDKException
*/
protected function requestAnAccessToken(array $params) {
$response =
$this->sendRequestWithClientParams('/oauth/access_token',
$params);
$data = $response->getDecodedBody();
if (!isset($data['access_token'])) {
throw new FacebookSDKException('Access token was not
returned from Graph.', 401);
}
// Graph returns two different key names for expiration time
// on the same endpoint. Doh! :/
$expiresAt = 0;
if (isset($data['expires'])) {
// For exchanging a short lived token with a long lived token.
// The expiration time in seconds will be returned as
"expires".
$expiresAt = time() + $data['expires'];
} elseif (isset($data['expires_in'])) {
// For exchanging a code for a short lived access token.
// The expiration time in seconds will be returned as
"expires_in".
// See:
https://developers.facebook.com/docs/facebook-login/access-tokens#long-via-code
$expiresAt = time() + $data['expires_in'];
}
return new AccessToken($data['access_token'],
$expiresAt);
}
/**
* Send a request to Graph with an app access token.
*
* @param string $endpoint
* @param array $params
* @param AccessToken|string|null $accessToken
*
* @return FacebookResponse
*
* @throws FacebookResponseException
*/
protected function sendRequestWithClientParams($endpoint, array
$params, $accessToken = null) {
$params += $this->getClientParams();
$accessToken = $accessToken ?: $this->app->getAccessToken();
$this->lastRequest = new FacebookRequest($this->app,
$accessToken, 'GET', $endpoint, $params, null,
$this->graphVersion);
return $this->client->sendRequest($this->lastRequest);
}
/**
* Returns the client_* params for OAuth requests.
*
* @return array
*/
protected function getClientParams() {
return [
'client_id' => $this->app->getId(),
'client_secret' => $this->app->getSecret(),
];
}
}
PK(C�[�;�-o
o
/Generator/Common/Facebook/Facebook/autoload.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
/**
* You only need this file if you are not using composer.
* Why are you not using composer?
* https://getcomposer.org/
*/
require_once __DIR__ . '/polyfills.php';
/**
* Register the autoloader for the Facebook SDK classes.
*
* Based off the official PSR-4 autoloader example found here:
*
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md
*
* @param string $class The fully-qualified class name.
*
* @return void
*/
spl_autoload_register(function ($class) {
// project-specific namespace prefix
$prefix = 'Facebook\\';
// For backwards compatibility
$customBaseDir = '';
if (defined('FACEBOOK_SDK_V4_SRC_DIR')) {
$customBaseDir = FACEBOOK_SDK_V4_SRC_DIR;
} elseif (defined('FACEBOOK_SDK_SRC_DIR')) {
$customBaseDir = FACEBOOK_SDK_SRC_DIR;
}
// base directory for the namespace prefix
$baseDir = $customBaseDir ?: __DIR__ . '/';
// does the class use the namespace prefix?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
// no, move to the next registered autoloader
return;
}
// get the relative class name
$relativeClass = substr($class, $len);
// replace the namespace prefix with the base directory, replace
namespace
// separators with directory separators in the relative class name,
append
// with .php
$file = rtrim($baseDir, '/') . '/' .
str_replace('\\', '/', $relativeClass) .
'.php';
// if the file exists, require it
if (file_exists($file)) {
require $file;
}
});
PK(C�[��/���QGenerator/Common/Facebook/Facebook/Exceptions/FacebookAuthenticationException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
/**
* Class FacebookAuthenticationException
*
* @package Facebook
*/
class FacebookAuthenticationException extends FacebookSDKException {
}
PK(C�[Hd�W��PGenerator/Common/Facebook/Facebook/Exceptions/FacebookAuthorizationException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
/**
* Class FacebookAuthorizationException
*
* @package Facebook
*/
class FacebookAuthorizationException extends FacebookSDKException {
}
PK(C�[M�/
��IGenerator/Common/Facebook/Facebook/Exceptions/FacebookClientException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
/**
* Class FacebookClientException
*
* @package Facebook
*/
class FacebookClientException extends FacebookSDKException {
}
PK(C�[Ѣ+��HGenerator/Common/Facebook/Facebook/Exceptions/FacebookOtherException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
/**
* Class FacebookOtherException
*
* @package Facebook
*/
class FacebookOtherException extends FacebookSDKException {
}
PK(C�[��y��KGenerator/Common/Facebook/Facebook/Exceptions/FacebookResponseException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
use Facebook\FacebookResponse;
/**
* Class FacebookResponseException
*
* @package Facebook
*/
class FacebookResponseException extends FacebookSDKException {
/**
* @var FacebookResponse The response that threw the exception.
*/
protected $response;
/**
* @var array Decoded response.
*/
protected $responseData;
/**
* Creates a FacebookResponseException.
*
* @param FacebookResponse $response The response that
threw the exception.
* @param FacebookSDKException $previousException The more detailed
exception.
*/
public function __construct(FacebookResponse $response,
FacebookSDKException $previousException = null) {
$this->response = $response;
$this->responseData = $response->getDecodedBody();
$errorMessage = $this->get('message', 'Unknown
error from Graph.');
$errorCode = $this->get('code', -1);
parent::__construct($errorMessage, $errorCode, $previousException);
}
/**
* A factory for creating the appropriate exception based on the
response from Graph.
*
* @param FacebookResponse $response The response that threw the
exception.
*
* @return FacebookResponseException
*/
public static function create(FacebookResponse $response) {
$data = $response->getDecodedBody();
if (!isset($data['error']['code']) &&
isset($data['code'])) {
$data = ['error' => $data];
}
$code = isset($data['error']['code']) ?
$data['error']['code'] : null;
$message = isset($data['error']['message']) ?
$data['error']['message'] : 'Unknown error from
Graph.';
if (isset($data['error']['error_subcode'])) {
switch ($data['error']['error_subcode']) {
// Other authentication issues
case 458:
case 459:
case 460:
case 463:
case 464:
case 467:
return new static($response, new
FacebookAuthenticationException($message, $code));
// Video upload resumable error
case 1363030:
case 1363019:
case 1363037:
case 1363033:
case 1363021:
case 1363041:
return new static($response, new
FacebookResumableUploadException($message, $code));
}
}
switch ($code) {
// Login status or token expired, revoked, or invalid
case 100:
case 102:
case 190:
return new static($response, new
FacebookAuthenticationException($message, $code));
// Server issue, possible downtime
case 1:
case 2:
return new static($response, new
FacebookServerException($message, $code));
// API Throttling
case 4:
case 17:
case 341:
return new static($response, new
FacebookThrottleException($message, $code));
// Duplicate Post
case 506:
return new static($response, new
FacebookClientException($message, $code));
}
// Missing Permissions
if ($code == 10 || ($code >= 200 && $code <= 299)) {
return new static($response, new
FacebookAuthorizationException($message, $code));
}
// OAuth authentication error
if (isset($data['error']['type']) &&
$data['error']['type'] === 'OAuthException')
{
return new static($response, new
FacebookAuthenticationException($message, $code));
}
// All others
return new static($response, new FacebookOtherException($message,
$code));
}
/**
* Checks isset and returns that or a default value.
*
* @param string $key
* @param mixed $default
*
* @return mixed
*/
private function get($key, $default = null) {
if (isset($this->responseData['error'][$key])) {
return $this->responseData['error'][$key];
}
return $default;
}
/**
* Returns the HTTP status code
*
* @return int
*/
public function getHttpStatusCode() {
return $this->response->getHttpStatusCode();
}
/**
* Returns the sub-error code
*
* @return int
*/
public function getSubErrorCode() {
return $this->get('error_subcode', -1);
}
/**
* Returns the error type
*
* @return string
*/
public function getErrorType() {
return $this->get('type', '');
}
/**
* Returns the raw response used to create the exception.
*
* @return string
*/
public function getRawResponse() {
return $this->response->getBody();
}
/**
* Returns the decoded response used to create the exception.
*
* @return array
*/
public function getResponseData() {
return $this->responseData;
}
/**
* Returns the response entity used to create the exception.
*
* @return FacebookResponse
*/
public function getResponse() {
return $this->response;
}
}
PK(C�[�n��RGenerator/Common/Facebook/Facebook/Exceptions/FacebookResumableUploadException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
/**
* Class FacebookResumableUploadException
*
* @package Facebook
*/
class FacebookResumableUploadException extends FacebookSDKException {
}
PK(C�[R��~��FGenerator/Common/Facebook/Facebook/Exceptions/FacebookSDKException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
use Exception;
/**
* Class FacebookSDKException
*
* @package Facebook
*/
class FacebookSDKException extends Exception {
}
PK(C�[I�a��IGenerator/Common/Facebook/Facebook/Exceptions/FacebookServerException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
/**
* Class FacebookServerException
*
* @package Facebook
*/
class FacebookServerException extends FacebookSDKException {
}
PK(C�[�����KGenerator/Common/Facebook/Facebook/Exceptions/FacebookThrottleException.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Exceptions;
/**
* Class FacebookThrottleException
*
* @package Facebook
*/
class FacebookThrottleException extends FacebookSDKException {
}
PK(C�[��/�/G/G/Generator/Common/Facebook/Facebook/Facebook.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook;
use Facebook\Authentication\AccessToken;
use Facebook\Authentication\OAuth2Client;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\FileUpload\FacebookFile;
use Facebook\FileUpload\FacebookResumableUploader;
use Facebook\FileUpload\FacebookTransferChunk;
use Facebook\FileUpload\FacebookVideo;
use Facebook\GraphNodes\GraphEdge;
use Facebook\Helpers\FacebookCanvasHelper;
use Facebook\Helpers\FacebookJavaScriptHelper;
use Facebook\Helpers\FacebookPageTabHelper;
use Facebook\Helpers\FacebookRedirectLoginHelper;
use Facebook\HttpClients\HttpClientsFactory;
use Facebook\PersistentData\PersistentDataFactory;
use Facebook\PersistentData\PersistentDataInterface;
use Facebook\PseudoRandomString\PseudoRandomStringGeneratorFactory;
use Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface;
use Facebook\Url\FacebookUrlDetectionHandler;
use Facebook\Url\UrlDetectionInterface;
use InvalidArgumentException;
/**
* Class Facebook
*
* @package Facebook
*/
class Facebook {
/**
* @const string Version number of the Facebook PHP SDK.
*/
const VERSION = '5.4.4';
/**
* @const string Default Graph API version for requests.
*/
const DEFAULT_GRAPH_VERSION = 'v2.8';
/**
* @const string The name of the environment variable that contains the
app ID.
*/
const APP_ID_ENV_NAME = 'FACEBOOK_APP_ID';
/**
* @const string The name of the environment variable that contains the
app secret.
*/
const APP_SECRET_ENV_NAME = 'FACEBOOK_APP_SECRET';
/**
* @var FacebookApp The FacebookApp entity.
*/
protected $app;
/**
* @var FacebookClient The Facebook client service.
*/
protected $client;
/**
* @var OAuth2Client The OAuth 2.0 client service.
*/
protected $oAuth2Client;
/**
* @var UrlDetectionInterface|null The URL detection handler.
*/
protected $urlDetectionHandler;
/**
* @var PseudoRandomStringGeneratorInterface|null The cryptographically
secure pseudo-random string generator.
*/
protected $pseudoRandomStringGenerator;
/**
* @var AccessToken|null The default access token to use with requests.
*/
protected $defaultAccessToken;
/**
* @var string|null The default Graph version we want to use.
*/
protected $defaultGraphVersion;
/**
* @var PersistentDataInterface|null The persistent data handler.
*/
protected $persistentDataHandler;
/**
* @var FacebookResponse|FacebookBatchResponse|null Stores the last
request made to Graph.
*/
protected $lastResponse;
/**
* Instantiates a new Facebook super-class object.
*
* @param array $config
*
* @throws FacebookSDKException
*/
public function __construct(array $config = []) {
$config = array_merge([
'app_id' =>
getenv(static::APP_ID_ENV_NAME),
'app_secret' =>
getenv(static::APP_SECRET_ENV_NAME),
'default_graph_version' =>
static::DEFAULT_GRAPH_VERSION,
'enable_beta_mode' => false,
'http_client_handler' => null,
'persistent_data_handler' => null,
'pseudo_random_string_generator' => null,
'url_detection_handler' => null,
], $config);
if (!$config['app_id']) {
throw new FacebookSDKException('Required
"app_id" key not supplied in config and could not find fallback
environment variable "' . static::APP_ID_ENV_NAME .
'"');
}
if (!$config['app_secret']) {
throw new FacebookSDKException('Required
"app_secret" key not supplied in config and could not find
fallback environment variable "' . static::APP_SECRET_ENV_NAME .
'"');
}
$this->app = new
FacebookApp($config['app_id'], $config['app_secret']);
$this->client = new
FacebookClient(HttpClientsFactory::createHttpClient($config['http_client_handler']),
$config['enable_beta_mode']);
$this->pseudoRandomStringGenerator =
PseudoRandomStringGeneratorFactory::createPseudoRandomStringGenerator($config['pseudo_random_string_generator']);
$this->setUrlDetectionHandler($config['url_detection_handler']
?: new FacebookUrlDetectionHandler());
$this->persistentDataHandler =
PersistentDataFactory::createPersistentDataHandler($config['persistent_data_handler']);
if (isset($config['default_access_token'])) {
$this->setDefaultAccessToken($config['default_access_token']);
}
$this->defaultGraphVersion =
$config['default_graph_version'];
}
/**
* Returns the FacebookApp entity.
*
* @return FacebookApp
*/
public function getApp() {
return $this->app;
}
/**
* Returns the FacebookClient service.
*
* @return FacebookClient
*/
public function getClient() {
return $this->client;
}
/**
* Returns the OAuth 2.0 client service.
*
* @return OAuth2Client
*/
public function getOAuth2Client() {
if (!$this->oAuth2Client instanceof OAuth2Client) {
$app = $this->getApp();
$client = $this->getClient();
$this->oAuth2Client = new OAuth2Client($app, $client,
$this->defaultGraphVersion);
}
return $this->oAuth2Client;
}
/**
* Returns the last response returned from Graph.
*
* @return FacebookResponse|FacebookBatchResponse|null
*/
public function getLastResponse() {
return $this->lastResponse;
}
/**
* Returns the URL detection handler.
*
* @return UrlDetectionInterface
*/
public function getUrlDetectionHandler() {
return $this->urlDetectionHandler;
}
/**
* Changes the URL detection handler.
*
* @param UrlDetectionInterface $urlDetectionHandler
*/
private function setUrlDetectionHandler(UrlDetectionInterface
$urlDetectionHandler) {
$this->urlDetectionHandler = $urlDetectionHandler;
}
/**
* Returns the default AccessToken entity.
*
* @return AccessToken|null
*/
public function getDefaultAccessToken() {
return $this->defaultAccessToken;
}
/**
* Sets the default access token to use with requests.
*
* @param AccessToken|string $accessToken The access token to save.
*
* @throws InvalidArgumentException
*/
public function setDefaultAccessToken($accessToken) {
if (is_string($accessToken)) {
$this->defaultAccessToken = new AccessToken($accessToken);
return;
}
if ($accessToken instanceof AccessToken) {
$this->defaultAccessToken = $accessToken;
return;
}
throw new InvalidArgumentException('The default access token
must be of type "string" or Facebook\AccessToken');
}
/**
* Returns the default Graph version.
*
* @return string
*/
public function getDefaultGraphVersion() {
return $this->defaultGraphVersion;
}
/**
* Returns the redirect login helper.
*
* @return FacebookRedirectLoginHelper
*/
public function getRedirectLoginHelper() {
return new FacebookRedirectLoginHelper($this->getOAuth2Client(),
$this->persistentDataHandler, $this->urlDetectionHandler,
$this->pseudoRandomStringGenerator);
}
/**
* Returns the JavaScript helper.
*
* @return FacebookJavaScriptHelper
*/
public function getJavaScriptHelper() {
return new FacebookJavaScriptHelper($this->app,
$this->client, $this->defaultGraphVersion);
}
/**
* Returns the canvas helper.
*
* @return FacebookCanvasHelper
*/
public function getCanvasHelper() {
return new FacebookCanvasHelper($this->app, $this->client,
$this->defaultGraphVersion);
}
/**
* Returns the page tab helper.
*
* @return FacebookPageTabHelper
*/
public function getPageTabHelper() {
return new FacebookPageTabHelper($this->app, $this->client,
$this->defaultGraphVersion);
}
/**
* Sends a GET request to Graph and returns the result.
*
* @param string $endpoint
* @param AccessToken|string|null $accessToken
* @param string|null $eTag
* @param string|null $graphVersion
*
* @return FacebookResponse
*
* @throws FacebookSDKException
*/
public function get($endpoint, $accessToken = null, $eTag = null,
$graphVersion = null) {
return $this->sendRequest('GET', $endpoint, $params =
[], $accessToken, $eTag, $graphVersion);
}
/**
* Sends a POST request to Graph and returns the result.
*
* @param string $endpoint
* @param array $params
* @param AccessToken|string|null $accessToken
* @param string|null $eTag
* @param string|null $graphVersion
*
* @return FacebookResponse
*
* @throws FacebookSDKException
*/
public function post($endpoint, array $params = [], $accessToken =
null, $eTag = null, $graphVersion = null) {
return $this->sendRequest('POST', $endpoint, $params,
$accessToken, $eTag, $graphVersion);
}
/**
* Sends a DELETE request to Graph and returns the result.
*
* @param string $endpoint
* @param array $params
* @param AccessToken|string|null $accessToken
* @param string|null $eTag
* @param string|null $graphVersion
*
* @return FacebookResponse
*
* @throws FacebookSDKException
*/
public function delete($endpoint, array $params = [], $accessToken =
null, $eTag = null, $graphVersion = null) {
return $this->sendRequest('DELETE', $endpoint,
$params, $accessToken, $eTag, $graphVersion);
}
/**
* Sends a request to Graph for the next page of results.
*
* @param GraphEdge $graphEdge The GraphEdge to paginate over.
*
* @return GraphEdge|null
*
* @throws FacebookSDKException
*/
public function next(GraphEdge $graphEdge) {
return $this->getPaginationResults($graphEdge,
'next');
}
/**
* Sends a request to Graph for the previous page of results.
*
* @param GraphEdge $graphEdge The GraphEdge to paginate over.
*
* @return GraphEdge|null
*
* @throws FacebookSDKException
*/
public function previous(GraphEdge $graphEdge) {
return $this->getPaginationResults($graphEdge,
'previous');
}
/**
* Sends a request to Graph for the next page of results.
*
* @param GraphEdge $graphEdge The GraphEdge to paginate over.
* @param string $direction The direction of the pagination:
next|previous.
*
* @return GraphEdge|null
*
* @throws FacebookSDKException
*/
public function getPaginationResults(GraphEdge $graphEdge, $direction)
{
$paginationRequest =
$graphEdge->getPaginationRequest($direction);
if (!$paginationRequest) {
return null;
}
$this->lastResponse =
$this->client->sendRequest($paginationRequest);
// Keep the same GraphNode subclass
$subClassName = $graphEdge->getSubClassName();
$graphEdge =
$this->lastResponse->getGraphEdge($subClassName, false);
return count($graphEdge) > 0 ? $graphEdge : null;
}
/**
* Sends a request to Graph and returns the result.
*
* @param string $method
* @param string $endpoint
* @param array $params
* @param AccessToken|string|null $accessToken
* @param string|null $eTag
* @param string|null $graphVersion
*
* @return FacebookResponse
*
* @throws FacebookSDKException
*/
public function sendRequest($method, $endpoint, array $params = [],
$accessToken = null, $eTag = null, $graphVersion = null) {
$accessToken = $accessToken ?: $this->defaultAccessToken;
$graphVersion = $graphVersion ?: $this->defaultGraphVersion;
$request = $this->request($method, $endpoint, $params,
$accessToken, $eTag, $graphVersion);
return $this->lastResponse =
$this->client->sendRequest($request);
}
/**
* Sends a batched request to Graph and returns the result.
*
* @param array $requests
* @param AccessToken|string|null $accessToken
* @param string|null $graphVersion
*
* @return FacebookBatchResponse
*
* @throws FacebookSDKException
*/
public function sendBatchRequest(array $requests, $accessToken = null,
$graphVersion = null) {
$accessToken = $accessToken ?: $this->defaultAccessToken;
$graphVersion = $graphVersion ?: $this->defaultGraphVersion;
$batchRequest = new FacebookBatchRequest($this->app, $requests,
$accessToken, $graphVersion);
return $this->lastResponse =
$this->client->sendBatchRequest($batchRequest);
}
/**
* Instantiates a new FacebookRequest entity.
*
* @param string $method
* @param string $endpoint
* @param array $params
* @param AccessToken|string|null $accessToken
* @param string|null $eTag
* @param string|null $graphVersion
*
* @return FacebookRequest
*
* @throws FacebookSDKException
*/
public function request($method, $endpoint, array $params = [],
$accessToken = null, $eTag = null, $graphVersion = null) {
$accessToken = $accessToken ?: $this->defaultAccessToken;
$graphVersion = $graphVersion ?: $this->defaultGraphVersion;
return new FacebookRequest($this->app, $accessToken, $method,
$endpoint, $params, $eTag, $graphVersion);
}
/**
* Factory to create FacebookFile's.
*
* @param string $pathToFile
*
* @return FacebookFile
*
* @throws FacebookSDKException
*/
public function fileToUpload($pathToFile) {
return new FacebookFile($pathToFile);
}
/**
* Factory to create FacebookVideo's.
*
* @param string $pathToFile
*
* @return FacebookVideo
*
* @throws FacebookSDKException
*/
public function videoToUpload($pathToFile) {
return new FacebookVideo($pathToFile);
}
/**
* Upload a video in chunks.
*
* @param int $target The id of the target node
before the /videos edge.
* @param string $pathToFile The full path to the file.
* @param array $metadata The metadata associated with
the video file.
* @param string|null $accessToken The access token.
* @param int $maxTransferTries The max times to retry a failed
upload chunk.
* @param string|null $graphVersion The Graph API version to use.
*
* @return array
*
* @throws FacebookSDKException
*/
public function uploadVideo($target, $pathToFile, $metadata = [],
$accessToken = null, $maxTransferTries = 5, $graphVersion = null) {
$accessToken = $accessToken ?: $this->defaultAccessToken;
$graphVersion = $graphVersion ?: $this->defaultGraphVersion;
$uploader = new FacebookResumableUploader($this->app,
$this->client, $accessToken, $graphVersion);
$endpoint = '/' . $target . '/videos';
$file = $this->videoToUpload($pathToFile);
$chunk = $uploader->start($endpoint, $file);
do {
$chunk = $this->maxTriesTransfer($uploader, $endpoint,
$chunk, $maxTransferTries);
} while (!$chunk->isLastChunk());
return [
'video_id' => $chunk->getVideoId(),
'success' => $uploader->finish($endpoint,
$chunk->getUploadSessionId(), $metadata),
];
}
/**
* Attempts to upload a chunk of a file in $retryCountdown tries.
*
* @param FacebookResumableUploader $uploader
* @param string $endpoint
* @param FacebookTransferChunk $chunk
* @param int $retryCountdown
*
* @return FacebookTransferChunk
*
* @throws FacebookSDKException
*/
private function maxTriesTransfer(FacebookResumableUploader $uploader,
$endpoint, FacebookTransferChunk $chunk, $retryCountdown) {
$newChunk = $uploader->transfer($endpoint, $chunk,
$retryCountdown < 1);
if ($newChunk !== $chunk) {
return $newChunk;
}
$retryCountdown--;
// If transfer() returned the same chunk entity, the transfer
failed but is resumable.
return $this->maxTriesTransfer($uploader, $endpoint, $chunk,
$retryCountdown);
}
}
PK(C�[�z`��2Generator/Common/Facebook/Facebook/FacebookApp.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook;
use Facebook\Authentication\AccessToken;
use Facebook\Exceptions\FacebookSDKException;
use Serializable;
class FacebookApp implements Serializable {
/**
* @var string The app ID.
*/
protected $id;
/**
* @var string The app secret.
*/
protected $secret;
/**
* @param string $id
* @param string $secret
*
* @throws FacebookSDKException
*/
public function __construct($id, $secret) {
if (!is_string($id) // Keeping this for BC. Integers greater than
PHP_INT_MAX will make is_int() return false
&& !is_int($id)) {
throw new FacebookSDKException('The "app_id"
must be formatted as a string since many app ID\'s are greater than
PHP_INT_MAX on some systems.');
}
// We cast as a string in case a valid int was set on a 64-bit
system and this is unserialised on a 32-bit system
$this->id = (string)$id;
$this->secret = $secret;
}
/**
* Returns the app ID.
*
* @return string
*/
public function getId() {
return $this->id;
}
/**
* Returns the app secret.
*
* @return string
*/
public function getSecret() {
return $this->secret;
}
/**
* Returns an app access token.
*
* @return AccessToken
*/
public function getAccessToken() {
return new AccessToken($this->id . '|' .
$this->secret);
}
/**
* Serializes the FacebookApp entity as a string.
*
* @return string
*/
public function serialize() {
return implode('|', [
$this->id,
$this->secret
]);
}
/**
* Unserializes a string as a FacebookApp entity.
*
* @param string $serialized
*/
public function unserialize($serialized) {
list($id, $secret) = explode('|', $serialized);
$this->__construct($id, $secret);
}
}
PK(C�[����� �
;Generator/Common/Facebook/Facebook/FacebookBatchRequest.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook;
use ArrayAccess;
use ArrayIterator;
use Facebook\Authentication\AccessToken;
use Facebook\Exceptions\FacebookSDKException;
use InvalidArgumentException;
use IteratorAggregate;
/**
* Class BatchRequest
*
* @package Facebook
*/
class FacebookBatchRequest extends FacebookRequest implements
IteratorAggregate, ArrayAccess {
/**
* @var array An array of FacebookRequest entities to send.
*/
protected $requests;
/**
* @var array An array of files to upload.
*/
protected $attachedFiles;
/**
* Creates a new Request entity.
*
* @param FacebookApp|null $app
* @param array $requests
* @param AccessToken|string|null $accessToken
* @param string|null $graphVersion
*/
public function __construct(FacebookApp $app = null, array $requests =
[], $accessToken = null, $graphVersion = null) {
parent::__construct($app, $accessToken, 'POST',
'', [], null, $graphVersion);
$this->add($requests);
}
/**
* A a new request to the array.
*
* @param FacebookRequest|array $request
* @param string|null $name
*
* @return FacebookBatchRequest
*
* @throws InvalidArgumentException
*/
public function add($request, $name = null) {
if (is_array($request)) {
foreach ($request as $key => $req) {
$this->add($req, $key);
}
return $this;
}
if (!$request instanceof FacebookRequest) {
throw new InvalidArgumentException('Argument for add()
must be of type array or FacebookRequest.');
}
$this->addFallbackDefaults($request);
$requestToAdd = [
'name' => $name,
'request' => $request,
];
// File uploads
$attachedFiles = $this->extractFileAttachments($request);
if ($attachedFiles) {
$requestToAdd['attached_files'] = $attachedFiles;
}
$this->requests[] = $requestToAdd;
return $this;
}
/**
* Ensures that the FacebookApp and access token fall back when
missing.
*
* @param FacebookRequest $request
*
* @throws FacebookSDKException
*/
public function addFallbackDefaults(FacebookRequest $request) {
if (!$request->getApp()) {
$app = $this->getApp();
if (!$app) {
throw new FacebookSDKException('Missing FacebookApp on
FacebookRequest and no fallback detected on FacebookBatchRequest.');
}
$request->setApp($app);
}
if (!$request->getAccessToken()) {
$accessToken = $this->getAccessToken();
if (!$accessToken) {
throw new FacebookSDKException('Missing access token
on FacebookRequest and no fallback detected on
FacebookBatchRequest.');
}
$request->setAccessToken($accessToken);
}
}
/**
* Extracts the files from a request.
*
* @param FacebookRequest $request
*
* @return string|null
*
* @throws FacebookSDKException
*/
public function extractFileAttachments(FacebookRequest $request) {
if (!$request->containsFileUploads()) {
return null;
}
$files = $request->getFiles();
$fileNames = [];
foreach ($files as $file) {
$fileName = uniqid();
$this->addFile($fileName, $file);
$fileNames[] = $fileName;
}
$request->resetFiles();
return implode(',', $fileNames);
}
/**
* Return the FacebookRequest entities.
*
* @return array
*/
public function getRequests() {
return $this->requests;
}
/**
* Prepares the requests to be sent as a batch request.
*/
public function prepareRequestsForBatch() {
$this->validateBatchRequestCount();
$params = [
'batch' =>
$this->convertRequestsToJson(),
'include_headers' => true,
];
$this->setParams($params);
}
/**
* Converts the requests into a JSON(P) string.
*
* @return string
*/
public function convertRequestsToJson() {
$requests = [];
foreach ($this->requests as $request) {
$attachedFiles = isset($request['attached_files']) ?
$request['attached_files'] : null;
$requests[] =
$this->requestEntityToBatchArray($request['request'],
$request['name'], $attachedFiles);
}
return json_encode($requests);
}
/**
* Validate the request count before sending them as a batch.
*
* @throws FacebookSDKException
*/
public function validateBatchRequestCount() {
$batchCount = count($this->requests);
if ($batchCount === 0) {
throw new FacebookSDKException('There are no batch
requests to send.');
} elseif ($batchCount > 50) {
// Per:
https://developers.facebook.com/docs/graph-api/making-multiple-requests#limits
throw new FacebookSDKException('You cannot send more than
50 batch requests at a time.');
}
}
/**
* Converts a Request entity into an array that is batch-friendly.
*
* @param FacebookRequest $request The request entity to convert.
* @param string|null $requestName The name of the request.
* @param string|null $attachedFiles Names of files associated with
the request.
*
* @return array
*/
public function requestEntityToBatchArray(FacebookRequest $request,
$requestName = null, $attachedFiles = null) {
$compiledHeaders = [];
$headers = $request->getHeaders();
foreach ($headers as $name => $value) {
$compiledHeaders[] = $name . ': ' . $value;
}
$batch = [
'headers' => $compiledHeaders,
'method' => $request->getMethod(),
'relative_url' => $request->getUrl(),
];
// Since file uploads are moved to the root request of a batch
request,
// the child requests will always be URL-encoded.
$body = $request->getUrlEncodedBody()
->getBody();
if ($body) {
$batch['body'] = $body;
}
if (isset($requestName)) {
$batch['name'] = $requestName;
}
if (isset($attachedFiles)) {
$batch['attached_files'] = $attachedFiles;
}
return $batch;
}
/**
* Get an iterator for the items.
*
* @return ArrayIterator
*/
public function getIterator() {
return new ArrayIterator($this->requests);
}
/**
* @inheritdoc
*/
public function offsetSet($offset, $value) {
$this->add($value, $offset);
}
/**
* @inheritdoc
*/
public function offsetExists($offset) {
return isset($this->requests[$offset]);
}
/**
* @inheritdoc
*/
public function offsetUnset($offset) {
unset($this->requests[$offset]);
}
/**
* @inheritdoc
*/
public function offsetGet($offset) {
return isset($this->requests[$offset]) ?
$this->requests[$offset] : null;
}
}
PK(C�[H1ۛ��5Generator/Common/Facebook/Facebook/FacebookClient.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpClientInterface;
use Facebook\HttpClients\FacebookStreamHttpClient;
/**
* Class FacebookClient
*
* @package Facebook
*/
class FacebookClient {
/**
* @const string Production Graph API URL.
*/
const BASE_GRAPH_URL = 'https://graph.facebook.com';
/**
* @const string Graph API URL for video uploads.
*/
const BASE_GRAPH_VIDEO_URL =
'https://graph-video.facebook.com';
/**
* @const string Beta Graph API URL.
*/
const BASE_GRAPH_URL_BETA =
'https://graph.beta.facebook.com';
/**
* @const string Beta Graph API URL for video uploads.
*/
const BASE_GRAPH_VIDEO_URL_BETA =
'https://graph-video.beta.facebook.com';
/**
* @const int The timeout in seconds for a normal request.
*/
const DEFAULT_REQUEST_TIMEOUT = 60;
/**
* @const int The timeout in seconds for a request that contains file
uploads.
*/
const DEFAULT_FILE_UPLOAD_REQUEST_TIMEOUT = 3600;
/**
* @const int The timeout in seconds for a request that contains video
uploads.
*/
const DEFAULT_VIDEO_UPLOAD_REQUEST_TIMEOUT = 7200;
/**
* @var bool Toggle to use Graph beta url.
*/
protected $enableBetaMode = false;
/**
* @var FacebookHttpClientInterface HTTP client handler.
*/
protected $httpClientHandler;
/**
* @var int The number of calls that have been made to Graph.
*/
public static $requestCount = 0;
/**
* Instantiates a new FacebookClient object.
*
* @param FacebookHttpClientInterface|null $httpClientHandler
* @param boolean $enableBeta
*/
public function __construct(FacebookHttpClientInterface
$httpClientHandler = null, $enableBeta = false) {
$this->httpClientHandler = $httpClientHandler ?:
$this->detectHttpClientHandler();
$this->enableBetaMode = $enableBeta;
}
/**
* Sets the HTTP client handler.
*
* @param FacebookHttpClientInterface $httpClientHandler
*/
public function setHttpClientHandler(FacebookHttpClientInterface
$httpClientHandler) {
$this->httpClientHandler = $httpClientHandler;
}
/**
* Returns the HTTP client handler.
*
* @return FacebookHttpClientInterface
*/
public function getHttpClientHandler() {
return $this->httpClientHandler;
}
/**
* Detects which HTTP client handler to use.
*
* @return FacebookHttpClientInterface
*/
public function detectHttpClientHandler() {
return extension_loaded('curl') ? new
FacebookCurlHttpClient() : new FacebookStreamHttpClient();
}
/**
* Toggle beta mode.
*
* @param boolean $betaMode
*/
public function enableBetaMode($betaMode = true) {
$this->enableBetaMode = $betaMode;
}
/**
* Returns the base Graph URL.
*
* @param boolean $postToVideoUrl Post to the video API if videos are
being uploaded.
*
* @return string
*/
public function getBaseGraphUrl($postToVideoUrl = false) {
if ($postToVideoUrl) {
return $this->enableBetaMode ?
static::BASE_GRAPH_VIDEO_URL_BETA : static::BASE_GRAPH_VIDEO_URL;
}
return $this->enableBetaMode ? static::BASE_GRAPH_URL_BETA :
static::BASE_GRAPH_URL;
}
/**
* Prepares the request for sending to the client handler.
*
* @param FacebookRequest $request
*
* @return array
*/
public function prepareRequestMessage(FacebookRequest $request) {
$postToVideoUrl = $request->containsVideoUploads();
$url = $this->getBaseGraphUrl($postToVideoUrl) .
$request->getUrl();
// If we're sending files they should be sent as
multipart/form-data
if ($request->containsFileUploads()) {
$requestBody = $request->getMultipartBody();
$request->setHeaders([
'Content-Type' => 'multipart/form-data;
boundary=' . $requestBody->getBoundary(),
]);
} else {
$requestBody = $request->getUrlEncodedBody();
$request->setHeaders([
'Content-Type' =>
'application/x-www-form-urlencoded',
]);
}
return [
$url,
$request->getMethod(),
$request->getHeaders(),
$requestBody->getBody(),
];
}
/**
* Makes the request to Graph and returns the result.
*
* @param FacebookRequest $request
*
* @return FacebookResponse
*
* @throws FacebookSDKException
*/
public function sendRequest(FacebookRequest $request) {
if (get_class($request) === 'Facebook\FacebookRequest') {
$request->validateAccessToken();
}
list($url, $method, $headers, $body) =
$this->prepareRequestMessage($request);
// Since file uploads can take a while, we need to give more time
for uploads
$timeOut = static::DEFAULT_REQUEST_TIMEOUT;
if ($request->containsFileUploads()) {
$timeOut = static::DEFAULT_FILE_UPLOAD_REQUEST_TIMEOUT;
} elseif ($request->containsVideoUploads()) {
$timeOut = static::DEFAULT_VIDEO_UPLOAD_REQUEST_TIMEOUT;
}
// Should throw `FacebookSDKException` exception on HTTP client
error.
// Don't catch to allow it to bubble up.
$rawResponse = $this->httpClientHandler->send($url, $method,
$body, $headers, $timeOut);
static::$requestCount++;
$returnResponse = new FacebookResponse($request,
$rawResponse->getBody(), $rawResponse->getHttpResponseCode(),
$rawResponse->getHeaders());
if ($returnResponse->isError()) {
//throw $returnResponse->getThrownException();
$body = json_decode($rawResponse->getBody());
return array('response_error' =>
$body->error->message);
}
return $returnResponse;
}
/**
* Makes a batched request to Graph and returns the result.
*
* @param FacebookBatchRequest $request
*
* @return FacebookBatchResponse
*
* @throws FacebookSDKException
*/
public function sendBatchRequest(FacebookBatchRequest $request) {
$request->prepareRequestsForBatch();
$facebookResponse = $this->sendRequest($request);
return new FacebookBatchResponse($request, $facebookResponse);
}
}
PK(C�[�I��2�26Generator/Common/Facebook/Facebook/FacebookRequest.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook;
use Facebook\Authentication\AccessToken;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\FileUpload\FacebookFile;
use Facebook\FileUpload\FacebookVideo;
use Facebook\Http\RequestBodyMultipart;
use Facebook\Http\RequestBodyUrlEncoded;
use Facebook\Url\FacebookUrlManipulator;
/**
* Class Request
*
* @package Facebook
*/
class FacebookRequest {
/**
* @var FacebookApp The Facebook app entity.
*/
protected $app;
/**
* @var string|null The access token to use for this request.
*/
protected $accessToken;
/**
* @var string The HTTP method for this request.
*/
protected $method;
/**
* @var string The Graph endpoint for this request.
*/
protected $endpoint;
/**
* @var array The headers to send with this request.
*/
protected $headers = [];
/**
* @var array The parameters to send with this request.
*/
protected $params = [];
/**
* @var array The files to send with this request.
*/
protected $files = [];
/**
* @var string ETag to send with this request.
*/
protected $eTag;
/**
* @var string Graph version to use for this request.
*/
protected $graphVersion;
/**
* Creates a new Request entity.
*
* @param FacebookApp|null $app
* @param AccessToken|string|null $accessToken
* @param string|null $method
* @param string|null $endpoint
* @param array|null $params
* @param string|null $eTag
* @param string|null $graphVersion
*/
public function __construct(FacebookApp $app = null, $accessToken =
null, $method = null, $endpoint = null, array $params = [], $eTag = null,
$graphVersion = null) {
$this->setApp($app);
$this->setAccessToken($accessToken);
$this->setMethod($method);
$this->setEndpoint($endpoint);
$this->setParams($params);
$this->setETag($eTag);
$this->graphVersion = $graphVersion ?:
Facebook::DEFAULT_GRAPH_VERSION;
}
/**
* Set the access token for this request.
*
* @param AccessToken|string|null
*
* @return FacebookRequest
*/
public function setAccessToken($accessToken) {
$this->accessToken = $accessToken;
if ($accessToken instanceof AccessToken) {
$this->accessToken = $accessToken->getValue();
}
return $this;
}
/**
* Sets the access token with one harvested from a URL or POST params.
*
* @param string $accessToken The access token.
*
* @return FacebookRequest
*
* @throws FacebookSDKException
*/
public function setAccessTokenFromParams($accessToken) {
$existingAccessToken = $this->getAccessToken();
if (!$existingAccessToken) {
$this->setAccessToken($accessToken);
} elseif ($accessToken !== $existingAccessToken) {
throw new FacebookSDKException('Access token mismatch. The
access token provided in the FacebookRequest and the one provided in the
URL or POST params do not match.');
}
return $this;
}
/**
* Return the access token for this request.
*
* @return string|null
*/
public function getAccessToken() {
return $this->accessToken;
}
/**
* Return the access token for this request as an AccessToken entity.
*
* @return AccessToken|null
*/
public function getAccessTokenEntity() {
return $this->accessToken ? new
AccessToken($this->accessToken) : null;
}
/**
* Set the FacebookApp entity used for this request.
*
* @param FacebookApp|null $app
*/
public function setApp(FacebookApp $app = null) {
$this->app = $app;
}
/**
* Return the FacebookApp entity used for this request.
*
* @return FacebookApp
*/
public function getApp() {
return $this->app;
}
/**
* Generate an app secret proof to sign this request.
*
* @return string|null
*/
public function getAppSecretProof() {
if (!$accessTokenEntity = $this->getAccessTokenEntity()) {
return null;
}
return
$accessTokenEntity->getAppSecretProof($this->app->getSecret());
}
/**
* Validate that an access token exists for this request.
*
* @throws FacebookSDKException
*/
public function validateAccessToken() {
$accessToken = $this->getAccessToken();
if (!$accessToken) {
throw new FacebookSDKException('You must provide an access
token.');
}
}
/**
* Set the HTTP method for this request.
*
* @param string
*/
public function setMethod($method) {
$this->method = strtoupper($method);
}
/**
* Return the HTTP method for this request.
*
* @return string
*/
public function getMethod() {
return $this->method;
}
/**
* Validate that the HTTP method is set.
*
* @throws FacebookSDKException
*/
public function validateMethod() {
if (!$this->method) {
throw new FacebookSDKException('HTTP method not
specified.');
}
if (!in_array($this->method, [
'GET',
'POST',
'DELETE'
])) {
throw new FacebookSDKException('Invalid HTTP method
specified.');
}
}
/**
* Set the endpoint for this request.
*
* @param string
*
* @return FacebookRequest
*
* @throws FacebookSDKException
*/
public function setEndpoint($endpoint) {
// Harvest the access token from the endpoint to keep things in
sync
$params = FacebookUrlManipulator::getParamsAsArray($endpoint);
if (isset($params['access_token'])) {
$this->setAccessTokenFromParams($params['access_token']);
}
// Clean the token & app secret proof from the endpoint.
$filterParams = [
'access_token',
'appsecret_proof'
];
$this->endpoint =
FacebookUrlManipulator::removeParamsFromUrl($endpoint, $filterParams);
return $this;
}
/**
* Return the endpoint for this request.
*
* @return string
*/
public function getEndpoint() {
// For batch requests, this will be empty
return $this->endpoint;
}
/**
* Generate and return the headers for this request.
*
* @return array
*/
public function getHeaders() {
$headers = static::getDefaultHeaders();
if ($this->eTag) {
$headers['If-None-Match'] = $this->eTag;
}
return array_merge($this->headers, $headers);
}
/**
* Set the headers for this request.
*
* @param array $headers
*/
public function setHeaders(array $headers) {
$this->headers = array_merge($this->headers, $headers);
}
/**
* Sets the eTag value.
*
* @param string $eTag
*/
public function setETag($eTag) {
$this->eTag = $eTag;
}
/**
* Set the params for this request.
*
* @param array $params
*
* @return FacebookRequest
*
* @throws FacebookSDKException
*/
public function setParams(array $params = []) {
if (isset($params['access_token'])) {
$this->setAccessTokenFromParams($params['access_token']);
}
// Don't let these buggers slip in.
unset($params['access_token'],
$params['appsecret_proof']);
//$params = $this->sanitizeAuthenticationParams($params);
$params = $this->sanitizeFileParams($params);
$this->dangerouslySetParams($params);
return $this;
}
/**
* Set the params for this request without filtering them first.
*
* @param array $params
*
* @return FacebookRequest
*/
public function dangerouslySetParams(array $params = []) {
$this->params = array_merge($this->params, $params);
return $this;
}
/**
* Iterate over the params and pull out the file uploads.
*
* @param array $params
*
* @return array
*/
public function sanitizeFileParams(array $params) {
foreach ($params as $key => $value) {
if ($value instanceof FacebookFile) {
$this->addFile($key, $value);
unset($params[$key]);
}
}
return $params;
}
/**
* Add a file to be uploaded.
*
* @param string $key
* @param FacebookFile $file
*/
public function addFile($key, FacebookFile $file) {
$this->files[$key] = $file;
}
/**
* Removes all the files from the upload queue.
*/
public function resetFiles() {
$this->files = [];
}
/**
* Get the list of files to be uploaded.
*
* @return array
*/
public function getFiles() {
return $this->files;
}
/**
* Let's us know if there is a file upload with this request.
*
* @return boolean
*/
public function containsFileUploads() {
return !empty($this->files);
}
/**
* Let's us know if there is a video upload with this request.
*
* @return boolean
*/
public function containsVideoUploads() {
foreach ($this->files as $file) {
if ($file instanceof FacebookVideo) {
return true;
}
}
return false;
}
/**
* Returns the body of the request as multipart/form-data.
*
* @return RequestBodyMultipart
*/
public function getMultipartBody() {
$params = $this->getPostParams();
return new RequestBodyMultipart($params, $this->files);
}
/**
* Returns the body of the request as URL-encoded.
*
* @return RequestBodyUrlEncoded
*/
public function getUrlEncodedBody() {
$params = $this->getPostParams();
return new RequestBodyUrlEncoded($params);
}
/**
* Generate and return the params for this request.
*
* @return array
*/
public function getParams() {
$params = $this->params;
$accessToken = $this->getAccessToken();
if ($accessToken) {
$params['access_token'] = $accessToken;
$params['appsecret_proof'] =
$this->getAppSecretProof();
}
return $params;
}
/**
* Only return params on POST requests.
*
* @return array
*/
public function getPostParams() {
if ($this->getMethod() === 'POST') {
return $this->getParams();
}
return [];
}
/**
* The graph version used for this request.
*
* @return string
*/
public function getGraphVersion() {
return $this->graphVersion;
}
/**
* Generate and return the URL for this request.
*
* @return string
*/
public function getUrl() {
$this->validateMethod();
$graphVersion =
FacebookUrlManipulator::forceSlashPrefix($this->graphVersion);
$endpoint =
FacebookUrlManipulator::forceSlashPrefix($this->getEndpoint());
$url = $graphVersion . $endpoint;
if ($this->getMethod() !== 'POST') {
$params = $this->getParams();
$url = FacebookUrlManipulator::appendParamsToUrl($url,
$params);
}
return $url;
}
/**
* Return the default headers that every request should use.
*
* @return array
*/
public static function getDefaultHeaders() {
return [
'User-Agent' => 'fb-php-' .
Facebook::VERSION,
'Accept-Encoding' => '*',
];
}
}
PK*C�[HI���(�(7Generator/Common/Facebook/Facebook/FacebookResponse.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\GraphNodes\GraphAlbum;
use Facebook\GraphNodes\GraphEdge;
use Facebook\GraphNodes\GraphEvent;
use Facebook\GraphNodes\GraphGroup;
use Facebook\GraphNodes\GraphList;
use Facebook\GraphNodes\GraphNode;
use Facebook\GraphNodes\GraphNodeFactory;
use Facebook\GraphNodes\GraphObject;
use Facebook\GraphNodes\GraphPage;
use Facebook\GraphNodes\GraphSessionInfo;
use Facebook\GraphNodes\GraphUser;
/**
* Class FacebookResponse
*
* @package Facebook
*/
class FacebookResponse {
/**
* @var int The HTTP status code response from Graph.
*/
protected $httpStatusCode;
/**
* @var array The headers returned from Graph.
*/
protected $headers;
/**
* @var string The raw body of the response from Graph.
*/
protected $body;
/**
* @var array The decoded body of the Graph response.
*/
protected $decodedBody = [];
/**
* @var FacebookRequest The original request that returned this
response.
*/
protected $request;
/**
* @var FacebookSDKException The exception thrown by this request.
*/
protected $thrownException;
/**
* Creates a new Response entity.
*
* @param FacebookRequest $request
* @param string|null $body
* @param int|null $httpStatusCode
* @param array|null $headers
*/
public function __construct(FacebookRequest $request, $body = null,
$httpStatusCode = null, array $headers = []) {
$this->request = $request;
$this->body = $body;
$this->httpStatusCode = $httpStatusCode;
$this->headers = $headers;
$this->decodeBody();
}
/**
* Return the original request that returned this response.
*
* @return FacebookRequest
*/
public function getRequest() {
return $this->request;
}
/**
* Return the FacebookApp entity used for this response.
*
* @return FacebookApp
*/
public function getApp() {
return $this->request->getApp();
}
/**
* Return the access token that was used for this response.
*
* @return string|null
*/
public function getAccessToken() {
return $this->request->getAccessToken();
}
/**
* Return the HTTP status code for this response.
*
* @return int
*/
public function getHttpStatusCode() {
return $this->httpStatusCode;
}
/**
* Return the HTTP headers for this response.
*
* @return array
*/
public function getHeaders() {
return $this->headers;
}
/**
* Return the raw body response.
*
* @return string
*/
public function getBody() {
return $this->body;
}
/**
* Return the decoded body response.
*
* @return array
*/
public function getDecodedBody() {
return $this->decodedBody;
}
/**
* Get the app secret proof that was used for this response.
*
* @return string|null
*/
public function getAppSecretProof() {
return $this->request->getAppSecretProof();
}
/**
* Get the ETag associated with the response.
*
* @return string|null
*/
public function getETag() {
return isset($this->headers['ETag']) ?
$this->headers['ETag'] : null;
}
/**
* Get the version of Graph that returned this response.
*
* @return string|null
*/
public function getGraphVersion() {
return isset($this->headers['Facebook-API-Version']) ?
$this->headers['Facebook-API-Version'] : null;
}
/**
* Returns true if Graph returned an error message.
*
* @return boolean
*/
public function isError() {
return isset($this->decodedBody['error']);
}
/**
* Throws the exception.
*
* @throws FacebookSDKException
*/
public function throwException() {
throw $this->thrownException;
}
/**
* Instantiates an exception to be thrown later.
*/
public function makeException() {
$this->thrownException =
FacebookResponseException::create($this);
}
/**
* Returns the exception that was thrown for this request.
*
* @return FacebookResponseException|null
*/
public function getThrownException() {
return $this->thrownException;
}
/**
* Convert the raw response into an array if possible.
*
* Graph will return 2 types of responses:
* - JSON(P)
* Most responses from Graph are JSON(P)
* - application/x-www-form-urlencoded key/value pairs
* Happens on the `/oauth/access_token` endpoint when exchanging
* a short-lived access token for a long-lived access token
* - And sometimes nothing :/ but that'd be a bug.
*/
public function decodeBody() {
$this->decodedBody = json_decode($this->body, true);
if ($this->decodedBody === null) {
$this->decodedBody = [];
parse_str($this->body, $this->decodedBody);
} elseif (is_bool($this->decodedBody)) {
// Backwards compatibility for Graph < 2.1.
// Mimics 2.1 responses.
$this->decodedBody = ['success' =>
$this->decodedBody];
} elseif (is_numeric($this->decodedBody)) {
$this->decodedBody = ['id' =>
$this->decodedBody];
}
if (!is_array($this->decodedBody)) {
$this->decodedBody = [];
}
if ($this->isError()) {
$this->makeException();
}
}
/**
* Instantiate a new GraphObject from response.
*
* @param string|null $subclassName The GraphNode subclass to cast to.
*
* @return GraphObject
*
* @throws FacebookSDKException
*
* @deprecated 5.0.0 getGraphObject() has been renamed to
getGraphNode()
*/
public function getGraphObject($subclassName = null) {
return $this->getGraphNode($subclassName);
}
/**
* Instantiate a new GraphNode from response.
*
* @param string|null $subclassName The GraphNode subclass to cast to.
*
* @return GraphNode
*
* @throws FacebookSDKException
*/
public function getGraphNode($subclassName = null) {
$factory = new GraphNodeFactory($this);
return $factory->makeGraphNode($subclassName);
}
/**
* Convenience method for creating a GraphAlbum collection.
*
* @return GraphAlbum
*
* @throws FacebookSDKException
*/
public function getGraphAlbum() {
$factory = new GraphNodeFactory($this);
return $factory->makeGraphAlbum();
}
/**
* Convenience method for creating a GraphPage collection.
*
* @return GraphPage
*
* @throws FacebookSDKException
*/
public function getGraphPage() {
$factory = new GraphNodeFactory($this);
return $factory->makeGraphPage();
}
/**
* Convenience method for creating a GraphSessionInfo collection.
*
* @return GraphSessionInfo
*
* @throws FacebookSDKException
*/
public function getGraphSessionInfo() {
$factory = new GraphNodeFactory($this);
return $factory->makeGraphSessionInfo();
}
/**
* Convenience method for creating a GraphUser collection.
*
* @return GraphUser
*
* @throws FacebookSDKException
*/
public function getGraphUser() {
$factory = new GraphNodeFactory($this);
return $factory->makeGraphUser();
}
/**
* Convenience method for creating a GraphEvent collection.
*
* @return GraphEvent
*
* @throws FacebookSDKException
*/
public function getGraphEvent() {
$factory = new GraphNodeFactory($this);
return $factory->makeGraphEvent();
}
/**
* Convenience method for creating a GraphGroup collection.
*
* @return GraphGroup
*
* @throws FacebookSDKException
*/
public function getGraphGroup() {
$factory = new GraphNodeFactory($this);
return $factory->makeGraphGroup();
}
/**
* Instantiate a new GraphList from response.
*
* @param string|null $subclassName The GraphNode subclass to cast list
items to.
* @param boolean $auto_prefix Toggle to auto-prefix the subclass
name.
*
* @return GraphList
*
* @throws FacebookSDKException
*
* @deprecated 5.0.0 getGraphList() has been renamed to getGraphEdge()
*/
public function getGraphList($subclassName = null, $auto_prefix = true)
{
return $this->getGraphEdge($subclassName, $auto_prefix);
}
/**
* Instantiate a new GraphEdge from response.
*
* @param string|null $subclassName The GraphNode subclass to cast list
items to.
* @param boolean $auto_prefix Toggle to auto-prefix the subclass
name.
*
* @return GraphEdge
*
* @throws FacebookSDKException
*/
public function getGraphEdge($subclassName = null, $auto_prefix = true)
{
$factory = new GraphNodeFactory($this);
return $factory->makeGraphEdge($subclassName, $auto_prefix);
}
}
PK*C�[U��>Generator/Common/Facebook/Facebook/FileUpload/FacebookFile.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\FileUpload;
use Facebook\Exceptions\FacebookSDKException;
/**
* Class FacebookFile
*
* @package Facebook
*/
class FacebookFile {
/**
* @var string The path to the file on the system.
*/
protected $path;
/**
* @var int The maximum bytes to read. Defaults to -1 (read all the
remaining buffer).
*/
private $maxLength;
/**
* @var int Seek to the specified offset before reading. If this number
is negative, no seeking will occur and
* reading will start from the current position.
*/
private $offset;
/**
* @var resource The stream pointing to the file.
*/
protected $stream;
/**
* Creates a new FacebookFile entity.
*
* @param string $filePath
* @param int $maxLength
* @param int $offset
*
* @throws FacebookSDKException
*/
public function __construct($filePath, $maxLength = -1, $offset = -1) {
$this->path = $filePath;
$this->maxLength = $maxLength;
$this->offset = $offset;
$this->open();
}
/**
* Closes the stream when destructed.
*/
public function __destruct() {
$this->close();
}
/**
* Opens a stream for the file.
*
* @throws FacebookSDKException
*/
public function open() {
if (!$this->isRemoteFile($this->path) &&
!is_readable($this->path)) {
throw new FacebookSDKException('Failed to create
FacebookFile entity. Unable to read resource: ' . $this->path .
'.');
}
$this->stream = fopen($this->path, 'r');
if (!$this->stream) {
throw new FacebookSDKException('Failed to create
FacebookFile entity. Unable to open resource: ' . $this->path .
'.');
}
}
/**
* Stops the file stream.
*/
public function close() {
if (is_resource($this->stream)) {
fclose($this->stream);
}
}
/**
* Return the contents of the file.
*
* @return string
*/
public function getContents() {
return stream_get_contents($this->stream, $this->maxLength,
$this->offset);
}
/**
* Return the name of the file.
*
* @return string
*/
public function getFileName() {
return basename($this->path);
}
/**
* Return the path of the file.
*
* @return string
*/
public function getFilePath() {
return $this->path;
}
/**
* Return the size of the file.
*
* @return int
*/
public function getSize() {
return filesize($this->path);
}
/**
* Return the mimetype of the file.
*
* @return string
*/
public function getMimetype() {
return Mimetypes::getInstance()
->fromFilename($this->path) ?:
'text/plain';
}
/**
* Returns true if the path to the file is remote.
*
* @param string $pathToFile
*
* @return boolean
*/
protected function isRemoteFile($pathToFile) {
return preg_match('/^(https?|ftp):\/\/.*/', $pathToFile)
=== 1;
}
}
PK*C�[��1���KGenerator/Common/Facebook/Facebook/FileUpload/FacebookResumableUploader.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\FileUpload;
use Facebook\Authentication\AccessToken;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookResumableUploadException;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\FacebookApp;
use Facebook\FacebookClient;
use Facebook\FacebookRequest;
/**
* Class FacebookResumableUploader
*
* @package Facebook
*/
class FacebookResumableUploader {
/**
* @var FacebookApp
*/
protected $app;
/**
* @var string
*/
protected $accessToken;
/**
* @var FacebookClient The Facebook client service.
*/
protected $client;
/**
* @var string Graph version to use for this request.
*/
protected $graphVersion;
/**
* @param FacebookApp $app
* @param FacebookClient $client
* @param AccessToken|string|null $accessToken
* @param string $graphVersion
*/
public function __construct(FacebookApp $app, FacebookClient $client,
$accessToken, $graphVersion) {
$this->app = $app;
$this->client = $client;
$this->accessToken = $accessToken;
$this->graphVersion = $graphVersion;
}
/**
* Upload by chunks - start phase
*
* @param string $endpoint
* @param FacebookFile $file
*
* @return FacebookTransferChunk
*
* @throws FacebookSDKException
*/
public function start($endpoint, FacebookFile $file) {
$params = [
'upload_phase' => 'start',
'file_size' => $file->getSize(),
];
$response = $this->sendUploadRequest($endpoint, $params);
return new FacebookTransferChunk($file,
$response['upload_session_id'], $response['video_id'],
$response['start_offset'], $response['end_offset']);
}
/**
* Upload by chunks - transfer phase
*
* @param string $endpoint
* @param FacebookTransferChunk $chunk
* @param boolean $allowToThrow
*
* @return FacebookTransferChunk
*
* @throws FacebookResponseException
*/
public function transfer($endpoint, FacebookTransferChunk $chunk,
$allowToThrow = false) {
$params = [
'upload_phase' => 'transfer',
'upload_session_id' =>
$chunk->getUploadSessionId(),
'start_offset' =>
$chunk->getStartOffset(),
'video_file_chunk' =>
$chunk->getPartialFile(),
];
try {
$response = $this->sendUploadRequest($endpoint, $params);
} catch (FacebookResponseException $e) {
$preException = $e->getPrevious();
if ($allowToThrow || !$preException instanceof
FacebookResumableUploadException) {
throw $e;
}
// Return the same chunk entity so it can be retried.
return $chunk;
}
return new FacebookTransferChunk($chunk->getFile(),
$chunk->getUploadSessionId(), $chunk->getVideoId(),
$response['start_offset'], $response['end_offset']);
}
/**
* Upload by chunks - finish phase
*
* @param string $endpoint
* @param string $uploadSessionId
* @param array $metadata The metadata associated with the file.
*
* @return boolean
*
* @throws FacebookSDKException
*/
public function finish($endpoint, $uploadSessionId, $metadata = []) {
$params = array_merge($metadata, [
'upload_phase' => 'finish',
'upload_session_id' => $uploadSessionId,
]);
$response = $this->sendUploadRequest($endpoint, $params);
return $response['success'];
}
/**
* Helper to make a FacebookRequest and send it.
*
* @param string $endpoint The endpoint to POST to.
* @param array $params The params to send with the request.
*
* @return array
*/
private function sendUploadRequest($endpoint, $params = []) {
$request = new FacebookRequest($this->app,
$this->accessToken, 'POST', $endpoint, $params, null,
$this->graphVersion);
return $this->client->sendRequest($request)
->getDecodedBody();
}
}
PK*C�[?6Xn��GGenerator/Common/Facebook/Facebook/FileUpload/FacebookTransferChunk.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\FileUpload;
/**
* Class FacebookTransferChunk
*
* @package Facebook
*/
class FacebookTransferChunk {
/**
* @var FacebookFile The file to chunk during upload.
*/
private $file;
/**
* @var int The ID of the upload session.
*/
private $uploadSessionId;
/**
* @var int Start byte position of the next file chunk.
*/
private $startOffset;
/**
* @var int End byte position of the next file chunk.
*/
private $endOffset;
/**
* @var int The ID of the video.
*/
private $videoId;
/**
* @param FacebookFile $file
* @param int $uploadSessionId
* @param int $videoId
* @param int $startOffset
* @param int $endOffset
*/
public function __construct(FacebookFile $file, $uploadSessionId,
$videoId, $startOffset, $endOffset) {
$this->file = $file;
$this->uploadSessionId = $uploadSessionId;
$this->videoId = $videoId;
$this->startOffset = $startOffset;
$this->endOffset = $endOffset;
}
/**
* Return the file entity.
*
* @return FacebookFile
*/
public function getFile() {
return $this->file;
}
/**
* Return a FacebookFile entity with partial content.
*
* @return FacebookFile
*/
public function getPartialFile() {
$maxLength = $this->endOffset - $this->startOffset;
return new FacebookFile($this->file->getFilePath(),
$maxLength, $this->startOffset);
}
/**
* Return upload session Id
*
* @return int
*/
public function getUploadSessionId() {
return $this->uploadSessionId;
}
/**
* Check whether is the last chunk
*
* @return bool
*/
public function isLastChunk() {
return $this->startOffset === $this->endOffset;
}
/**
* @return int
*/
public function getStartOffset() {
return $this->startOffset;
}
/**
* Get uploaded video Id
*
* @return int
*/
public function getVideoId() {
return $this->videoId;
}
}
PK*C�[�
va��?Generator/Common/Facebook/Facebook/FileUpload/FacebookVideo.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\FileUpload;
/**
* Class FacebookVideo
*
* @package Facebook
*/
class FacebookVideo extends FacebookFile {
}
PK*C�[��}O��;Generator/Common/Facebook/Facebook/FileUpload/Mimetypes.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\FileUpload;
/**
* Provides mappings of file extensions to mimetypes
*
* Taken from Guzzle
*
* @see https://github.com/guzzle/guzzle/blob/master/src/Mimetypes.php
*
* @link
http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types
*/
class Mimetypes {
/** @var self */
protected static $instance;
/** @var array Mapping of extension to mimetype */
protected $mimetypes = [
'3dml' => 'text/vnd.in3d.3dml',
'3g2' => 'video/3gpp2',
'3gp' => 'video/3gpp',
'7z' =>
'application/x-7z-compressed',
'aab' =>
'application/x-authorware-bin',
'aac' => 'audio/x-aac',
'aam' =>
'application/x-authorware-map',
'aas' =>
'application/x-authorware-seg',
'abw' => 'application/x-abiword',
'ac' =>
'application/pkix-attr-cert',
'acc' =>
'application/vnd.americandynamics.acc',
'ace' =>
'application/x-ace-compressed',
'acu' => 'application/vnd.acucobol',
'acutc' => 'application/vnd.acucorp',
'adp' => 'audio/adpcm',
'aep' =>
'application/vnd.audiograph',
'afm' => 'application/x-font-type1',
'afp' =>
'application/vnd.ibm.modcap',
'ahead' =>
'application/vnd.ahead.space',
'ai' => 'application/postscript',
'aif' => 'audio/x-aiff',
'aifc' => 'audio/x-aiff',
'aiff' => 'audio/x-aiff',
'air' =>
'application/vnd.adobe.air-application-installer-package+zip',
'ait' => 'application/vnd.dvb.ait',
'ami' =>
'application/vnd.amiga.ami',
'apk' =>
'application/vnd.android.package-archive',
'application' =>
'application/x-ms-application',
'apr' =>
'application/vnd.lotus-approach',
'asa' => 'text/plain',
'asax' => 'application/octet-stream',
'asc' =>
'application/pgp-signature',
'ascx' => 'text/plain',
'asf' => 'video/x-ms-asf',
'ashx' => 'text/plain',
'asm' => 'text/x-asm',
'asmx' => 'text/plain',
'aso' =>
'application/vnd.accpac.simply.aso',
'asp' => 'text/plain',
'aspx' => 'text/plain',
'asx' => 'video/x-ms-asf',
'atc' => 'application/vnd.acucorp',
'atom' => 'application/atom+xml',
'atomcat' => 'application/atomcat+xml',
'atomsvc' => 'application/atomsvc+xml',
'atx' =>
'application/vnd.antix.game-component',
'au' => 'audio/basic',
'avi' => 'video/x-msvideo',
'aw' => 'application/applixware',
'axd' => 'text/plain',
'azf' =>
'application/vnd.airzip.filesecure.azf',
'azs' =>
'application/vnd.airzip.filesecure.azs',
'azw' =>
'application/vnd.amazon.ebook',
'bat' => 'application/x-msdownload',
'bcpio' => 'application/x-bcpio',
'bdf' => 'application/x-font-bdf',
'bdm' =>
'application/vnd.syncml.dm+wbxml',
'bed' =>
'application/vnd.realvnc.bed',
'bh2' =>
'application/vnd.fujitsu.oasysprs',
'bin' => 'application/octet-stream',
'bmi' => 'application/vnd.bmi',
'bmp' => 'image/bmp',
'book' =>
'application/vnd.framemaker',
'box' =>
'application/vnd.previewsystems.box',
'boz' => 'application/x-bzip2',
'bpk' => 'application/octet-stream',
'btif' => 'image/prs.btif',
'bz' => 'application/x-bzip',
'bz2' => 'application/x-bzip2',
'c' => 'text/x-c',
'c11amc' =>
'application/vnd.cluetrust.cartomobile-config',
'c11amz' =>
'application/vnd.cluetrust.cartomobile-config-pkg',
'c4d' =>
'application/vnd.clonk.c4group',
'c4f' =>
'application/vnd.clonk.c4group',
'c4g' =>
'application/vnd.clonk.c4group',
'c4p' =>
'application/vnd.clonk.c4group',
'c4u' =>
'application/vnd.clonk.c4group',
'cab' =>
'application/vnd.ms-cab-compressed',
'car' => 'application/vnd.curl.car',
'cat' =>
'application/vnd.ms-pki.seccat',
'cc' => 'text/x-c',
'cct' => 'application/x-director',
'ccxml' => 'application/ccxml+xml',
'cdbcmsg' =>
'application/vnd.contact.cmsg',
'cdf' => 'application/x-netcdf',
'cdkey' =>
'application/vnd.mediastation.cdkey',
'cdmia' =>
'application/cdmi-capability',
'cdmic' =>
'application/cdmi-container',
'cdmid' => 'application/cdmi-domain',
'cdmio' => 'application/cdmi-object',
'cdmiq' => 'application/cdmi-queue',
'cdx' => 'chemical/x-cdx',
'cdxml' =>
'application/vnd.chemdraw+xml',
'cdy' =>
'application/vnd.cinderella',
'cer' => 'application/pkix-cert',
'cfc' => 'application/x-coldfusion',
'cfm' => 'application/x-coldfusion',
'cgm' => 'image/cgm',
'chat' => 'application/x-chat',
'chm' =>
'application/vnd.ms-htmlhelp',
'chrt' =>
'application/vnd.kde.kchart',
'cif' => 'chemical/x-cif',
'cii' =>
'application/vnd.anser-web-certificate-issue-initiation',
'cil' =>
'application/vnd.ms-artgalry',
'cla' => 'application/vnd.claymore',
'class' => 'application/java-vm',
'clkk' =>
'application/vnd.crick.clicker.keyboard',
'clkp' =>
'application/vnd.crick.clicker.palette',
'clkt' =>
'application/vnd.crick.clicker.template',
'clkw' =>
'application/vnd.crick.clicker.wordbank',
'clkx' =>
'application/vnd.crick.clicker',
'clp' => 'application/x-msclip',
'cmc' =>
'application/vnd.cosmocaller',
'cmdf' => 'chemical/x-cmdf',
'cml' => 'chemical/x-cml',
'cmp' =>
'application/vnd.yellowriver-custom-menu',
'cmx' => 'image/x-cmx',
'cod' => 'application/vnd.rim.cod',
'com' => 'application/x-msdownload',
'conf' => 'text/plain',
'cpio' => 'application/x-cpio',
'cpp' => 'text/x-c',
'cpt' =>
'application/mac-compactpro',
'crd' => 'application/x-mscardfile',
'crl' => 'application/pkix-crl',
'crt' =>
'application/x-x509-ca-cert',
'cryptonote' =>
'application/vnd.rig.cryptonote',
'cs' => 'text/plain',
'csh' => 'application/x-csh',
'csml' => 'chemical/x-csml',
'csp' =>
'application/vnd.commonspace',
'css' => 'text/css',
'cst' => 'application/x-director',
'csv' => 'text/csv',
'cu' => 'application/cu-seeme',
'curl' => 'text/vnd.curl',
'cww' => 'application/prs.cww',
'cxt' => 'application/x-director',
'cxx' => 'text/x-c',
'dae' => 'model/vnd.collada+xml',
'daf' =>
'application/vnd.mobius.daf',
'dataless' =>
'application/vnd.fdsn.seed',
'davmount' => 'application/davmount+xml',
'dcr' => 'application/x-director',
'dcurl' => 'text/vnd.curl.dcurl',
'dd2' =>
'application/vnd.oma.dd2+xml',
'ddd' =>
'application/vnd.fujixerox.ddd',
'deb' =>
'application/x-debian-package',
'def' => 'text/plain',
'deploy' => 'application/octet-stream',
'der' =>
'application/x-x509-ca-cert',
'dfac' =>
'application/vnd.dreamfactory',
'dic' => 'text/x-c',
'dir' => 'application/x-director',
'dis' =>
'application/vnd.mobius.dis',
'dist' => 'application/octet-stream',
'distz' => 'application/octet-stream',
'djv' => 'image/vnd.djvu',
'djvu' => 'image/vnd.djvu',
'dll' => 'application/x-msdownload',
'dmg' => 'application/octet-stream',
'dms' => 'application/octet-stream',
'dna' => 'application/vnd.dna',
'doc' => 'application/msword',
'docm' =>
'application/vnd.ms-word.document.macroenabled.12',
'docx' =>
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'dot' => 'application/msword',
'dotm' =>
'application/vnd.ms-word.template.macroenabled.12',
'dotx' =>
'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
'dp' => 'application/vnd.osgi.dp',
'dpg' => 'application/vnd.dpgraph',
'dra' => 'audio/vnd.dra',
'dsc' => 'text/prs.lines.tag',
'dssc' => 'application/dssc+der',
'dtb' => 'application/x-dtbook+xml',
'dtd' => 'application/xml-dtd',
'dts' => 'audio/vnd.dts',
'dtshd' => 'audio/vnd.dts.hd',
'dump' => 'application/octet-stream',
'dvi' => 'application/x-dvi',
'dwf' => 'model/vnd.dwf',
'dwg' => 'image/vnd.dwg',
'dxf' => 'image/vnd.dxf',
'dxp' =>
'application/vnd.spotfire.dxp',
'dxr' => 'application/x-director',
'ecelp4800' =>
'audio/vnd.nuera.ecelp4800',
'ecelp7470' =>
'audio/vnd.nuera.ecelp7470',
'ecelp9600' =>
'audio/vnd.nuera.ecelp9600',
'ecma' => 'application/ecmascript',
'edm' =>
'application/vnd.novadigm.edm',
'edx' =>
'application/vnd.novadigm.edx',
'efif' => 'application/vnd.picsel',
'ei6' =>
'application/vnd.pg.osasli',
'elc' => 'application/octet-stream',
'eml' => 'message/rfc822',
'emma' => 'application/emma+xml',
'eol' => 'audio/vnd.digital-winds',
'eot' =>
'application/vnd.ms-fontobject',
'eps' => 'application/postscript',
'epub' => 'application/epub+zip',
'es3' =>
'application/vnd.eszigno3+xml',
'esf' =>
'application/vnd.epson.esf',
'et3' =>
'application/vnd.eszigno3+xml',
'etx' => 'text/x-setext',
'exe' => 'application/x-msdownload',
'exi' => 'application/exi',
'ext' =>
'application/vnd.novadigm.ext',
'ez' => 'application/andrew-inset',
'ez2' =>
'application/vnd.ezpix-album',
'ez3' =>
'application/vnd.ezpix-package',
'f' => 'text/x-fortran',
'f4v' => 'video/x-f4v',
'f77' => 'text/x-fortran',
'f90' => 'text/x-fortran',
'fbs' => 'image/vnd.fastbidsheet',
'fcs' => 'application/vnd.isac.fcs',
'fdf' => 'application/vnd.fdf',
'fe_launch' =>
'application/vnd.denovo.fcselayout-link',
'fg5' =>
'application/vnd.fujitsu.oasysgp',
'fgd' => 'application/x-director',
'fh' => 'image/x-freehand',
'fh4' => 'image/x-freehand',
'fh5' => 'image/x-freehand',
'fh7' => 'image/x-freehand',
'fhc' => 'image/x-freehand',
'fig' => 'application/x-xfig',
'fli' => 'video/x-fli',
'flo' =>
'application/vnd.micrografx.flo',
'flv' => 'video/x-flv',
'flw' =>
'application/vnd.kde.kivio',
'flx' => 'text/vnd.fmi.flexstor',
'fly' => 'text/vnd.fly',
'fm' =>
'application/vnd.framemaker',
'fnc' =>
'application/vnd.frogans.fnc',
'for' => 'text/x-fortran',
'fpx' => 'image/vnd.fpx',
'frame' =>
'application/vnd.framemaker',
'fsc' =>
'application/vnd.fsc.weblaunch',
'fst' => 'image/vnd.fst',
'ftc' =>
'application/vnd.fluxtime.clip',
'fti' =>
'application/vnd.anser-web-funds-transfer-initiation',
'fvt' => 'video/vnd.fvt',
'fxp' =>
'application/vnd.adobe.fxp',
'fxpl' =>
'application/vnd.adobe.fxp',
'fzs' =>
'application/vnd.fuzzysheet',
'g2w' => 'application/vnd.geoplan',
'g3' => 'image/g3fax',
'g3w' => 'application/vnd.geospace',
'gac' =>
'application/vnd.groove-account',
'gdl' => 'model/vnd.gdl',
'geo' => 'application/vnd.dynageo',
'gex' =>
'application/vnd.geometry-explorer',
'ggb' =>
'application/vnd.geogebra.file',
'ggt' =>
'application/vnd.geogebra.tool',
'ghf' =>
'application/vnd.groove-help',
'gif' => 'image/gif',
'gim' =>
'application/vnd.groove-identity-message',
'gmx' => 'application/vnd.gmx',
'gnumeric' => 'application/x-gnumeric',
'gph' =>
'application/vnd.flographit',
'gqf' => 'application/vnd.grafeq',
'gqs' => 'application/vnd.grafeq',
'gram' => 'application/srgs',
'gre' =>
'application/vnd.geometry-explorer',
'grv' =>
'application/vnd.groove-injector',
'grxml' => 'application/srgs+xml',
'gsf' =>
'application/x-font-ghostscript',
'gtar' => 'application/x-gtar',
'gtm' =>
'application/vnd.groove-tool-message',
'gtw' => 'model/vnd.gtw',
'gv' => 'text/vnd.graphviz',
'gxt' => 'application/vnd.geonext',
'h' => 'text/x-c',
'h261' => 'video/h261',
'h263' => 'video/h263',
'h264' => 'video/h264',
'hal' => 'application/vnd.hal+xml',
'hbci' => 'application/vnd.hbci',
'hdf' => 'application/x-hdf',
'hh' => 'text/x-c',
'hlp' => 'application/winhlp',
'hpgl' => 'application/vnd.hp-hpgl',
'hpid' => 'application/vnd.hp-hpid',
'hps' => 'application/vnd.hp-hps',
'hqx' => 'application/mac-binhex40',
'hta' => 'application/octet-stream',
'htc' => 'text/html',
'htke' =>
'application/vnd.kenameaapp',
'htm' => 'text/html',
'html' => 'text/html',
'hvd' =>
'application/vnd.yamaha.hv-dic',
'hvp' =>
'application/vnd.yamaha.hv-voice',
'hvs' =>
'application/vnd.yamaha.hv-script',
'i2g' => 'application/vnd.intergeo',
'icc' =>
'application/vnd.iccprofile',
'ice' => 'x-conference/x-cooltalk',
'icm' =>
'application/vnd.iccprofile',
'ico' => 'image/x-icon',
'ics' => 'text/calendar',
'ief' => 'image/ief',
'ifb' => 'text/calendar',
'ifm' =>
'application/vnd.shana.informed.formdata',
'iges' => 'model/iges',
'igl' => 'application/vnd.igloader',
'igm' =>
'application/vnd.insors.igm',
'igs' => 'model/iges',
'igx' =>
'application/vnd.micrografx.igx',
'iif' =>
'application/vnd.shana.informed.interchange',
'imp' =>
'application/vnd.accpac.simply.imp',
'ims' => 'application/vnd.ms-ims',
'in' => 'text/plain',
'ini' => 'text/plain',
'ipfix' => 'application/ipfix',
'ipk' =>
'application/vnd.shana.informed.package',
'irm' =>
'application/vnd.ibm.rights-management',
'irp' =>
'application/vnd.irepository.package+xml',
'iso' => 'application/octet-stream',
'itp' =>
'application/vnd.shana.informed.formtemplate',
'ivp' =>
'application/vnd.immervision-ivp',
'ivu' =>
'application/vnd.immervision-ivu',
'jad' =>
'text/vnd.sun.j2me.app-descriptor',
'jam' => 'application/vnd.jam',
'jar' => 'application/java-archive',
'java' => 'text/x-java-source',
'jisp' => 'application/vnd.jisp',
'jlt' => 'application/vnd.hp-jlyt',
'jnlp' =>
'application/x-java-jnlp-file',
'joda' =>
'application/vnd.joost.joda-archive',
'jpe' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpgm' => 'video/jpm',
'jpgv' => 'video/jpeg',
'jpm' => 'video/jpm',
'js' => 'text/javascript',
'json' => 'application/json',
'kar' => 'audio/midi',
'karbon' =>
'application/vnd.kde.karbon',
'kfo' =>
'application/vnd.kde.kformula',
'kia' =>
'application/vnd.kidspiration',
'kml' =>
'application/vnd.google-earth.kml+xml',
'kmz' =>
'application/vnd.google-earth.kmz',
'kne' => 'application/vnd.kinar',
'knp' => 'application/vnd.kinar',
'kon' =>
'application/vnd.kde.kontour',
'kpr' =>
'application/vnd.kde.kpresenter',
'kpt' =>
'application/vnd.kde.kpresenter',
'ksp' =>
'application/vnd.kde.kspread',
'ktr' => 'application/vnd.kahootz',
'ktx' => 'image/ktx',
'ktz' => 'application/vnd.kahootz',
'kwd' =>
'application/vnd.kde.kword',
'kwt' =>
'application/vnd.kde.kword',
'lasxml' =>
'application/vnd.las.las+xml',
'latex' => 'application/x-latex',
'lbd' =>
'application/vnd.llamagraphics.life-balance.desktop',
'lbe' =>
'application/vnd.llamagraphics.life-balance.exchange+xml',
'les' =>
'application/vnd.hhe.lesson-player',
'lha' => 'application/octet-stream',
'link66' =>
'application/vnd.route66.link66+xml',
'list' => 'text/plain',
'list3820' =>
'application/vnd.ibm.modcap',
'listafp' =>
'application/vnd.ibm.modcap',
'log' => 'text/plain',
'lostxml' => 'application/lost+xml',
'lrf' => 'application/octet-stream',
'lrm' => 'application/vnd.ms-lrm',
'ltf' =>
'application/vnd.frogans.ltf',
'lvp' => 'audio/vnd.lucent.voice',
'lwp' =>
'application/vnd.lotus-wordpro',
'lzh' => 'application/octet-stream',
'm13' =>
'application/x-msmediaview',
'm14' =>
'application/x-msmediaview',
'm1v' => 'video/mpeg',
'm21' => 'application/mp21',
'm2a' => 'audio/mpeg',
'm2v' => 'video/mpeg',
'm3a' => 'audio/mpeg',
'm3u' => 'audio/x-mpegurl',
'm3u8' =>
'application/vnd.apple.mpegurl',
'm4a' => 'audio/mp4',
'm4u' => 'video/vnd.mpegurl',
'm4v' => 'video/mp4',
'ma' => 'application/mathematica',
'mads' => 'application/mads+xml',
'mag' =>
'application/vnd.ecowin.chart',
'maker' =>
'application/vnd.framemaker',
'man' => 'text/troff',
'mathml' => 'application/mathml+xml',
'mb' => 'application/mathematica',
'mbk' =>
'application/vnd.mobius.mbk',
'mbox' => 'application/mbox',
'mc1' =>
'application/vnd.medcalcdata',
'mcd' => 'application/vnd.mcd',
'mcurl' => 'text/vnd.curl.mcurl',
'mdb' => 'application/x-msaccess',
'mdi' => 'image/vnd.ms-modi',
'me' => 'text/troff',
'mesh' => 'model/mesh',
'meta4' =>
'application/metalink4+xml',
'mets' => 'application/mets+xml',
'mfm' => 'application/vnd.mfmp',
'mgp' =>
'application/vnd.osgeo.mapguide.package',
'mgz' =>
'application/vnd.proteus.magazine',
'mid' => 'audio/midi',
'midi' => 'audio/midi',
'mif' => 'application/vnd.mif',
'mime' => 'message/rfc822',
'mj2' => 'video/mj2',
'mjp2' => 'video/mj2',
'mlp' =>
'application/vnd.dolby.mlp',
'mmd' =>
'application/vnd.chipnuts.karaoke-mmd',
'mmf' => 'application/vnd.smaf',
'mmr' =>
'image/vnd.fujixerox.edmics-mmr',
'mny' => 'application/x-msmoney',
'mobi' =>
'application/x-mobipocket-ebook',
'mods' => 'application/mods+xml',
'mov' => 'video/quicktime',
'movie' => 'video/x-sgi-movie',
'mp2' => 'audio/mpeg',
'mp21' => 'application/mp21',
'mp2a' => 'audio/mpeg',
'mp3' => 'audio/mpeg',
'mp4' => 'video/mp4',
'mp4a' => 'audio/mp4',
'mp4s' => 'application/mp4',
'mp4v' => 'video/mp4',
'mpc' =>
'application/vnd.mophun.certificate',
'mpe' => 'video/mpeg',
'mpeg' => 'video/mpeg',
'mpg' => 'video/mpeg',
'mpg4' => 'video/mp4',
'mpga' => 'audio/mpeg',
'mpkg' =>
'application/vnd.apple.installer+xml',
'mpm' =>
'application/vnd.blueice.multipass',
'mpn' =>
'application/vnd.mophun.application',
'mpp' =>
'application/vnd.ms-project',
'mpt' =>
'application/vnd.ms-project',
'mpy' =>
'application/vnd.ibm.minipay',
'mqy' =>
'application/vnd.mobius.mqy',
'mrc' => 'application/marc',
'mrcx' => 'application/marcxml+xml',
'ms' => 'text/troff',
'mscml' =>
'application/mediaservercontrol+xml',
'mseed' =>
'application/vnd.fdsn.mseed',
'mseq' => 'application/vnd.mseq',
'msf' =>
'application/vnd.epson.msf',
'msh' => 'model/mesh',
'msi' => 'application/x-msdownload',
'msl' =>
'application/vnd.mobius.msl',
'msty' =>
'application/vnd.muvee.style',
'mts' => 'model/vnd.mts',
'mus' => 'application/vnd.musician',
'musicxml' =>
'application/vnd.recordare.musicxml+xml',
'mvb' =>
'application/x-msmediaview',
'mwf' => 'application/vnd.mfer',
'mxf' => 'application/mxf',
'mxl' =>
'application/vnd.recordare.musicxml',
'mxml' => 'application/xv+xml',
'mxs' =>
'application/vnd.triscape.mxs',
'mxu' => 'video/vnd.mpegurl',
'n-gage' =>
'application/vnd.nokia.n-gage.symbian.install',
'n3' => 'text/n3',
'nb' => 'application/mathematica',
'nbp' =>
'application/vnd.wolfram.player',
'nc' => 'application/x-netcdf',
'ncx' => 'application/x-dtbncx+xml',
'ngdat' =>
'application/vnd.nokia.n-gage.data',
'nlu' =>
'application/vnd.neurolanguage.nlu',
'nml' => 'application/vnd.enliven',
'nnd' =>
'application/vnd.noblenet-directory',
'nns' =>
'application/vnd.noblenet-sealer',
'nnw' =>
'application/vnd.noblenet-web',
'npx' => 'image/vnd.net-fpx',
'nsf' =>
'application/vnd.lotus-notes',
'oa2' =>
'application/vnd.fujitsu.oasys2',
'oa3' =>
'application/vnd.fujitsu.oasys3',
'oas' =>
'application/vnd.fujitsu.oasys',
'obd' => 'application/x-msbinder',
'oda' => 'application/oda',
'odb' =>
'application/vnd.oasis.opendocument.database',
'odc' =>
'application/vnd.oasis.opendocument.chart',
'odf' =>
'application/vnd.oasis.opendocument.formula',
'odft' =>
'application/vnd.oasis.opendocument.formula-template',
'odg' =>
'application/vnd.oasis.opendocument.graphics',
'odi' =>
'application/vnd.oasis.opendocument.image',
'odm' =>
'application/vnd.oasis.opendocument.text-master',
'odp' =>
'application/vnd.oasis.opendocument.presentation',
'ods' =>
'application/vnd.oasis.opendocument.spreadsheet',
'odt' =>
'application/vnd.oasis.opendocument.text',
'oga' => 'audio/ogg',
'ogg' => 'audio/ogg',
'ogv' => 'video/ogg',
'ogx' => 'application/ogg',
'onepkg' => 'application/onenote',
'onetmp' => 'application/onenote',
'onetoc' => 'application/onenote',
'onetoc2' => 'application/onenote',
'opf' =>
'application/oebps-package+xml',
'oprc' => 'application/vnd.palm',
'org' =>
'application/vnd.lotus-organizer',
'osf' =>
'application/vnd.yamaha.openscoreformat',
'osfpvg' =>
'application/vnd.yamaha.openscoreformat.osfpvg+xml',
'otc' =>
'application/vnd.oasis.opendocument.chart-template',
'otf' => 'application/x-font-otf',
'otg' =>
'application/vnd.oasis.opendocument.graphics-template',
'oth' =>
'application/vnd.oasis.opendocument.text-web',
'oti' =>
'application/vnd.oasis.opendocument.image-template',
'otp' =>
'application/vnd.oasis.opendocument.presentation-template',
'ots' =>
'application/vnd.oasis.opendocument.spreadsheet-template',
'ott' =>
'application/vnd.oasis.opendocument.text-template',
'oxt' =>
'application/vnd.openofficeorg.extension',
'p' => 'text/x-pascal',
'p10' => 'application/pkcs10',
'p12' => 'application/x-pkcs12',
'p7b' =>
'application/x-pkcs7-certificates',
'p7c' => 'application/pkcs7-mime',
'p7m' => 'application/pkcs7-mime',
'p7r' =>
'application/x-pkcs7-certreqresp',
'p7s' =>
'application/pkcs7-signature',
'p8' => 'application/pkcs8',
'pas' => 'text/x-pascal',
'paw' =>
'application/vnd.pawaafile',
'pbd' =>
'application/vnd.powerbuilder6',
'pbm' => 'image/x-portable-bitmap',
'pcf' => 'application/x-font-pcf',
'pcl' => 'application/vnd.hp-pcl',
'pclxl' => 'application/vnd.hp-pclxl',
'pct' => 'image/x-pict',
'pcurl' =>
'application/vnd.curl.pcurl',
'pcx' => 'image/x-pcx',
'pdb' => 'application/vnd.palm',
'pdf' => 'application/pdf',
'pfa' => 'application/x-font-type1',
'pfb' => 'application/x-font-type1',
'pfm' => 'application/x-font-type1',
'pfr' => 'application/font-tdpfr',
'pfx' => 'application/x-pkcs12',
'pgm' => 'image/x-portable-graymap',
'pgn' => 'application/x-chess-pgn',
'pgp' =>
'application/pgp-encrypted',
'php' => 'text/x-php',
'phps' => 'application/x-httpd-phps',
'pic' => 'image/x-pict',
'pkg' => 'application/octet-stream',
'pki' => 'application/pkixcmp',
'pkipath' => 'application/pkix-pkipath',
'plb' =>
'application/vnd.3gpp.pic-bw-large',
'plc' =>
'application/vnd.mobius.plc',
'plf' =>
'application/vnd.pocketlearn',
'pls' => 'application/pls+xml',
'pml' =>
'application/vnd.ctc-posml',
'png' => 'image/png',
'pnm' => 'image/x-portable-anymap',
'portpkg' =>
'application/vnd.macports.portpkg',
'pot' =>
'application/vnd.ms-powerpoint',
'potm' =>
'application/vnd.ms-powerpoint.template.macroenabled.12',
'potx' =>
'application/vnd.openxmlformats-officedocument.presentationml.template',
'ppam' =>
'application/vnd.ms-powerpoint.addin.macroenabled.12',
'ppd' => 'application/vnd.cups-ppd',
'ppm' => 'image/x-portable-pixmap',
'pps' =>
'application/vnd.ms-powerpoint',
'ppsm' =>
'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
'ppsx' =>
'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
'ppt' =>
'application/vnd.ms-powerpoint',
'pptm' =>
'application/vnd.ms-powerpoint.presentation.macroenabled.12',
'pptx' =>
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'pqa' => 'application/vnd.palm',
'prc' =>
'application/x-mobipocket-ebook',
'pre' =>
'application/vnd.lotus-freelance',
'prf' => 'application/pics-rules',
'ps' => 'application/postscript',
'psb' =>
'application/vnd.3gpp.pic-bw-small',
'psd' =>
'image/vnd.adobe.photoshop',
'psf' =>
'application/x-font-linux-psf',
'pskcxml' => 'application/pskc+xml',
'ptid' =>
'application/vnd.pvi.ptid1',
'pub' =>
'application/x-mspublisher',
'pvb' =>
'application/vnd.3gpp.pic-bw-var',
'pwn' =>
'application/vnd.3m.post-it-notes',
'pya' =>
'audio/vnd.ms-playready.media.pya',
'pyv' =>
'video/vnd.ms-playready.media.pyv',
'qam' =>
'application/vnd.epson.quickanime',
'qbo' => 'application/vnd.intu.qbo',
'qfx' => 'application/vnd.intu.qfx',
'qps' =>
'application/vnd.publishare-delta-tree',
'qt' => 'video/quicktime',
'qwd' =>
'application/vnd.quark.quarkxpress',
'qwt' =>
'application/vnd.quark.quarkxpress',
'qxb' =>
'application/vnd.quark.quarkxpress',
'qxd' =>
'application/vnd.quark.quarkxpress',
'qxl' =>
'application/vnd.quark.quarkxpress',
'qxt' =>
'application/vnd.quark.quarkxpress',
'ra' => 'audio/x-pn-realaudio',
'ram' => 'audio/x-pn-realaudio',
'rar' =>
'application/x-rar-compressed',
'ras' => 'image/x-cmu-raster',
'rb' => 'text/plain',
'rcprofile' =>
'application/vnd.ipunplugged.rcprofile',
'rdf' => 'application/rdf+xml',
'rdz' =>
'application/vnd.data-vision.rdz',
'rep' =>
'application/vnd.businessobjects',
'res' =>
'application/x-dtbresource+xml',
'resx' => 'text/xml',
'rgb' => 'image/x-rgb',
'rif' => 'application/reginfo+xml',
'rip' => 'audio/vnd.rip',
'rl' =>
'application/resource-lists+xml',
'rlc' =>
'image/vnd.fujixerox.edmics-rlc',
'rld' =>
'application/resource-lists-diff+xml',
'rm' =>
'application/vnd.rn-realmedia',
'rmi' => 'audio/midi',
'rmp' =>
'audio/x-pn-realaudio-plugin',
'rms' =>
'application/vnd.jcp.javame.midlet-rms',
'rnc' =>
'application/relax-ng-compact-syntax',
'roff' => 'text/troff',
'rp9' =>
'application/vnd.cloanto.rp9',
'rpss' =>
'application/vnd.nokia.radio-presets',
'rpst' =>
'application/vnd.nokia.radio-preset',
'rq' => 'application/sparql-query',
'rs' =>
'application/rls-services+xml',
'rsd' => 'application/rsd+xml',
'rss' => 'application/rss+xml',
'rtf' => 'application/rtf',
'rtx' => 'text/richtext',
's' => 'text/x-asm',
'saf' =>
'application/vnd.yamaha.smaf-audio',
'sbml' => 'application/sbml+xml',
'sc' =>
'application/vnd.ibm.secure-container',
'scd' => 'application/x-msschedule',
'scm' =>
'application/vnd.lotus-screencam',
'scq' =>
'application/scvp-cv-request',
'scs' =>
'application/scvp-cv-response',
'scurl' => 'text/vnd.curl.scurl',
'sda' =>
'application/vnd.stardivision.draw',
'sdc' =>
'application/vnd.stardivision.calc',
'sdd' =>
'application/vnd.stardivision.impress',
'sdkd' =>
'application/vnd.solent.sdkm+xml',
'sdkm' =>
'application/vnd.solent.sdkm+xml',
'sdp' => 'application/sdp',
'sdw' =>
'application/vnd.stardivision.writer',
'see' => 'application/vnd.seemail',
'seed' =>
'application/vnd.fdsn.seed',
'sema' => 'application/vnd.sema',
'semd' => 'application/vnd.semd',
'semf' => 'application/vnd.semf',
'ser' =>
'application/java-serialized-object',
'setpay' =>
'application/set-payment-initiation',
'setreg' =>
'application/set-registration-initiation',
'sfd-hdstx' =>
'application/vnd.hydrostatix.sof-data',
'sfs' =>
'application/vnd.spotfire.sfs',
'sgl' =>
'application/vnd.stardivision.writer-global',
'sgm' => 'text/sgml',
'sgml' => 'text/sgml',
'sh' => 'application/x-sh',
'shar' => 'application/x-shar',
'shf' => 'application/shf+xml',
'sig' =>
'application/pgp-signature',
'silo' => 'model/mesh',
'sis' =>
'application/vnd.symbian.install',
'sisx' =>
'application/vnd.symbian.install',
'sit' => 'application/x-stuffit',
'sitx' => 'application/x-stuffitx',
'skd' => 'application/vnd.koan',
'skm' => 'application/vnd.koan',
'skp' => 'application/vnd.koan',
'skt' => 'application/vnd.koan',
'sldm' =>
'application/vnd.ms-powerpoint.slide.macroenabled.12',
'sldx' =>
'application/vnd.openxmlformats-officedocument.presentationml.slide',
'slt' =>
'application/vnd.epson.salt',
'sm' =>
'application/vnd.stepmania.stepchart',
'smf' =>
'application/vnd.stardivision.math',
'smi' => 'application/smil+xml',
'smil' => 'application/smil+xml',
'snd' => 'audio/basic',
'snf' => 'application/x-font-snf',
'so' => 'application/octet-stream',
'spc' =>
'application/x-pkcs7-certificates',
'spf' =>
'application/vnd.yamaha.smaf-phrase',
'spl' =>
'application/x-futuresplash',
'spot' => 'text/vnd.in3d.spot',
'spp' =>
'application/scvp-vp-response',
'spq' =>
'application/scvp-vp-request',
'spx' => 'audio/ogg',
'src' =>
'application/x-wais-source',
'srt' => 'application/octet-stream',
'sru' => 'application/sru+xml',
'srx' =>
'application/sparql-results+xml',
'sse' =>
'application/vnd.kodak-descriptor',
'ssf' =>
'application/vnd.epson.ssf',
'ssml' => 'application/ssml+xml',
'st' =>
'application/vnd.sailingtracker.track',
'stc' =>
'application/vnd.sun.xml.calc.template',
'std' =>
'application/vnd.sun.xml.draw.template',
'stf' => 'application/vnd.wt.stf',
'sti' =>
'application/vnd.sun.xml.impress.template',
'stk' => 'application/hyperstudio',
'stl' =>
'application/vnd.ms-pki.stl',
'str' =>
'application/vnd.pg.format',
'stw' =>
'application/vnd.sun.xml.writer.template',
'sub' => 'image/vnd.dvb.subtitle',
'sus' =>
'application/vnd.sus-calendar',
'susp' =>
'application/vnd.sus-calendar',
'sv4cpio' => 'application/x-sv4cpio',
'sv4crc' => 'application/x-sv4crc',
'svc' =>
'application/vnd.dvb.service',
'svd' => 'application/vnd.svd',
'svg' => 'image/svg+xml',
'svgz' => 'image/svg+xml',
'swa' => 'application/x-director',
'swf' =>
'application/x-shockwave-flash',
'swi' =>
'application/vnd.aristanetworks.swi',
'sxc' =>
'application/vnd.sun.xml.calc',
'sxd' =>
'application/vnd.sun.xml.draw',
'sxg' =>
'application/vnd.sun.xml.writer.global',
'sxi' =>
'application/vnd.sun.xml.impress',
'sxm' =>
'application/vnd.sun.xml.math',
'sxw' =>
'application/vnd.sun.xml.writer',
't' => 'text/troff',
'tao' =>
'application/vnd.tao.intent-module-archive',
'tar' => 'application/x-tar',
'tcap' =>
'application/vnd.3gpp2.tcap',
'tcl' => 'application/x-tcl',
'teacher' =>
'application/vnd.smart.teacher',
'tei' => 'application/tei+xml',
'teicorpus' => 'application/tei+xml',
'tex' => 'application/x-tex',
'texi' => 'application/x-texinfo',
'texinfo' => 'application/x-texinfo',
'text' => 'text/plain',
'tfi' => 'application/thraud+xml',
'tfm' => 'application/x-tex-tfm',
'thmx' =>
'application/vnd.ms-officetheme',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'tmo' =>
'application/vnd.tmobile-livetv',
'torrent' => 'application/x-bittorrent',
'tpl' =>
'application/vnd.groove-tool-template',
'tpt' => 'application/vnd.trid.tpt',
'tr' => 'text/troff',
'tra' => 'application/vnd.trueapp',
'trm' => 'application/x-msterminal',
'tsd' =>
'application/timestamped-data',
'tsv' =>
'text/tab-separated-values',
'ttc' => 'application/x-font-ttf',
'ttf' => 'application/x-font-ttf',
'ttl' => 'text/turtle',
'twd' =>
'application/vnd.simtech-mindmapper',
'twds' =>
'application/vnd.simtech-mindmapper',
'txd' =>
'application/vnd.genomatix.tuxedo',
'txf' =>
'application/vnd.mobius.txf',
'txt' => 'text/plain',
'u32' =>
'application/x-authorware-bin',
'udeb' =>
'application/x-debian-package',
'ufd' => 'application/vnd.ufdl',
'ufdl' => 'application/vnd.ufdl',
'umj' => 'application/vnd.umajin',
'unityweb' => 'application/vnd.unity',
'uoml' => 'application/vnd.uoml+xml',
'uri' => 'text/uri-list',
'uris' => 'text/uri-list',
'urls' => 'text/uri-list',
'ustar' => 'application/x-ustar',
'utz' =>
'application/vnd.uiq.theme',
'uu' => 'text/x-uuencode',
'uva' => 'audio/vnd.dece.audio',
'uvd' =>
'application/vnd.dece.data',
'uvf' =>
'application/vnd.dece.data',
'uvg' => 'image/vnd.dece.graphic',
'uvh' => 'video/vnd.dece.hd',
'uvi' => 'image/vnd.dece.graphic',
'uvm' => 'video/vnd.dece.mobile',
'uvp' => 'video/vnd.dece.pd',
'uvs' => 'video/vnd.dece.sd',
'uvt' =>
'application/vnd.dece.ttml+xml',
'uvu' => 'video/vnd.uvvu.mp4',
'uvv' => 'video/vnd.dece.video',
'uvva' => 'audio/vnd.dece.audio',
'uvvd' =>
'application/vnd.dece.data',
'uvvf' =>
'application/vnd.dece.data',
'uvvg' => 'image/vnd.dece.graphic',
'uvvh' => 'video/vnd.dece.hd',
'uvvi' => 'image/vnd.dece.graphic',
'uvvm' => 'video/vnd.dece.mobile',
'uvvp' => 'video/vnd.dece.pd',
'uvvs' => 'video/vnd.dece.sd',
'uvvt' =>
'application/vnd.dece.ttml+xml',
'uvvu' => 'video/vnd.uvvu.mp4',
'uvvv' => 'video/vnd.dece.video',
'uvvx' =>
'application/vnd.dece.unspecified',
'uvx' =>
'application/vnd.dece.unspecified',
'vcd' => 'application/x-cdlink',
'vcf' => 'text/x-vcard',
'vcg' =>
'application/vnd.groove-vcard',
'vcs' => 'text/x-vcalendar',
'vcx' => 'application/vnd.vcx',
'vis' =>
'application/vnd.visionary',
'viv' => 'video/vnd.vivo',
'vor' =>
'application/vnd.stardivision.writer',
'vox' =>
'application/x-authorware-bin',
'vrml' => 'model/vrml',
'vsd' => 'application/vnd.visio',
'vsf' => 'application/vnd.vsf',
'vss' => 'application/vnd.visio',
'vst' => 'application/vnd.visio',
'vsw' => 'application/vnd.visio',
'vtu' => 'model/vnd.vtu',
'vxml' => 'application/voicexml+xml',
'w3d' => 'application/x-director',
'wad' => 'application/x-doom',
'wav' => 'audio/x-wav',
'wax' => 'audio/x-ms-wax',
'wbmp' => 'image/vnd.wap.wbmp',
'wbs' =>
'application/vnd.criticaltools.wbs+xml',
'wbxml' =>
'application/vnd.wap.wbxml',
'wcm' => 'application/vnd.ms-works',
'wdb' => 'application/vnd.ms-works',
'weba' => 'audio/webm',
'webm' => 'video/webm',
'webp' => 'image/webp',
'wg' =>
'application/vnd.pmi.widget',
'wgt' => 'application/widget',
'wks' => 'application/vnd.ms-works',
'wm' => 'video/x-ms-wm',
'wma' => 'audio/x-ms-wma',
'wmd' => 'application/x-ms-wmd',
'wmf' => 'application/x-msmetafile',
'wml' => 'text/vnd.wap.wml',
'wmlc' => 'application/vnd.wap.wmlc',
'wmls' => 'text/vnd.wap.wmlscript',
'wmlsc' =>
'application/vnd.wap.wmlscriptc',
'wmv' => 'video/x-ms-wmv',
'wmx' => 'video/x-ms-wmx',
'wmz' => 'application/x-ms-wmz',
'woff' => 'application/x-font-woff',
'wpd' =>
'application/vnd.wordperfect',
'wpl' => 'application/vnd.ms-wpl',
'wps' => 'application/vnd.ms-works',
'wqd' => 'application/vnd.wqd',
'wri' => 'application/x-mswrite',
'wrl' => 'model/vrml',
'wsdl' => 'application/wsdl+xml',
'wspolicy' => 'application/wspolicy+xml',
'wtb' => 'application/vnd.webturbo',
'wvx' => 'video/x-ms-wvx',
'x32' =>
'application/x-authorware-bin',
'x3d' =>
'application/vnd.hzn-3d-crossword',
'xap' =>
'application/x-silverlight-app',
'xar' => 'application/vnd.xara',
'xbap' => 'application/x-ms-xbap',
'xbd' =>
'application/vnd.fujixerox.docuworks.binder',
'xbm' => 'image/x-xbitmap',
'xdf' =>
'application/xcap-diff+xml',
'xdm' =>
'application/vnd.syncml.dm+xml',
'xdp' =>
'application/vnd.adobe.xdp+xml',
'xdssc' => 'application/dssc+xml',
'xdw' =>
'application/vnd.fujixerox.docuworks',
'xenc' => 'application/xenc+xml',
'xer' =>
'application/patch-ops-error+xml',
'xfdf' =>
'application/vnd.adobe.xfdf',
'xfdl' => 'application/vnd.xfdl',
'xht' => 'application/xhtml+xml',
'xhtml' => 'application/xhtml+xml',
'xhvml' => 'application/xv+xml',
'xif' => 'image/vnd.xiff',
'xla' => 'application/vnd.ms-excel',
'xlam' =>
'application/vnd.ms-excel.addin.macroenabled.12',
'xlc' => 'application/vnd.ms-excel',
'xlm' => 'application/vnd.ms-excel',
'xls' => 'application/vnd.ms-excel',
'xlsb' =>
'application/vnd.ms-excel.sheet.binary.macroenabled.12',
'xlsm' =>
'application/vnd.ms-excel.sheet.macroenabled.12',
'xlsx' =>
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'xlt' => 'application/vnd.ms-excel',
'xltm' =>
'application/vnd.ms-excel.template.macroenabled.12',
'xltx' =>
'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
'xlw' => 'application/vnd.ms-excel',
'xml' => 'application/xml',
'xo' =>
'application/vnd.olpc-sugar',
'xop' => 'application/xop+xml',
'xpi' => 'application/x-xpinstall',
'xpm' => 'image/x-xpixmap',
'xpr' => 'application/vnd.is-xpr',
'xps' =>
'application/vnd.ms-xpsdocument',
'xpw' =>
'application/vnd.intercon.formnet',
'xpx' =>
'application/vnd.intercon.formnet',
'xsl' => 'application/xml',
'xslt' => 'application/xslt+xml',
'xsm' =>
'application/vnd.syncml+xml',
'xspf' => 'application/xspf+xml',
'xul' =>
'application/vnd.mozilla.xul+xml',
'xvm' => 'application/xv+xml',
'xvml' => 'application/xv+xml',
'xwd' => 'image/x-xwindowdump',
'xyz' => 'chemical/x-xyz',
'yaml' => 'text/yaml',
'yang' => 'application/yang',
'yin' => 'application/yin+xml',
'yml' => 'text/yaml',
'zaz' =>
'application/vnd.zzazz.deck+xml',
'zip' => 'application/zip',
'zir' => 'application/vnd.zul',
'zirz' => 'application/vnd.zul',
'zmm' =>
'application/vnd.handheld-entertainment+xml'
];
/**
* Get a singleton instance of the class
*
* @return self
* @codeCoverageIgnore
*/
public static function getInstance() {
if (!self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Get a mimetype value from a file extension
*
* @param string $extension File extension
*
* @return string|null
*/
public function fromExtension($extension) {
$extension = strtolower($extension);
return isset($this->mimetypes[$extension]) ?
$this->mimetypes[$extension] : null;
}
/**
* Get a mimetype from a filename
*
* @param string $filename Filename to generate a mimetype from
*
* @return string|null
*/
public function fromFilename($filename) {
return $this->fromExtension(pathinfo($filename,
PATHINFO_EXTENSION));
}
}
PK*C�[�5����:Generator/Common/Facebook/Facebook/GraphNodes/Birthday.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use DateTime;
/**
* Birthday object to handle various Graph return formats
*
* @package Facebook
*/
class Birthday extends DateTime {
/**
* @var bool
*/
private $hasDate = false;
/**
* @var bool
*/
private $hasYear = false;
/**
* Parses Graph birthday format to set indication flags, possible
values:
*
* MM/DD/YYYY
* MM/DD
* YYYY
*
* @link https://developers.facebook.com/docs/graph-api/reference/user
*
* @param string $date
*/
public function __construct($date) {
$parts = explode('/', $date);
$this->hasYear = count($parts) === 3 || count($parts) === 1;
$this->hasDate = count($parts) === 3 || count($parts) === 2;
parent::__construct($date);
}
/**
* Returns whether date object contains birth day and month
*
* @return bool
*/
public function hasDate() {
return $this->hasDate;
}
/**
* Returns whether date object contains birth year
*
* @return bool
*/
public function hasYear() {
return $this->hasYear;
}
}
PK*C�[bB��88<Generator/Common/Facebook/Facebook/GraphNodes/Collection.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
/**
* Class Collection
*
* Modified version of Collection in "illuminate/support" by
Taylor Otwell
*
* @package Facebook
*/
use ArrayAccess;
use ArrayIterator;
use Closure;
use Countable;
use IteratorAggregate;
class Collection implements ArrayAccess, Countable, IteratorAggregate {
/**
* The items contained in the collection.
*
* @var array
*/
protected $items = [];
/**
* Create a new collection.
*
* @param array $items
*/
public function __construct(array $items = []) {
$this->items = $items;
}
/**
* Gets the value of a field from the Graph node.
*
* @param string $name The field to retrieve.
* @param mixed $default The default to return if the field
doesn't exist.
*
* @return mixed
*/
public function getField($name, $default = null) {
if (isset($this->items[$name])) {
return $this->items[$name];
}
return $default;
}
/**
* Gets the value of the named property for this graph object.
*
* @param string $name The property to retrieve.
* @param mixed $default The default to return if the property
doesn't exist.
*
* @return mixed
*
* @deprecated 5.0.0 getProperty() has been renamed to getField()
*/
public function getProperty($name, $default = null) {
return $this->getField($name, $default);
}
/**
* Returns a list of all fields set on the object.
*
* @return array
*/
public function getFieldNames() {
return array_keys($this->items);
}
/**
* Returns a list of all properties set on the object.
*
* @return array
*
* @deprecated 5.0.0 getPropertyNames() has been renamed to
getFieldNames()
*/
public function getPropertyNames() {
return $this->getFieldNames();
}
/**
* Get all of the items in the collection.
*
* @return array
*/
public function all() {
return $this->items;
}
/**
* Get the collection of items as a plain array.
*
* @return array
*/
public function asArray() {
return array_map(function ($value) {
return $value instanceof Collection ? $value->asArray() :
$value;
}, $this->items);
}
/**
* Run a map over each of the items.
*
* @param Closure $callback
*
* @return static
*/
public function map(Closure $callback) {
return new static(array_map($callback, $this->items,
array_keys($this->items)));
}
/**
* Get the collection of items as JSON.
*
* @param int $options
*
* @return string
*/
public function asJson($options = 0) {
return json_encode($this->asArray(), $options);
}
/**
* Count the number of items in the collection.
*
* @return int
*/
public function count() {
return count($this->items);
}
/**
* Get an iterator for the items.
*
* @return ArrayIterator
*/
public function getIterator() {
return new ArrayIterator($this->items);
}
/**
* Determine if an item exists at an offset.
*
* @param mixed $key
*
* @return bool
*/
public function offsetExists($key) {
return array_key_exists($key, $this->items);
}
/**
* Get an item at a given offset.
*
* @param mixed $key
*
* @return mixed
*/
public function offsetGet($key) {
return $this->items[$key];
}
/**
* Set the item at a given offset.
*
* @param mixed $key
* @param mixed $value
*
* @return void
*/
public function offsetSet($key, $value) {
if (is_null($key)) {
$this->items[] = $value;
} else {
$this->items[$key] = $value;
}
}
/**
* Unset the item at a given offset.
*
* @param string $key
*
* @return void
*/
public function offsetUnset($key) {
unset($this->items[$key]);
}
/**
* Convert the collection to its string representation.
*
* @return string
*/
public function __toString() {
return $this->asJson();
}
}
PK*C�[�q,�qqBGenerator/Common/Facebook/Facebook/GraphNodes/GraphAchievement.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use DateTime;
/**
* Class GraphAchievement
*
* @package Facebook
*/
class GraphAchievement extends GraphNode {
/**
* @var array Maps object key names to Graph object types.
*/
protected static $graphObjectMap = [
'from' =>
'\Facebook\GraphNodes\GraphUser',
'application' =>
'\Facebook\GraphNodes\GraphApplication',
];
/**
* Returns the ID for the achievement.
*
* @return string|null
*/
public function getId() {
return $this->getField('id');
}
/**
* Returns the user who achieved this.
*
* @return GraphUser|null
*/
public function getFrom() {
return $this->getField('from');
}
/**
* Returns the time at which this was achieved.
*
* @return DateTime|null
*/
public function getPublishTime() {
return $this->getField('publish_time');
}
/**
* Returns the app in which the user achieved this.
*
* @return GraphApplication|null
*/
public function getApplication() {
return $this->getField('application');
}
/**
* Returns information about the achievement type this instance is
connected with.
*
* @return array|null
*/
public function getData() {
return $this->getField('data');
}
/**
* Returns the type of achievement.
*
* @see
https://developers.facebook.com/docs/graph-api/reference/achievement
*
* @return string
*/
public function getType() {
return 'game.achievement';
}
/**
* Indicates whether gaining the achievement published a feed story for
the user.
*
* @return boolean|null
*/
public function isNoFeedStory() {
return $this->getField('no_feed_story');
}
}
PK*C�[xT�9��<Generator/Common/Facebook/Facebook/GraphNodes/GraphAlbum.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use DateTime;
/**
* Class GraphAlbum
*
* @package Facebook
*/
class GraphAlbum extends GraphNode {
/**
* @var array Maps object key names to Graph object types.
*/
protected static $graphObjectMap = [
'from' => '\Facebook\GraphNodes\GraphUser',
'place' => '\Facebook\GraphNodes\GraphPage',
];
/**
* Returns the ID for the album.
*
* @return string|null
*/
public function getId() {
return $this->getField('id');
}
/**
* Returns whether the viewer can upload photos to this album.
*
* @return boolean|null
*/
public function getCanUpload() {
return $this->getField('can_upload');
}
/**
* Returns the number of photos in this album.
*
* @return int|null
*/
public function getCount() {
return $this->getField('count');
}
/**
* Returns the ID of the album's cover photo.
*
* @return string|null
*/
public function getCoverPhoto() {
return $this->getField('cover_photo');
}
/**
* Returns the time the album was initially created.
*
* @return DateTime|null
*/
public function getCreatedTime() {
return $this->getField('created_time');
}
/**
* Returns the time the album was updated.
*
* @return DateTime|null
*/
public function getUpdatedTime() {
return $this->getField('updated_time');
}
/**
* Returns the description of the album.
*
* @return string|null
*/
public function getDescription() {
return $this->getField('description');
}
/**
* Returns profile that created the album.
*
* @return GraphUser|null
*/
public function getFrom() {
return $this->getField('from');
}
/**
* Returns profile that created the album.
*
* @return GraphPage|null
*/
public function getPlace() {
return $this->getField('place');
}
/**
* Returns a link to this album on Facebook.
*
* @return string|null
*/
public function getLink() {
return $this->getField('link');
}
/**
* Returns the textual location of the album.
*
* @return string|null
*/
public function getLocation() {
return $this->getField('location');
}
/**
* Returns the title of the album.
*
* @return string|null
*/
public function getName() {
return $this->getField('name');
}
/**
* Returns the privacy settings for the album.
*
* @return string|null
*/
public function getPrivacy() {
return $this->getField('privacy');
}
/**
* Returns the type of the album.
*
* enum{ profile, mobile, wall, normal, album }
*
* @return string|null
*/
public function getType() {
return $this->getField('type');
}
}
PK*C�[�_�jjBGenerator/Common/Facebook/Facebook/GraphNodes/GraphApplication.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
/**
* Class GraphApplication
*
* @package Facebook
*/
class GraphApplication extends GraphNode {
/**
* Returns the ID for the application.
*
* @return string|null
*/
public function getId() {
return $this->getField('id');
}
}
PK*C�[ޒ���AGenerator/Common/Facebook/Facebook/GraphNodes/GraphCoverPhoto.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
/**
* Class GraphCoverPhoto
*
* @package Facebook
*/
class GraphCoverPhoto extends GraphNode {
/**
* Returns the id of cover if it exists
*
* @return int|null
*/
public function getId() {
return $this->getField('id');
}
/**
* Returns the source of cover if it exists
*
* @return string|null
*/
public function getSource() {
return $this->getField('source');
}
/**
* Returns the offset_x of cover if it exists
*
* @return int|null
*/
public function getOffsetX() {
return $this->getField('offset_x');
}
/**
* Returns the offset_y of cover if it exists
*
* @return int|null
*/
public function getOffsetY() {
return $this->getField('offset_y');
}
}
PK*C�[�]��;Generator/Common/Facebook/Facebook/GraphNodes/GraphEdge.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use Closure;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\FacebookRequest;
use Facebook\Url\FacebookUrlManipulator;
/**
* Class GraphEdge
*
* @package Facebook
*/
class GraphEdge extends Collection {
/**
* @var FacebookRequest The original request that generated this data.
*/
protected $request;
/**
* @var array An array of Graph meta data like pagination, etc.
*/
protected $metaData = [];
/**
* @var string|null The parent Graph edge endpoint that generated the
list.
*/
protected $parentEdgeEndpoint;
/**
* @var string|null The subclass of the child GraphNode's.
*/
protected $subclassName;
/**
* Init this collection of GraphNode's.
*
* @param FacebookRequest $request The original request that
generated this data.
* @param array $data An array of
GraphNode's.
* @param array $metaData An array of Graph meta
data like pagination, etc.
* @param string|null $parentEdgeEndpoint The parent Graph edge
endpoint that generated the list.
* @param string|null $subclassName The subclass of the child
GraphNode's.
*/
public function __construct(FacebookRequest $request, array $data = [],
array $metaData = [], $parentEdgeEndpoint = null, $subclassName = null) {
$this->request = $request;
$this->metaData = $metaData;
$this->parentEdgeEndpoint = $parentEdgeEndpoint;
$this->subclassName = $subclassName;
parent::__construct($data);
}
/**
* Gets the parent Graph edge endpoint that generated the list.
*
* @return string|null
*/
public function getParentGraphEdge() {
return $this->parentEdgeEndpoint;
}
/**
* Gets the subclass name that the child GraphNode's are cast as.
*
* @return string|null
*/
public function getSubClassName() {
return $this->subclassName;
}
/**
* Returns the raw meta data associated with this GraphEdge.
*
* @return array
*/
public function getMetaData() {
return $this->metaData;
}
/**
* Returns the next cursor if it exists.
*
* @return string|null
*/
public function getNextCursor() {
return $this->getCursor('after');
}
/**
* Returns the previous cursor if it exists.
*
* @return string|null
*/
public function getPreviousCursor() {
return $this->getCursor('before');
}
/**
* Returns the cursor for a specific direction if it exists.
*
* @param string $direction The direction of the page: after|before
*
* @return string|null
*/
public function getCursor($direction) {
if
(isset($this->metaData['paging']['cursors'][$direction]))
{
return
$this->metaData['paging']['cursors'][$direction];
}
return null;
}
/**
* Generates a pagination URL based on a cursor.
*
* @param string $direction The direction of the page: next|previous
*
* @return string|null
*
* @throws FacebookSDKException
*/
public function getPaginationUrl($direction) {
$this->validateForPagination();
// Do we have a paging URL?
if (!isset($this->metaData['paging'][$direction])) {
return null;
}
$pageUrl = $this->metaData['paging'][$direction];
return FacebookUrlManipulator::baseGraphUrlEndpoint($pageUrl);
}
/**
* Validates whether or not we can paginate on this request.
*
* @throws FacebookSDKException
*/
public function validateForPagination() {
if ($this->request->getMethod() !== 'GET') {
throw new FacebookSDKException('You can only paginate on a
GET request.', 720);
}
}
/**
* Gets the request object needed to make a next|previous page request.
*
* @param string $direction The direction of the page: next|previous
*
* @return FacebookRequest|null
*
* @throws FacebookSDKException
*/
public function getPaginationRequest($direction) {
$pageUrl = $this->getPaginationUrl($direction);
if (!$pageUrl) {
return null;
}
$newRequest = clone $this->request;
$newRequest->setEndpoint($pageUrl);
return $newRequest;
}
/**
* Gets the request object needed to make a "next" page
request.
*
* @return FacebookRequest|null
*
* @throws FacebookSDKException
*/
public function getNextPageRequest() {
return $this->getPaginationRequest('next');
}
/**
* Gets the request object needed to make a "previous" page
request.
*
* @return FacebookRequest|null
*
* @throws FacebookSDKException
*/
public function getPreviousPageRequest() {
return $this->getPaginationRequest('previous');
}
/**
* The total number of results according to Graph if it exists.
*
* This will be returned if the summary=true modifier is present in the
request.
*
* @return int|null
*/
public function getTotalCount() {
if
(isset($this->metaData['summary']['total_count'])) {
return
$this->metaData['summary']['total_count'];
}
return null;
}
/**
* @inheritDoc
*/
public function map(Closure $callback) {
return new static($this->request, array_map($callback,
$this->items, array_keys($this->items)), $this->metaData,
$this->parentEdgeEndpoint, $this->subclassName);
}
}
PK*C�[��ž�<Generator/Common/Facebook/Facebook/GraphNodes/GraphEvent.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use DateTime;
/**
* Class GraphEvent
*
* @package Facebook
*/
class GraphEvent extends GraphNode {
/**
* @var array Maps object key names to GraphNode types.
*/
protected static $graphObjectMap = [
'cover' =>
'\Facebook\GraphNodes\GraphCoverPhoto',
'place' =>
'\Facebook\GraphNodes\GraphPage',
'picture' =>
'\Facebook\GraphNodes\GraphPicture',
'parent_group' =>
'\Facebook\GraphNodes\GraphGroup',
];
/**
* Returns the `id` (The event ID) as string if present.
*
* @return string|null
*/
public function getId() {
return $this->getField('id');
}
/**
* Returns the `cover` (Cover picture) as GraphCoverPhoto if present.
*
* @return GraphCoverPhoto|null
*/
public function getCover() {
return $this->getField('cover');
}
/**
* Returns the `description` (Long-form description) as string if
present.
*
* @return string|null
*/
public function getDescription() {
return $this->getField('description');
}
/**
* Returns the `end_time` (End time, if one has been set) as DateTime
if present.
*
* @return DateTime|null
*/
public function getEndTime() {
return $this->getField('end_time');
}
/**
* Returns the `is_date_only` (Whether the event only has a date
specified, but no time) as bool if present.
*
* @return bool|null
*/
public function getIsDateOnly() {
return $this->getField('is_date_only');
}
/**
* Returns the `name` (Event name) as string if present.
*
* @return string|null
*/
public function getName() {
return $this->getField('name');
}
/**
* Returns the `owner` (The profile that created the event) as
GraphNode if present.
*
* @return GraphNode|null
*/
public function getOwner() {
return $this->getField('owner');
}
/**
* Returns the `parent_group` (The group the event belongs to) as
GraphGroup if present.
*
* @return GraphGroup|null
*/
public function getParentGroup() {
return $this->getField('parent_group');
}
/**
* Returns the `place` (Event Place information) as GraphPage if
present.
*
* @return GraphPage|null
*/
public function getPlace() {
return $this->getField('place');
}
/**
* Returns the `privacy` (Who can see the event) as string if present.
*
* @return string|null
*/
public function getPrivacy() {
return $this->getField('privacy');
}
/**
* Returns the `start_time` (Start time) as DateTime if present.
*
* @return DateTime|null
*/
public function getStartTime() {
return $this->getField('start_time');
}
/**
* Returns the `ticket_uri` (The link users can visit to buy a ticket
to this event) as string if present.
*
* @return string|null
*/
public function getTicketUri() {
return $this->getField('ticket_uri');
}
/**
* Returns the `timezone` (Timezone) as string if present.
*
* @return string|null
*/
public function getTimezone() {
return $this->getField('timezone');
}
/**
* Returns the `updated_time` (Last update time) as DateTime if
present.
*
* @return DateTime|null
*/
public function getUpdatedTime() {
return $this->getField('updated_time');
}
/**
* Returns the `picture` (Event picture) as GraphPicture if present.
*
* @return GraphPicture|null
*/
public function getPicture() {
return $this->getField('picture');
}
/**
* Returns the `attending_count` (Number of people attending the event)
as int if present.
*
* @return int|null
*/
public function getAttendingCount() {
return $this->getField('attending_count');
}
/**
* Returns the `declined_count` (Number of people who declined the
event) as int if present.
*
* @return int|null
*/
public function getDeclinedCount() {
return $this->getField('declined_count');
}
/**
* Returns the `maybe_count` (Number of people who maybe going to the
event) as int if present.
*
* @return int|null
*/
public function getMaybeCount() {
return $this->getField('maybe_count');
}
/**
* Returns the `noreply_count` (Number of people who did not reply to
the event) as int if present.
*
* @return int|null
*/
public function getNoreplyCount() {
return $this->getField('noreply_count');
}
/**
* Returns the `invited_count` (Number of people invited to the event)
as int if present.
*
* @return int|null
*/
public function getInvitedCount() {
return $this->getField('invited_count');
}
}
PK*C�[e���<Generator/Common/Facebook/Facebook/GraphNodes/GraphGroup.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use DateTime;
/**
* Class GraphGroup
*
* @package Facebook
*/
class GraphGroup extends GraphNode {
/**
* @var array Maps object key names to GraphNode types.
*/
protected static $graphObjectMap = [
'cover' =>
'\Facebook\GraphNodes\GraphCoverPhoto',
'venue' =>
'\Facebook\GraphNodes\GraphLocation',
];
/**
* Returns the `id` (The Group ID) as string if present.
*
* @return string|null
*/
public function getId() {
return $this->getField('id');
}
/**
* Returns the `cover` (The cover photo of the Group) as
GraphCoverPhoto if present.
*
* @return GraphCoverPhoto|null
*/
public function getCover() {
return $this->getField('cover');
}
/**
* Returns the `description` (A brief description of the Group) as
string if present.
*
* @return string|null
*/
public function getDescription() {
return $this->getField('description');
}
/**
* Returns the `email` (The email address to upload content to the
Group. Only current members of the Group can use
* this) as string if present.
*
* @return string|null
*/
public function getEmail() {
return $this->getField('email');
}
/**
* Returns the `icon` (The URL for the Group's icon) as string if
present.
*
* @return string|null
*/
public function getIcon() {
return $this->getField('icon');
}
/**
* Returns the `link` (The Group's website) as string if present.
*
* @return string|null
*/
public function getLink() {
return $this->getField('link');
}
/**
* Returns the `name` (The name of the Group) as string if present.
*
* @return string|null
*/
public function getName() {
return $this->getField('name');
}
/**
* Returns the `member_request_count` (Number of people asking to join
the group.) as int if present.
*
* @return int|null
*/
public function getMemberRequestCount() {
return $this->getField('member_request_count');
}
/**
* Returns the `owner` (The profile that created this Group) as
GraphNode if present.
*
* @return GraphNode|null
*/
public function getOwner() {
return $this->getField('owner');
}
/**
* Returns the `parent` (The parent Group of this Group, if it exists)
as GraphNode if present.
*
* @return GraphNode|null
*/
public function getParent() {
return $this->getField('parent');
}
/**
* Returns the `privacy` (The privacy setting of the Group) as string
if present.
*
* @return string|null
*/
public function getPrivacy() {
return $this->getField('privacy');
}
/**
* Returns the `updated_time` (The last time the Group was updated
(this includes changes in the Group's properties
* and changes in posts and comments if user can see them)) as
\DateTime if present.
*
* @return DateTime|null
*/
public function getUpdatedTime() {
return $this->getField('updated_time');
}
/**
* Returns the `venue` (The location for the Group) as GraphLocation if
present.
*
* @return GraphLocation|null
*/
public function getVenue() {
return $this->getField('venue');
}
}
PK*C�[}5���;Generator/Common/Facebook/Facebook/GraphNodes/GraphList.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
/**
* Class GraphList
*
* @package Facebook
*
* @deprecated 5.0.0 GraphList has been renamed to GraphEdge
*/
class GraphList extends GraphEdge {
}
PK*C�[4C�� � ?Generator/Common/Facebook/Facebook/GraphNodes/GraphLocation.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
/**
* Class GraphLocation
*
* @package Facebook
*/
class GraphLocation extends GraphNode {
/**
* Returns the street component of the location
*
* @return string|null
*/
public function getStreet() {
return $this->getField('street');
}
/**
* Returns the city component of the location
*
* @return string|null
*/
public function getCity() {
return $this->getField('city');
}
/**
* Returns the state component of the location
*
* @return string|null
*/
public function getState() {
return $this->getField('state');
}
/**
* Returns the country component of the location
*
* @return string|null
*/
public function getCountry() {
return $this->getField('country');
}
/**
* Returns the zipcode component of the location
*
* @return string|null
*/
public function getZip() {
return $this->getField('zip');
}
/**
* Returns the latitude component of the location
*
* @return float|null
*/
public function getLatitude() {
return $this->getField('latitude');
}
/**
* Returns the street component of the location
*
* @return float|null
*/
public function getLongitude() {
return $this->getField('longitude');
}
}
PK*C�[��f�ww;Generator/Common/Facebook/Facebook/GraphNodes/GraphNode.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use DateTime;
/**
* Class GraphNode
*
* @package Facebook
*/
class GraphNode extends Collection {
/**
* @var array Maps object key names to Graph object types.
*/
protected static $graphObjectMap = [];
/**
* Init this Graph object.
*
* @param array $data
*/
public function __construct(array $data = []) {
parent::__construct($this->castItems($data));
}
/**
* Iterates over an array and detects the types each node
* should be cast to and returns all the items as an array.
*
*
* @param array $data The array to iterate over.
*
* @return array
*/
public function castItems(array $data) {
$items = [];
foreach ($data as $k => $v) {
if ($this->shouldCastAsDateTime($k) &&
(is_numeric($v) || $this->isIso8601DateString($v))) {
$items[$k] = $this->castToDateTime($v);
} elseif ($k === 'birthday') {
$items[$k] = $this->castToBirthday($v);
} else {
$items[$k] = $v;
}
}
return $items;
}
/**
* Uncasts any auto-casted datatypes.
* Basically the reverse of castItems().
*
* @return array
*/
public function uncastItems() {
$items = $this->asArray();
return array_map(function ($v) {
if ($v instanceof DateTime) {
return $v->format(DateTime::ISO8601);
}
return $v;
}, $items);
}
/**
* Get the collection of items as JSON.
*
* @param int $options
*
* @return string
*/
public function asJson($options = 0) {
return json_encode($this->uncastItems(), $options);
}
/**
* Detects an ISO 8601 formatted string.
*
* @param string $string
*
* @return boolean
*
* @see
https://developers.facebook.com/docs/graph-api/using-graph-api/#readmodifiers
* @see http://www.cl.cam.ac.uk/~mgk25/iso-time.html
* @see http://en.wikipedia.org/wiki/ISO_8601
*/
public function isIso8601DateString($string) {
// This insane regex was yoinked from here:
//
http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
// ...and I'm all like:
//
http://thecodinglove.com/post/95378251969/when-code-works-and-i-dont-know-why
$crazyInsaneRegexThatSomehowDetectsIso8601 =
'/^([\+-]?\d{4}(?!\d{2}\b))' .
'((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?' .
'|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d' .
'|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])' .
'((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d' .
'([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/';
return preg_match($crazyInsaneRegexThatSomehowDetectsIso8601,
$string) === 1;
}
/**
* Determines if a value from Graph should be cast to DateTime.
*
* @param string $key
*
* @return boolean
*/
public function shouldCastAsDateTime($key) {
return in_array($key, [
'created_time',
'updated_time',
'start_time',
'end_time',
'backdated_time',
'issued_at',
'expires_at',
'publish_time'
], true);
}
/**
* Casts a date value from Graph to DateTime.
*
* @param int|string $value
*
* @return DateTime
*/
public function castToDateTime($value) {
if (is_int($value)) {
$dt = new DateTime();
$dt->setTimestamp($value);
} else {
$dt = new DateTime($value);
}
return $dt;
}
/**
* Casts a birthday value from Graph to Birthday
*
* @param string $value
*
* @return Birthday
*/
public function castToBirthday($value) {
return new Birthday($value);
}
/**
* Getter for $graphObjectMap.
*
* @return array
*/
public static function getObjectMap() {
return static::$graphObjectMap;
}
}
PK*C�[�
�k00BGenerator/Common/Facebook/Facebook/GraphNodes/GraphNodeFactory.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\FacebookResponse;
/**
* Class GraphNodeFactory
*
* @package Facebook
*
* ## Assumptions ##
* GraphEdge - is ALWAYS a numeric array
* GraphEdge - is ALWAYS an array of GraphNode types
* GraphNode - is ALWAYS an associative array
* GraphNode - MAY contain GraphNode's "recurrable"
* GraphNode - MAY contain GraphEdge's "recurrable"
* GraphNode - MAY contain DateTime's "primitives"
* GraphNode - MAY contain string's "primitives"
*/
class GraphNodeFactory {
/**
* @const string The base graph object class.
*/
const BASE_GRAPH_NODE_CLASS =
'\Facebook\GraphNodes\GraphNode';
/**
* @const string The base graph edge class.
*/
const BASE_GRAPH_EDGE_CLASS =
'\Facebook\GraphNodes\GraphEdge';
/**
* @const string The graph object prefix.
*/
const BASE_GRAPH_OBJECT_PREFIX = '\Facebook\GraphNodes\\';
/**
* @var FacebookResponse The response entity from Graph.
*/
protected $response;
/**
* @var array The decoded body of the FacebookResponse entity from
Graph.
*/
protected $decodedBody;
/**
* Init this Graph object.
*
* @param FacebookResponse $response The response entity from Graph.
*/
public function __construct(FacebookResponse $response) {
$this->response = $response;
$this->decodedBody = $response->getDecodedBody();
}
/**
* Tries to convert a FacebookResponse entity into a GraphNode.
*
* @param string|null $subclassName The GraphNode sub class to cast to.
*
* @return GraphNode
*
* @throws FacebookSDKException
*/
public function makeGraphNode($subclassName = null) {
$this->validateResponseAsArray();
$this->validateResponseCastableAsGraphNode();
return $this->castAsGraphNodeOrGraphEdge($this->decodedBody,
$subclassName);
}
/**
* Convenience method for creating a GraphAchievement collection.
*
* @return GraphAchievement
*
* @throws FacebookSDKException
*/
public function makeGraphAchievement() {
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX .
'GraphAchievement');
}
/**
* Convenience method for creating a GraphAlbum collection.
*
* @return GraphAlbum
*
* @throws FacebookSDKException
*/
public function makeGraphAlbum() {
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX .
'GraphAlbum');
}
/**
* Convenience method for creating a GraphPage collection.
*
* @return GraphPage
*
* @throws FacebookSDKException
*/
public function makeGraphPage() {
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX .
'GraphPage');
}
/**
* Convenience method for creating a GraphSessionInfo collection.
*
* @return GraphSessionInfo
*
* @throws FacebookSDKException
*/
public function makeGraphSessionInfo() {
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX .
'GraphSessionInfo');
}
/**
* Convenience method for creating a GraphUser collection.
*
* @return GraphUser
*
* @throws FacebookSDKException
*/
public function makeGraphUser() {
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX .
'GraphUser');
}
/**
* Convenience method for creating a GraphEvent collection.
*
* @return GraphEvent
*
* @throws FacebookSDKException
*/
public function makeGraphEvent() {
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX .
'GraphEvent');
}
/**
* Convenience method for creating a GraphGroup collection.
*
* @return GraphGroup
*
* @throws FacebookSDKException
*/
public function makeGraphGroup() {
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX .
'GraphGroup');
}
/**
* Tries to convert a FacebookResponse entity into a GraphEdge.
*
* @param string|null $subclassName The GraphNode sub class to cast the
list items to.
* @param boolean $auto_prefix Toggle to auto-prefix the subclass
name.
*
* @return GraphEdge
*
* @throws FacebookSDKException
*/
public function makeGraphEdge($subclassName = null, $auto_prefix =
true) {
$this->validateResponseAsArray();
$this->validateResponseCastableAsGraphEdge();
if ($subclassName && $auto_prefix) {
$subclassName = static::BASE_GRAPH_OBJECT_PREFIX .
$subclassName;
}
return $this->castAsGraphNodeOrGraphEdge($this->decodedBody,
$subclassName);
}
/**
* Validates the decoded body.
*
* @throws FacebookSDKException
*/
public function validateResponseAsArray() {
if (!is_array($this->decodedBody)) {
throw new FacebookSDKException('Unable to get response
from Graph as array.', 620);
}
}
/**
* Validates that the return data can be cast as a GraphNode.
*
* @throws FacebookSDKException
*/
public function validateResponseCastableAsGraphNode() {
if (isset($this->decodedBody['data']) &&
static::isCastableAsGraphEdge($this->decodedBody['data'])) {
throw new FacebookSDKException('Unable to convert response
from Graph to a GraphNode because the response looks like a GraphEdge. Try
using GraphNodeFactory::makeGraphEdge() instead.', 620);
}
}
/**
* Validates that the return data can be cast as a GraphEdge.
*
* @throws FacebookSDKException
*/
public function validateResponseCastableAsGraphEdge() {
if (!(isset($this->decodedBody['data']) &&
static::isCastableAsGraphEdge($this->decodedBody['data']))) {
throw new FacebookSDKException('Unable to convert response
from Graph to a GraphEdge because the response does not look like a
GraphEdge. Try using GraphNodeFactory::makeGraphNode() instead.',
620);
}
}
/**
* Safely instantiates a GraphNode of $subclassName.
*
* @param array $data The array of data to iterate over.
* @param string|null $subclassName The subclass to cast this
collection to.
*
* @return GraphNode
*
* @throws FacebookSDKException
*/
public function safelyMakeGraphNode(array $data, $subclassName = null)
{
$subclassName = $subclassName ?: static::BASE_GRAPH_NODE_CLASS;
static::validateSubclass($subclassName);
// Remember the parent node ID
$parentNodeId = isset($data['id']) ?
$data['id'] : null;
$items = [];
foreach ($data as $k => $v) {
// Array means could be recurable
if (is_array($v)) {
// Detect any smart-casting from the $graphObjectMap array.
// This is always empty on the GraphNode collection, but
subclasses can define
// their own array of smart-casting types.
$graphObjectMap = $subclassName::getObjectMap();
$objectSubClass = isset($graphObjectMap[$k]) ?
$graphObjectMap[$k] : null;
// Could be a GraphEdge or GraphNode
$items[$k] = $this->castAsGraphNodeOrGraphEdge($v,
$objectSubClass, $k, $parentNodeId);
} else {
$items[$k] = $v;
}
}
return new $subclassName($items);
}
/**
* Takes an array of values and determines how to cast each node.
*
* @param array $data The array of data to iterate over.
* @param string|null $subclassName The subclass to cast this
collection to.
* @param string|null $parentKey The key of this data (Graph edge).
* @param string|null $parentNodeId The parent Graph node ID.
*
* @return GraphNode|GraphEdge
*
* @throws FacebookSDKException
*/
public function castAsGraphNodeOrGraphEdge(array $data, $subclassName =
null, $parentKey = null, $parentNodeId = null) {
if (isset($data['data'])) {
// Create GraphEdge
if (static::isCastableAsGraphEdge($data['data'])) {
return $this->safelyMakeGraphEdge($data, $subclassName,
$parentKey, $parentNodeId);
}
// Sometimes Graph is a weirdo and returns a GraphNode under
the "data" key
$data = $data['data'];
}
// Create GraphNode
return $this->safelyMakeGraphNode($data, $subclassName);
}
/**
* Return an array of GraphNode's.
*
* @param array $data The array of data to iterate over.
* @param string|null $subclassName The GraphNode subclass to cast each
item in the list to.
* @param string|null $parentKey The key of this data (Graph edge).
* @param string|null $parentNodeId The parent Graph node ID.
*
* @return GraphEdge
*
* @throws FacebookSDKException
*/
public function safelyMakeGraphEdge(array $data, $subclassName = null,
$parentKey = null, $parentNodeId = null) {
if (!isset($data['data'])) {
throw new FacebookSDKException('Cannot cast data to
GraphEdge. Expected a "data" key.', 620);
}
$dataList = [];
foreach ($data['data'] as $graphNode) {
$dataList[] = $this->safelyMakeGraphNode($graphNode,
$subclassName);
}
$metaData = $this->getMetaData($data);
// We'll need to make an edge endpoint for this in case
it's a GraphEdge (for cursor pagination)
$parentGraphEdgeEndpoint = $parentNodeId && $parentKey ?
'/' . $parentNodeId . '/' . $parentKey : null;
$className = static::BASE_GRAPH_EDGE_CLASS;
return new $className($this->response->getRequest(),
$dataList, $metaData, $parentGraphEdgeEndpoint, $subclassName);
}
/**
* Get the meta data from a list in a Graph response.
*
* @param array $data The Graph response.
*
* @return array
*/
public function getMetaData(array $data) {
unset($data['data']);
return $data;
}
/**
* Determines whether or not the data should be cast as a GraphEdge.
*
* @param array $data
*
* @return boolean
*/
public static function isCastableAsGraphEdge(array $data) {
if ($data === []) {
return true;
}
// Checks for a sequential numeric array which would be a GraphEdge
return array_keys($data) === range(0, count($data) - 1);
}
/**
* Ensures that the subclass in question is valid.
*
* @param string $subclassName The GraphNode subclass to validate.
*
* @throws FacebookSDKException
*/
public static function validateSubclass($subclassName) {
if ($subclassName == static::BASE_GRAPH_NODE_CLASS ||
is_subclass_of($subclassName, static::BASE_GRAPH_NODE_CLASS)) {
return;
}
throw new FacebookSDKException('The given subclass
"' . $subclassName . '" is not valid. Cannot cast to an
object that is not a GraphNode subclass.', 620);
}
}
PK*C�[
j��=Generator/Common/Facebook/Facebook/GraphNodes/GraphObject.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
/**
* Class GraphObject
*
* @package Facebook
*
* @deprecated 5.0.0 GraphObject has been renamed to GraphNode
*/
class GraphObject extends GraphNode {
}
PK*C�[
��7**DGenerator/Common/Facebook/Facebook/GraphNodes/GraphObjectFactory.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use Facebook\Exceptions\FacebookSDKException;
/**
* Class GraphObjectFactory
*
* @package Facebook
*
* @deprecated 5.0.0 GraphObjectFactory has been renamed to
GraphNodeFactory
*/
class GraphObjectFactory extends GraphNodeFactory {
/**
* @const string The base graph object class.
*/
const BASE_GRAPH_NODE_CLASS =
'\Facebook\GraphNodes\GraphObject';
/**
* @const string The base graph edge class.
*/
const BASE_GRAPH_EDGE_CLASS =
'\Facebook\GraphNodes\GraphList';
/**
* Tries to convert a FacebookResponse entity into a GraphNode.
*
* @param string|null $subclassName The GraphNode sub class to cast to.
*
* @return GraphNode
*
* @deprecated 5.0.0 GraphObjectFactory has been renamed to
GraphNodeFactory
*/
public function makeGraphObject($subclassName = null) {
return $this->makeGraphNode($subclassName);
}
/**
* Convenience method for creating a GraphEvent collection.
*
* @return GraphEvent
*
* @throws FacebookSDKException
*/
public function makeGraphEvent() {
return $this->makeGraphNode(static::BASE_GRAPH_OBJECT_PREFIX .
'GraphEvent');
}
/**
* Tries to convert a FacebookResponse entity into a GraphEdge.
*
* @param string|null $subclassName The GraphNode sub class to cast the
list items to.
* @param boolean $auto_prefix Toggle to auto-prefix the subclass
name.
*
* @return GraphEdge
*
* @deprecated 5.0.0 GraphObjectFactory has been renamed to
GraphNodeFactory
*/
public function makeGraphList($subclassName = null, $auto_prefix =
true) {
return $this->makeGraphEdge($subclassName, $auto_prefix);
}
}
PK*C�[J�(���;Generator/Common/Facebook/Facebook/GraphNodes/GraphPage.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
/**
* Class GraphPage
*
* @package Facebook
*/
class GraphPage extends GraphNode {
/**
* @var array Maps object key names to Graph object types.
*/
protected static $graphObjectMap = [
'best_page' =>
'\Facebook\GraphNodes\GraphPage',
'global_brand_parent_page' =>
'\Facebook\GraphNodes\GraphPage',
'location' =>
'\Facebook\GraphNodes\GraphLocation',
'cover' =>
'\Facebook\GraphNodes\GraphCoverPhoto',
'picture' =>
'\Facebook\GraphNodes\GraphPicture',
];
/**
* Returns the ID for the user's page as a string if present.
*
* @return string|null
*/
public function getId() {
return $this->getField('id');
}
/**
* Returns the Category for the user's page as a string if
present.
*
* @return string|null
*/
public function getCategory() {
return $this->getField('category');
}
/**
* Returns the Name of the user's page as a string if present.
*
* @return string|null
*/
public function getName() {
return $this->getField('name');
}
/**
* Returns the best available Page on Facebook.
*
* @return GraphPage|null
*/
public function getBestPage() {
return $this->getField('best_page');
}
/**
* Returns the brand's global (parent) Page.
*
* @return GraphPage|null
*/
public function getGlobalBrandParentPage() {
return $this->getField('global_brand_parent_page');
}
/**
* Returns the location of this place.
*
* @return GraphLocation|null
*/
public function getLocation() {
return $this->getField('location');
}
/**
* Returns CoverPhoto of the Page.
*
* @return GraphCoverPhoto|null
*/
public function getCover() {
return $this->getField('cover');
}
/**
* Returns Picture of the Page.
*
* @return GraphPicture|null
*/
public function getPicture() {
return $this->getField('picture');
}
/**
* Returns the page access token for the admin user.
*
* Only available in the `/me/accounts` context.
*
* @return string|null
*/
public function getAccessToken() {
return $this->getField('access_token');
}
/**
* Returns the roles of the page admin user.
*
* Only available in the `/me/accounts` context.
*
* @return array|null
*/
public function getPerms() {
return $this->getField('perms');
}
}
PK*C�["i����>Generator/Common/Facebook/Facebook/GraphNodes/GraphPicture.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
/**
* Class GraphPicture
*
* @package Facebook
*/
class GraphPicture extends GraphNode {
/**
* Returns true if user picture is silhouette.
*
* @return bool|null
*/
public function isSilhouette() {
return $this->getField('is_silhouette');
}
/**
* Returns the url of user picture if it exists
*
* @return string|null
*/
public function getUrl() {
return $this->getField('url');
}
/**
* Returns the width of user picture if it exists
*
* @return int|null
*/
public function getWidth() {
return $this->getField('width');
}
/**
* Returns the height of user picture if it exists
*
* @return int|null
*/
public function getHeight() {
return $this->getField('height');
}
}
PK*C�[*�˽
BGenerator/Common/Facebook/Facebook/GraphNodes/GraphSessionInfo.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use DateTime;
/**
* Class GraphSessionInfo
*
* @package Facebook
*/
class GraphSessionInfo extends GraphNode {
/**
* Returns the application id the token was issued for.
*
* @return string|null
*/
public function getAppId() {
return $this->getField('app_id');
}
/**
* Returns the application name the token was issued for.
*
* @return string|null
*/
public function getApplication() {
return $this->getField('application');
}
/**
* Returns the date & time that the token expires.
*
* @return DateTime|null
*/
public function getExpiresAt() {
return $this->getField('expires_at');
}
/**
* Returns whether the token is valid.
*
* @return boolean
*/
public function getIsValid() {
return $this->getField('is_valid');
}
/**
* Returns the date & time the token was issued at.
*
* @return DateTime|null
*/
public function getIssuedAt() {
return $this->getField('issued_at');
}
/**
* Returns the scope permissions associated with the token.
*
* @return array
*/
public function getScopes() {
return $this->getField('scopes');
}
/**
* Returns the login id of the user associated with the token.
*
* @return string|null
*/
public function getUserId() {
return $this->getField('user_id');
}
}
PK*C�[r�qq;Generator/Common/Facebook/Facebook/GraphNodes/GraphUser.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\GraphNodes;
use DateTime;
/**
* Class GraphUser
*
* @package Facebook
*/
class GraphUser extends GraphNode {
/**
* @var array Maps object key names to Graph object types.
*/
protected static $graphObjectMap = [
'hometown' =>
'\Facebook\GraphNodes\GraphPage',
'location' =>
'\Facebook\GraphNodes\GraphPage',
'significant_other' =>
'\Facebook\GraphNodes\GraphUser',
'picture' =>
'\Facebook\GraphNodes\GraphPicture',
];
/**
* Returns the ID for the user as a string if present.
*
* @return string|null
*/
public function getId() {
return $this->getField('id');
}
/**
* Returns the name for the user as a string if present.
*
* @return string|null
*/
public function getName() {
return $this->getField('name');
}
/**
* Returns the first name for the user as a string if present.
*
* @return string|null
*/
public function getFirstName() {
return $this->getField('first_name');
}
/**
* Returns the middle name for the user as a string if present.
*
* @return string|null
*/
public function getMiddleName() {
return $this->getField('middle_name');
}
/**
* Returns the last name for the user as a string if present.
*
* @return string|null
*/
public function getLastName() {
return $this->getField('last_name');
}
/**
* Returns the email for the user as a string if present.
*
* @return string|null
*/
public function getEmail() {
return $this->getField('email');
}
/**
* Returns the gender for the user as a string if present.
*
* @return string|null
*/
public function getGender() {
return $this->getField('gender');
}
/**
* Returns the Facebook URL for the user as a string if available.
*
* @return string|null
*/
public function getLink() {
return $this->getField('link');
}
/**
* Returns the users birthday, if available.
*
* @return DateTime|null
*/
public function getBirthday() {
return $this->getField('birthday');
}
/**
* Returns the current location of the user as a GraphPage.
*
* @return GraphPage|null
*/
public function getLocation() {
return $this->getField('location');
}
/**
* Returns the current location of the user as a GraphPage.
*
* @return GraphPage|null
*/
public function getHometown() {
return $this->getField('hometown');
}
/**
* Returns the current location of the user as a GraphUser.
*
* @return GraphUser|null
*/
public function getSignificantOther() {
return $this->getField('significant_other');
}
/**
* Returns the picture of the user as a GraphPicture
*
* @return GraphPicture|null
*/
public function getPicture() {
return $this->getField('picture');
}
}
PK*C�[�݈Ԅ�CGenerator/Common/Facebook/Facebook/Helpers/FacebookCanvasHelper.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Helpers;
/**
* Class FacebookCanvasLoginHelper
*
* @package Facebook
*/
class FacebookCanvasHelper extends FacebookSignedRequestFromInputHelper {
/**
* Returns the app data value.
*
* @return mixed|null
*/
public function getAppData() {
return $this->signedRequest ?
$this->signedRequest->get('app_data') : null;
}
/**
* Get raw signed request from POST.
*
* @return string|null
*/
public function getRawSignedRequest() {
return $this->getRawSignedRequestFromPost() ?: null;
}
}
PK*C�[�#KϺ�GGenerator/Common/Facebook/Facebook/Helpers/FacebookJavaScriptHelper.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Helpers;
/**
* Class FacebookJavaScriptLoginHelper
*
* @package Facebook
*/
class FacebookJavaScriptHelper extends FacebookSignedRequestFromInputHelper
{
/**
* Get raw signed request from the cookie.
*
* @return string|null
*/
public function getRawSignedRequest() {
return $this->getRawSignedRequestFromCookie();
}
}
PK*C�[Lk
k
DGenerator/Common/Facebook/Facebook/Helpers/FacebookPageTabHelper.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Helpers;
use Facebook\FacebookApp;
use Facebook\FacebookClient;
/**
* Class FacebookPageTabHelper
*
* @package Facebook
*/
class FacebookPageTabHelper extends FacebookCanvasHelper {
/**
* @var array|null
*/
protected $pageData;
/**
* Initialize the helper and process available signed request data.
*
* @param FacebookApp $app The FacebookApp entity.
* @param FacebookClient $client The client to make HTTP
requests.
* @param string|null $graphVersion The version of Graph to use.
*/
public function __construct(FacebookApp $app, FacebookClient $client,
$graphVersion = null) {
parent::__construct($app, $client, $graphVersion);
if (!$this->signedRequest) {
return;
}
$this->pageData =
$this->signedRequest->get('page');
}
/**
* Returns a value from the page data.
*
* @param string $key
* @param mixed|null $default
*
* @return mixed|null
*/
public function getPageData($key, $default = null) {
if (isset($this->pageData[$key])) {
return $this->pageData[$key];
}
return $default;
}
/**
* Returns true if the user is an admin.
*
* @return boolean
*/
public function isAdmin() {
return $this->getPageData('admin') === true;
}
/**
* Returns the page id if available.
*
* @return string|null
*/
public function getPageId() {
return $this->getPageData('id');
}
}
PK*C�[/�y�*�*JGenerator/Common/Facebook/Facebook/Helpers/FacebookRedirectLoginHelper.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Helpers;
use Facebook\Authentication\AccessToken;
use Facebook\Authentication\OAuth2Client;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\PersistentData\FacebookSessionPersistentDataHandler;
use Facebook\PersistentData\PersistentDataInterface;
use Facebook\PseudoRandomString\PseudoRandomStringGeneratorFactory;
use Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface;
use Facebook\Url\FacebookUrlDetectionHandler;
use Facebook\Url\FacebookUrlManipulator;
use Facebook\Url\UrlDetectionInterface;
use function hash_equals;
/**
* Class FacebookRedirectLoginHelper
*
* @package Facebook
*/
class FacebookRedirectLoginHelper {
/**
* @const int The length of CSRF string to validate the login link.
*/
const CSRF_LENGTH = 32;
/**
* @var OAuth2Client The OAuth 2.0 client service.
*/
protected $oAuth2Client;
/**
* @var UrlDetectionInterface The URL detection handler.
*/
protected $urlDetectionHandler;
/**
* @var PersistentDataInterface The persistent data handler.
*/
protected $persistentDataHandler;
/**
* @var PseudoRandomStringGeneratorInterface The cryptographically
secure pseudo-random string generator.
*/
protected $pseudoRandomStringGenerator;
/**
* @param OAuth2Client $oAuth2Client
The OAuth 2.0 client service.
* @param PersistentDataInterface|null
$persistentDataHandler The persistent data handler.
* @param UrlDetectionInterface|null $urlHandler
The URL detection handler.
* @param PseudoRandomStringGeneratorInterface|null $prsg
The cryptographically secure
*
pseudo-random string generator.
*/
public function __construct(OAuth2Client $oAuth2Client,
PersistentDataInterface $persistentDataHandler = null,
UrlDetectionInterface $urlHandler = null,
PseudoRandomStringGeneratorInterface $prsg = null) {
$this->oAuth2Client = $oAuth2Client;
$this->persistentDataHandler = $persistentDataHandler ?:
new FacebookSessionPersistentDataHandler();
$this->urlDetectionHandler = $urlHandler ?: new
FacebookUrlDetectionHandler();
$this->pseudoRandomStringGenerator =
PseudoRandomStringGeneratorFactory::createPseudoRandomStringGenerator($prsg);
}
/**
* Returns the persistent data handler.
*
* @return PersistentDataInterface
*/
public function getPersistentDataHandler() {
return $this->persistentDataHandler;
}
/**
* Returns the URL detection handler.
*
* @return UrlDetectionInterface
*/
public function getUrlDetectionHandler() {
return $this->urlDetectionHandler;
}
/**
* Returns the cryptographically secure pseudo-random string generator.
*
* @return PseudoRandomStringGeneratorInterface
*/
public function getPseudoRandomStringGenerator() {
return $this->pseudoRandomStringGenerator;
}
/**
* Stores CSRF state and returns a URL to which the user should be sent
to in order to continue the login process
* with Facebook.
*
* @param string $redirectUrl The URL Facebook should redirect users to
after login.
* @param array $scope List of permissions to request during
login.
* @param array $params An array of parameters to generate URL.
* @param string $separator The separator to use in
http_build_query().
*
* @return string
*/
private function makeUrl($redirectUrl, array $scope, array $params =
[], $separator = '&') {
$state = $this->persistentDataHandler->get('state')
?:
$this->pseudoRandomStringGenerator->getPseudoRandomString(static::CSRF_LENGTH);
$this->persistentDataHandler->set('state', $state);
return $this->oAuth2Client->getAuthorizationUrl($redirectUrl,
$state, $scope, $params, $separator);
}
/**
* Returns the URL to send the user in order to login to Facebook.
*
* @param string $redirectUrl The URL Facebook should redirect users to
after login.
* @param array $scope List of permissions to request during
login.
* @param string $separator The separator to use in
http_build_query().
*
* @return string
*/
public function getLoginUrl($redirectUrl, array $scope = [], $separator
= '&') {
return $this->makeUrl($redirectUrl, $scope, [], $separator);
}
/**
* Returns the URL to send the user in order to log out of Facebook.
*
* @param AccessToken|string $accessToken The access token that will be
logged out.
* @param string $next The url Facebook should
redirect the user to after a successful logout.
* @param string $separator The separator to use in
http_build_query().
*
* @return string
*
* @throws FacebookSDKException
*/
public function getLogoutUrl($accessToken, $next, $separator =
'&') {
if (!$accessToken instanceof AccessToken) {
$accessToken = new AccessToken($accessToken);
}
if ($accessToken->isAppAccessToken()) {
throw new FacebookSDKException('Cannot generate a logout
URL with an app access token.', 722);
}
$params = [
'next' => $next,
'access_token' => $accessToken->getValue(),
];
return 'https://www.facebook.com/logout.php?' .
http_build_query($params, null, $separator);
}
/**
* Returns the URL to send the user in order to login to Facebook with
permission(s) to be re-asked.
*
* @param string $redirectUrl The URL Facebook should redirect users to
after login.
* @param array $scope List of permissions to request during
login.
* @param string $separator The separator to use in
http_build_query().
*
* @return string
*/
public function getReRequestUrl($redirectUrl, array $scope = [],
$separator = '&') {
$params = ['auth_type' => 'rerequest'];
return $this->makeUrl($redirectUrl, $scope, $params,
$separator);
}
/**
* Returns the URL to send the user in order to login to Facebook with
user to be re-authenticated.
*
* @param string $redirectUrl The URL Facebook should redirect users to
after login.
* @param array $scope List of permissions to request during
login.
* @param string $separator The separator to use in
http_build_query().
*
* @return string
*/
public function getReAuthenticationUrl($redirectUrl, array $scope = [],
$separator = '&') {
$params = ['auth_type' => 'reauthenticate'];
return $this->makeUrl($redirectUrl, $scope, $params,
$separator);
}
/**
* Takes a valid code from a login redirect, and returns an AccessToken
entity.
*
* @param string|null $redirectUrl The redirect URL.
*
* @return AccessToken|null
*
* @throws FacebookSDKException
*/
public function getAccessToken($redirectUrl = null) {
if (!$code = $this->getCode()) {
return null;
}
$this->validateCsrf();
$this->resetCsrf();
$redirectUrl = $redirectUrl ?:
$this->urlDetectionHandler->getCurrentUrl();
// At minimum we need to remove the state param
$redirectUrl =
FacebookUrlManipulator::removeParamsFromUrl($redirectUrl,
['state']);
return $this->oAuth2Client->getAccessTokenFromCode($code,
$redirectUrl);
}
/**
* Validate the request against a cross-site request forgery.
*
* @throws FacebookSDKException
*/
protected function validateCsrf() {
$state = $this->getState();
if (!$state) {
throw new FacebookSDKException('Cross-site request forgery
validation failed. Required GET param "state" missing.');
}
$savedState =
$this->persistentDataHandler->get('state');
if (!$savedState) {
throw new FacebookSDKException('Cross-site request forgery
validation failed. Required param "state" missing from persistent
data.');
}
if (hash_equals($savedState, $state)) {
return;
}
throw new FacebookSDKException('Cross-site request forgery
validation failed. The "state" param from the URL and session do
not match.');
}
/**
* Resets the CSRF so that it doesn't get reused.
*/
private function resetCsrf() {
$this->persistentDataHandler->set('state', null);
}
/**
* Return the code.
*
* @return string|null
*/
protected function getCode() {
return $this->getInput('code');
}
/**
* Return the state.
*
* @return string|null
*/
protected function getState() {
return $this->getInput('state');
}
/**
* Return the error code.
*
* @return string|null
*/
public function getErrorCode() {
return $this->getInput('error_code');
}
/**
* Returns the error.
*
* @return string|null
*/
public function getError() {
return $this->getInput('error');
}
/**
* Returns the error reason.
*
* @return string|null
*/
public function getErrorReason() {
return $this->getInput('error_reason');
}
/**
* Returns the error description.
*
* @return string|null
*/
public function getErrorDescription() {
return $this->getInput('error_description');
}
/**
* Returns a value from a GET param.
*
* @param string $key
*
* @return string|null
*/
private function getInput($key) {
return isset($_GET[$key]) ? $_GET[$key] : null;
}
}
PK*C�[
��ZZSGenerator/Common/Facebook/Facebook/Helpers/FacebookSignedRequestFromInputHelper.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Helpers;
use Facebook\Authentication\AccessToken;
use Facebook\Authentication\OAuth2Client;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\Facebook;
use Facebook\FacebookApp;
use Facebook\FacebookClient;
use Facebook\SignedRequest;
/**
* Class FacebookSignedRequestFromInputHelper
*
* @package Facebook
*/
abstract class FacebookSignedRequestFromInputHelper {
/**
* @var SignedRequest|null The SignedRequest entity.
*/
protected $signedRequest;
/**
* @var FacebookApp The FacebookApp entity.
*/
protected $app;
/**
* @var OAuth2Client The OAuth 2.0 client service.
*/
protected $oAuth2Client;
/**
* Initialize the helper and process available signed request data.
*
* @param FacebookApp $app The FacebookApp entity.
* @param FacebookClient $client The client to make HTTP
requests.
* @param string|null $graphVersion The version of Graph to use.
*/
public function __construct(FacebookApp $app, FacebookClient $client,
$graphVersion = null) {
$this->app = $app;
$graphVersion = $graphVersion ?:
Facebook::DEFAULT_GRAPH_VERSION;
$this->oAuth2Client = new OAuth2Client($this->app, $client,
$graphVersion);
$this->instantiateSignedRequest();
}
/**
* Instantiates a new SignedRequest entity.
*
* @param string|null
*/
public function instantiateSignedRequest($rawSignedRequest = null) {
$rawSignedRequest = $rawSignedRequest ?:
$this->getRawSignedRequest();
if (!$rawSignedRequest) {
return;
}
$this->signedRequest = new SignedRequest($this->app,
$rawSignedRequest);
}
/**
* Returns an AccessToken entity from the signed request.
*
* @return AccessToken|null
*
* @throws FacebookSDKException
*/
public function getAccessToken() {
if ($this->signedRequest &&
$this->signedRequest->hasOAuthData()) {
$code =
$this->signedRequest->get('code');
$accessToken =
$this->signedRequest->get('oauth_token');
if ($code && !$accessToken) {
return
$this->oAuth2Client->getAccessTokenFromCode($code);
}
$expiresAt =
$this->signedRequest->get('expires', 0);
return new AccessToken($accessToken, $expiresAt);
}
return null;
}
/**
* Returns the SignedRequest entity.
*
* @return SignedRequest|null
*/
public function getSignedRequest() {
return $this->signedRequest;
}
/**
* Returns the user_id if available.
*
* @return string|null
*/
public function getUserId() {
return $this->signedRequest ?
$this->signedRequest->getUserId() : null;
}
/**
* Get raw signed request from input.
*
* @return string|null
*/
abstract public function getRawSignedRequest();
/**
* Get raw signed request from POST input.
*
* @return string|null
*/
public function getRawSignedRequestFromPost() {
if (isset($_POST['signed_request'])) {
return $_POST['signed_request'];
}
return null;
}
/**
* Get raw signed request from cookie set from the Javascript SDK.
*
* @return string|null
*/
public function getRawSignedRequestFromCookie() {
if (isset($_COOKIE['fbsr_' . $this->app->getId()]))
{
return $_COOKIE['fbsr_' . $this->app->getId()];
}
return null;
}
}
PK*C�[�Su��<Generator/Common/Facebook/Facebook/Http/GraphRawResponse.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Http;
/**
* Class GraphRawResponse
*
* @package Facebook
*/
class GraphRawResponse {
/**
* @var array The response headers in the form of an associative array.
*/
protected $headers;
/**
* @var string The raw response body.
*/
protected $body;
/**
* @var int The HTTP status response code.
*/
protected $httpResponseCode;
/**
* Creates a new GraphRawResponse entity.
*
* @param string|array $headers The headers as a raw string or
array.
* @param string $body The raw response body.
* @param int $httpStatusCode The HTTP response code (if
sending headers as parsed array).
*/
public function __construct($headers, $body, $httpStatusCode = null) {
if (is_numeric($httpStatusCode)) {
$this->httpResponseCode = (int)$httpStatusCode;
}
if (is_array($headers)) {
$this->headers = $headers;
} else {
$this->setHeadersFromString($headers);
}
$this->body = $body;
}
/**
* Return the response headers.
*
* @return array
*/
public function getHeaders() {
return $this->headers;
}
/**
* Return the body of the response.
*
* @return string
*/
public function getBody() {
return $this->body;
}
/**
* Return the HTTP response code.
*
* @return int
*/
public function getHttpResponseCode() {
return $this->httpResponseCode;
}
/**
* Sets the HTTP response code from a raw header.
*
* @param string $rawResponseHeader
*/
public function setHttpResponseCodeFromHeader($rawResponseHeader) {
preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|',
$rawResponseHeader, $match);
if (isset($match[1])) {
$this->httpResponseCode = (int)$match[1];
}
}
/**
* Parse the raw headers and set as an array.
*
* @param string $rawHeaders The raw headers from the response.
*/
protected function setHeadersFromString($rawHeaders) {
// Normalize line breaks
$rawHeaders = str_replace("\r\n", "\n",
$rawHeaders);
// There will be multiple headers if a 301 was followed
// or a proxy was followed, etc
$headerCollection = explode("\n\n", trim($rawHeaders));
// We just want the last response (at the end)
$rawHeader = array_pop($headerCollection);
$headerComponents = explode("\n", $rawHeader);
foreach ($headerComponents as $line) {
if (strpos($line, ': ') === false) {
$this->setHttpResponseCodeFromHeader($line);
} else {
list($key, $value) = explode(': ', $line, 2);
$this->headers[$key] = $value;
}
}
}
}
PK*C�[�X�$''@Generator/Common/Facebook/Facebook/Http/RequestBodyInterface.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Http;
/**
* Interface
*
* @package Facebook
*/
interface RequestBodyInterface {
/**
* Get the body of the request to send to Graph.
*
* @return string
*/
public function getBody();
}
PK*C�[Qs0��@Generator/Common/Facebook/Facebook/Http/RequestBodyMultipart.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Http;
use Facebook\FileUpload\FacebookFile;
/**
* Class RequestBodyMultipartt
*
* Some things copied from Guzzle
*
* @package Facebook
*
* @see
https://github.com/guzzle/guzzle/blob/master/src/Post/MultipartBody.php
*/
class RequestBodyMultipart implements RequestBodyInterface {
/**
* @var string The boundary.
*/
private $boundary;
/**
* @var array The parameters to send with this request.
*/
private $params;
/**
* @var array The files to send with this request.
*/
private $files = [];
/**
* @param array $params The parameters to send with this request.
* @param array $files The files to send with this request.
* @param string $boundary Provide a specific boundary.
*/
public function __construct(array $params = [], array $files = [],
$boundary = null) {
$this->params = $params;
$this->files = $files;
$this->boundary = $boundary ?: uniqid();
}
/**
* @inheritdoc
*/
public function getBody() {
$body = '';
// Compile normal params
$params = $this->getNestedParams($this->params);
foreach ($params as $k => $v) {
$body .= $this->getParamString($k, $v);
}
// Compile files
foreach ($this->files as $k => $v) {
$body .= $this->getFileString($k, $v);
}
// Peace out
$body .= "--{$this->boundary}--\r\n";
return $body;
}
/**
* Get the boundary
*
* @return string
*/
public function getBoundary() {
return $this->boundary;
}
/**
* Get the string needed to transfer a file.
*
* @param string $name
* @param FacebookFile $file
*
* @return string
*/
private function getFileString($name, FacebookFile $file) {
return sprintf("--%s\r\nContent-Disposition: form-data;
name=\"%s\"; filename=\"%s\"%s\r\n\r\n%s\r\n",
$this->boundary, $name, $file->getFileName(),
$this->getFileHeaders($file), $file->getContents());
}
/**
* Get the string needed to transfer a POST field.
*
* @param string $name
* @param string $value
*
* @return string
*/
private function getParamString($name, $value) {
return sprintf("--%s\r\nContent-Disposition: form-data;
name=\"%s\"\r\n\r\n%s\r\n", $this->boundary, $name,
$value);
}
/**
* Returns the params as an array of nested params.
*
* @param array $params
*
* @return array
*/
private function getNestedParams(array $params) {
$query = http_build_query($params, null, '&');
$params = explode('&', $query);
$result = [];
foreach ($params as $param) {
list($key, $value) = explode('=', $param, 2);
$result[urldecode($key)] = urldecode($value);
}
return $result;
}
/**
* Get the headers needed before transferring the content of a POST
file.
*
* @param FacebookFile $file
*
* @return string
*/
protected function getFileHeaders(FacebookFile $file) {
return "\r\nContent-Type: {$file->getMimetype()}";
}
}
PK*C�[��AGenerator/Common/Facebook/Facebook/Http/RequestBodyUrlEncoded.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Http;
/**
* Class RequestBodyUrlEncoded
*
* @package Facebook
*/
class RequestBodyUrlEncoded implements RequestBodyInterface {
/**
* @var array The parameters to send with this request.
*/
protected $params = [];
/**
* Creates a new GraphUrlEncodedBody entity.
*
* @param array $params
*/
public function __construct(array $params) {
$this->params = $params;
}
/**
* @inheritdoc
*/
public function getBody() {
return http_build_query($this->params, null, '&');
}
}
PK+C�[aQ
WWVGenerator/Common/Facebook/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pemnu�[���-----BEGIN
CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----
PK+C�[�HI�66?Generator/Common/Facebook/Facebook/HttpClients/FacebookCurl.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\HttpClients;
/**
* Class FacebookCurl
*
* Abstraction for the procedural curl elements so that curl can be mocked
and the implementation can be tested.
*
* @package Facebook
*/
class FacebookCurl {
/**
* @var resource Curl resource instance
*/
protected $curl;
/**
* Make a new curl reference instance
*/
public function init() {
$this->curl = curl_init();
}
/**
* Set a curl option
*
* @param $key
* @param $value
*/
public function setopt($key, $value) {
curl_setopt($this->curl, $key, $value);
}
/**
* Set an array of options to a curl resource
*
* @param array $options
*/
public function setoptArray(array $options) {
curl_setopt_array($this->curl, $options);
}
/**
* Send a curl request
*
* @return mixed
*/
public function exec() {
return curl_exec($this->curl);
}
/**
* Return the curl error number
*
* @return int
*/
public function errno() {
return curl_errno($this->curl);
}
/**
* Return the curl error message
*
* @return string
*/
public function error() {
return curl_error($this->curl);
}
/**
* Get info from a curl reference
*
* @param $type
*
* @return mixed
*/
public function getinfo($type) {
return curl_getinfo($this->curl, $type);
}
/**
* Get the currently installed curl version
*
* @return array
*/
public function version() {
return curl_version();
}
/**
* Close the resource connection to curl
*/
public function close() {
curl_close($this->curl);
}
}
PK+C�[���CCIGenerator/Common/Facebook/Facebook/HttpClients/FacebookCurlHttpClient.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\HttpClients;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\Http\GraphRawResponse;
/**
* Class FacebookCurlHttpClient
*
* @package Facebook
*/
class FacebookCurlHttpClient implements FacebookHttpClientInterface {
/**
* @var string The client error message
*/
protected $curlErrorMessage = '';
/**
* @var int The curl client error code
*/
protected $curlErrorCode = 0;
/**
* @var string|boolean The raw response from the server
*/
protected $rawResponse;
/**
* @var FacebookCurl Procedural curl as object
*/
protected $facebookCurl;
/**
* @param FacebookCurl|null Procedural curl as object
*/
public function __construct(FacebookCurl $facebookCurl = null) {
$this->facebookCurl = $facebookCurl ?: new FacebookCurl();
}
/**
* @inheritdoc
*/
public function send($url, $method, $body, array $headers, $timeOut) {
$this->openConnection($url, $method, $body, $headers, $timeOut);
$this->sendRequest();
if ($curlErrorCode = $this->facebookCurl->errno()) {
throw new
FacebookSDKException($this->facebookCurl->error(), $curlErrorCode);
}
// Separate the raw headers from the raw body
list($rawHeaders, $rawBody) =
$this->extractResponseHeadersAndBody();
$this->closeConnection();
return new GraphRawResponse($rawHeaders, $rawBody);
}
/**
* Opens a new curl connection.
*
* @param string $url The endpoint to send the request to.
* @param string $method The request method.
* @param string $body The body of the request.
* @param array $headers The request headers.
* @param int $timeOut The timeout in seconds for the request.
*/
public function openConnection($url, $method, $body, array $headers,
$timeOut) {
$options = [
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER =>
$this->compileRequestHeaders($headers),
CURLOPT_URL => $url,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => $timeOut,
CURLOPT_RETURNTRANSFER => true,
// Follow 301 redirects
CURLOPT_HEADER => true,
// Enable header processing
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_CAINFO => __DIR__ .
'/certs/DigiCertHighAssuranceEVRootCA.pem',
];
if ($method !== "GET") {
$options[CURLOPT_POSTFIELDS] = $body;
}
$this->facebookCurl->init();
$this->facebookCurl->setoptArray($options);
}
/**
* Closes an existing curl connection
*/
public function closeConnection() {
$this->facebookCurl->close();
}
/**
* Send the request and get the raw response from curl
*/
public function sendRequest() {
$this->rawResponse = $this->facebookCurl->exec();
}
/**
* Compiles the request headers into a curl-friendly format.
*
* @param array $headers The request headers.
*
* @return array
*/
public function compileRequestHeaders(array $headers) {
$return = [];
foreach ($headers as $key => $value) {
$return[] = $key . ': ' . $value;
}
return $return;
}
/**
* Extracts the headers and the body into a two-part array
*
* @return array
*/
public function extractResponseHeadersAndBody() {
$parts = explode("\r\n\r\n", $this->rawResponse);
$rawBody = array_pop($parts);
$rawHeaders = implode("\r\n\r\n", $parts);
return [
trim($rawHeaders),
trim($rawBody)
];
}
}
PK+C�[�u/���KGenerator/Common/Facebook/Facebook/HttpClients/FacebookGuzzleHttpClient.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\HttpClients;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\Http\GraphRawResponse;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Message\ResponseInterface;
use GuzzleHttp\Ring\Exception\RingException;
class FacebookGuzzleHttpClient implements FacebookHttpClientInterface {
/**
* @var Client The Guzzle client.
*/
protected $guzzleClient;
/**
* @param Client|null The Guzzle client.
*/
public function __construct(Client $guzzleClient = null) {
$this->guzzleClient = $guzzleClient ?: new Client();
}
/**
* @inheritdoc
*/
public function send($url, $method, $body, array $headers, $timeOut) {
$options = [
'headers' => $headers,
'body' => $body,
'timeout' => $timeOut,
'connect_timeout' => 10,
'verify' => __DIR__ .
'/certs/DigiCertHighAssuranceEVRootCA.pem',
];
$request = $this->guzzleClient->createRequest($method, $url,
$options);
try {
$rawResponse = $this->guzzleClient->send($request);
} catch (RequestException $e) {
$rawResponse = $e->getResponse();
if ($e->getPrevious() instanceof RingException ||
!$rawResponse instanceof ResponseInterface) {
throw new FacebookSDKException($e->getMessage(),
$e->getCode());
}
}
$rawHeaders = $this->getHeadersAsString($rawResponse);
$rawBody = $rawResponse->getBody();
$httpStatusCode = $rawResponse->getStatusCode();
return new GraphRawResponse($rawHeaders, $rawBody,
$httpStatusCode);
}
/**
* Returns the Guzzle array of headers as a string.
*
* @param ResponseInterface $response The Guzzle response.
*
* @return string
*/
public function getHeadersAsString(ResponseInterface $response) {
$headers = $response->getHeaders();
$rawHeaders = [];
foreach ($headers as $name => $values) {
$rawHeaders[] = $name . ": " . implode(",
", $values);
}
return implode("\r\n", $rawHeaders);
}
}
PK+C�[�
:J\\NGenerator/Common/Facebook/Facebook/HttpClients/FacebookHttpClientInterface.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\HttpClients;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\Http\GraphRawResponse;
/**
* Interface FacebookHttpClientInterface
*
* @package Facebook
*/
interface FacebookHttpClientInterface {
/**
* Sends a request to the server and returns the raw response.
*
* @param string $url The endpoint to send the request to.
* @param string $method The request method.
* @param string $body The body of the request.
* @param array $headers The request headers.
* @param int $timeOut The timeout in seconds for the request.
*
* @return GraphRawResponse Raw response from the server.
*
* @throws FacebookSDKException
*/
public function send($url, $method, $body, array $headers, $timeOut);
}
PK+C�[,����AGenerator/Common/Facebook/Facebook/HttpClients/FacebookStream.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\HttpClients;
/**
* Class FacebookStream
*
* Abstraction for the procedural stream elements so that the functions can
be
* mocked and the implementation can be tested.
*
* @package Facebook
*/
class FacebookStream {
/**
* @var resource Context stream resource instance
*/
protected $stream;
/**
* @var array Response headers from the stream wrapper
*/
protected $responseHeaders = [];
/**
* Make a new context stream reference instance
*
* @param array $options
*/
public function streamContextCreate(array $options) {
$this->stream = stream_context_create($options);
}
/**
* The response headers from the stream wrapper
*
* @return array
*/
public function getResponseHeaders() {
return $this->responseHeaders;
}
/**
* Send a stream wrapped request
*
* @param string $url
*
* @return mixed
*/
public function fileGetContents($url) {
$rawResponse = file_get_contents($url, false,
$this->stream);
$this->responseHeaders = $http_response_header ?: [];
return $rawResponse;
}
}
PK+C�[��}��KGenerator/Common/Facebook/Facebook/HttpClients/FacebookStreamHttpClient.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\HttpClients;
use Facebook\Exceptions\FacebookSDKException;
use Facebook\Http\GraphRawResponse;
class FacebookStreamHttpClient implements FacebookHttpClientInterface {
/**
* @var FacebookStream Procedural stream wrapper as object.
*/
protected $facebookStream;
/**
* @param FacebookStream|null Procedural stream wrapper as object.
*/
public function __construct(FacebookStream $facebookStream = null) {
$this->facebookStream = $facebookStream ?: new FacebookStream();
}
/**
* @inheritdoc
*/
public function send($url, $method, $body, array $headers, $timeOut) {
$options = [
'http' => [
'method' => $method,
'header' =>
$this->compileHeader($headers),
'content' => $body,
'timeout' => $timeOut,
'ignore_errors' => true
],
'ssl' => [
'verify_peer' => true,
'verify_peer_name' => true,
'allow_self_signed' => true,
// All root certificates are self-signed
'cafile' => __DIR__ .
'/certs/DigiCertHighAssuranceEVRootCA.pem',
],
];
$this->facebookStream->streamContextCreate($options);
$rawBody = $this->facebookStream->fileGetContents($url);
$rawHeaders = $this->facebookStream->getResponseHeaders();
if ($rawBody === false || empty($rawHeaders)) {
throw new FacebookSDKException('Stream returned an empty
response', 660);
}
$rawHeaders = implode("\r\n", $rawHeaders);
return new GraphRawResponse($rawHeaders, $rawBody);
}
/**
* Formats the headers for use in the stream wrapper.
*
* @param array $headers The request headers.
*
* @return string
*/
public function compileHeader(array $headers) {
$header = [];
foreach ($headers as $k => $v) {
$header[] = $k . ': ' . $v;
}
return implode("\r\n", $header);
}
}
PK+C�[�<ʖ
�
EGenerator/Common/Facebook/Facebook/HttpClients/HttpClientsFactory.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\HttpClients;
use Exception;
use GuzzleHttp\Client;
use InvalidArgumentException;
class HttpClientsFactory {
private function __construct() {
// a factory constructor should never be invoked
}
/**
* HTTP client generation.
*
* @param FacebookHttpClientInterface|Client|string|null $handler
*
* @return FacebookHttpClientInterface
* @throws InvalidArgumentException If the http client handler
isn't "curl", "stream", "guzzle", or an
instance of
*
Facebook\HttpClients\FacebookHttpClientInterface.
*
* @throws Exception If the cURL extension or the Guzzle
client aren't available (if required).
*/
public static function createHttpClient($handler) {
if (!$handler) {
return self::detectDefaultClient();
}
if ($handler instanceof FacebookHttpClientInterface) {
return $handler;
}
if ('stream' === $handler) {
return new FacebookStreamHttpClient();
}
if ('curl' === $handler) {
if (!extension_loaded('curl')) {
throw new Exception('The cURL extension must be loaded
in order to use the "curl" handler.');
}
return new FacebookCurlHttpClient();
}
if ('guzzle' === $handler &&
!class_exists('GuzzleHttp\Client')) {
throw new Exception('The Guzzle HTTP client must be
included in order to use the "guzzle" handler.');
}
if ($handler instanceof Client) {
return new FacebookGuzzleHttpClient($handler);
}
if ('guzzle' === $handler) {
return new FacebookGuzzleHttpClient();
}
throw new InvalidArgumentException('The http client handler
must be set to "curl", "stream", "guzzle", be
an instance of GuzzleHttp\Client or an instance of
Facebook\HttpClients\FacebookHttpClientInterface');
}
/**
* Detect default HTTP client.
*
* @return FacebookHttpClientInterface
*/
private static function detectDefaultClient() {
if (extension_loaded('curl')) {
return new FacebookCurlHttpClient();
}
if (class_exists('GuzzleHttp\Client')) {
return new FacebookGuzzleHttpClient();
}
return new FacebookStreamHttpClient();
}
}
PK+C�[���~~YGenerator/Common/Facebook/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PersistentData;
/**
* Class FacebookMemoryPersistentDataHandler
*
* @package Facebook
*/
class FacebookMemoryPersistentDataHandler implements
PersistentDataInterface {
/**
* @var array The session data to keep in memory.
*/
protected $sessionData = [];
/**
* @inheritdoc
*/
public function get($key) {
return isset($this->sessionData[$key]) ?
$this->sessionData[$key] : null;
}
/**
* @inheritdoc
*/
public function set($key, $value) {
$this->sessionData[$key] = $value;
}
}
PK+C�[�D���ZGenerator/Common/Facebook/Facebook/PersistentData/FacebookSessionPersistentDataHandler.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PersistentData;
use Facebook\Exceptions\FacebookSDKException;
/**
* Class FacebookSessionPersistentDataHandler
*
* @package Facebook
*/
class FacebookSessionPersistentDataHandler implements
PersistentDataInterface {
/**
* @var string Prefix to use for session variables.
*/
protected $sessionPrefix = 'FBRLH_';
/**
* Init the session handler.
*
* @param boolean $enableSessionCheck
*
* @throws FacebookSDKException
*/
public function __construct($enableSessionCheck = true) {
if ($enableSessionCheck && session_status() !==
PHP_SESSION_ACTIVE) {
throw new FacebookSDKException('Sessions are not active.
Please make sure session_start() is at the top of your script.', 720);
}
}
/**
* @inheritdoc
*/
public function get($key) {
if (isset($_SESSION[$this->sessionPrefix . $key])) {
return $_SESSION[$this->sessionPrefix . $key];
}
return null;
}
/**
* @inheritdoc
*/
public function set($key, $value) {
$_SESSION[$this->sessionPrefix . $key] = $value;
}
}
PK+C�[�{�~~\Generator/Common/Facebook/Facebook/PersistentData/FacebookWordPressPersistentDataHandler.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PersistentData;
/**
* Class FacebookMemoryPersistentDataHandler
*
* @package Facebook
*/
class FacebookWordPressPersistentDataHandler implements
PersistentDataInterface {
private $uniqueID;
public function __construct($id) {
$this->uniqueID = $id;
}
/**
* @inheritdoc
*/
public function get($key) {
return get_site_transient($this->uniqueID . $key);
}
/**
* @inheritdoc
*/
public function set($key, $value) {
set_site_transient($this->uniqueID . $key, $value, 3600);
}
}
PK+C�[d���p p KGenerator/Common/Facebook/Facebook/PersistentData/PersistentDataFactory.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PersistentData;
use InvalidArgumentException;
class PersistentDataFactory {
private function __construct() {
// a factory constructor should never be invoked
}
/**
* PersistentData generation.
*
* @param PersistentDataInterface|string|null $handler
*
* @return PersistentDataInterface
* @throws InvalidArgumentException If the persistent data handler
isn't "session", "memory", or an instance of
*
Facebook\PersistentData\PersistentDataInterface.
*
*/
public static function createPersistentDataHandler($handler) {
if (!$handler) {
return session_status() === PHP_SESSION_ACTIVE ? new
FacebookSessionPersistentDataHandler() : new
FacebookMemoryPersistentDataHandler();
}
if ($handler instanceof PersistentDataInterface) {
return $handler;
}
if ('session' === $handler) {
return new FacebookSessionPersistentDataHandler();
}
if ('memory' === $handler) {
return new FacebookMemoryPersistentDataHandler();
}
throw new InvalidArgumentException('The persistent data
handler must be set to "session", "memory", or be an
instance of Facebook\PersistentData\PersistentDataInterface');
}
}
PK+C�[�
�_MGenerator/Common/Facebook/Facebook/PersistentData/PersistentDataInterface.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PersistentData;
/**
* Interface PersistentDataInterface
*
* @package Facebook
*/
interface PersistentDataInterface {
/**
* Get a value from a persistent data store.
*
* @param string $key
*
* @return mixed
*/
public function get($key);
/**
* Set a value in the persistent data store.
*
* @param string $key
* @param mixed $value
*/
public function set($key, $value);
}
PK+C�[��::0Generator/Common/Facebook/Facebook/polyfills.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
/**
* @see
https://github.com/sarciszewski/php-future/blob/master/src/Security.php#L37-L51
*/
if (!function_exists('hash_equals')) {
function hash_equals($knownString, $userString) {
if (function_exists('mb_strlen')) {
$kLen = mb_strlen($knownString, '8bit');
$uLen = mb_strlen($userString, '8bit');
} else {
$kLen = strlen($knownString);
$uLen = strlen($userString);
}
if ($kLen !== $uLen) {
return false;
}
$result = 0;
for ($i = 0; $i < $kLen; $i++) {
$result |= (ord($knownString[$i]) ^ ord($userString[$i]));
}
// They are only identical strings if $result is exactly 0...
return 0 === $result;
}
}
PK+C�[3��q��[Generator/Common/Facebook/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PseudoRandomString;
use Facebook\Exceptions\FacebookSDKException;
class McryptPseudoRandomStringGenerator implements
PseudoRandomStringGeneratorInterface {
use PseudoRandomStringGeneratorTrait;
/**
* @const string The error message when generating the string fails.
*/
const ERROR_MESSAGE = 'Unable to generate a cryptographically
secure pseudo-random string from mcrypt_create_iv(). ';
/**
* @throws FacebookSDKException
*/
public function __construct() {
if (!function_exists('mcrypt_create_iv')) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'The function mcrypt_create_iv() does not exist.');
}
}
/**
* @inheritdoc
*/
public function getPseudoRandomString($length) {
$this->validateLength($length);
$binaryString = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
if ($binaryString === false) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'mcrypt_create_iv() returned an error.');
}
return $this->binToHex($binaryString, $length);
}
}
PK+C�[}�+
+
\Generator/Common/Facebook/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PseudoRandomString;
use Facebook\Exceptions\FacebookSDKException;
class OpenSslPseudoRandomStringGenerator implements
PseudoRandomStringGeneratorInterface {
use PseudoRandomStringGeneratorTrait;
/**
* @const string The error message when generating the string fails.
*/
const ERROR_MESSAGE = 'Unable to generate a cryptographically
secure pseudo-random string from openssl_random_pseudo_bytes().';
/**
* @throws FacebookSDKException
*/
public function __construct() {
if (!function_exists('openssl_random_pseudo_bytes')) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'The function openssl_random_pseudo_bytes() does not exist.');
}
}
/**
* @inheritdoc
*/
public function getPseudoRandomString($length) {
$this->validateLength($length);
$wasCryptographicallyStrong = false;
$binaryString = openssl_random_pseudo_bytes($length,
$wasCryptographicallyStrong);
if ($binaryString === false) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'openssl_random_pseudo_bytes() returned an unknown error.');
}
if ($wasCryptographicallyStrong !== true) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'openssl_random_pseudo_bytes() returned a pseudo-random string but it
was not cryptographically secure and cannot be used.');
}
return $this->binToHex($binaryString, $length);
}
}
PK+C�[��~�\Generator/Common/Facebook/Facebook/PseudoRandomString/PseudoRandomStringGeneratorFactory.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PseudoRandomString;
use Facebook\Exceptions\FacebookSDKException;
use InvalidArgumentException;
class PseudoRandomStringGeneratorFactory {
private function __construct() {
// a factory constructor should never be invoked
}
/**
* Pseudo random string generator creation.
*
* @param PseudoRandomStringGeneratorInterface|string|null $generator
*
* @return PseudoRandomStringGeneratorInterface
* @throws InvalidArgumentException If the pseudo random string
generator must be set to "random_bytes", "mcrypt",
* "openssl", or
"urandom", or be an instance of
*
Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface.
*
*/
public static function createPseudoRandomStringGenerator($generator) {
if (!$generator) {
return self::detectDefaultPseudoRandomStringGenerator();
}
if ($generator instanceof PseudoRandomStringGeneratorInterface) {
return $generator;
}
if ('random_bytes' === $generator) {
return new RandomBytesPseudoRandomStringGenerator();
}
if ('mcrypt' === $generator) {
return new McryptPseudoRandomStringGenerator();
}
if ('openssl' === $generator) {
return new OpenSslPseudoRandomStringGenerator();
}
if ('urandom' === $generator) {
return new UrandomPseudoRandomStringGenerator();
}
throw new InvalidArgumentException('The pseudo random string
generator must be set to "random_bytes", "mcrypt",
"openssl", or "urandom", or be an instance of
Facebook\PseudoRandomString\PseudoRandomStringGeneratorInterface');
}
/**
* Detects which pseudo-random string generator to use.
*
* @return PseudoRandomStringGeneratorInterface
* @throws FacebookSDKException If unable to detect a cryptographically
secure pseudo-random string generator.
*
*/
private static function detectDefaultPseudoRandomStringGenerator() {
// Check for PHP 7's CSPRNG first to keep mcrypt deprecation
messages from appearing in PHP 7.1.
if (function_exists('random_bytes')) {
return new RandomBytesPseudoRandomStringGenerator();
}
// Since openssl_random_pseudo_bytes() can sometimes return
non-cryptographically
// secure pseudo-random strings (in rare cases), we check for
mcrypt_create_iv() next.
if (function_exists('mcrypt_create_iv')) {
return new McryptPseudoRandomStringGenerator();
}
if (function_exists('openssl_random_pseudo_bytes')) {
return new OpenSslPseudoRandomStringGenerator();
}
if (!ini_get('open_basedir') &&
is_readable('/dev/urandom')) {
return new UrandomPseudoRandomStringGenerator();
}
throw new FacebookSDKException('Unable to detect a
cryptographically secure pseudo-random string generator.');
}
}
PK+C�[\�K���^Generator/Common/Facebook/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PseudoRandomString;
use Facebook\Exceptions\FacebookSDKException;
use InvalidArgumentException;
/**
* Interface
*
* @package Facebook
*/
interface PseudoRandomStringGeneratorInterface {
/**
* Get a cryptographically secure pseudo-random string of arbitrary
length.
*
* @see
http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/
*
* @param int $length The length of the string to return.
*
* @return string
*
* @throws FacebookSDKException|InvalidArgumentException
*/
public function getPseudoRandomString($length);
}
PK+C�[iVܬ__ZGenerator/Common/Facebook/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PseudoRandomString;
use InvalidArgumentException;
use function bin2hex;
use function substr;
trait PseudoRandomStringGeneratorTrait {
/**
* Validates the length argument of a random string.
*
* @param int $length The length to validate.
*
* @throws InvalidArgumentException
*/
public function validateLength($length) {
if (!is_int($length)) {
throw new
InvalidArgumentException('getPseudoRandomString() expects an integer
for the string length');
}
if ($length < 1) {
throw new
InvalidArgumentException('getPseudoRandomString() expects a length
greater than 1');
}
}
/**
* Converts binary data to hexadecimal of arbitrary length.
*
* @param string $binaryData The binary data to convert to hex.
* @param int $length The length of the string to return.
*
* @return string
*/
public function binToHex($binaryData, $length) {
return substr(bin2hex($binaryData), 0, $length);
}
}
PK+C�[��)��`Generator/Common/Facebook/Facebook/PseudoRandomString/RandomBytesPseudoRandomStringGenerator.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PseudoRandomString;
use Facebook\Exceptions\FacebookSDKException;
class RandomBytesPseudoRandomStringGenerator implements
PseudoRandomStringGeneratorInterface {
use PseudoRandomStringGeneratorTrait;
/**
* @const string The error message when generating the string fails.
*/
const ERROR_MESSAGE = 'Unable to generate a cryptographically
secure pseudo-random string from random_bytes(). ';
/**
* @throws FacebookSDKException
*/
public function __construct() {
if (!function_exists('random_bytes')) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'The function random_bytes() does not exist.');
}
}
/**
* @inheritdoc
*/
public function getPseudoRandomString($length) {
$this->validateLength($length);
return $this->binToHex(random_bytes($length), $length);
}
}
PK+C�[��L0}
}
\Generator/Common/Facebook/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\PseudoRandomString;
use Facebook\Exceptions\FacebookSDKException;
class UrandomPseudoRandomStringGenerator implements
PseudoRandomStringGeneratorInterface {
use PseudoRandomStringGeneratorTrait;
/**
* @const string The error message when generating the string fails.
*/
const ERROR_MESSAGE = 'Unable to generate a cryptographically
secure pseudo-random string from /dev/urandom. ';
/**
* @throws FacebookSDKException
*/
public function __construct() {
if (ini_get('open_basedir')) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'There is an open_basedir constraint that prevents access to
/dev/urandom.');
}
if (!is_readable('/dev/urandom')) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'Unable to read from /dev/urandom.');
}
}
/**
* @inheritdoc
*/
public function getPseudoRandomString($length) {
$this->validateLength($length);
$stream = fopen('/dev/urandom', 'rb');
if (!is_resource($stream)) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'Unable to open stream to /dev/urandom.');
}
if (!defined('HHVM_VERSION')) {
stream_set_read_buffer($stream, 0);
}
$binaryString = fread($stream, $length);
fclose($stream);
if (!$binaryString) {
throw new FacebookSDKException(static::ERROR_MESSAGE .
'Stream to /dev/urandom returned no data.');
}
return $this->binToHex($binaryString, $length);
}
}
PK+C�[��� �
4Generator/Common/Facebook/Facebook/SignedRequest.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook;
use Facebook\Exceptions\FacebookSDKException;
use Nextend\Framework\Misc\Base64;
use function hash_equals;
/**
* Class SignedRequest
*
* @package Facebook
*/
class SignedRequest {
/**
* @var FacebookApp The FacebookApp entity.
*/
protected $app;
/**
* @var string The raw encrypted signed request.
*/
protected $rawSignedRequest;
/**
* @var array The payload from the decrypted signed request.
*/
protected $payload;
/**
* Instantiate a new SignedRequest entity.
*
* @param FacebookApp $facebookApp The FacebookApp entity.
* @param string|null $rawSignedRequest The raw signed request.
*/
public function __construct(FacebookApp $facebookApp, $rawSignedRequest
= null) {
$this->app = $facebookApp;
if (!$rawSignedRequest) {
return;
}
$this->rawSignedRequest = $rawSignedRequest;
$this->parse();
}
/**
* Returns the raw signed request data.
*
* @return string|null
*/
public function getRawSignedRequest() {
return $this->rawSignedRequest;
}
/**
* Returns the parsed signed request data.
*
* @return array|null
*/
public function getPayload() {
return $this->payload;
}
/**
* Returns a property from the signed request data if available.
*
* @param string $key
* @param mixed|null $default
*
* @return mixed|null
*/
public function get($key, $default = null) {
if (isset($this->payload[$key])) {
return $this->payload[$key];
}
return $default;
}
/**
* Returns user_id from signed request data if available.
*
* @return string|null
*/
public function getUserId() {
return $this->get('user_id');
}
/**
* Checks for OAuth data in the payload.
*
* @return boolean
*/
public function hasOAuthData() {
return $this->get('oauth_token') ||
$this->get('code');
}
/**
* Creates a signed request from an array of data.
*
* @param array $payload
*
* @return string
*/
public function make(array $payload) {
$payload['algorithm'] =
isset($payload['algorithm']) ? $payload['algorithm'] :
'HMAC-SHA256';
$payload['issued_at'] =
isset($payload['issued_at']) ? $payload['issued_at'] :
time();
$encodedPayload =
$this->base64UrlEncode(json_encode($payload));
$hashedSig = $this->hashSignature($encodedPayload);
$encodedSig = $this->base64UrlEncode($hashedSig);
return $encodedSig . '.' . $encodedPayload;
}
/**
* Validates and decodes a signed request and saves
* the payload to an array.
*/
protected function parse() {
list($encodedSig, $encodedPayload) = $this->split();
// Signature validation
$sig = $this->decodeSignature($encodedSig);
$hashedSig = $this->hashSignature($encodedPayload);
$this->validateSignature($hashedSig, $sig);
$this->payload = $this->decodePayload($encodedPayload);
// Payload validation
$this->validateAlgorithm();
}
/**
* Splits a raw signed request into signature and payload.
*
* @returns array
*
* @throws FacebookSDKException
*/
protected function split() {
if (strpos($this->rawSignedRequest, '.') === false) {
throw new FacebookSDKException('Malformed signed
request.', 606);
}
return explode('.', $this->rawSignedRequest, 2);
}
/**
* Decodes the raw signature from a signed request.
*
* @param string $encodedSig
*
* @returns string
*
* @throws FacebookSDKException
*/
protected function decodeSignature($encodedSig) {
$sig = $this->base64UrlDecode($encodedSig);
if (!$sig) {
throw new FacebookSDKException('Signed request has
malformed encoded signature data.', 607);
}
return $sig;
}
/**
* Decodes the raw payload from a signed request.
*
* @param string $encodedPayload
*
* @returns array
*
* @throws FacebookSDKException
*/
protected function decodePayload($encodedPayload) {
$payload = $this->base64UrlDecode($encodedPayload);
if ($payload) {
$payload = json_decode($payload, true);
}
if (!is_array($payload)) {
throw new FacebookSDKException('Signed request has
malformed encoded payload data.', 607);
}
return $payload;
}
/**
* Validates the algorithm used in a signed request.
*
* @throws FacebookSDKException
*/
protected function validateAlgorithm() {
if ($this->get('algorithm') !==
'HMAC-SHA256') {
throw new FacebookSDKException('Signed request is using
the wrong algorithm.', 605);
}
}
/**
* Hashes the signature used in a signed request.
*
* @param string $encodedData
*
* @return string
*
* @throws FacebookSDKException
*/
protected function hashSignature($encodedData) {
$hashedSig = hash_hmac('sha256', $encodedData,
$this->app->getSecret(), $raw_output = true);
if (!$hashedSig) {
throw new FacebookSDKException('Unable to hash signature
from encoded payload data.', 602);
}
return $hashedSig;
}
/**
* Validates the signature used in a signed request.
*
* @param string $hashedSig
* @param string $sig
*
* @throws FacebookSDKException
*/
protected function validateSignature($hashedSig, $sig) {
if (hash_equals($hashedSig, $sig)) {
return;
}
throw new FacebookSDKException('Signed request has an invalid
signature.', 602);
}
/**
* Base64 decoding which replaces characters:
* + instead of -
* / instead of _
*
* @link http://en.wikipedia.org/wiki/Base64#URL_applications
*
* @param string $input base64 url encoded input
*
* @return string decoded string
*/
public function base64UrlDecode($input) {
$urlDecodedBase64 = strtr($input, '-_', '+/');
$this->validateBase64($urlDecodedBase64);
return Base64::decode($urlDecodedBase64);
}
/**
* Base64 encoding which replaces characters:
* + instead of -
* / instead of _
*
* @link http://en.wikipedia.org/wiki/Base64#URL_applications
*
* @param string $input string to encode
*
* @return string base64 url encoded input
*/
public function base64UrlEncode($input) {
return strtr(Base64::encode($input), '+/',
'-_');
}
/**
* Validates a base64 string.
*
* @param string $input base64 value to validate
*
* @throws FacebookSDKException
*/
protected function validateBase64($input) {
if (!preg_match('/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $input))
{
throw new FacebookSDKException('Signed request contains
malformed base64 encoding.', 608);
}
}
}
PK+C�[^F�Z��FGenerator/Common/Facebook/Facebook/Url/FacebookUrlDetectionHandler.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Url;
/**
* Class FacebookUrlDetectionHandler
*
* @package Facebook
*/
class FacebookUrlDetectionHandler implements UrlDetectionInterface {
/**
* @inheritdoc
*/
public function getCurrentUrl() {
return $this->getHttpScheme() . '://' .
$this->getHostName() . $this->getServerVar('REQUEST_URI');
}
/**
* Get the currently active URL scheme.
*
* @return string
*/
protected function getHttpScheme() {
return $this->isBehindSsl() ? 'https' :
'http';
}
/**
* Tries to detect if the server is running behind an SSL.
*
* @return boolean
*/
protected function isBehindSsl() {
// Check for proxy first
$protocol = $this->getHeader('X_FORWARDED_PROTO');
if ($protocol) {
return $this->protocolWithActiveSsl($protocol);
}
$protocol = $this->getServerVar('HTTPS');
if ($protocol) {
return $this->protocolWithActiveSsl($protocol);
}
return (string)$this->getServerVar('SERVER_PORT') ===
'443';
}
/**
* Detects an active SSL protocol value.
*
* @param string $protocol
*
* @return boolean
*/
protected function protocolWithActiveSsl($protocol) {
$protocol = strtolower((string)$protocol);
return in_array($protocol, [
'on',
'1',
'https',
'ssl'
], true);
}
/**
* Tries to detect the host name of the server.
*
* Some elements adapted from
*
* @see
https://github.com/symfony/HttpFoundation/blob/master/Request.php
*
* @return string
*/
protected function getHostName() {
// Check for proxy first
$header = $this->getHeader('X_FORWARDED_HOST');
if ($header && $this->isValidForwardedHost($header)) {
$elements = explode(',', $header);
$host = $elements[count($elements) - 1];
} elseif (!$host = $this->getHeader('HOST')) {
if (!$host = $this->getServerVar('SERVER_NAME')) {
$host = $this->getServerVar('SERVER_ADDR');
}
}
// trim and remove port number from host
// host is lowercase as per RFC 952/2181
$host = strtolower(preg_replace('/:\d+$/', '',
trim($host)));
// Port number
$scheme = $this->getHttpScheme();
$port = $this->getCurrentPort();
$appendPort = ':' . $port;
// Don't append port number if a normal port.
if (($scheme == 'http' && $port ==
'80') || ($scheme == 'https' && $port ==
'443')) {
$appendPort = '';
}
return $host . $appendPort;
}
protected function getCurrentPort() {
// Check for proxy first
$port = $this->getHeader('X_FORWARDED_PORT');
if ($port) {
return (string)$port;
}
$protocol =
(string)$this->getHeader('X_FORWARDED_PROTO');
if ($protocol === 'https') {
return '443';
}
return (string)$this->getServerVar('SERVER_PORT');
}
/**
* Returns the a value from the $_SERVER super global.
*
* @param string $key
*
* @return string
*/
protected function getServerVar($key) {
return isset($_SERVER[$key]) ? $_SERVER[$key] : '';
}
/**
* Gets a value from the HTTP request headers.
*
* @param string $key
*
* @return string
*/
protected function getHeader($key) {
return $this->getServerVar('HTTP_' . $key);
}
/**
* Checks if the value in X_FORWARDED_HOST is a valid hostname
* Could prevent unintended redirections
*
* @param string $header
*
* @return boolean
*/
protected function isValidForwardedHost($header) {
$elements = explode(',', $header);
$host = $elements[count($elements) - 1];
return
preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i",
$host) //valid chars check
&& 0 < strlen($host) && strlen($host) <
254 //overall length check
&&
preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $host); //length of
each label
}
}
PK+C�[����UUAGenerator/Common/Facebook/Facebook/Url/FacebookUrlManipulator.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Url;
/**
* Class FacebookUrlManipulator
*
* @package Facebook
*/
class FacebookUrlManipulator {
/**
* Remove params from a URL.
*
* @param string $url The URL to filter.
* @param array $paramsToFilter The params to filter from the URL.
*
* @return string The URL with the params removed.
*/
public static function removeParamsFromUrl($url, array $paramsToFilter)
{
$parts = parse_url($url);
$query = '';
if (isset($parts['query'])) {
$params = [];
parse_str($parts['query'], $params);
// Remove query params
foreach ($paramsToFilter as $paramName) {
unset($params[$paramName]);
}
if (count($params) > 0) {
$query = '?' . http_build_query($params, null,
'&');
}
}
$scheme = isset($parts['scheme']) ?
$parts['scheme'] . '://' : '';
$host = isset($parts['host']) ?
$parts['host'] : '';
$port = isset($parts['port']) ? ':' .
$parts['port'] : '';
$path = isset($parts['path']) ?
$parts['path'] : '';
$fragment = isset($parts['fragment']) ? '#' .
$parts['fragment'] : '';
return $scheme . $host . $port . $path . $query . $fragment;
}
/**
* Gracefully appends params to the URL.
*
* @param string $url The URL that will receive the params.
* @param array $newParams The params to append to the URL.
*
* @return string
*/
public static function appendParamsToUrl($url, array $newParams = []) {
if (empty($newParams)) {
return $url;
}
if (strpos($url, '?') === false) {
return $url . '?' . http_build_query($newParams,
null, '&');
}
list($path, $query) = explode('?', $url, 2);
$existingParams = [];
parse_str($query, $existingParams);
// Favor params from the original URL over $newParams
$newParams = array_merge($newParams, $existingParams);
// Sort for a predicable order
ksort($newParams);
return $path . '?' . http_build_query($newParams, null,
'&');
}
/**
* Returns the params from a URL in the form of an array.
*
* @param string $url The URL to parse the params from.
*
* @return array
*/
public static function getParamsAsArray($url) {
$query = parse_url($url, PHP_URL_QUERY);
if (!$query) {
return [];
}
$params = [];
parse_str($query, $params);
return $params;
}
/**
* Adds the params of the first URL to the second URL.
*
* Any params that already exist in the second URL will go untouched.
*
* @param string $urlToStealFrom The URL harvest the params from.
* @param string $urlToAddTo The URL that will receive the new
params.
*
* @return string The $urlToAddTo with any new params from
$urlToStealFrom.
*/
public static function mergeUrlParams($urlToStealFrom, $urlToAddTo) {
$newParams = static::getParamsAsArray($urlToStealFrom);
// Nothing new to add, return as-is
if (!$newParams) {
return $urlToAddTo;
}
return static::appendParamsToUrl($urlToAddTo, $newParams);
}
/**
* Check for a "/" prefix and prepend it if not exists.
*
* @param string|null $string
*
* @return string|null
*/
public static function forceSlashPrefix($string) {
if (!$string) {
return $string;
}
return strpos($string, '/') === 0 ? $string :
'/' . $string;
}
/**
* Trims off the hostname and Graph version from a URL.
*
* @param string $urlToTrim The URL the needs the surgery.
*
* @return string The $urlToTrim with the hostname and Graph version
removed.
*/
public static function baseGraphUrlEndpoint($urlToTrim) {
return '/' .
preg_replace('/^https:\/\/.+\.facebook\.com(\/v.+?)?\//',
'', $urlToTrim);
}
}
PK+C�[lL�b33@Generator/Common/Facebook/Facebook/Url/UrlDetectionInterface.phpnu�[���<?php
/**
* Copyright 2017 Facebook, Inc.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license
to
* use, copy, modify, and distribute this software in source code or binary
* form for use in connection with the web services and APIs provided by
* Facebook.
*
* As with any software that integrates with the Facebook platform, your
use
* of this software is subject to the Facebook Developer Principles and
* Policies [http://developers.facebook.com/policy/]. This copyright notice
* shall be included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
namespace Facebook\Url;
/**
* Interface UrlDetectionInterface
*
* @package Facebook
*/
interface UrlDetectionInterface {
/**
* Get the currently active URL.
*
* @return string
*/
public function getCurrentUrl();
}
PK+C�[#�\�444Generator/Common/Facebook/GeneratorGroupFacebook.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Facebook;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use
Nextend\SmartSlider3Pro\Generator\Common\Facebook\Sources\FacebookAlbums;
use
Nextend\SmartSlider3Pro\Generator\Common\Facebook\Sources\FacebookPostsByPage;
class GeneratorGroupFacebook extends AbstractGeneratorGroup {
protected $name = 'facebook';
protected $needConfiguration = true;
public function __construct() {
parent::__construct();
$this->configuration = new ConfigurationFacebook($this);
}
public function getLabel() {
return 'Facebook';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('Facebook photos or posts on your page'));
}
protected function loadSources() {
new FacebookAlbums($this, 'albums', n2_('Photos by
album'));
new FacebookPostsByPage($this, 'postsbypage',
n2_('Posts by page'));
}
public function addSource($name, $source) {
$this->sources[$name] = $source;
}
}PK+C�[w����4Generator/Common/Facebook/Sources/FacebookAlbums.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Facebook\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Common\Facebook\Elements\FacebookAlbumList;
class FacebookAlbums extends AbstractGenerator {
protected $layout = 'image_extended';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Facebook Albums');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Text($filter, 'facebook-id', n2_('User or
page'), 'me');
new FacebookAlbumList($filter, 'facebook-album-id',
n2_('Album'), '', array(
'api' => $this->group->getConfiguration()
->getApi()
));
}
protected function _getData($count, $startIndex) {
$api = $this->group->getConfiguration()
->getApi();
$albumId = $this->data->get('facebook-album-id',
'');
$data = array();
try {
$request = $api->sendRequest('GET', $albumId .
'/photos', array(
'offset' => $startIndex,
'limit' => $count,
'fields' => implode(',', array(
'from',
'images',
'name',
'link',
'likes',
'comments',
'icon',
'picture',
'source'
))
));
if (is_object($request)) {
$result = $request->getDecodedBody();
for ($i = 0; $i < count($result['data']);
$i++) {
$post = $result['data'][$i];
$record = array();
$record['image'] =
$post['images'][0]['source'];
$record['thumbnail'] =
$post['images'][count($post['images']) -
1]['source'];
$record['title'] =
$post['from']['name'];
$record['description'] =
isset($post['name']) ?
$this->makeClickableLinks($post['name']) : '';
$record['url'] =
$record['link'] = $post['link'];
$record['url_label'] = 'View
image';
$record['author_url'] =
'https://www.facebook.com/' .
$post['from']['id'];
$record['likes'] =
isset($post['likes']) &&
isset($post['likes']['data']) ?
count($post['likes']['data']) : 0;
$record['comments'] =
isset($post['comments']) &&
isset($post['comments']['data']) ?
count($post['comments']['data']) : 0;
$record['icon'] = $post['icon'];
$record['picture'] =
$post['picture'];
$record['source'] =
$post['source'];
$x = 1;
foreach ($post['images'] AS $img) {
if ($x == 2 && $img["height"]
< 960 && $img["width"] < 960) {
$record['image' . $x] =
$img['source'];
$x++;
}
$record['image' . $x] =
$img['source'];
$x++;
}
if ($x < 10) {
while ($x < 10) {
$record['image' . $x] =
$img['source'];
$x++;
}
}
$data[$i] = &$record;
unset($record);
}
} else {
Notification::error('Error with Facebook App: ' .
$request['response_error']);
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
return $data;
}
}PK+C�[�E#�LL9Generator/Common/Facebook/Sources/FacebookPostsByPage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Facebook\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class FacebookPostsByPage extends AbstractGenerator {
protected $layout = 'image';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_x('Facebook posts', 'Facebook generator type'));
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Text($filter, 'page', n2_('Page'),
'Nextendweb');
new Radio($filter, 'endpoint', n2_('Type'),
'posts', array(
'options' => array(
'posts' => n2_('Posts'),
'feed' => n2_('Feed')
)
));
new OnOff($filter, 'remove_spec_chars', n2_('Remove
special characters'), 0);
$configuration =
$filterGroup->createRow('configuration');
new Text($configuration, 'dateformat', n2_('Date
format'), 'm-d-Y');
new Text($configuration, 'timeformat', n2_('Time
format'), 'H:i:s');
new Textarea($configuration, 'sourcetranslatedate',
n2_('Translate date and time'),
'January->January||February->February||March->March',
array(
'width' => 300,
'height' => 100
));
new Text($configuration, 'excludetype', n2_('Exclude
Types'), '', array(
'tip' => n2_('Separate the types by a comma.
E.g.: share,album')
));
}
protected function _getData($count, $startIndex) {
$api = $this->group->getConfiguration()
->getApi();
$data = array();
try {
$request = $api->sendRequest('GET',
$this->data->get('page', 'nextendweb') .
'/' . $this->data->get('endpoint',
'feed'), array(
'offset' => $startIndex,
'limit' => $count,
'fields' => implode(',', array(
'from',
'updated_time',
'attachments',
'picture',
'message',
'story',
'full_picture'
))
));
if (is_array($request) &&
isset($request['response_error'])) {
Notification::error($request['response_error']);
return null;
} else {
$result = $request->getDecodedBody();
}
$exclude_type = explode(',',
$this->data->get('excludetype', ''));
for ($i = 0; $i < count($result['data']); $i++) {
if
(!isset($result['data'][$i]['attachments']['data'][0]['type'])
||
!in_array($result['data'][$i]['attachments']['data'][0]['type'],
$exclude_type)) {
$post = $result['data'][$i];
$attachments =
isset($post['attachments']) ? $post['attachments'] :
'';
$remove_spec_chars =
$this->data->get("remove_spec_chars", 0);
if (isset($attachments)) {
$record['link'] =
isset($attachments['data'][0]['url']) ?
$attachments['data'][0]['url'] : '';
$record['description'] = '';
$description_raw =
isset($attachments['data'][0]['description']) ?
$attachments['data'][0]['description'] : '';
if ($remove_spec_chars) {
if (isset($description_raw) &&
!empty($description_raw)) {
$description =
iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE',
$this->makeClickableLinks($description_raw));
$record['description'] =
str_replace("\n", "<br>", $description);
} else {
$record['description'] =
"";
}
} else {
$record['description'] =
isset($description_raw) ? str_replace("\n",
"<br>", $this->makeClickableLinks($description_raw)) :
'';
}
$record['type'] =
isset($attachments['data'][0]['type']) ?
$attachments['data'][0]['type'] : '';
$record['source'] =
isset($attachments['data'][0]['media']['source'])
? $attachments['data'][0]['media']['source']
: '';
}
if ($remove_spec_chars) {
if (isset($post['message']) &&
!empty($post['message'])) {
$message = iconv('UTF-8',
'ISO-8859-1//TRANSLIT//IGNORE',
$this->makeClickableLinks($post['message']));
$record['message'] =
str_replace("\n", "<br>", $message);
} else {
$record['message'] = "";
}
} else {
$record['message'] =
isset($post['message']) ? str_replace("\n",
"<br>",
$this->makeClickableLinks($post['message'])) : '';
}
if (!isset($record['description'])) {
$record['description'] =
$record['message'];
}
$record['story'] =
isset($post['story']) ?
$this->makeClickableLinks($post['story']) : '';
$record['image'] =
isset($post['full_picture']) ? $post['full_picture'] :
'';
$sourceTranslate =
$this->data->get('sourcetranslatedate', '');
$translateValue = explode('||',
$sourceTranslate);
$translate = array();
if ($sourceTranslate !=
'January->January||February->February||March->March'
&& !empty($translateValue)) {
foreach ($translateValue as $tv) {
$translateArray = explode('->',
$tv);
if (!empty($translateArray) &&
count($translateArray) == 2) {
$translate[$translateArray[0]] =
$translateArray[1];
}
}
}
$record['date'] =
$this->translate(date($this->data->get('dateformat',
'Y-m-d'),
strtotime($result['data'][$i]['updated_time'])),
$translate);
$record['time'] =
date($this->data->get('timeformat', 'H:i:s'),
strtotime($result['data'][$i]['updated_time']));
$data[] = &$record;
unset($record);
}
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
return $data;
}
private function translate($from, $translate) {
if (!empty($translate) && !empty($from)) {
foreach ($translate as $key => $value) {
$from = str_replace($key, $value, $from);
}
}
return $from;
}
}PK+C�[(��;}`}`)Generator/Common/Flickr/api/DPZFlickr.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr\api;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Notification\Notification;
/**
* Flickr API Kit with support for OAuth 1.0a for PHP >= 5.3.0. Requires
curl.
*
* Author: David Wilkinson
* Web: http://dopiaza.org/
*
* Copyright (c) 2012 David Wilkinson
*
* Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated
* documentation files (the "Software"), to deal in the Software
without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
the following conditions:
*
* The above copyright notice and this permission notice shall be included
in all copies or substantial portions of
* the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
* OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
class DPZFlickr {
const VERSION = '1.3';
/**
* Session variable name used to store authentication data
*/
const SESSION_OAUTH_DATA = 'FlickrSessionOauthData';
/**
* Key names for various authentication data items
*/
const OAUTH_REQUEST_TOKEN = 'oauth_request_token';
const OAUTH_REQUEST_TOKEN_SECRET =
'oauth_request_token_secret';
const OAUTH_VERIFIER = 'oauth_verifier';
const OAUTH_ACCESS_TOKEN = 'oauth_access_token';
const OAUTH_ACCESS_TOKEN_SECRET =
'oauth_access_token_secret';
const USER_NSID = 'user_nsid';
const USER_NAME = 'user_name';
const USER_FULL_NAME = 'user_full_name';
const PERMISSIONS = 'permissions';
const IS_AUTHENTICATING = 'is_authenticating';
/**
* Default timeout in seconds for HTTP requests
*/
const DEFAULT_HTTP_TIMEOUT = 30;
/**
* Various API endpoints
*/
const REQUEST_TOKEN_ENDPOINT =
'https://www.flickr.com/services/oauth/request_token';
const AUTH_ENDPOINT =
'https://www.flickr.com/services/oauth/authorize';
const ACCESS_TOKEN_ENDPOINT =
'https://www.flickr.com/services/oauth/access_token';
const API_ENDPOINT = 'https://api.flickr.com/services/rest';
const UPLOAD_ENDPOINT =
'https://up.flickr.com/services/upload/';
const REPLACE_ENDPOINT =
'https://up.flickr.com/services/replace/';
/**
* @var string Flickr API key
*/
private $consumerKey;
/**
* @var string Flickr API secret
*/
private $consumerSecret;
/**
* @var string Callback URI for authentication
*/
private $callback;
/**
* @var string HTTP Method to use for API calls
*/
private $method = 'POST';
/**
* @var int HTTP Response code for last call made
*/
private $lastHttpResponseCode;
/**
* @var int Timeout in seconds for HTTP calls
*/
private $httpTimeout;
private $data = array();
/**
* Create a new Flickr object
*
* @param string $key The Flickr API key
* @param string $secret The Flickr API secret
* @param string $callback The callback URL for authentication
*/
public function __construct($key, $secret = NULL, $callback = NULL) {
// start a new session if there isn't one already
if (session_id() == '') {
session_start();
}
$this->consumerKey = $key;
$this->consumerSecret = $secret;
$this->callback = $callback;
$this->httpTimeout = self::DEFAULT_HTTP_TIMEOUT;
}
/**
* Call a Flickr API method
*
* @param string $method The FLickr API method name
* @param array $parameters The method parameters
*
* @return mixed|null The response object
*/
public function call($method, $parameters = NULL) {
$requestParams = ($parameters == NULL ? array() :
$parameters);
$requestParams['method'] = $method;
$requestParams['format'] = 'php_serial';
$requestParams = array_merge($requestParams,
$this->getOauthParams());
$requestParams['oauth_token'] =
$this->getOauthData(self::OAUTH_ACCESS_TOKEN);
$this->sign(self::API_ENDPOINT, $requestParams);
$response = $this->httpRequest(self::API_ENDPOINT,
$requestParams);
if ($response == 'oauth_problem=token_rejected') {
$unserialize = NULL;
} else {
$unserialize = @unserialize($response);
if ($unserialize == false) {
Notification::error('Flickr API error. <a
href="https://smartslider.helpscoutdocs.com/article/1905-flickr-generator">Request
a new token!</a>');
}
}
return empty($response) ? NULL : $unserialize;
}
/**
* Upload a photo
*
* @param $parameters
*
* @return mixed|null
*/
public function upload($parameters) {
$requestParams = ($parameters == NULL ? array() : $parameters);
$requestParams = array_merge($requestParams,
$this->getOauthParams());
$requestParams['oauth_token'] =
$this->getOauthData(self::OAUTH_ACCESS_TOKEN);
// We don't want to include the photo when signing the request
// so temporarily remove it whilst we sign
$photo = $requestParams['photo'];
unset($requestParams['photo']);
$this->sign(self::UPLOAD_ENDPOINT, $requestParams);
$requestParams['photo'] = $photo;
$xml = $this->httpRequest(self::UPLOAD_ENDPOINT,
$requestParams);
$response = $this->getResponseFromXML($xml);
return empty($response) ? NULL : $response;
}
/**
* Replace a photo
*
* @param $parameters
*
* @return mixed|null
*/
public function replace($parameters) {
$requestParams = ($parameters == NULL ? array() : $parameters);
$requestParams = array_merge($requestParams,
$this->getOauthParams());
$requestParams['oauth_token'] =
$this->getOauthData(self::OAUTH_ACCESS_TOKEN);
// We don't want to include the photo when signing the request
// so temporarily remove it whilst we sign
$photo = $requestParams['photo'];
unset($requestParams['photo']);
$this->sign(self::REPLACE_ENDPOINT, $requestParams);
$requestParams['photo'] = $photo;
$xml = $this->httpRequest(self::REPLACE_ENDPOINT,
$requestParams);
$response = $this->getResponseFromXML($xml);
return empty($response) ? NULL : $response;
}
public function authenticate($permissions = 'read') {
// We're authenticating afresh, clear out the session just in
case there are remnants of a
// previous authentication in there
$this->signout();
if ($this->obtainRequestToken()) {
// We've got the request token, redirect to Flickr for
authentication/authorisation
// Make a note in the session of where we are first
$this->setOauthData(self::IS_AUTHENTICATING, true);
$this->setOauthData(self::PERMISSIONS, $permissions);
return (sprintf('%s?oauth_token=%s&perms=%s',
self::AUTH_ENDPOINT, $this->getOauthData(self::OAUTH_REQUEST_TOKEN),
$permissions));
}
return false;
}
public function authenticateStep2() {
if ($this->getOauthData(self::IS_AUTHENTICATING)) {
$oauthToken = @$_GET['oauth_token'];
$oauthVerifier = @$_GET['oauth_verifier'];
if (!empty($oauthToken) && !empty($oauthVerifier)) {
// Looks like we're in the callback
$this->setOauthData(self::OAUTH_REQUEST_TOKEN,
$oauthToken);
$this->setOauthData(self::OAUTH_VERIFIER,
$oauthVerifier);
return $this->obtainAccessToken();
}
$this->setOauthData(self::IS_AUTHENTICATING, false);
}
return false;
}
/**
* Sign the current user out of the current Flickr session. Note this
doesn't affect the user's state on the
* Flickr web site itself, it merely removes the current request/access
tokens from the session.
*
*/
public function signout() {
unset($_SESSION[self::SESSION_OAUTH_DATA]);
}
/**
* Is the current session authenticated on Flickr
*
* @return bool the current authentication status
*/
public function isAuthenticated() {
$authNSID = $this->getOauthData(self::USER_NSID);
return !empty($authNSID);
}
/**
* Return a value from the OAuth session data
*
* @param string $key
*
* @return string value
*/
public function getOauthData($key) {
if (isset($this->data[$key])) {
return $this->data[$key];
}
$val = NULL;
$data = @$_SESSION[self::SESSION_OAUTH_DATA];
if (is_array($data)) {
$val = @$data[$key];
}
return $val;
}
public function setData($data) {
$this->data = $data;
}
/**
* Return the HTTP Response code for the last HTTP call made
*
* @return int
*/
public function getLastHttpResponseCode() {
return $this->lastHttpResponseCode;
}
/**
* Set the timeout for HTTP requests
*
* @param int $timeout
*/
public function setHttpTimeout($timeout) {
$this->httpTimeout = $timeout;
}
/**
* Convert an old authentication token into an OAuth access token
*
* @param string $token
*/
public function convertOldToken($token) {
$param = array(
'method' =>
'flickr.auth.oauth.getAccessToken',
'format' => 'php_serial',
'api_key' => $this->consumerKey,
'auth_token' => $token
);
$this->signUsingOldStyleAuth($param);
$rsp = $this->httpRequest(self::API_ENDPOINT, $param);
$response = unserialize($rsp);
if (@$response['stat'] == 'ok') {
$accessToken =
@$response['auth']['access_token']['oauth_token'];
$accessTokenSecret =
@$response['auth']['access_token']['oauth_token_secret'];
$this->setOauthData(self::OAUTH_ACCESS_TOKEN, $accessToken);
$this->setOauthData(self::OAUTH_ACCESS_TOKEN_SECRET,
$accessTokenSecret);
$response =
$this->call('flickr.auth.oauth.checkToken');
if (@$response['stat'] == 'ok') {
$this->setOauthData(self::USER_NSID,
@$response['oauth']['user']['nsid']);
$this->setOauthData(self::USER_NAME,
@$response['oauth']['user']['username']);
$this->setOauthData(self::USER_FULL_NAME,
@$response['oauth']['user']['fullname']);
}
}
}
/**
* Sign an array of parameters using the old-style auth method
*
* @param array $parameters
*/
private function signUsingOldStyleAuth(&$parameters) {
$keys = array_keys($parameters);
sort($keys, SORT_STRING);
$s = $this->consumerSecret;
foreach ($keys as $k) {
$s .= $k . $parameters[$k];
}
$parameters['api_sig'] = md5($s);
}
public function setOauthData($key, $value) {
$data = @$_SESSION[self::SESSION_OAUTH_DATA];
if (!is_array($data)) {
$data = array();
}
$data[$key] = $value;
$_SESSION[self::SESSION_OAUTH_DATA] = $data;
}
/**
* Check whether the current permission satisfy those requested
*
* @param string $permissionsRequired
*
* @return bool
*/
private function doWeHaveGoodEnoughPermissions($permissionsRequired) {
$ok = false;
$currentPermissions = $this->getOauthData(self::PERMISSIONS);
switch ($permissionsRequired) {
case 'read':
$ok = preg_match('/^(read|write|delete)$/',
$currentPermissions);
break;
case 'write':
$ok = preg_match('/^(write|delete)$/',
$currentPermissions);
break;
case 'delete':
$ok = ($currentPermissions == 'delete');
break;
}
return $ok;
}
/**
* Get a request token from Flickr
*
* @return bool
*/
private function obtainRequestToken() {
$params = $this->getOauthParams();
$params['oauth_callback'] = $this->callback;
$this->sign(self::REQUEST_TOKEN_ENDPOINT, $params);
$rsp =
$this->httpRequest(self::REQUEST_TOKEN_ENDPOINT, $params);
$responseParameters = $this->splitParameters($rsp);
$callbackOK =
(@$responseParameters['oauth_callback_confirmed'] ==
'true');
if ($callbackOK) {
$this->setOauthData(self::OAUTH_REQUEST_TOKEN,
@$responseParameters['oauth_token']);
$this->setOauthData(self::OAUTH_REQUEST_TOKEN_SECRET,
@$responseParameters['oauth_token_secret']);
}
return $callbackOK;
}
/**
* Get an access token from Flickr
*
* @return bool
*/
private function obtainAccessToken() {
$params = $this->getOauthParams();
$params['oauth_token'] =
$this->getOauthData(self::OAUTH_REQUEST_TOKEN);
$params['oauth_verifier'] =
$this->getOauthData(self::OAUTH_VERIFIER);
$this->sign(self::ACCESS_TOKEN_ENDPOINT, $params);
$rsp = $this->httpRequest(self::ACCESS_TOKEN_ENDPOINT, $params);
$responseParameters = $this->splitParameters($rsp);
$ok =
!empty($responseParameters['oauth_token']);
if ($ok) {
$this->setOauthData(self::OAUTH_ACCESS_TOKEN,
@$responseParameters['oauth_token']);
$this->setOauthData(self::OAUTH_ACCESS_TOKEN_SECRET,
@$responseParameters['oauth_token_secret']);
$this->setOauthData(self::USER_NSID,
@$responseParameters['user_nsid']);
$this->setOauthData(self::USER_NAME,
@$responseParameters['username']);
$this->setOauthData(self::USER_FULL_NAME,
@$responseParameters['fullname']);
}
return $ok;
}
/**
* Split a string into an array of key-value pairs
*
* @param string $string
*
* @return array
*/
private function splitParameters($string) {
$parameters = array();
$keyValuePairs = explode('&', $string);
foreach ($keyValuePairs as $kvp) {
$pieces = explode('=', $kvp);
if (count($pieces) == 2) {
$parameters[rawurldecode($pieces[0])] =
rawurldecode($pieces[1]);
}
}
return $parameters;
}
/**
* Join an array of parameters together into a URL-encoded string
*
* @param array $parameters
*
* @return string
*/
private function joinParameters($parameters) {
$keys = array_keys($parameters);
sort($keys, SORT_STRING);
$keyValuePairs = array();
foreach ($keys as $k) {
array_push($keyValuePairs, rawurlencode($k) . "=" .
rawurlencode($parameters[$k]));
}
return implode("&", $keyValuePairs);
}
/**
* Get the base string for creating an OAuth signature
*
* @param string $method
* @param string $url
* @param array $parameters
*
* @return string
*/
private function getBaseString($method, $url, $parameters) {
$components = array(
rawurlencode($method),
rawurlencode($url),
rawurlencode($this->joinParameters($parameters))
);
$baseString = implode("&", $components);
return $baseString;
}
/**
* Sign an array of parameters with an OAuth signature
*
* @param string $url
* @param array $parameters
*/
private function sign($url, &$parameters) {
$baseString =
$this->getBaseString($this->method, $url, $parameters);
$signature =
$this->getSignature($baseString);
$parameters['oauth_signature'] = $signature;
}
/**
* Calculate the signature for a string
*
* @param string $string
*
* @return string
*/
private function getSignature($string) {
$keyPart1 = $this->consumerSecret;
$keyPart2 =
$this->getOauthData(self::OAUTH_ACCESS_TOKEN_SECRET);
if (empty($keyPart2)) {
$keyPart2 =
$this->getOauthData(self::OAUTH_REQUEST_TOKEN_SECRET);
}
if (empty($keyPart2)) {
$keyPart2 = '';
}
$key = "$keyPart1&$keyPart2";
return Base64::encode(hash_hmac('sha1', $string, $key,
true));
}
/**
* Get the standard OAuth parameters
*
* @return array
*/
private function getOauthParams() {
$params = array(
'oauth_nonce' => $this->makeNonce(),
'oauth_timestamp' => time(),
'oauth_consumer_key' => $this->consumerKey,
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_version' => '1.0',
);
return $params;
}
/**
* Create a nonce
*
* @return string
*/
private function makeNonce() {
// Create a string that will be unique for this app and this user
at this time
$reasonablyDistinctiveString = implode(':', array(
$this->consumerKey,
$this->getOauthData(self::USER_NSID),
microtime()
));
return md5($reasonablyDistinctiveString);
}
/**
* Get the response structure from an XML response.
* Annoyingly, upload and replace returns XML rather than serialised
PHP.
* The responses are pretty simple, so rather than depend on an XML
parser we'll fake it and
* decode using regexps
*
* @param $xml
*
* @return mixed
*/
private function getResponseFromXML($xml) {
$rsp = array();
$stat = 'fail';
$matches = array();
preg_match('/<rsp stat="(ok|fail)">/s',
$xml, $matches);
if (count($matches) > 0) {
$stat = $matches[1];
}
if ($stat == 'ok') {
// do this in individual steps in case the order of the
attributes ever changes
$rsp['stat'] = $stat;
$photoid = array();
$matches = array();
preg_match('/<photoid.*>(\d+)<\/photoid>/s', $xml,
$matches);
if (count($matches) > 0) {
$photoid['_content'] = $matches[1];
}
$matches = array();
preg_match('/<photoid.*
secret="(\w+)".*>/s', $xml, $matches);
if (count($matches) > 0) {
$photoid['secret'] = $matches[1];
}
$matches = array();
preg_match('/<photoid.*
originalsecret="(\w+)".*>/s', $xml, $matches);
if (count($matches) > 0) {
$photoid['originalsecret'] = $matches[1];
}
$rsp['photoid'] = $photoid;
} else {
$rsp['stat'] = 'fail';
$err = array();
$matches = array();
preg_match('/<err.*
code="([^"]*)".*>/s', $xml, $matches);
if (count($matches) > 0) {
$err['code'] = $matches[1];
}
$matches = array();
preg_match('/<err.*
msg="([^"]*)".*>/s', $xml, $matches);
if (count($matches) > 0) {
$err['msg'] = $matches[1];
}
$rsp['err'] = $err;
}
return $rsp;
}
/**
* Make an HTTP request
*
* @param string $url
* @param array $parameters
*
* @return mixed
*/
private function httpRequest($url, $parameters) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_TIMEOUT, $this->httpTimeout);
if ($this->method == 'POST') {
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $parameters);
} else {
// Assume GET
curl_setopt($curl, CURLOPT_URL, "$url?" .
$this->joinParameters($parameters));
}
$response = curl_exec($curl);
$headers = curl_getinfo($curl);
curl_close($curl);
$this->lastHttpResponseCode = $headers['http_code'];
return $response;
}
function people_getPhotos($user_id, $args = array()) {
/* This function strays from the method of arguments that I've
* used in the other functions for the fact that there are just
* so many arguments to this API method. What you'll need to
do
* is pass an associative array to the function containing the
* arguments you want to pass to the API. For example:
* $photos =
$f->photos_search(array("tags"=>"brown,cow",
"tag_mode"=>"any"));
* This will return photos tagged with either "brown" or
"cow"
* or both. See the API documentation (link below) for a full
* list of arguments.
*/
/* http://www.flickr.com/services/api/flickr.people.getPhotos.html
*/
return $this->call('flickr.people.getPhotos',
array_merge(array('user_id' => $user_id), $args));
}
function people_findByUsername($username) {
/*
http://www.flickr.com/services/api/flickr.people.findByUsername.html */
return $this->call("flickr.people.findByUsername",
array("username" => $username));
}
function people_getInfo($user_id) {
/* http://www.flickr.com/services/api/flickr.people.getInfo.html */
return $this->call("flickr.people.getInfo",
array("user_id" => $user_id));
}
function galleries_getPhotos($gallery_id, $extras = NULL, $per_page =
NULL, $page = NULL) {
/*
http://www.flickr.com/services/api/flickr.galleries.getPhotos.html */
return $this->call('flickr.galleries.getPhotos',
array(
'gallery_id' => $gallery_id,
'extras' => $extras,
'per_page' => $per_page,
'page' => $page
));
}
function photosets_getPhotos($photoset_id, $extras = NULL,
$privacy_filter = NULL, $per_page = NULL, $page = NULL, $media = NULL) {
/*
http://www.flickr.com/services/api/flickr.photosets.getPhotos.html */
return $this->call('flickr.photosets.getPhotos',
array(
'photoset_id' => $photoset_id,
'extras' => $extras,
'privacy_filter' => $privacy_filter,
'per_page' => $per_page,
'page' => $page,
'media' => $media
));
}
function photosets_getList($user_id = NULL) {
/* http://www.flickr.com/services/api/flickr.photosets.getList.html
*/
return $this->call("flickr.photosets.getList",
array("user_id" => $user_id));
}
function galleries_getList($user_id, $per_page = NULL, $page = NULL) {
/* http://www.flickr.com/services/api/flickr.galleries.getList.html
*/
return $this->call('flickr.galleries.getList', array(
'user_id' => $user_id,
'per_page' => $per_page,
'page' => $page
));
}
function photos_search($args = array()) {
/* This function strays from the method of arguments that I've
* used in the other functions for the fact that there are just
* so many arguments to this API method. What you'll need to
do
* is pass an associative array to the function containing the
* arguments you want to pass to the API. For example:
* $photos =
$f->photos_search(array("tags"=>"brown,cow",
"tag_mode"=>"any"));
* This will return photos tagged with either "brown" or
"cow"
* or both. See the API documentation (link below) for a full
* list of arguments.
*/
/* http://www.flickr.com/services/api/flickr.photos.search.html */
return $this->call("flickr.photos.search", $args);
}
}PK+C�[�����/Generator/Common/Flickr/ConfigurationFlickr.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\Framework\Router\Router;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroupConfiguration;
use Nextend\SmartSlider3Pro\Generator\Common\Flickr\api\DPZFlickr;
use Nextend\SmartSlider3Pro\Generator\Common\Flickr\Elements\FlickrToken;
class ConfigurationFlickr extends AbstractGeneratorGroupConfiguration {
private $data;
/**
* N2SliderGeneratorFlickrConfiguration constructor.
*
* @param GeneratorGroupFlickr $group
*/
public function __construct($group) {
parent::__construct($group);
$this->data = new Data(array(
'api_key' => '',
'api_secret' => '',
'token' => ''
));
$this->data->loadJSON(StorageSectionManager::getStorage('smartslider')
->get('flickr'));
}
public function wellConfigured() {
if (!$this->data->get('api_key') ||
!$this->data->get('api_secret') ||
!$this->data->get('token')) {
return false;
}
$api = $this->getApi();
if ($api->call('flickr.test.login') === false) {
return false;
}
return true;
}
public function getApi() {
$api_key = $this->data->get('api_key');
$api_secret = $this->data->get('api_secret');
$auth_url = ApplicationSmartSlider3::getInstance()
->getApplicationTypeAdmin()
->createUrl(array(
"generator/finishAuth",
array(
'group'
=> Request::$REQUEST->getVar('group')
)
));
$api = new DPZFlickr($api_key, $api_secret, $auth_url);
$token = json_decode($this->data->get('token'),
true);
$api->setData($token);
return $api;
}
public function getData() {
return $this->data->toArray();
}
public function addData($data, $store = true) {
$this->data->loadArray($data);
if ($store) {
StorageSectionManager::getStorage('smartslider')
->set('flickr', null,
json_encode($this->data->toArray()));
}
}
public function render($MVCHelper) {
$form = new Form($MVCHelper, 'generator');
$form->loadArray($this->getData());
$table = new ContainerTable($form->getContainer(),
'flickr-api', 'Flickr api');
$callBackUrl =
$this->getCallbackUrl($MVCHelper->getRouter());
if (substr($callBackUrl, 0, 8) !== 'https://') {
$warning =
$table->createRow('flickr-warning');
$warningText = sprintf(n2_('%1$s allows HTTPS Redirect
URIs only! You must move your site to HTTPS in order to use this generator!
- %2$s How to get SSL for my WordPress site? %3$s'),
'Flickr', '<a
href="https://www.wpbeginner.com/wp-tutorials/how-to-add-ssl-and-https-in-wordpress/"
target="_blank" rel="nofollow noopener
noreferrer">', '</a>');
new Warning($warning, 'warning', $warningText);
} else {
$instruction =
$table->createRow('flickr-instruction');
$instructionText = sprintf(n2_('%2$s Check the
documentation %3$s to learn how to configure your %1$s app.'),
'Flickr', '<a
href="https://smartslider.helpscoutdocs.com/article/1905-flickr-generator"
target="_blank">', '</a>');
new Notice($instruction, 'instruction',
n2_('Instruction'), $instructionText);
}
$settings = $table->createRow('flickr');
new Text($settings, 'api_key', 'Api key',
'', array(
'style' => 'width:250px;'
));
new Text($settings, 'api_secret', 'Api secret',
'', array(
'style' => 'width:250px;'
));
new FlickrToken($settings, 'token',
n2_('Token'));
new Notice($settings, 'callback', n2_('Callback
url'), $callBackUrl);
new Token($settings);
$api = $this->getApi();
if ($api->call('flickr.test.login') === false) {
Notification::error(n2_('The key and secret is not
valid!'));
}
echo $form->render();
}
public function startAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
$this->addData(Request::$REQUEST->getVar('generator'),
false);
$_SESSION['data'] = $this->getData();
$api = $this->getApi();
$api->setData(array());
$url = $api->authenticate();
if (!$url) {
throw new Exception('Api key or Api secret is not
valid.');
}
return $url;
}
public function finishAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
$api = $this->getApi();
$api->setData(array());
$api->authenticateStep2();
$this->data->loadArray($_SESSION['data']);
$data = $this->getData();
$data['token'] = json_encode(array(
'oauth_request_token' =>
$api->getOauthData('oauth_request_token'),
'oauth_request_token_secret' =>
$api->getOauthData('oauth_request_token_secret'),
'oauth_access_token' =>
$api->getOauthData('oauth_access_token'),
'oauth_access_token_secret' =>
$api->getOauthData('oauth_access_token_secret'),
'user_nsid' =>
$api->getOauthData('user_nsid')
));
$this->addData($data);
unset($_SESSION['FlickrSessionOauthData']);
unset($_SESSION['data']);
return true;
}
/**
* @param Router $router
*
* @return string
*/
private function getCallbackUrl($router) {
return $router->createUrl(array(
"generator/finishAuth",
array(
'group' => 'flickr'
)
));
}
}
PK+C�[-��L��1Generator/Common/Flickr/Elements/FlickrAlbums.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr\Elements;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Notification\Notification;
class FlickrAlbums extends Select {
/** @var DPZFlickr */
protected $api;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$result = $this->api->photosets_getList('');
if (isset($result['stat']) &&
$result['stat'] == "fail") {
Notification::error($result['message']);
return false;
}
if (isset($result['photosets']) &&
isset($result['photosets']['photoset'])) {
$photoSets =
$result['photosets']['photoset'];
if (count($photoSets)) {
foreach ($photoSets AS $set) {
$this->options[$set['id']] =
$set['title']['_content'];
}
if ($this->getValue() == '') {
$this->setValue($photoSets[0]['id']);
}
}
}
}
public function setApi($api) {
$this->api = $api;
}
}
PK+C�[�>`��4Generator/Common/Flickr/Elements/FlickrGalleries.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr\Elements;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Notification\Notification;
class FlickrGalleries extends Select {
/** @var DPZFlickr */
protected $api;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$result = $this->api->galleries_getList('');
if (isset($result['stat']) &&
$result['stat'] == "fail") {
Notification::error($result['message']);
return false;
}
if (isset($result['galleries']) &&
isset($result['galleries']['gallery'])) {
$galleries =
$result['galleries']['gallery'];
if (count($galleries)) {
foreach ($galleries AS $gallery) {
$this->options[$gallery['id']] =
$gallery['title']['_content'];
}
if ($this->getValue() == '') {
$this->setValue($galleries[0]['id']);
}
}
}
}
public function setApi($api) {
$this->api = $api;
}
}
PK+C�[����0Generator/Common/Flickr/Elements/FlickrToken.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr\Elements;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Request\Request;
class FlickrToken extends Text {
protected function fetchElement() {
$authUrl = $this->getForm()
->createAjaxUrl(array(
"generator/getAuthUrl",
array(
'group' =>
Request::$REQUEST->getVar('group'),
'type' =>
Request::$REQUEST->getVar('type')
)
));
Js::addInline('new _N2.FormElementFlickrToken("' .
$this->fieldID . '", "' . $authUrl .
'");');
return parent::fetchElement();
}
protected function post() {
return '<a class="n2_field_text__choose_text"
href="#">' . n2_('Request token') .
'</a>';
}
}PK+C�[�w����0Generator/Common/Flickr/GeneratorGroupFlickr.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use
Nextend\SmartSlider3Pro\Generator\Common\Flickr\Sources\FlickrPeopleAlbum;
use
Nextend\SmartSlider3Pro\Generator\Common\Flickr\Sources\FlickrPeoplePhotoGallery;
use
Nextend\SmartSlider3Pro\Generator\Common\Flickr\Sources\FlickrPeoplePhotoStream;
use
Nextend\SmartSlider3Pro\Generator\Common\Flickr\Sources\FlickrPhotosSearch;
class GeneratorGroupFlickr extends AbstractGeneratorGroup {
protected $name = 'flickr';
protected $needConfiguration = true;
public function __construct() {
parent::__construct();
$this->configuration = new ConfigurationFlickr($this);
}
public function getLabel() {
return 'Flickr';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Flickr');
}
protected function loadSources() {
new FlickrPeoplePhotoStream($this, 'peoplephotostream',
'Photostream');
new FlickrPeopleAlbum($this, 'peoplealbum',
'Album');
new FlickrPeoplePhotoGallery($this, 'peoplephotogallery',
'Photogallery');
new FlickrPhotosSearch($this, 'photossearch',
n2_('Search'));
}
}PK+C�[��V�zz5Generator/Common/Flickr/Sources/FlickrPeopleAlbum.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3Pro\Generator\Common\Flickr\Elements\FlickrAlbums;
class FlickrPeopleAlbum extends AbstractGenerator {
protected $layout = 'image_extended';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Flickr album');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new FlickrAlbums($filter, 'peoplephotoset',
n2_('Album'), '', array(
'api' => $this->group->getConfiguration()
->getApi()
));
}
protected function fallback($images) {
foreach ($images AS $image) {
if (!empty($image)) {
return $image;
}
}
return '';
}
protected function _getData($count, $startIndex) {
$data = array();
$photoSet = $this->data->get('peoplephotoset', 0);
if ($photoSet != '') {
$client = $this->group->getConfiguration()
->getApi();
$result = $client->photosets_getPhotos($photoSet,
'description, date_upload, date_taken, owner_name, geo, tags, o_dims,
views, media, path_alias, url_sq, url_t, url_s, url_q, url_m, url_n, url_z,
url_c, url_l, url_o', NULL, $startIndex + $count);
if (is_array($result['photoset']['photo'])
&& !empty($result['photoset']['photo'])) {
$photos =
array_slice($result['photoset']['photo'], $startIndex,
$count);
} else {
Notification::error(n2_('There are no photos in this
album!'));
return null;
}
$imageTypes = array(
't',
's',
'q',
'm',
'n',
'z',
'c',
'l',
'o'
);
$ownerCache = array();
$i = 0;
foreach ($photos AS $photo) {
if (!isset($ownerCache[$photo['ownername']])) {
$owner =
$client->people_findByUsername($photo['ownername']);
$ownerCache[$photo['ownername']] =
$client->people_getInfo($owner['user']['nsid']);
}
$ow = $ownerCache[$photo['ownername']];
foreach ($imageTypes AS $imageType) {
if (!isset($photo['url_' . $imageType])) {
$photo['url_' . $imageType] =
'';
}
}
$data[$i]['image'] =
$this->fallback(array(
$photo['url_o'],
$photo['url_l'],
$photo['url_z'],
$photo['url_m']
));
$data[$i]['thumbnail'] =
$this->fallback(array(
$photo['url_m'],
$photo['url_l'],
$photo['url_t']
));
$data[$i]['title'] =
$photo['title'];
$data[$i]['description'] =
$photo['description']['_content'];
$data[$i]['url'] =
$ow['person']['photosurl']['_content'];
$data[$i]['url_label'] = n2_('View');
$data[$i]['owner_username'] =
$ow['person']['username']['_content'];
$data[$i]['author_name'] =
isset($ow['person']['realname']['_content'])
? $ow['person']['realname']['_content'] :
$ow['person']['username']['_content'];
$data[$i]['author_url'] =
$ow['person']['profileurl']['_content'];
$data[$i]['url_t'] =
$photo['url_t'];
$data[$i]['url_s'] =
$photo['url_s'];
$data[$i]['url_q'] =
$photo['url_q'];
$data[$i]['url_m'] =
$photo['url_m'];
$data[$i]['url_n'] =
$photo['url_n'];
$data[$i]['url_z'] =
$photo['url_z'];
$data[$i]['url_c'] =
$photo['url_c'];
$data[$i]['url_l'] =
$photo['url_l'];
$data[$i]['url_o'] =
$photo['url_o'];
$data[$i]['dateupload'] =
$photo['dateupload'];
$data[$i]['datetaken'] =
$photo['datetaken'];
$data[$i]['datetakengranularity'] =
$photo['datetakengranularity'];
$data[$i]['datetakenunknown'] =
$photo['datetakenunknown'];
$data[$i]['ownername'] =
$photo['ownername'];
$data[$i]['views'] =
$photo['views'];
$data[$i]['tags'] =
$photo['tags'];
$data[$i]['latitude'] =
$photo['latitude'];
$data[$i]['longitude'] =
$photo['longitude'];
$data[$i]['accuracy'] =
$photo['accuracy'];
$data[$i]['context'] =
$photo['context'];
$data[$i]['media'] =
$photo['media'];
$data[$i]['media_status'] =
$photo['media_status'];
$data[$i]['url_sq'] =
$photo['url_sq'];
$i++;
}
} else {
Notification::error(n2_('Please choose an album!'));
}
return $data;
}
}PK+C�[�Y����<Generator/Common/Flickr/Sources/FlickrPeoplePhotoGallery.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Common\Flickr\Elements\FlickrGalleries;
class FlickrPeoplePhotoGallery extends AbstractGenerator {
protected $layout = 'image_extended';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Flickr gallery');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new FlickrGalleries($filter, 'peoplephotogallery',
n2_('Album'), '', array(
'api' => $this->group->getConfiguration()
->getApi()
));
}
protected function fallback($images) {
foreach ($images AS $image) {
if (!empty($image)) {
return $image;
}
}
return '';
}
protected function _getData($count, $startIndex) {
$data = array();
$galleryID = $this->data->get('peoplephotogallery',
0);
if ($galleryID != 0) {
$client = $this->group->getConfiguration()
->getApi();
$result = $client->galleries_getPhotos($galleryID,
'description, date_upload, date_taken, owner_name, geo, tags, o_dims,
views, media, path_alias, url_sq, url_t, url_s, url_q, url_m, url_n, url_z,
url_c, url_l, url_o', $count + $startIndex);
if (is_array($result['photos']['photo'])
&& !empty($result['photos']['photo'])) {
$photos =
array_slice($result['photos']['photo'], $startIndex,
$count);
} else {
Notification::error(n2_('There are no photos in this
gallery!'));
return null;
}
$imageTypes = array(
't',
's',
'q',
'm',
'n',
'z',
'c',
'l',
'o'
);
$ownerCache = array();
$i = 0;
foreach ($photos AS $photo) {
if (!isset($ownerCache[$photo['ownername']])) {
$owner =
$client->people_findByUsername($photo['ownername']);
$ownerCache[$photo['ownername']] =
$client->people_getInfo($owner['user']['nsid']);
}
$ow = $ownerCache[$photo['ownername']];
foreach ($imageTypes AS $imageType) {
if (!isset($photo['url_' . $imageType])) {
$photo['url_' . $imageType] =
'';
}
}
$data[$i]['image'] =
$this->fallback(array(
$photo['url_o'],
$photo['url_l'],
$photo['url_z'],
$photo['url_m']
));
$data[$i]['thumbnail'] =
$this->fallback(array(
$photo['url_m'],
$photo['url_l'],
$photo['url_t']
));
$data[$i]['title'] =
$photo['title'];
$data[$i]['description'] =
$photo['description']['_content'];
$data[$i]['url'] =
$ow['person']['photosurl']['_content'];
$data[$i]['url_label'] = n2_('View');
$data[$i]['owner_username'] =
$ow['person']['username']['_content'];
$data[$i]['author_name'] =
isset($ow['person']['realname']['_content'])
? $ow['person']['realname']['_content'] :
$ow['person']['username']['_content'];
$data[$i]['author_url'] =
$ow['person']['profileurl']['_content'];
$data[$i]['url_t'] =
$photo['url_t'];
$data[$i]['url_s'] =
$photo['url_s'];
$data[$i]['url_q'] =
$photo['url_q'];
$data[$i]['url_m'] =
$photo['url_m'];
$data[$i]['url_n'] =
$photo['url_n'];
$data[$i]['url_z'] =
$photo['url_z'];
$data[$i]['url_c'] =
$photo['url_c'];
$data[$i]['url_l'] =
$photo['url_l'];
$data[$i]['url_o'] =
$photo['url_o'];
$data[$i]['owner'] =
$photo['owner'];
$data[$i]['dateupload'] =
$photo['dateupload'];
$data[$i]['datetaken'] =
$photo['datetaken'];
$data[$i]['datetakengranularity'] =
$photo['datetakengranularity'];
$data[$i]['datetakenunknown'] =
$photo['datetakenunknown'];
$data[$i]['ownername'] =
$photo['ownername'];
$data[$i]['views'] =
$photo['views'];
$data[$i]['tags'] =
$photo['tags'];
$data[$i]['latitude'] =
$photo['latitude'];
$data[$i]['longitude'] =
$photo['longitude'];
$data[$i]['accuracy'] =
$photo['accuracy'];
$data[$i]['context'] =
$photo['context'];
$data[$i]['media'] =
$photo['media'];
$data[$i]['media_status'] =
$photo['media_status'];
$data[$i]['url_sq'] =
$photo['url_sq'];
$i++;
}
} else {
Notification::error(n2_('Please chooose a
gallery!'));
}
return $data;
}
}PK+C�[.� ;Generator/Common/Flickr/Sources/FlickrPeoplePhotoStream.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class FlickrPeoplePhotoStream extends AbstractGenerator {
protected $layout = 'image_extended';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Flickr photo stream');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Select($filter, 'peoplephotostreamprivacy',
n2_('Privacy'), 1, array(
'options' => array(
'1' => 'Public photos',
'2' => 'Private photos visible to
friends',
'3' => 'Private photos visible to
family',
'4' => 'Private photos visible to friends
& family',
'5' => 'Completely private photos'
)
));
}
protected function fallback($images) {
foreach ($images AS $image) {
if (!empty($image)) {
return $image;
}
}
return '';
}
protected function _getData($count, $startIndex) {
$data = array();
$client = $this->group->getConfiguration()
->getApi();
$peoplephotostreamprivacy =
intval($this->data->get('peoplephotostreamprivacy', 1));
$result = $client->people_getPhotos('me', array(
'per_page' => $startIndex + $count,
'privacy_filter' => $peoplephotostreamprivacy,
'extras' => 'description,
date_upload, date_taken, owner_name, geo, tags, o_dims, views, media,
path_alias, url_sq, url_t, url_s, url_q, url_m, url_n, url_z, url_c, url_l,
url_o'
));
if (is_array($result['photos']['photo'])
&& !empty($result['photos']['photo'])) {
$photos =
array_slice($result['photos']['photo'], $startIndex,
$count);
} else {
Notification::error(n2_('There are no photos with this
privacy filter!'));
return null;
}
$ownerCache = array();
$i = 0;
foreach ($photos AS $photo) {
if (!isset($ownerCache[$photo['ownername']])) {
$owner =
$client->people_findByUsername($photo['ownername']);
$ownerCache[$photo['ownername']] =
$client->people_getInfo($owner['user']['nsid']);
}
$ow = $ownerCache[$photo['ownername']];
$data[$i]['image'] = $this->fallback(array(
$photo['url_o'],
$photo['url_l'],
$photo['url_z'],
$photo['url_m']
));
$data[$i]['thumbnail'] = $this->fallback(array(
$photo['url_m'],
$photo['url_l'],
$photo['url_t']
));
$data[$i]['title'] = $photo['title'];
$data[$i]['description'] =
$photo['description']['_content'];
$data[$i]['url'] =
$ow['person']['photosurl']['_content'];
$data[$i]['url_label'] = n2_('View');
$data[$i]['owner_username'] =
$ow['person']['username']['_content'];
$data[$i]['author_name'] =
isset($ow['person']['realname']['_content'])
? $ow['person']['realname']['_content'] :
$ow['person']['username']['_content'];
$data[$i]['author_url'] =
$ow['person']['profileurl']['_content'];
$data[$i]['url_t'] =
$photo['url_t'];
$data[$i]['url_s'] =
$photo['url_s'];
$data[$i]['url_q'] =
$photo['url_q'];
$data[$i]['url_m'] =
$photo['url_m'];
$data[$i]['url_n'] =
$photo['url_n'];
$data[$i]['url_z'] =
$photo['url_z'];
$data[$i]['url_c'] =
$photo['url_c'];
$data[$i]['url_l'] =
$photo['url_l'];
$data[$i]['url_o'] =
$photo['url_o'];
$data[$i]['owner'] =
$photo['owner'];
$data[$i]['dateupload'] =
$photo['dateupload'];
$data[$i]['datetaken'] =
$photo['datetaken'];
$data[$i]['datetakengranularity'] =
$photo['datetakengranularity'];
$data[$i]['datetakenunknown'] =
$photo['datetakenunknown'];
$data[$i]['ownername'] =
$photo['ownername'];
$data[$i]['views'] =
$photo['views'];
$data[$i]['tags'] =
$photo['tags'];
$data[$i]['latitude'] =
$photo['latitude'];
$data[$i]['longitude'] =
$photo['longitude'];
$data[$i]['accuracy'] =
$photo['accuracy'];
$data[$i]['context'] =
$photo['context'];
$data[$i]['media'] =
$photo['media'];
$data[$i]['media_status'] =
$photo['media_status'];
$data[$i]['url_sq'] =
$photo['url_sq'];
$i++;
}
return $data;
}
}
PK+C�[�9�H��6Generator/Common/Flickr/Sources/FlickrPhotosSearch.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Flickr\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class FlickrPhotosSearch extends AbstractGenerator {
protected $layout = 'image';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_x('Flickr search', 'Flickr generator type'));
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Text($filter, 'userID', n2_('User name or
ID'), 'me');
new Text($filter, 'tags', n2_('Tags'),
'');
new Text($filter, 'text', n2_('Search in title,
description or tags'), '');
new Select($filter, 'privacy', n2_('Privacy'),
1, array(
'options' => array(
'1' => 'Public photos',
'2' => 'Private photos visible to
friends',
'3' => 'Private photos visible to
family',
'4' => 'Private photos visible to friends
& family',
'5' => 'Completely private photos'
)
));
new Select($filter, 'type', n2_('Type'), 7,
array(
'options' => array(
'7' => n2_('All'),
'1' => 'Photos only',
'2' => 'Screenshots only',
'3' => '\'Other\' only',
'4' => 'Photos and screenshots',
'5' => 'Screenshots and
\'other\'',
'6' => 'Photos and
\'other\''
)
));
}
protected function _getData($count, $startIndex) {
$client = $this->group->getConfiguration()
->getApi();
$userID = $this->data->get('userID',
'me');
$tags = $this->data->get('tags', '');
$text = $this->data->get('text', '');
$privacy = $this->data->get('privacy',
'1');
$type = $this->data->get('type', '1');
$args = array(
'tags' => $tags,
'user_id' => $userID,
'text' => $text,
'privacy_filter' => $privacy,
'content_type' => $type,
'per_page' => $count
);
$result = $client->photos_search($args);
if (is_array($result['photos']) &&
!empty($result['photos'])) {
$photos = $result['photos']['photo'];
} else {
return null;
}
$data = array();
foreach ($photos AS $photo) {
if (!isset($ow)) {
$ow =
$client->people_getInfo($photo['owner']);
}
$image = 'https://c2.staticflickr.com/' .
$photo['farm'] . '/' . $photo['server'] .
'/' . $photo['id'] . '_' .
$photo['secret'];
$r = array(
'image' => $image . '_b.jpg',
'thumbnail' => $image . '_m.jpg',
'title' => $photo['title'],
'url' =>
'https://www.flickr.com/photos/' . $photo['owner'] .
'/' . $photo['id'],
'url_b' => $image . '_b.jpg',
'url_c' => $image . '_c.jpg',
'url_h' => $image . '_h.jpg',
'url_m' => $image . '_m.jpg',
'url_n' => $image . '_n.jpg',
'url_s' => $image . '_s.jpg',
'url_t' => $image . '_t.jpg',
'url_q' => $image . '_q.jpg',
'url_z' => $image . '_z.jpg'
);
$data[] = $r;
}
return $data;
}
}PK+C�[�}�.��*Generator/Common/GeneratorCommonLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common;
use Nextend\SmartSlider3\Generator\AbstractGeneratorLoader;
class GeneratorCommonLoader extends AbstractGeneratorLoader {
}PK+C�[����@Generator/Common/ImagesInFolder/GeneratorGroupImagesInFolder.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\ImagesInFolder;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use
Nextend\SmartSlider3Pro\Generator\Common\ImagesInFolder\Sources\ImagesInFolderImages;
use
Nextend\SmartSlider3Pro\Generator\Common\ImagesInFolder\Sources\ImagesInFolderSubfolders;
use
Nextend\SmartSlider3Pro\Generator\Common\ImagesInFolder\Sources\ImagesInFolderVideos;
class GeneratorGroupImagesInFolder extends AbstractGeneratorGroup {
protected $name = 'infolder';
public function getLabel() {
return n2_('Folder');
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('Images in folder'));
}
protected function loadSources() {
new ImagesInFolderImages($this, 'images',
n2_('Images in folder'));
new ImagesInFolderSubfolders($this, 'subfolders',
n2_('Images in folder and subfolders'));
new ImagesInFolderVideos($this, 'videos',
n2_('Videos in folder'));
}
}PK,C�[3Y���@Generator/Common/ImagesInFolder/Sources/ImagesInFolderImages.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\ImagesInFolder\Sources;
use JURI;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text\Folder;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class ImagesInFolderImages extends AbstractGenerator {
protected $layout = 'image';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('Images in folder'));
}
private function trim($str, $path = true) {
$str = ltrim(rtrim($str, '/'), '/');
if ($path && strpos($str, ':') === false) {
$str = '/' . $str;
}
return $str;
}
private function getSiteUrl() {
$site_url = JURI::root();
if (empty($site_url)) {
$site_url = (empty($_SERVER['HTTPS']) ?
"http://" : "https://") .
$_SERVER['HTTP_HOST'];
}
return $this->trim($site_url, false);
}
private function getRootPath() {
$root = '';
$root = JPATH_ROOT;
if (!empty($root)) {
$root = $this->trim($root);
}
return $root;
}
private function pathToUri($path, $media_folder = true) {
$path = $this->trim($path);
$root = $this->getRootPath();
if (!empty($root) && !$media_folder) {
$path = str_replace($root, '', $path);
return $this->getSiteUrl() . $path;
} else if ($media_folder) {
return
ResourceTranslator::urlToResource(Url::pathToUri($path));
} else {
return Url::pathToUri($path);
}
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Folder($filter, 'sourcefolder', n2_('Source
folder'), '');
new OnOff($filter, 'iptc', 'EXIF', 0);
new OnOff($filter, 'remove_resize', 'Exclude resized
images', 0, array(
'tipLabel' => n2_('Remove resized
images'),
'tipDescription' => n2_('This option removes
files that match the "-[number]x[number].[extension]" pattern in
the end of their file names. For example, "myimage.jpg" will stay
in the generator result, but "myimage-120x120.jpg" will be
removed, because it\'s the same image, just in a smaller size.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1901-images-from-folder-generator#exclude-resized-images'
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'order', '0|*|asc',
array(
'options' => array(
'0' => n2_('None'),
'1' => n2_('Filename'),
'2' => n2_('Creation date')
)
));
}
protected function _getData($count, $startIndex) {
$root = Filesystem::getImagesFolder();
$source = $this->data->get('sourcefolder',
'');
if (substr($source, 0, 1) == '*') {
$media_folder = false;
$source = substr($source, 1);
if (!Filesystem::existsFolder($source)) {
Notification::error(n2_('Wrong path. This is the
default image folder path, so try to navigate from here:') .
'<br>*' . $root);
return null;
} else {
$root = '';
}
} else {
$media_folder = true;
}
$folder = Filesystem::realpath($root . '/' .
ltrim(rtrim($source, '/'), '/'));
$files = Filesystem::files($folder);
for ($i = count($files) - 1; $i >= 0; $i--) {
$ext = strtolower(pathinfo($files[$i],
PATHINFO_EXTENSION));
$extensions = array(
'jpg',
'jpeg',
'png',
'svg',
'gif',
'webp'
);
if (!in_array($ext, $extensions)) {
array_splice($files, $i, 1);
}
}
$IPTC = $this->data->get('iptc', 0) &&
function_exists('exif_read_data');
$files = array_slice($files, $startIndex);
$data = array();
for ($i = 0; $i < $count && isset($files[$i]); $i++) {
$image = $this->pathToUri($folder . '/' .
$files[$i], $media_folder);
$data[$i] = array(
'image' => $image,
'thumbnail' => $image,
'title' => $files[$i],
'name' =>
preg_replace('/\\.[^.\\s]{3,4}$/', '', $files[$i]),
'created' => filemtime($folder .
'/' . $files[$i])
);
if ($IPTC) {
$properties = @exif_read_data($folder . '/' .
$files[$i]);
if ($properties) {
foreach ($properties AS $key => $property) {
if (!is_array($property) && $property !=
'' && preg_match('/^[a-zA-Z]+$/', $key)) {
preg_match('/([2-9][0-9]*)\/([0-9]+)/', $property, $matches);
if (empty($matches)) {
$data[$i][$key] = $property;
} else {
$data[$i][$key] = round($matches[1] /
$matches[2], 2);
}
}
}
}
}
}
if ($this->data->get('remove_resize', 0)) {
$new = array();
for ($i = 0; $i < count($data); $i++) {
if (!preg_match('/[_-]\d+x\d+(?=\.[a-z]{3,4}$)/',
$data[$i]['title'], $match)) {
$new[] = $data[$i];
}
}
$data = $new;
}
list($orderBy, $sort) =
Common::parse($this->data->get('order',
'0|*|asc'));
switch ($orderBy) {
case 1:
usort($data, array(
$this,
$sort
));
break;
case 2:
usort($data, array(
$this,
'orderByDate_' . $sort
));
break;
default:
break;
}
return $data;
}
public function asc($a, $b) {
return (strtolower($b['title']) <
strtolower($a['title']) ? 1 : -1);
}
public function desc($a, $b) {
return (strtolower($a['title']) <
strtolower($b['title']) ? 1 : -1);
}
public function orderByDate_asc($a, $b) {
return ($b['created'] < $a['created'] ? 1 :
-1);
}
public function orderByDate_desc($a, $b) {
return ($a['created'] < $b['created'] ? 1 :
-1);
}
}PK,C�[;�� ))DGenerator/Common/ImagesInFolder/Sources/ImagesInFolderSubfolders.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\ImagesInFolder\Sources;
use JURI;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text\Folder;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class ImagesInFolderSubfolders extends AbstractGenerator {
protected $layout = 'image';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('Images in folder and subfolders'));
}
private function trim($str, $path = true) {
$str = ltrim(rtrim($str, '/'), '/');
if ($path && strpos($str, ':') === false) {
$str = '/' . $str;
}
return $str;
}
private function getSiteUrl() {
$site_url = JURI::root();
if (empty($site_url)) {
$site_url = (empty($_SERVER['HTTPS']) ?
"http://" : "https://") .
$_SERVER['HTTP_HOST'];
}
return $this->trim($site_url, false);
}
private function getRootPath() {
$root = '';
$root = JPATH_ROOT;
if (!empty($root)) {
$root = $this->trim($root);
}
return $root;
}
private function pathToUri($path, $media_folder = true) {
$path = $this->trim($path);
$root = $this->getRootPath();
if (!empty($root) && !$media_folder) {
$path = str_replace($root, '', $path);
return $this->getSiteUrl() . $path;
} else if ($media_folder) {
return
ResourceTranslator::urlToResource(Url::pathToUri($path));
} else {
return Url::pathToUri($path);
}
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Folder($filter, 'sourcefolder', n2_('Source
folder'), '');
new OnOff($filter, 'iptc', 'EXIF', 0);
new OnOff($filter, 'remove_resize', 'Exclude resized
images', 0, array(
'tipLabel' => n2_('Remove resized
images'),
'tipDescription' => n2_('This option removes
files that match the "-[number]x[number].[extension]" pattern in
the end of their file names. For example, "myimage.jpg" will stay
in the generator result, but "myimage-120x120.jpg" will be
removed, because it\'s the same image, just in a smaller size.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1901-images-from-folder-generator#exclude-resized-images'
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'order', '0|*|asc',
array(
'options' => array(
'0' => n2_('None'),
'1' => n2_('Filename'),
'2' => n2_('Creation date')
)
));
}
function getSubFolders($folders = array(), $ready = array()) {
$subFolders = array();
foreach ($folders AS $folder) {
$ready[] = $folder;
$subFoldersHelper = Filesystem::folders($folder);
foreach ($subFoldersHelper AS $helper) {
$subFolders[] = $folder . '/' . $helper;
}
}
if (!empty($subFolders)) {
return $this->getSubFolders($subFolders, $ready);
} else {
return $ready;
}
}
protected function _getData($count, $startIndex) {
$root = str_replace('\\', '/',
Filesystem::getImagesFolder());
$source = str_replace('\\', '/',
$this->data->get('sourcefolder', ''));
$search = (strpos($source, "%%") !== false);
if (substr($source, 0, 1) != '/' &&
substr($source, 0, 1) != '*') {
$source = '/' . $source;
}
if ($search) {
$parts = preg_split("/[\s\/]+/", $source);
$originalSource = $source;
$source = '';
foreach ($parts AS $part) {
if (strpos($part, "%%") !== false) {
$source .= $part . '/';
} else {
if (substr($source, -2, 2) == '//') {
$source = substr($source, 0, -1);
}
break;
}
}
$base = $root;
}
if (substr($source, 0, 1) == '*') {
$media_folder = false;
$source = substr($source, 1);
if (!Filesystem::existsFolder($source)) {
Notification::error(n2_('Wrong path. This is the
default image folder path, so try to navigate from here:') .
'<br>*' . $root);
return array();
} else {
$root = '';
}
} else {
$media_folder = true;
}
$baseFolder = str_replace('\\', '/',
Filesystem::realpath($root . '/' . ltrim(rtrim($source,
'/'), '/')));
if (empty($baseFolder)) {
Notification::error(n2_('Folder not found.'));
return array();
}
$folders = $this->getSubFolders(array($baseFolder));
if ($search) {
if (substr($originalSource, 0, 1) == '*') {
$originalSource = substr($originalSource, 1);
} else {
$originalSource = $base . $originalSource;
}
$from = array(
'%%',
'/'
);
$to = array(
'([^.]+)',
'\/'
);
$pattern = str_replace($from, $to, $originalSource);
$pattern = '#' . $pattern . '#';
$matchedFolders = array();
foreach ($folders AS $folder) {
if (preg_match($pattern, $folder . '/')) {
$matchedFolders[] = $folder;
}
}
$folders = $matchedFolders;
}
$allFiles = array();
foreach ($folders AS $f) {
$allFiles[$f] = Filesystem::files($f);
}
$return = array();
$counter = 0;
foreach ($allFiles AS $folder => $files) {
$counter++;
for ($i = count($files) - 1; $i >= 0; $i--) {
$ext = strtolower(pathinfo($files[$i],
PATHINFO_EXTENSION));
$extensions = array(
'jpg',
'jpeg',
'png',
'svg',
'gif',
'webp'
);
if (!in_array($ext, $extensions)) {
array_splice($files, $i, 1);
}
}
$IPTC = $this->data->get('iptc', 0) &&
function_exists('exif_read_data');
$data = array();
for ($i = 0; $i < $count && isset($files[$i]); $i++)
{
$image = $this->pathToUri($folder . '/' .
$files[$i], $media_folder);
$data[$i] = array(
'image' => $image,
'thumbnail' => $image,
'title' => $files[$i],
'name' =>
preg_replace('/\\.[^.\\s]{3,4}$/', '', $files[$i]),
'folder' => $folder,
'foldername' => basename($folder),
'created' => filemtime($folder .
'/' . $files[$i])
);
if ($IPTC) {
$properties = @exif_read_data($folder . '/' .
$files[$i]);
if ($properties) {
foreach ($properties AS $key => $property) {
if (!is_array($property) && $property
!= '' && preg_match('/^[a-zA-Z]+$/', $key)) {
preg_match('/([2-9][0-9]*)\/([0-9]+)/', $property, $matches);
if (empty($matches)) {
$data[$i][$key] = $property;
} else {
$data[$i][$key] = round($matches[1] /
$matches[2], 2);
}
}
}
}
}
}
$return = array_merge($return, $data);
}
$return = array_slice($return, $startIndex, $count);
if ($this->data->get('remove_resize', 0)) {
$new = array();
for ($i = 0; $i < count($return); $i++) {
if (!preg_match('/[_-]\d+x\d+(?=\.[a-z]{3,4}$)/',
$return[$i]['title'], $match)) {
$new[] = $return[$i];
}
}
$return = $new;
}
$order = explode("|*|",
$this->data->get('order', '0|*|asc'));
switch ($order[0]) {
case 1:
usort($return, 'N2GeneratorInFolderSubFolders::'
. $order[1]);
break;
case 2:
usort($return,
'N2GeneratorInFolderSubFolders::orderByDate_' . $order[1]);
break;
default:
break;
}
list($orderBy, $sort) =
Common::parse($this->data->get('order',
'0|*|asc'));
switch ($orderBy) {
case 1:
usort($return, array(
$this,
$sort
));
break;
case 2:
usort($return, array(
$this,
'orderByDate_' . $sort
));
break;
default:
break;
}
return $return;
}
public function asc($a, $b) {
return (strtolower($b['title']) <
strtolower($a['title']) ? 1 : -1);
}
public function desc($a, $b) {
return (strtolower($a['title']) <
strtolower($b['title']) ? 1 : -1);
}
public function orderByDate_asc($a, $b) {
return ($b['created'] < $a['created'] ? 1 :
-1);
}
public function orderByDate_desc($a, $b) {
return ($a['created'] < $b['created'] ? 1 :
-1);
}
}PK,C�[Ӹ�=��@Generator/Common/ImagesInFolder/Sources/ImagesInFolderVideos.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\ImagesInFolder\Sources;
use JURI;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Text\Folder;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class ImagesInFolderVideos extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('Videos in folder'));
}
private function trim($str, $path = true) {
$str = ltrim(rtrim($str, '/'), '/');
if ($path && strpos($str, ':') === false) {
$str = '/' . $str;
}
return $str;
}
private function getSiteUrl() {
$site_url = JURI::root();
if (empty($site_url)) {
$site_url = (empty($_SERVER['HTTPS']) ?
"http://" : "https://") .
$_SERVER['HTTP_HOST'];
}
return $this->trim($site_url, false);
}
private function getRootPath() {
$root = '';
$root = JPATH_ROOT;
if (!empty($root)) {
$root = $this->trim($root);
}
return $root;
}
private function pathToUri($path, $media_folder = true) {
$path = $this->trim($path);
$root = $this->getRootPath();
if (!empty($root) && !$media_folder) {
$path = str_replace($root, '', $path);
return $this->getSiteUrl() . $path;
} else if ($media_folder) {
return
ResourceTranslator::urlToResource(Url::pathToUri($path));
} else {
return Url::pathToUri($path);
}
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Folder($filter, 'sourcefolder', n2_('Source
folder'), '');
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'order', '0|*|asc',
array(
'options' => array(
'0' => n2_('None'),
'1' => n2_('Filename'),
'2' => n2_('Creation date')
)
));
}
protected function _getData($count, $startIndex) {
$root = Filesystem::getImagesFolder();
$source = $this->data->get('sourcefolder',
'');
if (substr($source, 0, 1) == '*') {
$media_folder = false;
$source = substr($source, 1);
if (!Filesystem::existsFolder($source)) {
Notification::error(n2_('Wrong path. This is the
default upload/media folder path, so try to navigate from here:') .
'<br>*' . $root);
return null;
} else {
$root = '';
}
} else {
$media_folder = true;
}
$folder = Filesystem::realpath($root . '/' .
ltrim(rtrim($source, '/'), '/'));
$files = Filesystem::files($folder);
for ($i = count($files) - 1; $i >= 0; $i--) {
$ext = strtolower(pathinfo($files[$i], PATHINFO_EXTENSION));
if ($ext != 'mp4') {
array_splice($files, $i, 1);
}
}
$files = array_slice($files, $startIndex);
$data = array();
for ($i = 0; $i < $count && isset($files[$i]); $i++) {
$video = $this->pathToUri($folder . '/' .
$files[$i], $media_folder);
$data[$i] = array(
'video' => $video,
'title' => $files[$i],
'name' =>
preg_replace('/\\.[^.\\s]{3,4}$/', '', $files[$i]),
'created' => filemtime($folder . '/'
. $files[$i])
);
}
list($orderBy, $sort) =
Common::parse($this->data->get('order',
'0|*|asc'));
switch ($orderBy) {
case 1:
usort($data, array(
$this,
$sort
));
break;
case 2:
usort($data, array(
$this,
'orderByDate_' . $sort
));
break;
default:
break;
}
return $data;
}
public function asc($a, $b) {
return (strtolower($b['title']) <
strtolower($a['title']) ? 1 : -1);
}
public function desc($a, $b) {
return (strtolower($a['title']) <
strtolower($b['title']) ? 1 : -1);
}
public function orderByDate_asc($a, $b) {
return ($b['created'] < $a['created'] ? 1 :
-1);
}
public function orderByDate_desc($a, $b) {
return ($a['created'] < $b['created'] ? 1 :
-1);
}
}PK,C�[r�n��,Generator/Common/Json/GeneratorGroupJson.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Json;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3Pro\Generator\Common\Json\Sources\JsonInput;
use Nextend\SmartSlider3Pro\Generator\Common\Json\Sources\JsonUrl;
class GeneratorGroupJson extends AbstractGeneratorGroup {
protected $name = 'json';
public function getLabel() {
return 'JSON';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'JSON');
}
protected function loadSources() {
new JsonUrl($this, 'url', n2_('JSON from
url'));
new JsonInput($this, 'input', n2_('JSON from
input'));
}
}PK,C�[H��z��+Generator/Common/Json/Sources/JsonInput.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Json\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class JsonInput extends AbstractGenerator {
protected $layout = 'text';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('JSON from input'));
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$source = $filterGroup->createRow('source');
new Textarea($source, 'source', 'JSON or XML',
'', array(
'width' => 300,
'height' => 200
));
$filter = $filterGroup->createRow('filter');
new Select($filter, 'data_type', 'Data type',
0, array(
'options' => array(
0 => 'JSON',
1 => 'XML'
)
));
new Select($filter, 'json_level', 'Level
separation', 2, array(
'tipLabel' => n2_('Level
separation'),
'tipDescription' => n2_('JSON codes can be
customized to have many different levels. From a code it is impossible to
know from which level do you want to use the given datas on the different
slides, so you have to select that level from this list.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1911-json-generator#filter',
'options' => array(
1 => 'first level',
2 => 'second level',
3 => 'third level'
)
));
new Select($filter, 'remove_levels', 'Remove levels
from result', 0, array(
'options' => array(
0 => 0,
1 => 1,
2 => 2,
3 => 3
)
));
}
protected function flatten_array($array, $parent = '',
$basekey = '') {
if (!is_array($array)) {
return false;
}
$result = array();
if (!empty($basekey)) {
$result['base_name'] = $basekey;
}
foreach ($array as $key => $value) {
$original_key = $key;
if (!empty($parent)) {
$key = $parent . '_' . $key;
}
$result[$key . '_name'] = $original_key;
if (is_array($value)) {
$result = array_merge($result,
$this->flatten_array($value, $key));
} else {
$result[$key] = $value;
}
}
return $result;
}
protected function removeLevel($array) {
$result = array();
foreach ($array AS $key => $value) {
if (is_array($value)) {
$result = array_merge($result, $value);
}
}
return $result;
}
protected function _getData($count, $startIndex) {
$source = $this->data->get('source', '');
$data = array();
if (($this->data->get('data_type', 0) == 1) ||
(strtolower(substr($source, -4)) == '.xml')) {
$xmlData = true;
$xml = @simplexml_load_string($source,
"SimpleXMLElement", LIBXML_NOCDATA);
$source = json_encode((array)$xml);
} else {
$xmlData = true;
}
$json = json_decode($source, true);
if (!is_array($json) || $json == array('0' => false))
{
if ($xmlData) {
Notification::error(sprintf(n2_('The given text is not
valid XML! %1$sValidate your code%2$s to make sure it is
correct.'),'<a href="https://www.xmlvalidation.com/"
target="_blank">','</a>'));
} else {
Notification::error(sprintf(n2_('The given text is not
valid JSON! %1$sValidate your code%2$s to make sure it is
correct.'),'<a href="https://jsonlint.com/"
target="_blank">','</a>'));
}
return null;
}
$remove_levels =
intval($this->data->get('remove_levels', 0));
if ($remove_levels != 0) {
for ($i = 0; $i < $remove_levels; $i++) {
$json = $this->removeLevel($json);
}
}
switch ($this->data->get('json_level', 2)) {
case 1:
$data[] = $this->flatten_array($json);
break;
case 2:
foreach ($json AS $key => $json_row) {
if (is_array($json_row)) {
$data[] = $this->flatten_array($json_row,
'', $key);
}
}
break;
case 3:
$array_values = array_values($json);
if (is_array($array_values)) {
$array_shift = array_shift($array_values);
if (is_array($array_shift) &&
!empty($array_shift)) {
foreach ($array_shift AS $key => $json_row) {
if (is_array($json_row)) {
$data[] =
$this->flatten_array($json_row, '', $key);
}
}
}
}
break;
}
if (empty($data)) {
Notification::error(n2_('Try to change the "Level
separation" or "Remove levels from result" setting.'));
} else {
$data = array_slice($data, $startIndex, $count);
}
return $data;
}
}PK,C�[���%%)Generator/Common/Json/Sources/JsonUrl.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Json\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Misc\HttpClient;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class JsonUrl extends AbstractGenerator {
protected $layout = 'text';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('JSON from url'));
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$source = $filterGroup->createRow('source');
new Text($source, 'sourcefile', 'JSON or XML
url', '', array(
'style' => 'width:600px;'
));
$filter = $filterGroup->createRow('filter');
new Select($filter, 'data_type', 'Data type',
0, array(
'options' => array(
0 => 'JSON',
1 => 'XML'
)
));
new Select($filter, 'json_level', 'Level
separation', 2, array(
'tipLabel' => n2_('Level
separation'),
'tipDescription' => n2_('JSON codes can be
customized to have many different levels. From a code it is impossible to
know from which level do you want to use the given datas on the different
slides, so you have to select that level from this list.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1911-json-generator#filter',
'options' => array(
1 => 'first level',
2 => 'second level',
3 => 'third level'
)
));
new Select($filter, 'remove_levels', 'Remove levels
from result', 0, array(
'options' => array(
0 => 0,
1 => 1,
2 => 2,
3 => 3
)
));
}
protected function flatten_array($array, $parent = '',
$basekey = '') {
if (!is_array($array)) {
return false;
}
$result = array();
if (!empty($basekey)) {
$result['base_name'] = $basekey;
}
foreach ($array as $key => $value) {
$original_key = $key;
if (!empty($parent)) {
$key = $parent . '_' . $key;
}
$result[$key . '_name'] = $original_key;
if (is_array($value)) {
$result = array_merge($result,
$this->flatten_array($value, $key));
} else {
$result[$key] = $value;
}
}
return $result;
}
protected function removeLevel($array) {
$result = array();
foreach ($array as $key => $value) {
if (is_array($value)) {
$result = array_merge($result, $value);
}
}
return $result;
}
protected function _getData($count, $startIndex) {
$source = $this->data->get('sourcefile',
'');
$data = array();
$options = array(
'referer' => '',
'error' => false
);
$content = HttpClient::get($source, $options);
if (!$content) {
Notification::error('The file on the given url is either
empty or it cannot be accessed.');
return null;
}
if (($this->data->get('data_type', 0) == 1) ||
(strtolower(substr($source, -4)) == '.xml')) {
$xmlData = true;
$xml = @simplexml_load_string($content,
"SimpleXMLElement", LIBXML_NOCDATA);
$content = json_encode((array)$xml);
} else {
$xmlData = false;
}
$json = json_decode($content, true);
if (!is_array($json) || $json == array('0' => false))
{
if ($xmlData) {
Notification::error(sprintf(n2_('The given text is not
valid XML! %1$sValidate your code%2$s to make sure it is correct.'),
'<a href="https://www.xmlvalidation.com/"
target="_blank">', '</a>'));
} else {
Notification::error(sprintf(n2_('The given text is not
valid JSON! %1$sValidate your code%2$s to make sure it is correct.'),
'<a href="https://jsonlint.com/"
target="_blank">', '</a>'));
}
return null;
}
$remove_levels =
intval($this->data->get('remove_levels', 0));
if ($remove_levels != 0) {
for ($i = 0; $i < $remove_levels; $i++) {
$json = $this->removeLevel($json);
}
}
switch ($this->data->get('json_level', 2)) {
case 1:
$data[] = $this->flatten_array($json);
break;
case 2:
foreach ($json as $key => $json_row) {
if (is_array($json_row)) {
$data[] = $this->flatten_array($json_row,
'', $key);
}
}
break;
case 3:
$array_values = array_values($json);
if (is_array($array_values)) {
$array_shift = array_shift($array_values);
if (is_array($array_shift) &&
!empty($array_shift)) {
foreach ($array_shift as $key => $json_row) {
if (is_array($json_row)) {
$data[] =
$this->flatten_array($json_row, '', $key);
}
}
}
}
break;
}
if (empty($data)) {
Notification::error(n2_('Try to change the "Level
separation" or "Remove levels from result" setting.'));
} else {
$data = array_slice($data, $startIndex, $count);
}
return $data;
}
}PK,C�[�;�scc6Generator/Common/Pinterest/GeneratorGroupPinterest.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Pinterest;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use
Nextend\SmartSlider3Pro\Generator\Common\Pinterest\Sources\PinterestImages;
class GeneratorGroupPinterest extends AbstractGeneratorGroup {
protected $name = 'pinterest';
public function getLabel() {
return 'Pinterest';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Pinterest images');
}
protected function loadSources() {
new PinterestImages($this, 'images',
n2_('Images'));
}
}PK,C�[��6Generator/Common/Pinterest/Sources/PinterestImages.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Pinterest\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Misc\HttpClient;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class PinterestImages extends AbstractGenerator {
protected $layout = 'image_extended';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Pinterest images');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Text($filter, 'pinterestusername',
'Username', '');
new Text($filter, 'pinterestboard', 'Board
slug', 'All');
}
function escape($string) {
$string = str_replace(' ', '-', $string);
$string = preg_replace('/(?=\P{Nd})(?!\+)(?!\-)\P{L}/u',
'', $string);
return $string;
}
protected function _getData($count, $startIndex) {
$username = $this->data->get('pinterestusername',
'');
$board = $this->data->get('pinterestboard',
'All');
$data = array();
if ($board == "All" || $board == "all" ||
$board == "") {
$boardSpecified = false;
$jsonUrl =
"https://api.pinterest.com/v3/pidgets/users/" . $username .
"/pins/";
} else {
$boardSpecified = true;
$board = urlencode($this->escape($board));
$jsonUrl =
"https://api.pinterest.com/v3/pidgets/boards/" . $username .
"/" . $board . "/pins/";
}
$json = HttpClient::get($jsonUrl);
if (!$json) {
return null;
}
$pins = json_decode($json);
$imageKey = '237x';
if (is_object($pins) && isset($pins->data->pins)) {
for ($i = 0; $i < count($pins->data->pins) &&
$i < $count; $i++) {
$pin = $pins->data->pins[$i];
$data[$i]['image'] =
str_replace("/237x/", "/1200x/",
$pin->images->$imageKey->url);
$data[$i]['thumbnail'] =
$pin->images->$imageKey->url;
$data[$i]['description'] = $pin->description;
$data[$i]['title'] =
$data[$i]['description'];
$data[$i]['url'] =
"https://www.pinterest.com/pin/" . $pin->id;
$data[$i]['url_label'] = n2_("View");
$data[$i]['id'] =
$pin->id;
$data[$i]['link'] =
$pin->link;
$data[$i]['image_736'] =
str_replace("/237x/", "/736x/",
$pin->images->$imageKey->url);
$data[$i]['pinner_about'] =
$pin->pinner->about;
$data[$i]['pinner_location'] =
$pin->pinner->location;
$data[$i]['pinner_full_name'] =
$pin->pinner->full_name;
$data[$i]['pinner_follower_count'] =
$pin->pinner->follower_count;
$data[$i]['pinner_image_small_url'] =
$pin->pinner->image_small_url;
$data[$i]['pinner_image_140_url'] =
str_replace("_30.", "_140.",
$data[$i]['pinner_image_small_url']);
$data[$i]['pinner_image_280_url'] =
str_replace("_30.", "_280.",
$data[$i]['pinner_image_small_url']);
$data[$i]['pinner_image_big_url'] =
str_replace("_30.", ".",
$data[$i]['pinner_image_small_url']);
$data[$i]['pinner_pin_count'] =
$pin->pinner->pin_count;
$data[$i]['pinner_profile_url'] =
$pin->pinner->profile_url;
$data[$i]['repin_count'] =
$pin->repin_count;
$data[$i]['dominant_color'] =
$pin->dominant_color;
if (!empty($pin->like_count)) {
$data[$i]['like_count'] =
$pin->like_count;
}
if (!$boardSpecified) {
$data[$i]['board_description'] =
$pin->board->description;
$data[$i]['board_url'] =
"http://www.pinterest.com" . $pin->board->url;
$data[$i]['board_image_thumbnail_url'] =
$pin->board->image_thumbnail_url;
$data[$i]['board_pin_count'] =
$pin->board->pin_count;
$data[$i]['board_name'] =
$pin->board->name;
} else {
$data[$i]['board_description'] =
$pins->data->board->description;
$data[$i]['board_url'] =
"http://www.pinterest.com" . $pins->data->board->url;
$data[$i]['board_image_thumbnail_url'] =
$pins->data->board->image_thumbnail_url;
$data[$i]['board_pin_count'] =
$pins->data->board->pin_count;
$data[$i]['board_name'] =
$pins->data->board->name;
}
$data[$i]['user_about'] =
$pins->data->user->about;
$data[$i]['user_location'] =
$pins->data->user->location;
$data[$i]['user_full_name'] =
$pins->data->user->full_name;
$data[$i]['user_follower_count'] =
$pins->data->user->follower_count;
$data[$i]['user_image_small_url'] =
$pins->data->user->image_small_url;
$data[$i]['user_image_140_url'] =
str_replace("_30.", "_140.",
$data[$i]['user_image_small_url']);
$data[$i]['user_image_280_url'] =
str_replace("_30.", "_280.",
$data[$i]['user_image_small_url']);
$data[$i]['user_image_big_url'] =
str_replace("_30.", ".",
$data[$i]['user_image_small_url']);
$data[$i]['user_pin_count'] =
$pins->data->user->pin_count;
$data[$i]['user_profile_url'] =
$pins->data->user->profile_url;
$data[$i]['pin_it'] =
"http://pinterest.com/pin/create/button/?url=" .
urlencode($data[$i]['url']) . "&media=" .
urlencode($data[$i]['image']) . "&description=" .
urlencode($data[$i]['description']);
}
}
return $data;
}
}
PK,C�[P���""*Generator/Common/Rss/GeneratorGroupRss.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Rss;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3Pro\Generator\Common\Rss\Sources\RSSFeed;
class GeneratorGroupRss extends AbstractGeneratorGroup {
protected $name = 'rss';
public function getLabel() {
return 'RSS';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'RSS');
}
protected function loadSources() {
new RSSFeed($this, 'feed', 'RSS Feed');
}
}PK,C�[������(Generator/Common/Rss/Sources/RSSFeed.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Rss\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Misc\HttpClient;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use SimpleXmlElement;
class RSSFeed extends AbstractGenerator {
protected $layout = 'text';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'RSS');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$url = $filterGroup->createRow('url-row');
new Text($url, 'rssurl', 'RSS url',
'', array(
'style' => 'width:600px;'
));
$date = $filterGroup->createRow('date');
new Text($date, 'dateformat', n2_('Date
format'), 'm-d-Y');
new Text($date, 'offset', n2_('Offset'),
'', array(
'tipLabel' => n2_('Offset'),
'tipDescription' => n2_('Timezone offset in
hours. For example: +2 or -7.')
));
new Textarea($date, 'sourcetranslatedate',
n2_('Translate date and time'),
'January->January||February->February||March->March',
array(
'width' => 300,
'height' => 100
));
}
protected function _getData($count, $startIndex) {
$url = $this->data->get('rssurl',
'');
$date_format = $this->data->get('dateformat',
'Y-m-d');
$sourceTranslate =
$this->data->get('sourcetranslatedate', '');
$translate =
$this->generateTranslationArray($sourceTranslate);
$content = HttpClient::get($url, array(
'referer' => '',
'error' => false
));
if (!$content) {
Notification::error('The file on the given url is either
empty or it cannot be accessed.');
return null;
}
try {
@$xml = new SimpleXmlElement($content);
$namespaces = $xml->getNamespaces(true);
} catch (\Exception $e) {
Notification::error(n2_('The data in the given url is not
valid XML.'));
return null;
}
$data = array();
$i = 0;
$atom = false;
if (isset($xml->channel->item)) {
$entries = $xml->channel->item;
} else if (isset($xml->entry)) {
$entries = $xml->entry;
$atom = true;
}
foreach ($entries as $entry) {
foreach ($entry as $key => $value) {
$val = (string)$value;
foreach ($value as $inner_key => $inner_val) {
$data[$i][$key . '_' . $inner_key] =
$inner_val;
}
if (!empty($val)) {
if ($this->checkIsAValidDate($val)) {
$offset =
$this->data->get('offset', '');
if (!empty($offset)) {
$offset = intval($offset) * 3600;
} else {
$offset = 0;
}
$val = $this->translate(date($date_format,
strtotime($val) + $offset), $translate);
}
$data[$i][$key] = $val;
}
$attributes = $entry->$key->attributes();
if (!empty($attributes)) {
foreach ($attributes as $attribute =>
$attribute_val) {
$attribute_val_str = @(string)$attribute_val;
if (isset($attribute_val_str)) {
$data[$i][$key . '_' . $attribute] =
$attribute_val_str;
}
}
}
if (is_array($namespaces)) {
foreach ($namespaces as $namespace =>
$namespacevalue) {
$data[$i][$namespace] = $namespacevalue;
foreach ($entry->children($namespacevalue) as $k
=> $v) {
$value = @(string)$v;
if (!empty($value)) {
$data[$i][$namespace . '_' . $k]
= trim($value);
}
}
}
}
if (isset($namespaces['media'])) {
foreach
($entry->children($namespaces['media']) as $k => $v) {
$url = trim((string)$v->attributes()->url);
if (!empty($url)) {
$data[$i]['media'] =
trim((string)$v->attributes()->url);
break;
}
}
}
}
$group =
$entry->children('http://search.yahoo.com/mrss/')->group;
foreach ($group as $group_name => $group_data) {
foreach ($group_data as $group_key => $group_val) {
$group_val_str = @(string)$attribute_val;
if (isset($group_val_str)) {
$data[$i][$group_name . '_' . $group_key]
= $group_val_str;
}
$attributes =
$group_data->$group_key->attributes();
if (!empty($attributes)) {
foreach ($attributes as $attribute =>
$attribute_val) {
$attribute_val_str = @(string)$attribute_val;
if (isset($attribute_val_str)) {
$data[$i][$group_name . '_' .
$group_key . '_' . $attribute] = $attribute_val_str;
}
}
}
}
}
if ($atom) {
$content = @(string)$entry->content;
} else {
$content =
@(string)$entry->children('http://purl.org/rss/1.0/modules/content/')->encoded;
}
if (!empty($content)) {
$data[$i]['content'] = $content;
}
$i++;
if ($i == $count + $startIndex) break;
}
$data = array_slice($data, $startIndex, $count);
return $data;
}
protected function checkIsAValidDate($dateString) {
return (bool)strtotime($dateString);
}
private function translate($from, $translate) {
if (!empty($translate) && !empty($from)) {
foreach ($translate as $key => $value) {
$from = str_replace($key, $value, $from);
}
}
return $from;
}
private function generateTranslationArray($sourceTranslate) {
$translate = array();
$translateValue = explode('||', $sourceTranslate);
if ($sourceTranslate !=
'January->January||February->February||March->March'
&& !empty($translateValue)) {
foreach ($translateValue as $tv) {
$translateArray = explode('->', $tv);
if (!empty($translateArray) &&
count($translateArray) == 2) {
$translate[$translateArray[0]] = $translateArray[1];
}
}
}
return $translate;
}
}
PK,C�[��?���,Generator/Common/Text/GeneratorGroupText.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Text;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3Pro\Generator\Common\Text\Sources\TextInput;
use Nextend\SmartSlider3Pro\Generator\Common\Text\Sources\TextText;
class GeneratorGroupText extends AbstractGeneratorGroup {
protected $name = 'text';
public function getLabel() {
return 'CSV';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'CSV');
}
protected function loadSources() {
new TextText($this, 'text', n2_('CSV from
url'));
new TextInput($this, 'input', n2_('CSV from
input'));
}
}
PK,C�[w��FF+Generator/Common/Text/Sources/TextInput.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Text\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class TextInput extends AbstractGenerator {
protected $layout = 'text_generator';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('CSV from input'));
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Textarea($filter, 'source', 'CSV',
'', array(
'width' => 300,
'height' => 200,
'resize' => 'both'
));
new Text($filter, 'delimiter', 'Column
delimiter', ',', array(
'style' => 'width:50px;'
));
}
protected function _getData($count, $startIndex) {
$source = $this->data->get('source',
'');
$delimiter = $this->data->get('delimiter',
',');
if (empty($delimiter)) {
$delimiter = ",";
}
$data = array();
if (!empty($source)) {
$i = 0;
$k = 0;
foreach (preg_split("/((\r?\n)|(\r\n?))/", $source)
as $line) {
if ($startIndex <= $i && ($count + $startIndex)
> $i) {
$line = rtrim($line, "\r\n");
$parts = explode($delimiter, $line);
$j = 1;
foreach ($parts AS $part) {
$data[$k]['variable' . $j] = $part;
$j++;
}
$k++;
}
$i++;
}
}
return $data;
}
}PK,C�[C�*Generator/Common/Text/Sources/TextText.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Text\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Misc\HttpClient;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
class TextText extends AbstractGenerator {
protected $layout = 'text_generator';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('CSV from url'));
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$source = $filterGroup->createRow('source');
new Text($source, 'sourcefile', 'CSV url',
'', array(
'style' => 'width:600px;'
));
$delimiter = $filterGroup->createRow('delimiter-row');
new Text($delimiter, 'delimiter', 'Column
delimiter', ',', array(
'style' => 'width:50px;'
));
}
protected function _getData($count, $startIndex) {
$delimiter = $this->data->get('delimiter',
',');
$source = $this->data->get('sourcefile',
'');
$content = HttpClient::get($source, array(
'error' => false
));
if (!$content) {
Notification::error('The file on the given url is either
empty or it cannot be accessed.');
return null;
}
$lines = preg_split('/$\R?^/m', $content);
$data = array();
if (!empty($lines)) {
$k = 0;
for ($i = 0; $i < count($lines) && ($count +
$startIndex) > $i; $i++) {
if ($startIndex <= $i) {
$parts = explode($delimiter, $lines[$i]);
$j = 1;
foreach ($parts AS $part) {
$data[$k]['variable' . $j] = $part;
$j++;
}
$k++;
}
}
}
return $data;
}
}PK,C�[�m�
@�@�)Generator/Common/Twitter/api/tmhOAuth.phpnu�[���<?php
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Misc\HttpClient;
/**
* tmhOAuth
*
* An OAuth library written in PHP.
* The library supports file uploading using multipart/form as well as
general
* REST requests. OAuth authentication is sent using an Authorization
Header.
*
* @author themattharris
* @version 0.8.4
*
* 06 Aug 2014
*/
class NTmhOAuth {
const VERSION = '0.8.4';
var $response = array();
/**
* Creates a new tmhOAuth object
*
* @param string $config , the configuration to use for this request
*
* @return void
*/
public function __construct($config = array()) {
$this->buffer = null;
$this->reconfigure($config);
$this->reset_request_settings();
$this->set_user_agent();
}
public function reconfigure($config = array()) {
$dir = dirname(__FILE__);
// default configuration options
$this->config = array_merge(array(
// leave 'user_agent' blank for default, otherwise
set this to
// something that clearly identifies your app
'user_agent' => '',
'host' => 'api.twitter.com',
'method' => 'GET',
'consumer_key' => '',
'consumer_secret' => '',
'token' => '',
'secret' => '',
// OAuth2 bearer token. This should already be URL encoded
'bearer' => '',
// oauth signing variables that are not dynamic
'oauth_version' => '1.0',
'oauth_signature_method' => 'HMAC-SHA1',
// you probably don't want to change any of these curl
values
'curl_http_version' => CURL_HTTP_VERSION_1_1,
'curl_connecttimeout' => 30,
'curl_timeout' => 10,
// for security this should always be set to 2.
'curl_ssl_verifyhost' => 2,
// for security this should always be set to true.
'curl_ssl_verifypeer' => true,
// for security this should always be set to true.
'use_ssl' => true,
// in some cases (very very odd ones) the SSL version must be
set manually.
// unless you know why your are changing this, you should leave
it as false
// to allow PHP to determine the value for this setting itself.
'curl_sslversion' => false,
'curl_followlocation' => false,
// whether to follow redirects or not
// support for proxy servers
'curl_proxy' => false,
// really you don't want to use this if you are using
streaming
'curl_proxyuserpwd' => false,
// format username:password for proxy, if required
'curl_encoding' => '',
// leave blank for all supported formats, else use gzip,
deflate, identity etc
// streaming API configuration
'is_streaming' => false,
'streaming_eol' => "\r\n",
'streaming_metrics_interval' => 10,
// header or querystring. You should always use header!
// this is just to help me debug other developers
implementations
'as_header' => true,
'force_nonce' => false,
// used for checking signatures. leave as false for auto
'force_timestamp' => false,
// used for checking signatures. leave as false for auto
), $config);
}
private function reset_request_settings($options = array()) {
$this->request_settings = array(
'params' => array(),
'headers' => array(),
'with_user' => true,
'multipart' => false,
);
if (!empty($options)) $this->request_settings =
array_merge($this->request_settings, $options);
}
/**
* Sets the useragent for PHP to use
* If '$this->config['user_agent']' already has
a value it is used instead of one
* being generated.
*
* @return void value is stored to the config array class variable
*/
private function set_user_agent() {
if (!empty($this->config['user_agent'])) return;
$ssl =
($this->config['curl_ssl_verifyhost'] &&
$this->config['curl_ssl_verifypeer'] &&
$this->config['use_ssl']) ? '+' : '-';
$ua = 'tmhOAuth ' . self::VERSION
. $ssl . 'SSL - //github.com/themattharris/tmhOAuth';
$this->config['user_agent'] = $ua;
}
/**
* Generates a random OAuth nonce.
* If 'force_nonce' is false a nonce will be generated,
otherwise the value of
'$this->config['force_nonce']' will
* be used.
*
* @param string $length how many characters the nonce should be
before MD5 hashing. default 12
* @param string $include_time whether to include time at the beginning
of the nonce. default true
*
* @return $nonce as a string
*/
private function nonce($length = 12, $include_time = true) {
if ($this->config['force_nonce'] === false) {
$prefix = $include_time ? microtime() : '';
return md5(substr($prefix . uniqid(), 0, $length));
} else {
return $this->config['force_nonce'];
}
}
/**
* Generates a timestamp.
* If 'force_timestamp' is false a timestamp will be
generated, otherwise the value of
* '$this->config['force_timestamp']' will be
used.
*
* @return $time as a string
*/
private function timestamp() {
if ($this->config['force_timestamp'] === false) {
$time = time();
} else {
$time = $this->config['force_timestamp'];
}
return (string)$time;
}
/**
* Encodes the string or array passed in a way compatible with OAuth.
* If an array is passed each array value will will be encoded.
*
* @param mixed $data the scalar or array to encode
*
* @return $data encoded in a way compatible with OAuth
*/
private function safe_encode($data) {
if (is_array($data)) {
return array_map(array(
$this,
'safe_encode'
), $data);
} else if (is_scalar($data)) {
return str_ireplace(array(
'+',
'%7E'
), array(
' ',
'~'
), rawurlencode($data));
} else {
return '';
}
}
/**
* Decodes the string or array from it's URL encoded form
* If an array is passed each array value will will be decoded.
*
* @param mixed $data the scalar or array to decode
*
* @return string $data decoded from the URL encoded form
*/
private function safe_decode($data) {
if (is_array($data)) {
return array_map(array(
$this,
'safe_decode'
), $data);
} else if (is_scalar($data)) {
return rawurldecode($data);
} else {
return '';
}
}
/**
* Prepares OAuth1 signing parameters.
*
* @return void all required OAuth parameters, safely encoded, are
stored to the class variable
*
'$this->request_settings['oauth1_params']'
*/
private function prepare_oauth1_params() {
$defaults = array(
'oauth_nonce' => $this->nonce(),
'oauth_timestamp' => $this->timestamp(),
'oauth_version' =>
$this->config['oauth_version'],
'oauth_consumer_key' =>
$this->config['consumer_key'],
'oauth_signature_method' =>
$this->config['oauth_signature_method'],
);
// include the user token if it exists
if ($oauth_token = $this->token())
$defaults['oauth_token'] = $oauth_token;
$this->request_settings['oauth1_params'] = array();
// safely encode
foreach ($defaults as $k => $v) {
$this->request_settings['oauth1_params'][$this->safe_encode($k)]
= $this->safe_encode($v);
}
}
private function token() {
if ($this->request_settings['with_user']) {
if (isset($this->config['token']) &&
!empty($this->config['token'])) return
$this->config['token']; elseif
(isset($this->config['user_token'])) return
$this->config['user_token'];
}
return '';
}
private function secret() {
if ($this->request_settings['with_user']) {
if (isset($this->config['secret']) &&
!empty($this->config['secret'])) return
$this->config['secret']; elseif
(isset($this->config['user_secret'])) return
$this->config['user_secret'];
}
return '';
}
/**
* Extracts and decodes OAuth parameters from the passed string
*
* @param string $body the response body from an OAuth flow method
*
* @return array the response body safely decoded to an array of key
=> values
*/
public function extract_params($body) {
$kvs = explode('&', $body);
$decoded = array();
foreach ($kvs as $kv) {
$kv = explode('=', $kv, 2);
$kv[0] = $this->safe_decode($kv[0]);
$kv[1] = $this->safe_decode($kv[1]);
$decoded[$kv[0]] = $kv[1];
}
return $decoded;
}
/**
* Prepares the HTTP method for use in the base string by converting it
to
* uppercase.
*
* @return void value is stored to the class variable
'$this->request_settings['method']'
*/
private function prepare_method() {
$this->request_settings['method'] =
strtoupper($this->request_settings['method']);
}
/**
* Prepares the URL for use in the base string by ripping it apart and
* reconstructing it.
*
* Ref: 3.4.1.2
*
* @return void value is stored to the class array variable
'$this->request_settings['url']'
*/
private function prepare_url() {
$parts = parse_url($this->request_settings['url']);
$port = isset($parts['port']) ?
$parts['port'] : false;
$scheme = $parts['scheme'];
$host = $parts['host'];
$path = isset($parts['path']) ?
$parts['path'] : false;
$port or $port = ($scheme == 'https') ? '443' :
'80';
if (($scheme == 'https' && $port !=
'443') || ($scheme == 'http' && $port !=
'80')) {
$host = "$host:$port";
}
// the scheme and host MUST be lowercase
$this->request_settings['url'] =
strtolower("$scheme://$host");
// but not the path
$this->request_settings['url'] .= $path;
}
/**
* If the request uses multipart, and the parameter isn't a file
path, prepend a space
* otherwise return the original value. we chose a space here as
twitter whitespace trims from
* the beginning of the tweet. we don't use \0 here because
it's the character for string
* termination.
*
* @param the parameter value
*
* @return string the original or modified string, depending on the
request and the input parameter
*/
private function multipart_escape($value) {
if (!$this->request_settings['multipart'] ||
strpos($value, '@') !== 0) return $value;
// see if the parameter is a file.
// we split on the semi-colon as it's the delimiter used on
media uploads
// for fields with semi-colons this will return the original string
list($file) = explode(';', substr($value, 1), 2);
if (file_exists($file)) return $value;
return " $value";
}
/**
* Prepares all parameters for the base string and request.
* Multipart parameters are ignored as they are not defined in the
specification,
* all other types of parameter are encoded for compatibility with
OAuth.
*
* @param array $params the parameters for the request
*
* @return void prepared values are stored in the class array variable
'$this->request_settings'
*/
private function prepare_params() {
$doing_oauth1 = false;
$this->request_settings['prepared_params'] = array();
$prepared =
&$this->request_settings['prepared_params'];
$prepared_pairs = array();
$prepared_pairs_with_oauth = array();
if (isset($this->request_settings['oauth1_params'])) {
$oauth1 =
&$this->request_settings['oauth1_params'];
$doing_oauth1 = true;
$params = array_merge($oauth1,
$this->request_settings['params']);
// Remove oauth_signature if present
// Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST
be excluded.")
unset($params['oauth_signature']);
// empty the oauth1 array. we reset these values later in this
method
$oauth1 = array();
} else {
$params = $this->request_settings['params'];
}
// Parameters are sorted by name, using lexicographical byte value
ordering.
// Ref: Spec: 9.1.1 (1)
uksort($params, 'strcmp');
// set this now so we're not doing it on every parameter
$supports_curl_file = class_exists('CurlFile', false);
// encode params unless we're doing multipart
foreach ($params as $k => $v) {
$k = $this->request_settings['multipart'] ? $k :
$this->safe_encode($k);
if (is_array($v)) $v = implode(',', $v);
// we don't need to do the multipart escaping if we
support curlfile
if ($supports_curl_file && ($v instanceof CurlFile)) {
// leave $v alone
} elseif ($this->request_settings['multipart']) {
$v = $this->multipart_escape($v);
} else {
$v = $this->safe_encode($v);
}
// split parameters for the basestring and authorization
header, and recreate the oauth1 array
if ($doing_oauth1) {
// if we're doing multipart, only store the oauth_*
params, ignore the users request params
if ((strpos($k, 'oauth') === 0) ||
!$this->request_settings['multipart'])
$prepared_pairs_with_oauth[] = "{$k}={$v}";
if (strpos($k, 'oauth') === 0) {
$oauth1[$k] = $v;
continue;
}
}
$prepared[$k] = $v;
if (!$this->request_settings['multipart'])
$prepared_pairs[] = "{$k}={$v}";
}
if ($doing_oauth1) {
$this->request_settings['basestring_params'] =
implode('&', $prepared_pairs_with_oauth);
}
// setup params for GET/POST/PUT method handling
if (!empty($prepared)) {
$content = implode('&', $prepared_pairs);
switch ($this->request_settings['method']) {
case 'PUT':
// fall through to POST as PUT should be treated the
same
case 'POST':
$this->request_settings['postfields'] =
$this->request_settings['multipart'] ? $prepared : $content;
break;
default:
$this->request_settings['querystring'] =
$content;
break;
}
}
}
/**
* Prepares the OAuth signing key
*
* @return void prepared signing key is stored in the class variable
'signing_key'
*/
private function prepare_signing_key() {
$left =
$this->safe_encode($this->config['consumer_secret']);
$right =
$this->safe_encode($this->secret());
$this->request_settings['signing_key'] = $left .
'&' . $right;
}
/**
* Prepare the base string.
* Ref: Spec: 9.1.3 ("Concatenate Request Elements")
*
* @return void prepared base string is stored in the class variable
'base_string'
*/
private function prepare_base_string() {
$url = $this->request_settings['url'];
# if the host header is set we need to rewrite the basestring to
use
# that, instead of the request host. otherwise the signature
won't match
# on the server side
if
(!empty($this->request_settings['headers']['Host']))
{
$url = str_ireplace($this->config['host'],
$this->request_settings['headers']['Host'], $url);
}
$base = array(
$this->request_settings['method'],
$url,
$this->request_settings['basestring_params']
);
$this->request_settings['basestring'] =
implode('&', $this->safe_encode($base));
}
/**
* Signs the OAuth 1 request
*
* @return void oauth_signature is added to the parameters in the class
array variable '$this->request_settings'
*/
private function prepare_oauth_signature() {
$this->request_settings['oauth1_params']['oauth_signature']
= $this->safe_encode(Base64::encode(hash_hmac('sha1',
$this->request_settings['basestring'],
$this->request_settings['signing_key'], true)));
}
/**
* Prepares the Authorization header
*
* @return void prepared authorization header is stored in the class
variable headers['Authorization']
*/
private function prepare_auth_header() {
if (!$this->config['as_header']) return;
// oauth1
if (isset($this->request_settings['oauth1_params'])) {
// sort again as oauth_signature was added post param
preparation
uksort($this->request_settings['oauth1_params'],
'strcmp');
$encoded_quoted_pairs = array();
foreach ($this->request_settings['oauth1_params']
as $k => $v) {
$encoded_quoted_pairs[] =
"{$k}=\"{$v}\"";
}
$header = 'OAuth ' . implode(', ',
$encoded_quoted_pairs);
} elseif (!empty($this->config['bearer'])) {
$header = 'Bearer ' .
$this->config['bearer'];
}
if (isset($header))
$this->request_settings['headers']['Authorization']
= $header;
}
/**
* Create the bearer token for OAuth2 requests from the consumer_key
and consumer_secret.
*
* @return string the bearer token
*/
public function bearer_token_credentials() {
$credentials = implode(':', array(
$this->safe_encode($this->config['consumer_key']),
$this->safe_encode($this->config['consumer_secret'])
));
return Base64::encode($credentials);
}
/**
* Make an HTTP request using this library. This method doesn't
return anything.
* Instead the response should be inspected directly.
*
* @param string $method the HTTP method being used. e.g. POST, GET,
HEAD etc
* @param string $url the request URL without query string
parameters
* @param array $params the request parameters as an array of
key=value pairs. Default empty array
* @param string $useauth whether to use authentication when making
the request. Default true
* @param string $multipart whether this request contains multipart
data. Default false
* @param array $headers any custom headers to send with the
request. Default empty array
*
* @return int the http response code for the request. 0 is returned if
a connection could not be made
*/
public function request($method, $url, $params = array(), $useauth =
true, $multipart = false, $headers = array()) {
$options = array(
'method' => $method,
'url' => $url,
'params' => $params,
'with_user' => true,
'multipart' => $multipart,
'headers' => $headers
);
$options = array_merge($this->default_options(), $options);
if ($useauth) {
return $this->user_request($options);
} else {
return $this->unauthenticated_request($options);
}
}
public function apponly_request($options = array()) {
$options = array_merge($this->default_options(), $options,
array(
'with_user' => false,
));
$this->reset_request_settings($options);
if ($options['without_bearer']) {
return $this->oauth1_request();
} else {
$this->prepare_method();
$this->prepare_url();
$this->prepare_params();
$this->prepare_auth_header();
return $this->curlit();
}
}
public function user_request($options = array()) {
$options = array_merge($this->default_options(), $options,
array(
'with_user' => true,
));
$this->reset_request_settings($options);
return $this->oauth1_request();
}
public function unauthenticated_request($options = array()) {
$options = array_merge($this->default_options(), $options,
array(
'with_user' => false,
));
$this->reset_request_settings($options);
$this->prepare_method();
$this->prepare_url();
$this->prepare_params();
return $this->curlit();
}
/**
* Signs the request and adds the OAuth signature. This runs all the
request
* parameter preparation methods.
*
* @param string $method the HTTP method being used. e.g. POST,
GET, HEAD etc
* @param string $url the request URL without query string
parameters
* @param array $params the request parameters as an array of
key=value pairs
* @param boolean $with_user whether to include the user credentials
when making the request.
*
* @return void
*/
private function oauth1_request() {
$this->prepare_oauth1_params();
$this->prepare_method();
$this->prepare_url();
$this->prepare_params();
$this->prepare_base_string();
$this->prepare_signing_key();
$this->prepare_oauth_signature();
$this->prepare_auth_header();
return $this->curlit();
}
private function default_options() {
return array(
'method' => 'GET',
'params' => array(),
'with_user' => true,
'multipart' => false,
'headers' => array(),
'without_bearer' => false,
);
}
/**
* Make a long poll HTTP request using this library. This method is
* different to the other request methods as it isn't supposed to
disconnect
*
* Using this method expects a callback which will receive the
streaming
* responses.
*
* @param string $method the HTTP method being used. e.g. POST, GET,
HEAD etc
* @param string $url the request URL without query string
parameters
* @param array $params the request parameters as an array of
key=value pairs
* @param string $callback the callback function to stream the buffer
to.
*
* @return void
*/
public function streaming_request($method, $url, $params = array(),
$callback = '') {
if (!empty($callback)) {
if (!is_callable($callback)) {
return false;
}
$this->config['streaming_callback'] = $callback;
}
$this->metrics['start'] = time();
$this->metrics['interval_start'] =
$this->metrics['start'];
$this->metrics['messages'] = 0;
$this->metrics['last_messages'] = 0;
$this->metrics['bytes'] = 0;
$this->metrics['last_bytes'] = 0;
$this->config['is_streaming'] = true;
$this->request($method, $url, $params);
}
/**
* Handles the updating of the current Streaming API metrics.
*
* @return array the metrics for the streaming api connection
*/
private function update_metrics() {
$now = time();
if (($this->metrics['interval_start'] +
$this->config['streaming_metrics_interval']) > $now) return
null;
$this->metrics['mps'] =
round(($this->metrics['messages'] -
$this->metrics['last_messages']) /
$this->config['streaming_metrics_interval'], 2);
$this->metrics['bps'] =
round(($this->metrics['bytes'] -
$this->metrics['last_bytes']) /
$this->config['streaming_metrics_interval'], 2);
$this->metrics['last_bytes'] =
$this->metrics['bytes'];
$this->metrics['last_messages'] =
$this->metrics['messages'];
$this->metrics['interval_start'] = $now;
return $this->metrics;
}
/**
* Utility function to create the request URL in the requested format.
* If a fully-qualified URI is provided, it will be returned.
* Any multi-slashes (except for the protocol) will be replaced with a
single slash.
*
*
* @param string $request the API method without extension
* @param string $extension the format of the response. Default json.
Set to an empty string to exclude the format
*
* @return string the concatenation of the host, API version, API
method and format, or $request if it begins with
* http
*/
public function url($request, $extension = 'json') {
// remove multi-slashes
$request = preg_replace('$([^:])//+$', '$1/',
$request);
if (stripos($request, 'http') === 0 || stripos($request,
'//') === 0) {
return $request;
}
$extension = strlen($extension) > 0 ? ".$extension" :
'';
$proto = $this->config['use_ssl'] ?
'https:/' : 'http:/';
// trim trailing slash
$request = ltrim($request, '/');
$pos = strlen($request) - strlen($extension);
if (substr($request, $pos) === $extension) $request =
substr_replace($request, '', $pos);
return implode('/', array(
$proto,
$this->config['host'],
$request . $extension
));
}
/**
* Public access to the private safe decode/encode methods
*
* @param string $text the text to transform
* @param string $mode the transformation mode. either encode or decode
*
* @return string $text transformed by the given $mode
*/
public function transformText($text, $mode = 'encode') {
return $this->{"safe_$mode"}($text);
}
/**
* Utility function to parse the returned curl headers and store them
in the
* class array variable.
*
* @param object $ch curl handle
* @param string $header the response headers
*
* @return string the length of the header
*/
private function curlHeader($ch, $header) {
$this->response['raw'] .= $header;
list($key, $value) = array_pad(explode(':', $header, 2),
2, null);
$key = trim($key);
$value = trim($value);
if (!isset($this->response['headers'][$key])) {
$this->response['headers'][$key] = $value;
} else {
if (!is_array($this->response['headers'][$key])) {
$this->response['headers'][$key] =
array($this->response['headers'][$key]);
}
$this->response['headers'][$key][] = $value;
}
return strlen($header);
}
/**
* Utility function to parse the returned curl buffer and store them
until
* an EOL is found. The buffer for curl is an undefined size so we need
* to collect the content until an EOL is found.
*
* This function calls the previously defined streaming callback
method.
*
* @param object $ch curl handle
* @param string $data the current curl buffer
*
* @return int the length of the data string processed in this function
*/
private function curlWrite($ch, $data) {
$l = strlen($data);
if (strpos($data, $this->config['streaming_eol']) ===
false) {
$this->buffer .= $data;
return $l;
}
$buffered = explode($this->config['streaming_eol'],
$data);
$content = $this->buffer . $buffered[0];
$this->metrics['messages']++;
$this->metrics['bytes'] += strlen($content);
if (!is_callable($this->config['streaming_callback']))
return 0;
$metrics = $this->update_metrics();
$stop =
call_user_func($this->config['streaming_callback'], $content,
strlen($content), $metrics);
$this->buffer = $buffered[1];
if ($stop) return 0;
return $l;
}
/**
* Makes a curl request. Takes no parameters as all should have been
prepared
* by the request method
*
* the response data is stored in the class variable
'response'
*
* @return int the http response code for the request. 0 is returned if
a connection could not be made
*/
private function curlit() {
$this->response = array(
'raw' => ''
);
// configure curl
$c = curl_init();
if ($this->request_settings['method'] ==
'GET' &&
isset($this->request_settings['querystring'])) {
$this->request_settings['url'] =
$this->request_settings['url'] . '?' .
$this->request_settings['querystring'];
} elseif ($this->request_settings['method'] ==
'POST' || $this->request_settings['method'] ==
'PUT') {
$postfields = array();
if (isset($this->request_settings['postfields']))
$postfields = $this->request_settings['postfields'];
curl_setopt($c, CURLOPT_POSTFIELDS, $postfields);
}
curl_setopt($c, CURLOPT_CUSTOMREQUEST,
$this->request_settings['method']);
curl_setopt_array($c, array(
CURLOPT_HTTP_VERSION =>
$this->config['curl_http_version'],
CURLOPT_USERAGENT =>
$this->config['user_agent'],
CURLOPT_CONNECTTIMEOUT =>
$this->config['curl_connecttimeout'],
CURLOPT_TIMEOUT =>
$this->config['curl_timeout'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER =>
$this->config['curl_ssl_verifypeer'],
CURLOPT_SSL_VERIFYHOST =>
$this->config['curl_ssl_verifyhost'],
CURLOPT_FOLLOWLOCATION =>
$this->config['curl_followlocation'],
CURLOPT_PROXY =>
$this->config['curl_proxy'],
CURLOPT_ENCODING =>
$this->config['curl_encoding'],
CURLOPT_URL =>
$this->request_settings['url'],
// process the headers
CURLOPT_HEADERFUNCTION => array(
$this,
'curlHeader'
),
CURLOPT_HEADER => false,
CURLINFO_HEADER_OUT => true,
));
if ($this->config['curl_proxyuserpwd'] !== false)
curl_setopt($c, CURLOPT_PROXYUSERPWD,
$this->config['curl_proxyuserpwd']);
if ($this->config['curl_sslversion'] !== false)
curl_setopt($c, CURLOPT_SSLVERSION,
$this->config['curl_sslversion']);
if ($this->config['is_streaming']) {
// process the body
$this->response['content-length'] = 0;
curl_setopt($c, CURLOPT_TIMEOUT, 0);
curl_setopt($c, CURLOPT_WRITEFUNCTION, array(
$this,
'curlWrite'
));
}
if (!empty($this->request_settings['headers'])) {
foreach ($this->request_settings['headers'] as $k
=> $v) {
$headers[] = trim($k . ': ' . $v);
}
curl_setopt($c, CURLOPT_HTTPHEADER, $headers);
}
if (isset($this->config['block']) && (true ===
$this->config['block'])) return 0;
// do it!
$response = curl_exec($c);
if (curl_errno($c) == 60) {
curl_setopt($c, CURLOPT_CAINFO, HttpClient::getCacertPath());
$response = curl_exec($c);
}
$code = curl_getinfo($c, CURLINFO_HTTP_CODE);
$info = curl_getinfo($c);
$error = curl_error($c);
$errno = curl_errno($c);
curl_close($c);
// store the response
$this->response['code'] = $code;
$this->response['response'] = $response;
$this->response['info'] = $info;
$this->response['error'] = $error;
$this->response['errno'] = $errno;
if (!isset($this->response['raw'])) {
$this->response['raw'] = '';
}
$this->response['raw'] .= $response;
return $code;
}
}
PK,C�[��ߔ1Generator/Common/Twitter/ConfigurationTwitter.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Twitter;
use Exception;
use JURI;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroupConfiguration;
use Nextend\SmartSlider3Pro\Generator\Common\Twitter\Elements\TwitterToken;
use NTmhOAuth;
use SimpleXMLElement;
class ConfigurationTwitter extends AbstractGeneratorGroupConfiguration {
private $data;
/**
* ConfigurationTwitter constructor.
*
* @param GeneratorGroupTwitter $generatorGroup
*/
public function __construct($generatorGroup) {
parent::__construct($generatorGroup);
$this->data = new Data(array(
'consumer_key' => '',
'consumer_secret' => '',
'user_token' => '',
'user_secret' => ''
));
$this->data->loadJSON(StorageSectionManager::getStorage('smartslider')
->get('twitter'));
}
public function wellConfigured() {
if (!$this->data->get('consumer_key') ||
!$this->data->get('consumer_secret') ||
!$this->data->get('user_token') ||
!$this->data->get('user_secret')) {
return false;
}
$client = $this->getApi();
$responseCode = $client->request('GET',
$client->url('1.1/account/verify_credentials'));
if ($responseCode == 200) {
return true;
}
return false;
}
public function getApi($hasUser = true) {
require_once(dirname(__FILE__) . "/api/tmhOAuth.php");
$config = array(
'consumer_key' =>
$this->data->get('consumer_key'),
'consumer_secret' =>
$this->data->get('consumer_secret')
);
if ($hasUser) {
$config['token'] =
$this->data->get('user_token');
$config['secret'] =
$this->data->get('user_secret');
}
$client = new NTmhOAuth($config);
return $client;
}
public function getData() {
return $this->data->toArray();
}
public function addData($data, $store = true) {
$this->data->loadArray($data);
if ($store) {
StorageSectionManager::getStorage('smartslider')
->set('twitter', null,
json_encode($this->data->toArray()));
}
}
public function render($MVCHelper) {
$form = new Form($MVCHelper, 'generator');
$form->loadArray($this->getData());
$table = new ContainerTable($form->getContainer(),
'twitter-generator', 'Twitter api');
$instruction =
$table->createRow('twitter-instruction');
$instructionText = sprintf(n2_('%2$s Check the documentation
%3$s to learn how to configure your %1$s app.'), 'Twitter',
'<a
href="https://smartslider.helpscoutdocs.com/article/1907-twitter-generator"
target="_blank">', '</a>');
new Notice($instruction, 'instruction',
n2_('Instruction'), $instructionText);
$settings = $table->createRow('twitter');
new Text($settings, 'consumer_key', 'Consumer
key', '', array(
'style' => 'width:400px;'
));
new Text($settings, 'consumer_secret', 'Consumer
secret', '', array(
'style' => 'width:400px;'
));
new TwitterToken($settings, 'user_token',
n2_('Token'));
new Hidden($settings, 'user_secret');
new Notice($settings, 'callback', n2_('Callback
url'), $this->getCallbackUrl());
new Token($settings);
echo $form->render();
if ($this->data->get('consumer_key') !=
'' && $this->data->get('consumer_secret')
!= '') {
try {
$client = $this->getApi();
$responseCode = $client->request('GET',
$client->url('1.1/account/verify_credentials'));
if ($responseCode != 200) {
$response =
json_decode($client->response['response'], true);
if (!empty($response['errors'])) {
foreach ($response['errors'] AS $error) {
Notification::error($error['message']);
}
}
}
} catch (Exception $e) {
Notification::error($e->getMessage());
}
}
}
public function startAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
$this->addData(Request::$REQUEST->getVar('generator'),
false);
$_SESSION['data'] = $this->getData();
$client = $this->getApi(false);
$code = $client->request('POST',
$client->url('oauth/request_token', ''), array(
'oauth_callback' =>
$MVCHelper->createUrl(array(
"generator/finishAuth",
array(
'group' => 'twitter'
)
))
));
if ($code == 200) {
$oauth =
$client->extract_params($client->response['response']);
$_SESSION['t_oauth'] = $oauth;
$a = $client->url("oauth/authenticate",
'') . "?oauth_token=" . $oauth['oauth_token']
. "&force_login=1";
return $a;
} else {
if (!empty($client->response['response'])
&& $client->response['response'][0] ==
'<') {
$xml = new
SimpleXMLElement($client->response['response']);
if (isset($xml->error)) {
throw new Exception((string)$xml->error);
}
}
$response =
json_decode($client->response['response'], true);
throw new
Exception($response['errors'][0]['message']);
}
}
public function finishAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
$this->addData($_SESSION['data'], false);
unset($_SESSION['data']);
try {
$this->data->set('user_token',
$_SESSION['t_oauth']['oauth_token']);
$this->data->set('user_secret',
$_SESSION['t_oauth']['oauth_token_secret']);
$client = $this->getApi();
$code = $client->request('POST',
$client->url('oauth/access_token', ''), array(
'oauth_verifier' =>
$_REQUEST['oauth_verifier']
));
if ($code == 200) {
$access_token =
$client->extract_params($client->response['response']);
unset($_SESSION['data']);
unset($_SESSION['t_oauth']);
$this->data->set('user_token',
$access_token['oauth_token']);
$this->data->set('user_secret',
$access_token['oauth_token_secret']);
$this->addData($this->getData());
return true;
} else {
return $client->response['response'];
}
} catch (Exception $e) {
return $e->getMessage();
}
}
private function getCallbackUrl() {
$admin_url = JURI::base() . 'index.php';
return $admin_url;
}
}PK,C�[�֘��2Generator/Common/Twitter/Elements/TwitterToken.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Twitter\Elements;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Request\Request;
class TwitterToken extends Text {
protected function fetchElement() {
$authUrl = $this->getForm()
->createAjaxUrl(array(
"generator/getAuthUrl",
array(
'group' =>
Request::$REQUEST->getVar('group'),
'type' =>
Request::$REQUEST->getVar('type')
)
));
Js::addInline('new _N2.FormElementTwitterToken("' .
$this->fieldID . '", "' . $authUrl .
'");');
return parent::fetchElement();
}
protected function post() {
return '<a class="n2_field_text__choose_text"
href="#">' . n2_('Request token') .
'</a>';
}
}PK,C�[�D��2Generator/Common/Twitter/GeneratorGroupTwitter.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Twitter;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use
Nextend\SmartSlider3Pro\Generator\Common\Twitter\Sources\TwitterTimeline;
class GeneratorGroupTwitter extends AbstractGeneratorGroup {
protected $name = 'twitter';
protected $needConfiguration = true;
public function __construct() {
parent::__construct();
$this->configuration = new ConfigurationTwitter($this);
}
public function getLabel() {
return 'Twitter';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Twitter tweets');
}
protected function loadSources() {
new TwitterTimeline($this, 'timeline', 'Latest
tweets');
}
}PK,C�[�$AA4Generator/Common/Twitter/Sources/TwitterTimeline.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Twitter\Sources;
use Exception;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3Pro\Generator\Common\Twitter\ConfigurationTwitter;
use NTmhOAuth;
class TwitterTimeline extends AbstractGenerator {
protected $layout = 'social_post';
private $resultPerPage = 50;
private $pages;
/** @var NTmhOAuth */
private $client;
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Twitter tweets');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new OnOff($filter, 'retweets', 'Include
retweets', 1);
new OnOff($filter, 'replies', 'Exclude
replies', 0);
new OnOff($filter, 'remove_spec_chars', 'Remove
special characters', 0);
new Text($filter, 'dateformat', 'Date format',
'Y-m-d');
}
protected function resetState() {
$this->pages = array();
/** @var ConfigurationTwitter $configuration */
$configuration = $this->group->getConfiguration();
$this->client = $configuration->getApi();
}
protected function _getData($count, $startIndex) {
$data = array();
try {
$offset = $startIndex;
$limit = $count;
$remove_spec_chars =
$this->data->get('remove_spec_chars', 0);
for ($i = 0, $j = $offset; $j < $offset + $limit; $i++,
$j++) {
$items = $this->getPage(intval($j /
$this->resultPerPage));
if (isset($items[$j % $this->resultPerPage])) {
$item = $items[$j % $this->resultPerPage];
} else {
$item = null;
}
if (empty($item)) {
// There is no more item in the list
break;
}
$record['author_name'] =
$item['user']['screen_name'];
$record['author_url'] =
$item['user']['url'];
$record['author_image'] =
str_replace('_normal.', '.',
$item['user']['profile_image_url_https']);
if (isset($item['retweeted_status'])) {
$fullText =
$item['retweeted_status']['full_text'];
$record['tweet_author_name'] =
$item['retweeted_status']['user']['screen_name'];
$record['tweet_author_image'] =
str_replace('_normal.', '.',
$item['retweeted_status']['user']['profile_image_url_https']);
} else {
$fullText = $item['full_text'];
$record['tweet_author_name'] =
$record['author_name'];
$record['tweet_author_image'] =
$record['author_image'];
}
if ($remove_spec_chars) {
$record['message'] = iconv('UTF-8',
'ISO-8859-1//TRANSLIT//IGNORE',
$this->makeClickableLinks($fullText));
} else {
$record['message'] =
$this->makeClickableLinks($fullText);
}
$item['id'] =
number_format($item['id'], 0, '.', '');
$record['url'] =
'https://twitter.com/' . $record['author_name'] .
'/status/' . $item['id_str'];
$record['url_label'] = n2_('View
tweet');
if
(!empty($item['entities']['media'][0]['media_url']))
{
$record['tweet_image'] =
$item['entities']['media'][0]['media_url'];
} else if
(isset($item['retweeted_status']['entities']['media'][0]['media_url']))
{
$record['tweet_image'] =
$item['retweeted_status']['entities']['media'][0]['media_url'];
}
if
(!empty($item['entities']['media'][0]['media_url_https']))
{
$record['tweet_image_https'] =
$item['entities']['media'][0]['media_url_https'];
} else if
(isset($item['retweeted_status']['entities']['media'][0]['media_url_https']))
{
$record['tweet_image_https'] =
$item['retweeted_status']['entities']['media'][0]['media_url_https'];
}
$record['userid'] =
$item['user']['id'];
$record['user_name'] =
$item['user']['name'];
$record['user_description'] =
$item['user']['description'];
$record['user_location'] =
$item['user']['location'];
$record['created_at'] =
date($this->data->get('dateformat', 'Y-m-d'),
strtotime($item['created_at']));
$data[$i] = &$record;
unset($record);
}
} catch (Exception $e) {
Notification::error($e->getMessage());
}
return $data;
}
private function getPage($page) {
if (!isset($this->pages[$page])) {
$request = array(
'count' => $this->resultPerPage,
'include_rts' =>
$this->data->get('retweets', '1'),
'exclude_replies' =>
$this->data->get('replies', '0'),
'tweet_mode' => 'extended'
);
if ($page != 0) {
$previousPage = $this->getPage($page - 1);
$request['max_id'] =
$previousPage[count($previousPage) - 1]['id'];
}
$responseCode = $this->client->request('GET',
$this->client->url('1.1/statuses/user_timeline'),
$request);
if ($responseCode == 200) {
$this->pages[$page] =
json_decode($this->client->response['response'], true);
}
}
return $this->pages[$page];
}
}PK,C�[��
dd<Generator/Common/Vimeo/api/Exceptions/ExceptionInterface.phpnu�[���<?php
namespace Vimeo\Exceptions;
/**
* ExceptionInterface
*/
interface ExceptionInterface {
}
PK,C�[��/���?Generator/Common/Vimeo/api/Exceptions/VimeoRequestException.phpnu�[���<?php
namespace Vimeo\Exceptions;
use Exception;
/**
* VimeoRequestException class for failure to make request.
*/
class VimeoRequestException extends Exception implements ExceptionInterface
{
}
PK,C�[�r����>Generator/Common/Vimeo/api/Exceptions/VimeoUploadException.phpnu�[���<?php
namespace Vimeo\Exceptions;
use Exception;
/**
* VimeoUploadException class for failure to upload to the server.
*/
class VimeoUploadException extends Exception implements ExceptionInterface
{
}
PK,C�[Pf��KRKR$Generator/Common/Vimeo/api/Vimeo.phpnu�[���<?php
namespace Vimeo;
use Exception;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Misc\HttpClient;
use Vimeo\Exceptions\VimeoRequestException;
use Vimeo\Exceptions\VimeoUploadException;
/**
* Copyright 2013 Vimeo
*
* Licensed under the Apache License, Version 2.0 (the
"License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS"
BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
if (!function_exists('json_decode')) {
throw new Exception('We could not find json_decode. json_decode is
found in php 5.2 and up, but may be missing on some Linux systems due to
licensing conflicts. If you are running ubuntu try "sudo apt-get
install php5-json".');
}
class Vimeo {
const ROOT_ENDPOINT = 'https://api.vimeo.com';
const AUTH_ENDPOINT =
'https://api.vimeo.com/oauth/authorize';
const ACCESS_TOKEN_ENDPOINT = '/oauth/access_token';
const CLIENT_CREDENTIALS_TOKEN_ENDPOINT =
'/oauth/authorize/client';
const REPLACE_ENDPOINT = '/files';
const VERSION_STRING = 'application/vnd.vimeo.*+json;
version=3.2';
const USER_AGENT = 'vimeo.php 1.2.7;
(http://developer.vimeo.com/api/docs)';
protected $_curl_opts = array();
protected $CURL_DEFAULTS = array();
private $_client_id = null;
private $_client_secret = null;
private $_access_token = null;
/**
* Creates the Vimeo library, and tracks the client and token
information.
*
* @param string $client_id Your applications client id. Can be
found on developer.vimeo.com/apps
* @param string $client_secret Your applications client secret. Can be
found on developer.vimeo.com/apps
* @param string $access_token Your applications client id. Can be
found on developer.vimeo.com/apps or generated
* using OAuth 2.
*/
public function __construct($client_id, $client_secret, $access_token =
null) {
$this->_client_id = $client_id;
$this->_client_secret = $client_secret;
$this->_access_token = $access_token;
$this->CURL_DEFAULTS = array(
CURLOPT_HEADER => 1,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_SSL_VERIFYPEER => true,
//Certificate must indicate that the server is the server to
which you meant to connect.
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_CAINFO => HttpClient::getCacertPath()
);
}
/**
* Make an API request to Vimeo.
*
* @param string $url A Vimeo API Endpoint. Should not include the
host
* @param array $params An array of parameters to send to the
endpoint. If the HTTP method is GET, they will be
* added to the url, otherwise they will be
written to the body
* @param string $method The HTTP Method of the request
* @param bool $json_body
* @param array $headers An array of HTTP headers to pass along with
the request.
*
* @return array This array contains three keys, 'status' is
the status code, 'body' is an object representation of
* the json response body, and headers are an associated
array of response headers
*/
public function request($url, $params = array(), $method =
'GET', $json_body = true, array $headers = array()) {
$headers = array_merge(array(
'Accept' => self::VERSION_STRING,
'User-Agent' => self::USER_AGENT,
), $headers);
$method = strtoupper($method);
// add bearer token, or client information
if (!empty($this->_access_token)) {
$headers['Authorization'] = 'Bearer ' .
$this->_access_token;
} else {
// this may be a call to get the tokens, so we add the client
info.
$headers['Authorization'] = 'Basic ' .
$this->_authHeader();
}
// Set the methods, determine the URL that we should actually
request and prep the body.
$curl_opts = array();
switch ($method) {
case 'GET':
if (!empty($params)) {
$query_component = '?' .
http_build_query($params, '', '&');
} else {
$query_component = '';
}
$curl_url = self::ROOT_ENDPOINT . $url . $query_component;
break;
case 'POST':
case 'PATCH':
case 'PUT':
case 'DELETE':
if ($json_body && !empty($params)) {
$headers['Content-Type'] =
'application/json';
$body = json_encode($params);
} else {
$body = http_build_query($params, '',
'&');
}
$curl_url = self::ROOT_ENDPOINT . $url;
$curl_opts = array(
CURLOPT_POST => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_POSTFIELDS => $body
);
break;
}
// Set the headers
foreach ($headers as $key => $value) {
$curl_opts[CURLOPT_HTTPHEADER][] = sprintf('%s: %s',
$key, $value);
}
$response = $this->_request($curl_url, $curl_opts);
$response['body'] =
json_decode($response['body'], true);
return $response;
}
/**
* Request the access token associated with this library.
*
* @return string
*/
public function getToken() {
return $this->_access_token;
}
/**
* Assign a new access token to this library.
*
* @param string $access_token the new access token
*/
public function setToken($access_token) {
$this->_access_token = $access_token;
}
/**
* Sets custom cURL options.
*
* @param array $curl_opts An associative array of cURL options.
*/
public function setCURLOptions($curl_opts = array()) {
$this->_curl_opts = $curl_opts;
}
/**
* Convert the raw headers string into an associated array
*
* @param string $headers
*
* @return array
*/
public static function parse_headers($headers) {
$final_headers = array();
$list = explode("\n", trim($headers));
$http = array_shift($list);
foreach ($list as $header) {
$parts = explode(':',
$header, 2);
$final_headers[trim($parts[0])] = isset($parts[1]) ?
trim($parts[1]) : '';
}
return $final_headers;
}
/**
* Request an access token. This is the final step of the
* OAuth 2 workflow, and should be called from your redirect url.
*
* @param string $code The authorization code that was provided
to your redirect url
* @param string $redirect_uri The redirect_uri that is configured on
your app page, and was used in
* buildAuthorizationEndpoint
*
* @return array This array contains three keys, 'status' is
the status code, 'body' is an object representation of
* the json response body, and headers are an associated
array of response headers
*/
public function accessToken($code, $redirect_uri) {
return $this->request(self::ACCESS_TOKEN_ENDPOINT, array(
'grant_type' => 'authorization_code',
'code' => $code,
'redirect_uri' => $redirect_uri
), "POST", false);
}
/**
* Get client credentials for requests.
*
* @param mixed $scope Scopes to request for this token from the
server.
*
* @return array Response from the server with the tokens, we also set
it into this object.
*/
public function clientCredentials($scope = 'public') {
if (is_array($scope)) {
$scope = implode(' ', $scope);
}
$token_response =
$this->request(self::CLIENT_CREDENTIALS_TOKEN_ENDPOINT, array(
'grant_type' => 'client_credentials',
'scope' => $scope
), "POST", false);
return $token_response;
}
/**
* Build the url that your user.
*
* @param string $redirect_uri The redirect url that you have
configured on your app page
* @param string $scope An array of scopes that your final
access token needs to access
* @param string $state A random variable that will be returned
on your redirect url. You should validate
* that this matches
*
* @return string
*/
public function buildAuthorizationEndpoint($redirect_uri, $scope =
'public', $state = null) {
$query = array(
"response_type" => 'code',
"client_id" => $this->_client_id,
"redirect_uri" => $redirect_uri
);
$query['scope'] = $scope;
if (empty($scope)) {
$query['scope'] = 'public';
} elseif (is_array($scope)) {
$query['scope'] = implode(' ', $scope);
}
if (!empty($state)) {
$query['state'] = $state;
}
return self::AUTH_ENDPOINT . '?' .
http_build_query($query);
}
/**
* Upload a file. This should be used to upload a local file.
* If you want a form for your site to upload direct to Vimeo,
* you should look at the POST /me/videos endpoint.
*
* @param string $file_path Path to the video file to upload.
* @param boolean $upgrade_to_1080 Should we automatically upgrade the
video file to 1080p
*
* @return string Video URI
* @throws VimeoUploadException
*/
public function upload($file_path, $upgrade_to_1080 = false,
$machine_id = null) {
// Validate that our file is real.
if (!is_file($file_path)) {
throw new VimeoUploadException('Unable to locate file to
upload.');
}
// Begin the upload request by getting a ticket
$ticket_args = array(
'type' => 'streaming',
'upgrade_to_1080' => $upgrade_to_1080
);
if ($machine_id !== null) {
$ticket_args['machine_id'] = $machine_id;
}
$ticket = $this->request('/me/videos', $ticket_args,
'POST');
return $this->perform_upload($file_path, $ticket);
}
/**
* Replace the source of a single Vimeo video.
*
* @param string $video_uri Video uri of the video file to
replace.
* @param string $file_path Path to the video file to upload.
* @param boolean $upgrade_to_1080 Should we automatically upgrade the
video file to 1080p
*
* @return string Status
* @throws VimeoUploadException
*/
public function replace($video_uri, $file_path, $upgrade_to_1080 =
false, $machine_id = null) {
// Validate that our file is real.
if (!is_file($file_path)) {
throw new VimeoUploadException('Unable to locate file to
upload.');
}
$uri = $video_uri . self::REPLACE_ENDPOINT;
// Begin the upload request by getting a ticket
$ticket_args = array(
'type' => 'streaming',
'upgrade_to_1080' => $upgrade_to_1080
);
if ($machine_id !== null) {
$ticket_args['machine_id'] = $machine_id;
}
$ticket = $this->request($uri, $ticket_args, 'PUT');
return $this->perform_upload($file_path, $ticket);
}
/**
* Uploads an image to an individual picture response.
*
* @param string $pictures_uri The pictures endpoint for a resource
that allows picture uploads (eg videos and
* users)
* @param string $file_path The path to your image file
* @param boolean $activate Activate image after upload
*
* @return string The URI of the uploaded image.
* @throws VimeoUploadException
*/
public function uploadImage($pictures_uri, $file_path, $activate =
false) {
// Validate that our file is real.
if (!is_file($file_path)) {
throw new VimeoUploadException('Unable to locate file to
upload.');
}
$pictures_response = $this->request($pictures_uri, array(),
'POST');
if ($pictures_response['status'] !== 201) {
throw new VimeoUploadException('Unable to request an
upload url from vimeo');
}
$upload_url =
$pictures_response['body']['link'];
$image_resource = fopen($file_path, 'r');
$curl_opts = array(
CURLOPT_TIMEOUT => 240,
CURLOPT_UPLOAD => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_READDATA => $image_resource
);
$curl = curl_init($upload_url);
// Merge the options
curl_setopt_array($curl, $curl_opts + $this->CURL_DEFAULTS);
$response = curl_exec($curl);
$curl_info = curl_getinfo($curl);
if (!$response) {
$error = curl_error($curl);
throw new VimeoUploadException($error);
}
curl_close($curl);
if ($curl_info['http_code'] !== 200) {
throw new VimeoUploadException($response);
}
// Activate the uploaded image
if ($activate) {
$completion =
$this->request($pictures_response['body']['uri'],
array('active' => true), 'PATCH');
}
return $pictures_response['body']['uri'];
}
/**
* Uploads a text track.
*
* @param string $texttracks_uri The text tracks uri that we are adding
our text track to
* @param string $file_path The path to your text track file
* @param string $track_type The type of your text track
* @param string $language The language of your text track
*
* @return string The URI of the uploaded text track.
* @throws VimeoUploadException
*/
public function uploadTexttrack($texttracks_uri, $file_path,
$track_type, $language) {
// Validate that our file is real.
if (!is_file($file_path)) {
throw new VimeoUploadException('Unable to locate file to
upload.');
}
// To simplify the script we provide the filename as the text track
name, but you can provide any value you want.
$name = array_slice(explode("/", $file_path), -1);
$name = $name[0];
$texttrack_response = $this->request($texttracks_uri, array(
'type' => $track_type,
'language' => $language,
'name' => $name
), 'POST');
if ($texttrack_response['status'] !== 201) {
throw new VimeoUploadException('Unable to request an
upload url from vimeo');
}
$upload_url =
$texttrack_response['body']['link'];
$texttrack_resource = fopen($file_path, 'r');
$curl_opts = array(
CURLOPT_TIMEOUT => 240,
CURLOPT_UPLOAD => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_READDATA => $texttrack_resource
);
$curl = curl_init($upload_url);
// Merge the options
curl_setopt_array($curl, $curl_opts + $this->CURL_DEFAULTS);
$response = curl_exec($curl);
$curl_info = curl_getinfo($curl);
if (!$response) {
$error = curl_error($curl);
throw new VimeoUploadException($error);
}
curl_close($curl);
if ($curl_info['http_code'] !== 200) {
throw new VimeoUploadException($response);
}
return $texttrack_response['body']['uri'];
}
/**
* Internal function to handle requests, both authenticated and by the
upload function.
*
* @param string $url
* @param array $curl_opts
*
* @return array
*/
private function _request($url, $curl_opts = array()) {
// Merge the options (custom options take precedence).
$curl_opts = $this->_curl_opts + $curl_opts +
$this->CURL_DEFAULTS;
// Call the API.
$curl = curl_init($url);
curl_setopt_array($curl, $curl_opts);
$response = curl_exec($curl);
$curl_info = curl_getinfo($curl);
if (isset($curl_info['http_code']) &&
$curl_info['http_code'] === 0) {
$curl_error = curl_error($curl);
$curl_error = !empty($curl_error) ? '[' . $curl_error
. ']' : '';
throw new VimeoRequestException('Unable to complete
request.' . $curl_error);
}
curl_close($curl);
// Retrieve the info
$header_size = $curl_info['header_size'];
$headers = substr($response, 0, $header_size);
$body = substr($response, $header_size);
// Return it raw.
return array(
'body' => $body,
'status' => $curl_info['http_code'],
'headers' => self::parse_headers($headers)
);
}
/**
* Get authorization header for retrieving tokens/credentials.
*
* @return string
*/
private function _authHeader() {
return Base64::encode($this->_client_id . ':' .
$this->_client_secret);
}
/**
* Take an upload ticket and perform the actual upload
*
* @param string $file_path Path to the video file to upload.
* @param array $ticket Upload ticket data.
*
* @return string Video URI
* @throws VimeoUploadException
*/
private function perform_upload($file_path, $ticket) {
if ($ticket['status'] !== 201) {
$ticket_error =
!empty($ticket['body']['error']) ? '[' .
$ticket['body']['error'] . ']' :
'';
throw new VimeoUploadException('Unable to get an upload
ticket.' . $ticket_error);
}
// We are going to always target the secure upload URL.
$url = $ticket['body']['upload_link_secure'];
// We need a handle on the input file since we may have to send
segments multiple times.
$file = fopen($file_path, 'r');
// PUTs a file in a POST....do for the streaming when we get there.
$curl_opts = array(
CURLOPT_PUT => true,
CURLOPT_INFILE => $file,
CURLOPT_INFILESIZE => filesize($file_path),
CURLOPT_UPLOAD => true,
CURLOPT_HTTPHEADER => array(
'Expect: ',
'Content-Range: replaced...'
)
);
// These are the options that set up the validate call.
$curl_opts_check_progress = array(
CURLOPT_PUT => true,
CURLOPT_HTTPHEADER => array(
'Content-Length: 0',
'Content-Range: bytes */*'
)
);
// Perform the upload by streaming as much to the server as
possible and ending when we reach the filesize on the server.
$size = filesize($file_path);
$server_at = 0;
do {
// The last HTTP header we set MUST be the Content-Range, since
we need to remove it and replace it with a proper one.
array_pop($curl_opts[CURLOPT_HTTPHEADER]);
$curl_opts[CURLOPT_HTTPHEADER][] = 'Content-Range: bytes
' . $server_at . '-' . $size . '/' . $size;
fseek($file, $server_at); // Put the FP at the point where
the server is.
try {
$this->_request($url, $curl_opts); //Send what we can.
} catch (VimeoRequestException $exception) {
// ignored, it's likely a timeout, and we should only
consider a failure from the progress check as a legit failure
}
$progress_check = $this->_request($url,
$curl_opts_check_progress); // Check on what the server has.
// Figure out how much is on the server.
list(, $server_at) = explode('-',
$progress_check['headers']['Range']);
$server_at = (int)$server_at;
} while ($server_at < $size);
// Complete the upload on the server.
$completion =
$this->request($ticket['body']['complete_uri'],
array(), 'DELETE');
// Validate that we got back 201 Created
$status = (int)$completion['status'];
if ($status !== 201) {
$error =
!empty($completion['body']['error']) ? '[' .
$completion['body']['error'] . ']' :
'';
throw new VimeoUploadException('Error completing the
upload.' . $error);
}
// Furnish the location for the new clip in the API via the
Location header.
return $completion['headers']['Location'];
}
}
PK,C�[X/X���-Generator/Common/Vimeo/ConfigurationVimeo.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Vimeo;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\Framework\Router\Router;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroupConfiguration;
use Nextend\SmartSlider3Pro\Generator\Common\Vimeo\Elements\VimeoToken;
use Vimeo\Vimeo;
class ConfigurationVimeo extends AbstractGeneratorGroupConfiguration {
private $data;
/**
* N2SliderGeneratorVimeoConfiguration constructor.
*
* @param GeneratorGroupVimeo $group
*/
public function __construct($group) {
parent::__construct($group);
$this->data = new Data(array(
'client_id' => '',
'client_secret' => '',
'access_token' => ''
));
$this->data->loadJSON(StorageSectionManager::getStorage('smartslider')
->get('vimeo'));
}
public function wellConfigured() {
if (!$this->data->get('client_id') ||
!$this->data->get('client_secret') ||
!$this->data->get('access_token')) {
return false;
}
$client = $this->getApi();
$response = $client->request('/oauth/verify');
if ($response['status'] == 200) {
return true;
}
return false;
}
/**
*
* @return Vimeo
*/
public function getApi() {
require_once(dirname(__FILE__) .
"/api/Exceptions/ExceptionInterface.php");
require_once(dirname(__FILE__) .
"/api/Exceptions/VimeoRequestException.php");
require_once(dirname(__FILE__) .
"/api/Exceptions/VimeoUploadException.php");
require_once(dirname(__FILE__) . "/api/Vimeo.php");
$client = new Vimeo($this->data->get('client_id'),
$this->data->get('client_secret'));
$client->clientCredentials('private');
$client->setToken($this->data->get('access_token'));
return $client;
}
public function getData() {
return $this->data->toArray();
}
public function addData($data, $store = true) {
$this->data->loadArray($data);
if ($store) {
StorageSectionManager::getStorage('smartslider')
->set('vimeo', null,
json_encode($this->data->toArray()));
}
}
public function render($MVCHelper) {
$form = new Form($MVCHelper, 'generator');
$form->loadArray($this->getData());
$table = new ContainerTable($form->getContainer(),
'vimeo-generator', 'Vimeo api');
$instruction =
$table->createRow('vimeo-instruction');
$instructionText = sprintf(n2_('%2$s Check the documentation
%3$s to learn how to configure your %1$s app.'), 'Vimeo',
'<a
href="https://smartslider.helpscoutdocs.com/article/1912-vimeo-generator"
target="_blank">', '</a>');
new Notice($instruction, 'instruction',
n2_('Instruction'), $instructionText);
$settings = $table->createRow('vimeo');
new Text($settings, 'client_id', 'Client
identifier', '', array(
'style' => 'width:400px;'
));
new Text($settings, 'client_secret', 'Client
secret', '', array(
'style' => 'width:400px;'
));
new VimeoToken($settings, 'access_token',
n2_('Token'));
new Notice($settings, 'callback', n2_('Callback
url'), $this->getCallbackUrl($MVCHelper->getRouter()));
new Token($settings);
echo $form->render();
if ($this->data->get('client_id') != ''
&& $this->data->get('client_secret') !=
'') {
try {
$client = $this->getApi();
$response = $client->request('/oauth/verify');
if ($response['status'] != 200) {
if
(!empty($response['body']['error'])) {
Notification::error($response['body']['error']);
}
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
}
}
public function startAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
$this->addData(Request::$REQUEST->getVar('generator'),
false);
$_SESSION['data'] = $this->getData();
$_SESSION['vimeostate'] = rand();
$client = $this->getApi();
$FinishAuthUrl = $MVCHelper->createUrl(array(
"generator/finishAuth",
array(
'group' => 'vimeo'
)
));
return $client->buildAuthorizationEndpoint($FinishAuthUrl,
array('private'), $_SESSION['vimeostate']);
}
public function finishAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
if (isset($_REQUEST['state']) &&
isset($_SESSION['vimeostate']) &&
$_REQUEST['state'] == $_SESSION['vimeostate']) {
$this->addData($_SESSION['data'], false);
unset($_SESSION['data']);
unset($_SESSION['vimeostate']);
try {
$client = $this->getApi();
$client->setToken('');
$FinishAuthUrl = $MVCHelper->createUrl(array(
"generator/finishAuth",
array(
'group' => 'vimeo'
)
));
$response =
$client->accessToken($_REQUEST['code'], $FinishAuthUrl);
if ($response['status'] == 200) {
$this->data->set('access_token',
$response['body']['access_token']);
$client->setToken($response['body']['access_token']);
$this->addData($this->getData());
return true;
} else {
return
$client->response['body']['error_description'];
}
} catch (\Exception $e) {
return $e->getMessage();
}
} else {
return 'State does not match!';
}
}
/**
* @param Router $router
*
* @return string
*/
private function getCallbackUrl($router) {
return $router->createUrl(array(
"generator/finishAuth",
array(
'group' => 'vimeo'
)
));
}
}PK,C�[����/Generator/Common/Vimeo/Elements/VimeoAlbums.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Vimeo\Elements;
use Nextend\Framework\Form\Element\Select;
use Vimeo\Vimeo;
class VimeoAlbums extends Select {
/** @var Vimeo */
protected $api;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$response = $this->api->request('/me/albums',
array(
'per_page' => 100
));
if ($response['status'] == 200) {
$albums = $response['body']['data'];
foreach ($albums AS $album) {
$this->options[$album['uri']] =
$album['name'];
}
if (!isset($this->options[$this->getValue()])) {
$this->setValue($albums[0]['uri']);
}
}
}
/**
* @param Vimeo $api
*/
public function setApi($api) {
$this->api = $api;
}
}
PK,C�[z1�F��.Generator/Common/Vimeo/Elements/VimeoToken.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Vimeo\Elements;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Request\Request;
class VimeoToken extends Text {
function fetchElement() {
$authUrl = $this->getForm()
->createAjaxUrl(array(
"generator/getAuthUrl",
array(
'group' =>
Request::$REQUEST->getVar('group'),
'type' =>
Request::$REQUEST->getVar('type')
)
));
Js::addInline('new _N2.FormElementVimeoToken("' .
$this->fieldID . '", "' . $authUrl .
'");');
return parent::fetchElement();
}
protected function post() {
return '<a class="n2_field_text__choose_text"
href="#">' . n2_('Request token') .
'</a>';
}
}
PK,C�[
�@���.Generator/Common/Vimeo/GeneratorGroupVimeo.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Vimeo;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3Pro\Generator\Common\Vimeo\Sources\VimeoAlbum;
class GeneratorGroupVimeo extends AbstractGeneratorGroup {
protected $name = 'vimeo';
protected $needConfiguration = true;
public function __construct() {
parent::__construct();
$this->configuration = new ConfigurationVimeo($this);
}
public function getLabel() {
return 'Vimeo';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Vimeo');
}
protected function loadSources() {
new VimeoAlbum($this, 'album', 'Album');
}
}
PK,C�[i��
�
-Generator/Common/Vimeo/Sources/VimeoAlbum.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\Vimeo\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3Pro\Generator\Common\Vimeo\Elements\VimeoAlbums;
use Vimeo\Vimeo;
class VimeoAlbum extends AbstractGenerator {
protected $layout = 'vimeo';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'Vimeo');
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new VimeoAlbums($filter, 'album', 'Album',
'', array(
'api' => $this->group->getConfiguration()
->getApi()
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'vimeoorder',
'|*|asc', array(
'options' => array(
'' => n2_('None'),
'alphabetical' =>
n2_('Alphabetic'),
'comments' => n2_('Comments'),
'date' => n2_('Date'),
'default' => n2_('Default'),
'duration' => n2_('Duration'),
'likes' => n2_('Likes'),
'manual' => n2_('Manual'),
'modified_time' => n2_('Modified
time'),
'plays' => n2_('Plays')
)
));
}
protected function _getData($count, $startIndex) {
$data = array();
/** @var Vimeo $api */
$api = $this->group->getConfiguration()
->getApi();
$album = $this->data->get('album', '');
if (!empty($album)) {
$args = array(
'per_page' => $startIndex + $count
);
$order =
Common::parse($this->data->get('vimeoorder',
'|*|asc'));
if (!empty($order[0])) {
$args['sort'] = $order[0];
}
$response = $api->request($album . '/videos',
$args);
if ($response['status'] == 200) {
$videos =
array_slice($response['body']['data'], $startIndex,
$count);
foreach ($videos AS $video) {
$record = array();
$record['title'] =
$video['name'];
$record['description'] =
$video['description'];
$record['id'] =
str_replace('/videos/', '', $video['uri']);
$record['url'] =
'https://vimeo.com/' . $record['id'];
$record['link'] =
$video['link'];
foreach
($video['pictures']['sizes'] AS $picture) {
$record['image' .
$picture['width'] . 'x' . $picture['height']]
= $picture['link'];
$record['imageplay' .
$picture['width'] . 'x' . $picture['height']]
= $picture['link_with_play_button'];
}
$data[] = &$record;
unset($record);
}
}
}
if ($order[1] == 'desc') {
$data = array_reverse($data);
}
return $data;
}
}PK,C�[�|��$�$1Generator/Common/YouTube/ConfigurationYoutube.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\Framework\Router\Router;
use Nextend\GoogleApi\Google_Service_YouTube_PlaylistListResponse;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroupConfiguration;
use Nextend\SmartSlider3Pro\Generator\Common\YouTube\Elements\YouTubeToken;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Client;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Service\Google_Service_YouTube;
class ConfigurationYoutube extends AbstractGeneratorGroupConfiguration {
private $data;
/**
* N2SSPluginGeneratorYoutube constructor.
*
* @param GeneratorGroupYouTube $group
*/
public function __construct($group) {
parent::__construct($group);
$this->data = new Data(array(
'apiKey' => '',
'apiSecret' => '',
'accessToken' => ''
));
$this->data->loadJSON(StorageSectionManager::getStorage('smartslider')
->get('youtube'));
}
public function wellConfigured() {
if (!$this->data->get('apiKey') ||
!$this->data->get('apiSecret') ||
!$this->data->get('accessToken')) {
return false;
}
$api = $this->getApi();
try {
if ($api->isAccessTokenExpired()) {
return false;
}
return true;
} catch (\Exception $e) {
return false;
}
}
public function getApi() {
$client = new Google_Client();
$client->setAccessType('offline');
$client->setClientId(trim($this->data->get('apiKey')));
$client->setClientSecret(trim($this->data->get('apiSecret')));
$client->addScope(array(
Google_Service_YouTube::YOUTUBE,
Google_Service_YouTube::YOUTUBE_READONLY
));
$client->setRedirectUri(ApplicationSmartSlider3::getInstance()
->getApplicationTypeAdmin()
->createUrl(array(
"generator/finishAuth",
array(
'group' => Request::$REQUEST->getVar('group')
)
)));
$token =
Base64::decode($this->data->get('accessToken', null));
try {
if ($token) {
$client->setAccessToken($token);
if ($client->isAccessTokenExpired()) {
$refreshToken = $client->getRefreshToken();
if (!empty($refreshToken)) {
$client->refreshToken($refreshToken);
try {
$oldAccessToken =
json_decode(Base64::decode($this->data->get('accessToken')),
true);
if (!is_array($oldAccessToken)) {
$oldAccessToken = array();
}
} catch (\Exception $e) {
$oldAccessToken = array();
}
$this->data->set('accessToken',
Base64::encode(json_encode(array_merge($oldAccessToken,
json_decode($client->getAccessToken(), true)))));
$this->addData($this->data->toArray());
}
}
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
return $client;
}
public function getData() {
return $this->data->toArray();
}
public function addData($data, $store = true) {
$this->data->loadArray($data);
if ($store) {
StorageSectionManager::getStorage('smartslider')
->set('youtube', null,
json_encode($this->data->toArray()));
}
}
public function render($MVCHelper) {
$form = new Form($MVCHelper, 'generator');
$form->loadArray($this->getData());
$table = new ContainerTable($form->getContainer(),
'youtube-generator', 'YouTube api');
$instruction =
$table->createRow('youtube-instruction');
$instructionText = sprintf(n2_('%2$s Check the documentation
%3$s to learn how to configure your %1$s app.'), 'YouTube',
'<a
href="https://smartslider.helpscoutdocs.com/article/1906-youtube-generator"
target="_blank">', '</a>');
new Notice($instruction, 'instruction',
n2_('Instruction'), $instructionText);
$settings = $table->createRow('youtube');
new Text($settings, 'apiKey', 'Client ID',
'', array(
'style' => 'width:600px;'
));
new Text($settings, 'apiSecret', 'Client
secret', '', array(
'style' => 'width:250px;'
));
new YoutubeToken($settings, 'accessToken',
n2_('Token'));
new Notice($settings, 'callback', n2_('Callback
url'), $this->getCallbackUrl($MVCHelper->getRouter()));
new Token($settings);
echo $form->render();
try {
$this->getApi();
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
}
public function startAuth($approvalPrompt = 'auto') {
if (session_id() == "") {
session_start();
}
$this->addData(Request::$REQUEST->getVar('generator'),
false);
$_SESSION['data'] = $this->getData();
$client = $this->getApi();
$client->setApprovalPrompt($approvalPrompt);
$client->setAccessType('offline');
return $client->createAuthUrl();
}
public function finishAuth($MVCHelper) {
if (session_id() == "") {
session_start();
}
$this->addData($_SESSION['data'], false);
unset($_SESSION['data']);
try {
$client = $this->getApi();
$client->authenticate($_GET['code']);
$accessToken = $client->getAccessToken();
if ($accessToken) {
$data = $this->getData();
try {
$oldAccessToken =
json_decode(Base64::decode($data['accessToken']), true);
if (!is_array($oldAccessToken)) {
$oldAccessToken = array();
}
} catch (\Exception $e) {
$oldAccessToken = array();
}
$newAccessToken = array_merge($oldAccessToken,
json_decode($accessToken, true));
if (!isset($newAccessToken['refresh_token'])) {
header('Location: ' .
$this->startAuth('force'));
exit;
}
$data['accessToken'] =
Base64::encode(json_encode($newAccessToken));
$this->addData($data);
return true;
}
return false;
} catch (\Exception $e) {
return $e;
}
}
public function getPlayListsAjax() {
$channelID = Request::$REQUEST->getVar('channelID');
$api = $this->getApi();
$playLists = $this->getPlaylists($api, $channelID);
$response = array();
if (count($playLists)) {
foreach ($playLists AS $playlist) {
$response[$playlist['id']] =
$playlist['snippet']['title'];
}
}
return $response;
}
public function getPlaylists($api, $channelID) {
$channelID = trim($channelID);
$youtubeClient = new Google_Service_YouTube($api);
$request = array(
'mine' => true,
'maxResults' => 50
);
if (!empty($channelID)) {
$request = array(
'channelId' => $channelID,
'maxResults' => 50
);
}
/** @var Google_Service_YouTube_PlaylistListResponse $playlists */
$playlists =
$youtubeClient->playlists->listPlaylists('id,snippet',
$request);
$items = $playlists['items'];
while ($nextPageToken = $playlists->getNextPageToken()) {
$request['pageToken'] = $nextPageToken;
/** @var Google_Service_YouTube_PlaylistListResponse $playlists
*/
$playlists =
$youtubeClient->playlists->listPlaylists('id,snippet',
$request);
$items = array_merge($items,
$playlists['items']);
}
return $items;
}
/**
* @param Router $router
*
* @return string
*/
private function getCallbackUrl($router) {
return $router->createUrl(array(
"generator/finishAuth",
array(
'group' => 'youtube'
)
));
}
}PK,C�[��G��;Generator/Common/YouTube/Elements/YouTubePlaylistByUser.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\Elements;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
class YouTubePlaylistByUser extends Select {
/** @var N2SliderGeneratorYouTubeConfiguration */
protected $config;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
try {
$playlists =
$this->config->getPlaylists($this->config->getApi(),
$this->getForm()
->get('channel-id', ''));
foreach ($playlists as $k => $item) {
$this->options[$item['id']] =
$item['snippet']['title'];
}
if (!isset($this->options[$this->getValue()])) {
$this->setValue($playlists[0]['id']);
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
}
protected function fetchElement() {
$getDataUrl = $this->getForm()
->createAjaxUrl(array(
"generator/getData",
array(
'group' =>
Request::$REQUEST->getVar('group'),
'type' =>
Request::$REQUEST->getVar('type')
)
));
Js::addInline('
new _N2.FormElementYouTubePlaylists("' .
$this->fieldID . '", "' . $getDataUrl .
'");
');
return parent::fetchElement();
}
/**
* @param N2SliderGeneratorYouTubeConfiguration $config
*/
public function setConfig($config) {
$this->config = $config;
}
}
PK,C�[C�?���2Generator/Common/YouTube/Elements/YouTubeToken.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\Elements;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Request\Request;
class YouTubeToken extends Text {
protected function fetchElement() {
$authUrl = $this->getForm()
->createAjaxUrl(array(
"generator/getAuthUrl",
array(
'group' =>
Request::$REQUEST->getVar('group'),
'type' =>
Request::$REQUEST->getVar('type')
)
));
Js::addInline('new _N2.FormElementYoutubeToken("' .
$this->fieldID . '", "' . $authUrl .
'");');
return parent::fetchElement();
}
protected function post() {
return '<a class="n2_field_text__choose_text"
href="#">' . n2_('Request token') .
'</a>';
}
}
PK,C�[��K��2Generator/Common/YouTube/GeneratorGroupYouTube.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\Sources\YouTubeByPlaylist;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\Sources\YouTubeBySearch;
class GeneratorGroupYouTube extends AbstractGeneratorGroup {
protected $name = 'youtube';
protected $needConfiguration = true;
public function __construct() {
parent::__construct();
$this->configuration = new ConfigurationYoutube($this);
}
public function getLabel() {
return 'YouTube';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'YouTube');
}
protected function loadSources() {
new YouTubeBySearch($this, 'bysearch',
n2_('Search'));
new YouTubeByPlaylist($this, 'byplaylist',
n2_('Playlist'));
}
}
PK,C�[䦻CGenerator/Common/YouTube/googleclient/Auth/Google_Auth_Abstract.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Auth;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_Request;
/**
* Abstract class for the Authentication in the API client
*
* @author Chris Chabot <chabotc@google.com>
*
*/
abstract class Google_Auth_Abstract {
/**
* An utility function that first calls
$this->auth->sign($request) and then
* executes makeRequest() on that signed request. Used for when a
request
* should be authenticated
*
* @param Google_Http_Request $request
*
* @return Google_Http_Request $request
*/
abstract public function authenticatedRequest(Google_Http_Request
$request);
abstract public function sign(Google_Http_Request $request);
}
PK,C�[�
#��DGenerator/Common/YouTube/googleclient/Auth/Google_Auth_Exception.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Auth;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Exception;
class Google_Auth_Exception extends Google_Exception {
}
PK,C�[��Z^�N�NAGenerator/Common/YouTube/googleclient/Auth/Google_Auth_OAuth2.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Auth;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Client;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_Request;
/**
* Authentication class that deals with the OAuth 2 web-server
authentication flow
*
* @author Chris Chabot <chabotc@google.com>
* @author Chirag Shah <chirags@google.com>
*
*/
class Google_Auth_OAuth2 extends Google_Auth_Abstract {
const OAUTH2_REVOKE_URI =
'https://accounts.google.com/o/oauth2/revoke';
const OAUTH2_TOKEN_URI =
'https://accounts.google.com/o/oauth2/token';
const OAUTH2_AUTH_URL =
'https://accounts.google.com/o/oauth2/auth';
const CLOCK_SKEW_SECS = 300; // five minutes in seconds
const AUTH_TOKEN_LIFETIME_SECS = 300; // five minutes in seconds
const MAX_TOKEN_LIFETIME_SECS = 86400; // one day in seconds
const OAUTH2_ISSUER = 'accounts.google.com';
/** @var Google_Auth_AssertionCredentials $assertionCredentials */
private $assertionCredentials;
/**
* @var string The state parameters for CSRF and other forgery
protection.
*/
private $state;
/**
* @var array The token bundle.
*/
private $token = array();
/**
* @var Google_Client the base client
*/
private $client;
/**
* Instantiates the class, but does not initiate the login flow,
leaving it
* to the discretion of the caller.
*/
public function __construct(Google_Client $client) {
$this->client = $client;
}
/**
* Perform an authenticated / signed apiHttpRequest.
* This function takes the apiHttpRequest, calls apiAuth->sign on it
* (which can modify the request in what ever way fits the auth
mechanism)
* and then calls apiCurlIO::makeRequest on the signed request
*
* @param Google_Http_Request $request
*
* @return Google_Http_Request The resulting HTTP response including
the
* responseHttpCode, responseHeaders and responseBody.
*/
public function authenticatedRequest(Google_Http_Request $request) {
$request = $this->sign($request);
return $this->client->getIo()
->makeRequest($request);
}
/**
* @param string $code
*
* @return string
* @throws Google_Auth_Exception
*/
public function authenticate($code) {
if (strlen($code) == 0) {
throw new Google_Auth_Exception("Invalid code");
}
// We got here from the redirect from a successful authorization
grant,
// fetch the access token
$request = new Google_Http_Request(self::OAUTH2_TOKEN_URI,
'POST', array(), array(
'code' => $code,
'grant_type' => 'authorization_code',
'redirect_uri' =>
$this->client->getClassConfig($this, 'redirect_uri'),
'client_id' =>
$this->client->getClassConfig($this, 'client_id'),
'client_secret' =>
$this->client->getClassConfig($this, 'client_secret')
));
$request->disableGzip();
$response = $this->client->getIo()
->makeRequest($request);
if ($response->getResponseHttpCode() == 200) {
$this->setAccessToken($response->getResponseBody());
$this->token['created'] = time();
return $this->getAccessToken();
} else {
$decodedResponse = json_decode($response->getResponseBody(),
true);
if ($decodedResponse != null &&
$decodedResponse['error']) {
$errorText = $decodedResponse['error'];
if (isset($decodedResponse['error_description']))
{
$errorText .= ": " .
$decodedResponse['error_description'];
}
}
throw new Google_Auth_Exception(sprintf("Error fetching
OAuth2 access token, message: '%s'", $errorText),
$response->getResponseHttpCode());
}
}
/**
* Create a URL to obtain user authorization.
* The authorization endpoint allows the user to first
* authenticate, and then grant/deny the access request.
*
* @param string $scope The scope is expressed as a list of
space-delimited strings.
*
* @return string
*/
public function createAuthUrl($scope) {
$params = array(
'response_type' => 'code',
'redirect_uri' =>
$this->client->getClassConfig($this, 'redirect_uri'),
'client_id' =>
$this->client->getClassConfig($this, 'client_id'),
'scope' => $scope,
'access_type' =>
$this->client->getClassConfig($this, 'access_type'),
);
// Prefer prompt to approval prompt.
if ($this->client->getClassConfig($this, 'prompt'))
{
$params = $this->maybeAddParam($params, 'prompt');
} else {
$params = $this->maybeAddParam($params,
'approval_prompt');
}
$params = $this->maybeAddParam($params, 'login_hint');
$params = $this->maybeAddParam($params, 'hd');
$params = $this->maybeAddParam($params,
'openid.realm');
$params = $this->maybeAddParam($params,
'include_granted_scopes');
// If the list of scopes contains plus.login, add
request_visible_actions
// to auth URL.
$rva = $this->client->getClassConfig($this,
'request_visible_actions');
if (strpos($scope, 'plus.login') && strlen($rva)
> 0) {
$params['request_visible_actions'] = $rva;
}
if (isset($this->state)) {
$params['state'] = $this->state;
}
return self::OAUTH2_AUTH_URL . "?" .
http_build_query($params, '', '&');
}
/**
* @param string $token
*
* @throws Google_Auth_Exception
*/
public function setAccessToken($token) {
$token = json_decode($token, true);
if ($token == null) {
throw new Google_Auth_Exception('Could not json decode the
token');
}
if (!isset($token['access_token'])) {
throw new Google_Auth_Exception("Invalid token
format");
}
$this->token = $token;
}
public function getAccessToken() {
return json_encode($this->token);
}
public function getRefreshToken() {
if (array_key_exists('refresh_token', $this->token)) {
return $this->token['refresh_token'];
} else {
return null;
}
}
public function setState($state) {
$this->state = $state;
}
public function
setAssertionCredentials(Google_Auth_AssertionCredentials $creds) {
$this->assertionCredentials = $creds;
}
/**
* Include an accessToken in a given apiHttpRequest.
*
* @param Google_Http_Request $request
*
* @return Google_Http_Request
* @throws Google_Auth_Exception
*/
public function sign(Google_Http_Request $request) {
// add the developer key to the request before signing it
if ($this->client->getClassConfig($this,
'developer_key')) {
$request->setQueryParam('key',
$this->client->getClassConfig($this, 'developer_key'));
}
// Cannot sign the request without an OAuth access token.
if (null == $this->token && null ==
$this->assertionCredentials) {
return $request;
}
// Check if the token is set to expire in the next 30 seconds
// (or has already expired).
if ($this->isAccessTokenExpired()) {
if ($this->assertionCredentials) {
$this->refreshTokenWithAssertion();
} else {
$this->client->getLogger()
->debug('OAuth2 access token
expired');
if (!array_key_exists('refresh_token',
$this->token)) {
$error = "The OAuth 2.0 access token has
expired," . " and a refresh token is not available. Refresh
tokens" . " are not returned for responses that were
auto-approved.";
$this->client->getLogger()
->error($error);
throw new Google_Auth_Exception($error);
}
$this->refreshToken($this->token['refresh_token']);
}
}
$this->client->getLogger()
->debug('OAuth2 authentication');
// Add the OAuth2 header to the request
$request->setRequestHeaders(array('Authorization'
=> 'Bearer ' . $this->token['access_token']));
return $request;
}
/**
* Fetches a fresh access token with the given refresh token.
*
* @param string $refreshToken
*
* @return void
*/
public function refreshToken($refreshToken) {
$this->refreshTokenRequest(array(
'client_id' =>
$this->client->getClassConfig($this, 'client_id'),
'client_secret' =>
$this->client->getClassConfig($this, 'client_secret'),
'refresh_token' => $refreshToken,
'grant_type' => 'refresh_token'
));
}
/**
* Fetches a fresh access token with a given assertion token.
*
* @param Google_Auth_AssertionCredentials $assertionCredentials
optional.
*
* @return void
*/
public function refreshTokenWithAssertion($assertionCredentials = null)
{
if (!$assertionCredentials) {
$assertionCredentials = $this->assertionCredentials;
}
$cacheKey = $assertionCredentials->getCacheKey();
if ($cacheKey) {
// We can check whether we have a token available in the
// cache. If it is expired, we can retrieve a new one from
// the assertion.
$token = $this->client->getCache()
->get($cacheKey);
if ($token) {
$this->setAccessToken($token);
}
if (!$this->isAccessTokenExpired()) {
return;
}
}
$this->client->getLogger()
->debug('OAuth2 access token expired');
$this->refreshTokenRequest(array(
'grant_type' => 'assertion',
'assertion_type' =>
$assertionCredentials->assertionType,
'assertion' =>
$assertionCredentials->generateAssertion(),
));
if ($cacheKey) {
// Attempt to cache the token.
$this->client->getCache()
->set($cacheKey, $this->getAccessToken());
}
}
private function refreshTokenRequest($params) {
if (isset($params['assertion'])) {
$this->client->getLogger()
->info('OAuth2 access token refresh with
Signed JWT assertion grants.');
} else {
$this->client->getLogger()
->info('OAuth2 access token
refresh');
}
$http = new Google_Http_Request(self::OAUTH2_TOKEN_URI,
'POST', array(), $params);
$http->disableGzip();
$request = $this->client->getIo()
->makeRequest($http);
$code = $request->getResponseHttpCode();
$body = $request->getResponseBody();
if (200 == $code) {
$token = json_decode($body, true);
if ($token == null) {
throw new Google_Auth_Exception("Could not json decode
the access token");
}
if (!isset($token['access_token']) ||
!isset($token['expires_in'])) {
throw new Google_Auth_Exception("Invalid token
format");
}
if (isset($token['id_token'])) {
$this->token['id_token'] =
$token['id_token'];
}
$this->token['access_token'] =
$token['access_token'];
$this->token['expires_in'] =
$token['expires_in'];
$this->token['created'] = time();
} else {
throw new Google_Auth_Exception("Error refreshing the
OAuth2 token, message: '$body'", $code);
}
}
/**
* Revoke an OAuth2 access token or refresh token. This method will
revoke the current access
* token, if a token isn't provided.
*
* @param string|null $token The token (access token or a refresh
token) that should be revoked.
*
* @return boolean Returns True if the revocation was successful,
otherwise False.
* @throws Google_Auth_Exception
*
*/
public function revokeToken($token = null) {
if (!$token) {
if (!$this->token) {
// Not initialized, no token to actually revoke
return false;
} elseif (array_key_exists('refresh_token',
$this->token)) {
$token = $this->token['refresh_token'];
} else {
$token = $this->token['access_token'];
}
}
$request = new Google_Http_Request(self::OAUTH2_REVOKE_URI,
'POST', array(), "token=$token");
$request->disableGzip();
$response = $this->client->getIo()
->makeRequest($request);
$code = $response->getResponseHttpCode();
if ($code == 200) {
$this->token = null;
return true;
}
return false;
}
/**
* Returns if the access_token is expired.
*
* @return bool Returns True if the access_token is expired.
*/
public function isAccessTokenExpired() {
if (!$this->token ||
!isset($this->token['created'])) {
return true;
}
// If the token is set to expire in the next 30 seconds.
$expired = ($this->token['created'] +
($this->token['expires_in'] - 30)) < time();
return $expired;
}
// Gets federated sign-on certificates to use for verifying identity
tokens.
// Returns certs as array structure, where keys are key ids, and values
// are PEM encoded certificates.
private function getFederatedSignOnCerts() {
return
$this->retrieveCertsFromLocation($this->client->getClassConfig($this,
'federated_signon_certs_url'));
}
/**
* Retrieve and cache a certificates file.
*
* @param $url string location
*
* @return array certificates
* @throws Google_Auth_Exception
*/
public function retrieveCertsFromLocation($url) {
// If we're retrieving a local file, just grab it.
if ("http" != substr($url, 0, 4)) {
$file = file_get_contents($url);
if ($file) {
return json_decode($file, true);
} else {
throw new Google_Auth_Exception("Failed to retrieve
verification certificates: '" . $url . "'.");
}
}
// This relies on makeRequest caching certificate responses.
$request = $this->client->getIo()
->makeRequest(new
Google_Http_Request($url));
if ($request->getResponseHttpCode() == 200) {
$certs = json_decode($request->getResponseBody(), true);
if ($certs) {
return $certs;
}
}
throw new Google_Auth_Exception("Failed to retrieve
verification certificates: '" . $request->getResponseBody() .
"'.", $request->getResponseHttpCode());
}
/**
* Verifies an id token and returns the authenticated apiLoginTicket.
* Throws an exception if the id token is not valid.
* The audience parameter can be used to control which id tokens are
* accepted. By default, the id token must have been issued to this
OAuth2 client.
*
* @param $id_token
* @param $audience
*
* @return Google_Auth_LoginTicket
*/
public function verifyIdToken($id_token = null, $audience = null) {
if (!$id_token) {
$id_token = $this->token['id_token'];
}
$certs = $this->getFederatedSignonCerts();
if (!$audience) {
$audience = $this->client->getClassConfig($this,
'client_id');
}
return $this->verifySignedJwtWithCerts($id_token, $certs,
$audience, self::OAUTH2_ISSUER);
}
/**
* Verifies the id token, returns the verified token contents.
*
* @param $jwt string the token
* @param $certs array of certificates
* @param $required_audience string the expected consumer of the token
* @param [$issuer] the expected issues, defaults to Google
* @param [$max_expiry] the max lifetime of a token, defaults to
MAX_TOKEN_LIFETIME_SECS
*
* @return mixed token information if valid, false if not
* @throws Google_Auth_Exception
*/
public function verifySignedJwtWithCerts($jwt, $certs,
$required_audience, $issuer = null, $max_expiry = null) {
if (!$max_expiry) {
// Set the maximum time we will accept a token for.
$max_expiry = self::MAX_TOKEN_LIFETIME_SECS;
}
$segments = explode(".", $jwt);
if (count($segments) != 3) {
throw new Google_Auth_Exception("Wrong number of segments
in token: $jwt");
}
$signed = $segments[0] . "." . $segments[1];
$signature = Google_Utils::urlSafeB64Decode($segments[2]);
// Parse envelope.
$envelope =
json_decode(Google_Utils::urlSafeB64Decode($segments[0]), true);
if (!$envelope) {
throw new Google_Auth_Exception("Can't parse token
envelope: " . $segments[0]);
}
// Parse token
$json_body = Google_Utils::urlSafeB64Decode($segments[1]);
$payload = json_decode($json_body, true);
if (!$payload) {
throw new Google_Auth_Exception("Can't parse token
payload: " . $segments[1]);
}
// Check signature
$verified = false;
foreach ($certs as $keyName => $pem) {
$public_key = new Google_Verifier_Pem($pem);
if ($public_key->verify($signed, $signature)) {
$verified = true;
break;
}
}
if (!$verified) {
throw new Google_Auth_Exception("Invalid token signature:
$jwt");
}
// Check issued-at timestamp
$iat = 0;
if (array_key_exists("iat", $payload)) {
$iat = $payload["iat"];
}
if (!$iat) {
throw new Google_Auth_Exception("No issue time in token:
$json_body");
}
$earliest = $iat - self::CLOCK_SKEW_SECS;
// Check expiration timestamp
$now = time();
$exp = 0;
if (array_key_exists("exp", $payload)) {
$exp = $payload["exp"];
}
if (!$exp) {
throw new Google_Auth_Exception("No expiration time in
token: $json_body");
}
if ($exp >= $now + $max_expiry) {
throw new Google_Auth_Exception(sprintf("Expiration time
too far in future: %s", $json_body));
}
$latest = $exp + self::CLOCK_SKEW_SECS;
if ($now < $earliest) {
throw new Google_Auth_Exception(sprintf("Token used too
early, %s < %s: %s", $now, $earliest, $json_body));
}
if ($now > $latest) {
throw new Google_Auth_Exception(sprintf("Token used too
late, %s > %s: %s", $now, $latest, $json_body));
}
$iss = $payload['iss'];
if ($issuer && $iss != $issuer) {
throw new Google_Auth_Exception(sprintf("Invalid issuer,
%s != %s: %s", $iss, $issuer, $json_body));
}
// Check audience
$aud = $payload["aud"];
if ($aud != $required_audience) {
throw new Google_Auth_Exception(sprintf("Wrong recipient,
%s != %s:", $aud, $required_audience, $json_body));
}
// All good.
return new Google_Auth_LoginTicket($envelope, $payload);
}
/**
* Add a parameter to the auth params if not empty string.
*/
private function maybeAddParam($params, $name) {
$param = $this->client->getClassConfig($this, $name);
if ($param != '') {
$params[$name] = $param;
}
return $params;
}
}
PK,C�[XF`Q`Q7Generator/Common/YouTube/googleclient/Google_Client.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Auth\Google_Auth_OAuth2;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_Request;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_REST;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\IO\Google_IO_Curl;
/**
* The Google API Client
* http://code.google.com/p/google-api-php-client/
*
* @author Chris Chabot <chabotc@google.com>
* @author Chirag Shah <chirags@google.com>
*/
class Google_Client {
const LIBVER = "1.1.2";
const USER_AGENT_SUFFIX = "google-api-php-client/";
/**
* @var Google_Auth_Abstract $auth
*/
private $auth;
/**
* @var Google_IO_Abstract $io
*/
private $io;
/**
* @var Google_Cache_Abstract $cache
*/
private $cache;
/**
* @var Google_Config $config
*/
private $config;
/**
* @var Google_Logger_Abstract $logger
*/
private $logger;
/**
* @var boolean $deferExecution
*/
private $deferExecution = false;
/** @var array $scopes */
// Scopes requested by the client
protected $requestedScopes = array();
// definitions of services that are discovered.
protected $services = array();
// Used to track authenticated state, can't discover services
after doing authenticate()
private $authenticated = false;
/**
* Construct the Google Client.
*
* @param $config Google_Config or string for the ini file to load
*/
public function __construct($config = null) {
if (is_string($config) && strlen($config)) {
$config = new Google_Config($config);
} else if (!($config instanceof Google_Config)) {
$config = new Google_Config();
if ($this->isAppEngine()) {
// Automatically use Memcache if we're in AppEngine.
$config->setCacheClass('Google_Cache_Memcache');
}
if (version_compare(phpversion(), "5.3.4",
"<=") || $this->isAppEngine()) {
// Automatically disable compress.zlib, as currently
unsupported.
$config->setClassConfig(Google_Http_Request::class,
'disable_gzip', true);
}
}
if ($config->getIoClass() ==
Google_Config::USE_AUTO_IO_SELECTION) {
if (function_exists('curl_version') &&
function_exists('curl_exec') && !$this->isAppEngine())
{
$config->setIoClass(Google_IO_Curl::class);
}
}
$this->config = $config;
}
/**
* Get a string containing the version of the library.
*
* @return string
*/
public function getLibraryVersion() {
return self::LIBVER;
}
/**
* Attempt to exchange a code for an valid authentication token.
* Helper wrapped around the OAuth 2.0 implementation.
*
* @param $code string code from accounts.google.com
*
* @return string token
*/
public function authenticate($code) {
$this->authenticated = true;
return $this->getAuth()
->authenticate($code);
}
/**
* Set the auth config from the JSON string provided.
* This structure should match the file downloaded from
* the "Download JSON" button on in the Google Developer
* Console.
*
* @param string $json the configuration json
*
* @throws Google_Exception
*/
public function setAuthConfig($json) {
$data = json_decode($json);
$key = isset($data->installed) ? 'installed' :
'web';
if (!isset($data->$key)) {
throw new Google_Exception("Invalid client secret JSON
file.");
}
$this->setClientId($data->$key->client_id);
$this->setClientSecret($data->$key->client_secret);
if (isset($data->$key->redirect_uris)) {
$this->setRedirectUri($data->$key->redirect_uris[0]);
}
}
/**
* Set the auth config from the JSON file in the path
* provided. This should match the file downloaded from
* the "Download JSON" button on in the Google Developer
* Console.
*
* @param string $file the file location of the client json
*/
public function setAuthConfigFile($file) {
$this->setAuthConfig(file_get_contents($file));
}
/**
* @return array
* @visible For Testing
* @throws Google_Auth_Exception
*/
public function prepareScopes() {
if (empty($this->requestedScopes)) {
throw new Google_Auth_Exception("No scopes
specified");
}
$scopes = implode(' ', $this->requestedScopes);
return $scopes;
}
/**
* Set the OAuth 2.0 access token using the string that resulted from
calling createAuthUrl()
* or Google_Client#getAccessToken().
*
* @param string $accessToken JSON encoded string containing in the
following format:
*
{"access_token":"TOKEN",
"refresh_token":"TOKEN",
"token_type":"Bearer",
* "expires_in":3600,
"id_token":"TOKEN", "created":1320790426}
*/
public function setAccessToken($accessToken) {
if ($accessToken == 'null') {
$accessToken = null;
}
$this->getAuth()
->setAccessToken($accessToken);
}
/**
* Set the authenticator object
*
* @param Google_Auth_Abstract $auth
*/
public function setAuth(Google_Auth_Abstract $auth) {
$this->config->setAuthClass(get_class($auth));
$this->auth = $auth;
}
/**
* Set the IO object
*
* @param Google_IO_Abstract $io
*/
public function setIo(Google_IO_Abstract $io) {
$this->config->setIoClass(get_class($io));
$this->io = $io;
}
/**
* Set the Cache object
*
* @param Google_Cache_Abstract $cache
*/
public function setCache(Google_Cache_Abstract $cache) {
$this->config->setCacheClass(get_class($cache));
$this->cache = $cache;
}
/**
* Set the Logger object
*
* @param Google_Logger_Abstract $logger
*/
public function setLogger(Google_Logger_Abstract $logger) {
$this->config->setLoggerClass(get_class($logger));
$this->logger = $logger;
}
/**
* Construct the OAuth 2.0 authorization request URI.
*
* @return string
*/
public function createAuthUrl() {
$scopes = $this->prepareScopes();
return $this->getAuth()
->createAuthUrl($scopes);
}
/**
* Get the OAuth 2.0 access token.
*
* @return string $accessToken JSON encoded string in the following
format:
* {"access_token":"TOKEN",
"refresh_token":"TOKEN",
"token_type":"Bearer",
* "expires_in":3600,"id_token":"TOKEN",
"created":1320790426}
*/
public function getAccessToken() {
$token = $this->getAuth()
->getAccessToken();
// The response is json encoded, so could be the string null.
// It is arguable whether this check should be here or lower
// in the library.
return (null == $token || 'null' == $token ||
'[]' == $token) ? null : $token;
}
/**
* Get the OAuth 2.0 refresh token.
*
* @return string $refreshToken refresh token or null if not available
*/
public function getRefreshToken() {
return $this->getAuth()
->getRefreshToken();
}
/**
* Returns if the access_token is expired.
*
* @return bool Returns True if the access_token is expired.
*/
public function isAccessTokenExpired() {
return $this->getAuth()
->isAccessTokenExpired();
}
/**
* Set OAuth 2.0 "state" parameter to achieve per-request
customization.
*
* @see
http://tools.ietf.org/html/draft-ietf-oauth-v2-22#section-3.1.2.2
*
* @param string $state
*/
public function setState($state) {
$this->getAuth()
->setState($state);
}
/**
* @param string $accessType Possible values for access_type include:
* {@code "offline"} to request
offline access from the user.
* {@code "online"} to request
online access from the user.
*/
public function setAccessType($accessType) {
$this->config->setAccessType($accessType);
}
/**
* @param string $approvalPrompt Possible values for approval_prompt
include:
* {@code "force"} to force the
approval UI to appear. (This is the default value)
* {@code "auto"} to request
auto-approval when possible.
*/
public function setApprovalPrompt($approvalPrompt) {
$this->config->setApprovalPrompt($approvalPrompt);
}
/**
* Set the login hint, email address or sub id.
*
* @param string $loginHint
*/
public function setLoginHint($loginHint) {
$this->config->setLoginHint($loginHint);
}
/**
* Set the application name, this is included in the User-Agent HTTP
header.
*
* @param string $applicationName
*/
public function setApplicationName($applicationName) {
$this->config->setApplicationName($applicationName);
}
/**
* Set the OAuth 2.0 Client ID.
*
* @param string $clientId
*/
public function setClientId($clientId) {
$this->config->setClientId($clientId);
}
/**
* Set the OAuth 2.0 Client Secret.
*
* @param string $clientSecret
*/
public function setClientSecret($clientSecret) {
$this->config->setClientSecret($clientSecret);
}
/**
* Set the OAuth 2.0 Redirect URI.
*
* @param string $redirectUri
*/
public function setRedirectUri($redirectUri) {
$this->config->setRedirectUri($redirectUri);
}
/**
* If 'plus.login' is included in the list of requested
scopes, you can use
* this method to define types of app activities that your app will
write.
* You can find a list of available types here:
*
* @link https://developers.google.com/+/api/moment-types
*
* @param array $requestVisibleActions Array of app activity types
*/
public function setRequestVisibleActions($requestVisibleActions) {
if (is_array($requestVisibleActions)) {
$requestVisibleActions = join(" ",
$requestVisibleActions);
}
$this->config->setRequestVisibleActions($requestVisibleActions);
}
/**
* Set the developer key to use, these are obtained through the API
Console.
*
* @see http://code.google.com/apis/console-help/#generatingdevkeys
*
* @param string $developerKey
*/
public function setDeveloperKey($developerKey) {
$this->config->setDeveloperKey($developerKey);
}
/**
* Set the hd (hosted domain) parameter streamlines the login process
for
* Google Apps hosted accounts. By including the domain of the user,
you
* restrict sign-in to accounts at that domain.
*
* @param $hd string - the domain to use.
*/
public function setHostedDomain($hd) {
$this->config->setHostedDomain($hd);
}
/**
* Set the prompt hint. Valid values are none, consent and
select_account.
* If no value is specified and the user has not previously authorized
* access, then the user is shown a consent screen.
*
* @param $prompt string
*/
public function setPrompt($prompt) {
$this->config->setPrompt($prompt);
}
/**
* openid.realm is a parameter from the OpenID 2.0 protocol, not from
OAuth
* 2.0. It is used in OpenID 2.0 requests to signify the URL-space for
which
* an authentication request is valid.
*
* @param $realm string - the URL-space to use.
*/
public function setOpenidRealm($realm) {
$this->config->setOpenidRealm($realm);
}
/**
* If this is provided with the value true, and the authorization
request is
* granted, the authorization will include any previous authorizations
* granted to this user/application combination for other scopes.
*
* @param $include boolean - the URL-space to use.
*/
public function setIncludeGrantedScopes($include) {
$this->config->setIncludeGrantedScopes($include);
}
/**
* Fetches a fresh OAuth 2.0 access token with the given refresh token.
*
* @param string $refreshToken
*/
public function refreshToken($refreshToken) {
$this->getAuth()
->refreshToken($refreshToken);
}
/**
* Revoke an OAuth2 access token or refresh token. This method will
revoke the current access
* token, if a token isn't provided.
*
* @param string|null $token The token (access token or a refresh
token) that should be revoked.
*
* @return boolean Returns True if the revocation was successful,
otherwise False.
* @throws Google_Auth_Exception
*
*/
public function revokeToken($token = null) {
return $this->getAuth()
->revokeToken($token);
}
/**
* Verify an id_token. This method will verify the current id_token, if
one
* isn't provided.
*
* @param string|null $token The token (id_token) that should be
verified.
*
* @return Google_Auth_LoginTicket Returns an apiLoginTicket if the
verification was
* successful.
* @throws Google_Auth_Exception
*
*/
public function verifyIdToken($token = null) {
return $this->getAuth()
->verifyIdToken($token);
}
/**
* Verify a JWT that was signed with your own certificates.
*
* @param $id_token string The JWT token
* @param $cert_location array of certificates
* @param $audience string the expected consumer of the token
* @param $issuer string the expected issuer, defaults to Google
* @param [$max_expiry] the max lifetime of a token, defaults to
MAX_TOKEN_LIFETIME_SECS
*
* @return mixed token information if valid, false if not
*/
public function verifySignedJwt($id_token, $cert_location, $audience,
$issuer, $max_expiry = null) {
$auth = new Google_Auth_OAuth2($this);
$certs = $auth->retrieveCertsFromLocation($cert_location);
return $auth->verifySignedJwtWithCerts($id_token, $certs,
$audience, $issuer, $max_expiry);
}
/**
* Set the scopes to be requested. Must be called before
createAuthUrl().
* Will remove any previously configured scopes.
*
* @param array $scopes , ie:
array('https://www.googleapis.com/auth/plus.login',
*
'https://www.googleapis.com/auth/moderator')
*/
public function setScopes($scopes) {
$this->requestedScopes = array();
$this->addScope($scopes);
}
/**
* This functions adds a scope to be requested as part of the OAuth2.0
flow.
* Will append any scopes not previously requested to the scope
parameter.
* A single string will be treated as a scope to request. An array of
strings
* will each be appended.
*
* @param $scope_or_scopes string|array e.g. "profile"
*/
public function addScope($scope_or_scopes) {
if (is_string($scope_or_scopes) &&
!in_array($scope_or_scopes, $this->requestedScopes)) {
$this->requestedScopes[] = $scope_or_scopes;
} else if (is_array($scope_or_scopes)) {
foreach ($scope_or_scopes as $scope) {
$this->addScope($scope);
}
}
}
/**
* Returns the list of scopes requested by the client
*
* @return array the list of scopes
*
*/
public function getScopes() {
return $this->requestedScopes;
}
/**
* Declare whether batch calls should be used. This may increase
throughput
* by making multiple requests in one connection.
*
* @param boolean $useBatch True if the batch support should
* be enabled. Defaults to False.
*/
public function setUseBatch($useBatch) {
// This is actually an alias for setDefer.
$this->setDefer($useBatch);
}
/**
* Declare whether making API calls should make the call immediately,
or
* return a request which can be called with ->execute();
*
* @param boolean $defer True if calls should not be executed right
away.
*/
public function setDefer($defer) {
$this->deferExecution = $defer;
}
/**
* Helper method to execute deferred HTTP requests.
*
* @param $request Google_Http_Request|Google_Http_Batch
*
* @return object of the type of the expected class or array.
* @throws Google_Exception
*/
public function execute($request) {
if ($request instanceof Google_Http_Request) {
$request->setUserAgent($this->getApplicationName() .
" " . self::USER_AGENT_SUFFIX . $this->getLibraryVersion());
if (!$this->getClassConfig("Google_Http_Request",
"disable_gzip")) {
$request->enableGzip();
}
$request->maybeMoveParametersToBody();
return Google_Http_REST::execute($this, $request);
} else if ($request instanceof Google_Http_Batch) {
return $request->execute();
} else {
throw new Google_Exception("Do not know how to execute
this type of object.");
}
}
/**
* Whether or not to return raw requests
*
* @return boolean
*/
public function shouldDefer() {
return $this->deferExecution;
}
/**
* @return Google_Auth_Abstract Authentication implementation
*/
public function getAuth() {
if (!isset($this->auth)) {
$class = $this->config->getAuthClass();
$this->auth = new $class($this);
}
return $this->auth;
}
/**
* @return Google_IO_Abstract IO implementation
*/
public function getIo() {
if (!isset($this->io)) {
$class = $this->config->getIoClass();
$this->io = new $class($this);
}
return $this->io;
}
/**
* @return Google_Cache_Abstract Cache implementation
*/
public function getCache() {
if (!isset($this->cache)) {
$class = $this->config->getCacheClass();
$this->cache = new $class($this);
}
return $this->cache;
}
/**
* @return Google_Logger_Abstract Logger implementation
*/
public function getLogger() {
if (!isset($this->logger)) {
$class = $this->config->getLoggerClass();
$this->logger = new $class($this);
}
return $this->logger;
}
/**
* Retrieve custom configuration for a specific class.
*
* @param $class string|object - class or instance of class to retrieve
* @param $key string optional - key to retrieve
*
* @return array
*/
public function getClassConfig($class, $key = null) {
if (!is_string($class)) {
$class = get_class($class);
}
return $this->config->getClassConfig($class, $key);
}
/**
* Set configuration specific to a given class.
* $config->setClassConfig('Google_Cache_File',
* array('directory' => '/tmp/cache'));
*
* @param $class string|object - The class name for the configuration
* @param $config string key or an array of configuration values
* @param $value string optional - if $config is a key, the value
*
*/
public function setClassConfig($class, $config, $value = null) {
if (!is_string($class)) {
$class = get_class($class);
}
$this->config->setClassConfig($class, $config, $value);
}
/**
* @return string the base URL to use for calls to the APIs
*/
public function getBasePath() {
return $this->config->getBasePath();
}
/**
* @return string the name of the application
*/
public function getApplicationName() {
return $this->config->getApplicationName();
}
/**
* Are we running in Google AppEngine?
* return bool
*/
public function isAppEngine() {
return (isset($_SERVER['SERVER_SOFTWARE']) &&
strpos($_SERVER['SERVER_SOFTWARE'], 'Google App
Engine') !== false);
}
}
PK,C�[��@�
�
;Generator/Common/YouTube/googleclient/Google_Collection.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient;
use Countable;
use Iterator;
/**
* Extension to the regular Google_Model that automatically
* exposes the items array for iteration, so you can just
* iterate over the object rather than a reference inside.
*/
class Google_Collection extends Google_Model implements Iterator, Countable
{
protected $collection_key = 'items';
public function rewind() {
if (isset($this->modelData[$this->collection_key]) &&
is_array($this->modelData[$this->collection_key])) {
reset($this->modelData[$this->collection_key]);
}
}
public function current() {
$this->coerceType($this->key());
if (is_array($this->modelData[$this->collection_key])) {
return current($this->modelData[$this->collection_key]);
}
}
public function key() {
if (isset($this->modelData[$this->collection_key]) &&
is_array($this->modelData[$this->collection_key])) {
return key($this->modelData[$this->collection_key]);
}
}
public function next() {
return next($this->modelData[$this->collection_key]);
}
public function valid() {
$key = $this->key();
return $key !== null && $key !== false;
}
public function count() {
return count($this->modelData[$this->collection_key]);
}
public function offsetExists($offset) {
if (!is_numeric($offset)) {
return parent::offsetExists($offset);
}
return
isset($this->modelData[$this->collection_key][$offset]);
}
public function offsetGet($offset) {
if (!is_numeric($offset)) {
return parent::offsetGet($offset);
}
$this->coerceType($offset);
return $this->modelData[$this->collection_key][$offset];
}
public function offsetSet($offset, $value) {
if (!is_numeric($offset)) {
return parent::offsetSet($offset, $value);
}
$this->modelData[$this->collection_key][$offset] = $value;
}
public function offsetUnset($offset) {
if (!is_numeric($offset)) {
return parent::offsetUnset($offset);
}
unset($this->modelData[$this->collection_key][$offset]);
}
private function coerceType($offset) {
$typeKey = $this->keyType($this->collection_key);
if (isset($this->$typeKey) &&
!is_object($this->modelData[$this->collection_key][$offset])) {
$type =
$this->$typeKey;
$this->modelData[$this->collection_key][$offset] = new
$type($this->modelData[$this->collection_key][$offset]);
}
}
}
PK,C�[�*y��;�;7Generator/Common/YouTube/googleclient/Google_Config.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Auth\Google_Auth_OAuth2;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Logger\Google_Logger_Null;
/**
* A class to contain the library configuration for the Google API client.
*/
class Google_Config {
const GZIP_DISABLED = true;
const GZIP_ENABLED = false;
const GZIP_UPLOADS_ENABLED = true;
const GZIP_UPLOADS_DISABLED = false;
const USE_AUTO_IO_SELECTION = "auto";
const TASK_RETRY_NEVER = 0;
const TASK_RETRY_ONCE = 1;
const TASK_RETRY_ALWAYS = -1;
protected $configuration;
/**
* Create a new Google_Config. Can accept an ini file location with the
* local configuration. For example:
* application_name="My App"
*
* @param [$ini_file_location] - optional - The location of the ini
file to load
*/
public function __construct($ini_file_location = null) {
$this->configuration = array(
// The application_name is included in the User-Agent HTTP
header.
'application_name' => '',
// Which Authentication, Storage and HTTP IO classes to use.
'auth_class' => Google_Auth_OAuth2::class,
'io_class' => self::USE_AUTO_IO_SELECTION,
'logger_class' => Google_Logger_Null::class,
// Don't change these unless you're working against a
special development
// or testing environment.
'base_path' =>
'https://www.googleapis.com',
// Definition of class specific values, like file paths and so
on.
'classes' => array(
'Google_IO_Abstract' => array(
'request_timeout_seconds' => 100,
),
'Google_Logger_Abstract' => array(
'level' => 'debug',
'log_format' => "[%datetime%]
%level%: %message% %context%\n",
'date_format' => 'd/M/Y:H:i:s
O',
'allow_newlines' => true
),
'Google_Logger_File' => array(
'file' => 'php://stdout',
'mode' => 0640,
'lock' => false,
),
'Google_Http_Request' => array(
// Disable the use of gzip on calls if set to true.
Defaults to false.
'disable_gzip' =>
self::GZIP_ENABLED,
// We default gzip to disabled on uploads even if gzip
is otherwise
// enabled, due to some issues seen with small packet
sizes for uploads.
// Please test with this option before enabling gzip
for uploads in
// a production environment.
'enable_gzip_for_uploads' =>
self::GZIP_UPLOADS_DISABLED,
),
// If you want to pass in OAuth 2.0 settings, they will
need to be
// structured like this.
'Google_Auth_OAuth2' => array(
// Keys for OAuth 2.0 access, see the API console at
// https://developers.google.com/console
'client_id' =>
'',
'client_secret' =>
'',
'redirect_uri' =>
'',
// Simple API access key, also from the API console.
Ensure you get
// a Server key, and not a Browser key.
'developer_key' =>
'',
// Other parameters.
'hd' =>
'',
'prompt' =>
'',
'openid.realm' =>
'',
'include_granted_scopes' =>
'',
'login_hint' =>
'',
'request_visible_actions' =>
'',
'access_type' =>
'online',
'approval_prompt' =>
'auto',
'federated_signon_certs_url' =>
'https://www.googleapis.com/oauth2/v1/certs',
),
'Google_Task_Runner' => array(
// Delays are specified in seconds
'initial_delay' => 1,
'max_delay' => 60,
// Base number for exponential backoff
'factor' => 2,
// A random number between -jitter and jitter will be
added to the
// factor on each iteration to allow for better
distribution of
// retries.
'jitter' => .5,
// Maximum number of retries allowed
'retries' => 0
),
'Google_Service_Exception' => array(
'retry_map' => array(
'500' =>
self::TASK_RETRY_ALWAYS,
'503' =>
self::TASK_RETRY_ALWAYS,
'rateLimitExceeded' =>
self::TASK_RETRY_ALWAYS,
'userRateLimitExceeded' =>
self::TASK_RETRY_ALWAYS
)
),
'Google_IO_Exception' => array(
'retry_map' =>
!extension_loaded('curl') ? array() : array(
CURLE_COULDNT_RESOLVE_HOST =>
self::TASK_RETRY_ALWAYS,
CURLE_COULDNT_CONNECT =>
self::TASK_RETRY_ALWAYS,
CURLE_OPERATION_TIMEOUTED =>
self::TASK_RETRY_ALWAYS,
CURLE_SSL_CONNECT_ERROR =>
self::TASK_RETRY_ALWAYS,
CURLE_GOT_NOTHING =>
self::TASK_RETRY_ALWAYS
)
),
// Set a default directory for the file cache.
'Google_Cache_File' => array(
'directory' => sys_get_temp_dir() .
'/Google_Client'
)
),
);
if ($ini_file_location) {
$ini = parse_ini_file($ini_file_location, true);
if (is_array($ini) && count($ini)) {
$merged_configuration = $ini + $this->configuration;
if (isset($ini['classes']) &&
isset($this->configuration['classes'])) {
$merged_configuration['classes'] =
$ini['classes'] + $this->configuration['classes'];
}
$this->configuration = $merged_configuration;
}
}
}
/**
* Set configuration specific to a given class.
* $config->setClassConfig('Google_Cache_File',
* array('directory' => '/tmp/cache'));
*
* @param $class string The class name for the configuration
* @param $config string key or an array of configuration values
* @param $value string optional - if $config is a key, the value
*/
public function setClassConfig($class, $config, $value = null) {
if (!is_array($config)) {
if
(!isset($this->configuration['classes'][$class])) {
$this->configuration['classes'][$class] =
array();
}
$this->configuration['classes'][$class][$config] =
$value;
} else {
$this->configuration['classes'][$class] = $config;
}
}
public function getClassConfig($class, $key = null) {
if (!isset($this->configuration['classes'][$class])) {
return null;
}
if ($key === null) {
return $this->configuration['classes'][$class];
} else if
(isset($this->configuration['classes'][$class][$key])) {
return
$this->configuration['classes'][$class][$key];
} else {
return null;
}
}
/**
* Return the configured cache class.
*
* @return string
*/
public function getCacheClass() {
return $this->configuration['cache_class'];
}
/**
* Return the configured logger class.
*
* @return string
*/
public function getLoggerClass() {
return $this->configuration['logger_class'];
}
/**
* Return the configured Auth class.
*
* @return string
*/
public function getAuthClass() {
return $this->configuration['auth_class'];
}
/**
* Set the auth class.
*
* @param $class string the class name to set
*/
public function setAuthClass($class) {
$prev = $this->configuration['auth_class'];
if (!isset($this->configuration['classes'][$class])
&& isset($this->configuration['classes'][$prev])) {
$this->configuration['classes'][$class] =
$this->configuration['classes'][$prev];
}
$this->configuration['auth_class'] = $class;
}
/**
* Set the IO class.
*
* @param $class string the class name to set
*/
public function setIoClass($class) {
$prev = $this->configuration['io_class'];
if (!isset($this->configuration['classes'][$class])
&& isset($this->configuration['classes'][$prev])) {
$this->configuration['classes'][$class] =
$this->configuration['classes'][$prev];
}
$this->configuration['io_class'] = $class;
}
/**
* Set the cache class.
*
* @param $class string the class name to set
*/
public function setCacheClass($class) {
$prev = $this->configuration['cache_class'];
if (!isset($this->configuration['classes'][$class])
&& isset($this->configuration['classes'][$prev])) {
$this->configuration['classes'][$class] =
$this->configuration['classes'][$prev];
}
$this->configuration['cache_class'] = $class;
}
/**
* Set the logger class.
*
* @param $class string the class name to set
*/
public function setLoggerClass($class) {
$prev = $this->configuration['logger_class'];
if (!isset($this->configuration['classes'][$class])
&& isset($this->configuration['classes'][$prev])) {
$this->configuration['classes'][$class] =
$this->configuration['classes'][$prev];
}
$this->configuration['logger_class'] = $class;
}
/**
* Return the configured IO class.
*
* @return string
*/
public function getIoClass() {
return $this->configuration['io_class'];
}
/**
* Set the application name, this is included in the User-Agent HTTP
header.
*
* @param string $name
*/
public function setApplicationName($name) {
$this->configuration['application_name'] = $name;
}
/**
* @return string the name of the application
*/
public function getApplicationName() {
return $this->configuration['application_name'];
}
/**
* Set the client ID for the auth class.
*
* @param $clientId string - the API console client ID
*/
public function setClientId($clientId) {
$this->setAuthConfig('client_id', $clientId);
}
/**
* Set the client secret for the auth class.
*
* @param $secret string - the API console client secret
*/
public function setClientSecret($secret) {
$this->setAuthConfig('client_secret', $secret);
}
/**
* Set the redirect uri for the auth class. Note that if using the
* Javascript based sign in flow, this should be the string
'postmessage'.
*
* @param $uri string - the URI that users should be redirected to
*/
public function setRedirectUri($uri) {
$this->setAuthConfig('redirect_uri', $uri);
}
/**
* Set the app activities for the auth class.
*
* @param $rva string a space separated list of app activity types
*/
public function setRequestVisibleActions($rva) {
$this->setAuthConfig('request_visible_actions', $rva);
}
/**
* Set the the access type requested (offline or online.)
*
* @param $access string - the access type
*/
public function setAccessType($access) {
$this->setAuthConfig('access_type', $access);
}
/**
* Set when to show the approval prompt (auto or force)
*
* @param $approval string - the approval request
*/
public function setApprovalPrompt($approval) {
$this->setAuthConfig('approval_prompt', $approval);
}
/**
* Set the login hint (email address or sub identifier)
*
* @param $hint string
*/
public function setLoginHint($hint) {
$this->setAuthConfig('login_hint', $hint);
}
/**
* Set the developer key for the auth class. Note that this is separate
value
* from the client ID - if it looks like a URL, its a client ID!
*
* @param $key string - the API console developer key
*/
public function setDeveloperKey($key) {
$this->setAuthConfig('developer_key', $key);
}
/**
* Set the hd (hosted domain) parameter streamlines the login process
for
* Google Apps hosted accounts. By including the domain of the user,
you
* restrict sign-in to accounts at that domain.
*
* @param $hd string - the domain to use.
*/
public function setHostedDomain($hd) {
$this->setAuthConfig('hd', $hd);
}
/**
* Set the prompt hint. Valid values are none, consent and
select_account.
* If no value is specified and the user has not previously authorized
* access, then the user is shown a consent screen.
*
* @param $prompt string
*/
public function setPrompt($prompt) {
$this->setAuthConfig('prompt', $prompt);
}
/**
* openid.realm is a parameter from the OpenID 2.0 protocol, not from
OAuth
* 2.0. It is used in OpenID 2.0 requests to signify the URL-space for
which
* an authentication request is valid.
*
* @param $realm string - the URL-space to use.
*/
public function setOpenidRealm($realm) {
$this->setAuthConfig('openid.realm', $realm);
}
/**
* If this is provided with the value true, and the authorization
request is
* granted, the authorization will include any previous authorizations
* granted to this user/application combination for other scopes.
*
* @param $include boolean - the URL-space to use.
*/
public function setIncludeGrantedScopes($include) {
$this->setAuthConfig('include_granted_scopes',
$include ? "true" : "false");
}
/**
* @return string the base URL to use for API calls
*/
public function getBasePath() {
return $this->configuration['base_path'];
}
/**
* Set the auth configuration for the current auth class.
*
* @param $key - the key to set
* @param $value - the parameter value
*/
private function setAuthConfig($key, $value) {
if
(!isset($this->configuration['classes'][$this->getAuthClass()]))
{
$this->configuration['classes'][$this->getAuthClass()] =
array();
}
$this->configuration['classes'][$this->getAuthClass()][$key]
= $value;
}
}
PK,C�[��:Generator/Common/YouTube/googleclient/Google_Exception.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient;
use Exception;
class Google_Exception extends Exception {
}
PK,C�[�(=tO O
6Generator/Common/YouTube/googleclient/Google_Model.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient;
use ArrayAccess;
use ReflectionObject;
use ReflectionProperty;
use stdClass;
/**
* This class defines attributes, valid values, and usage which is
generated
* from a given json schema.
* http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5
*
* @author Chirag Shah <chirags@google.com>
*
*/
class Google_Model implements ArrayAccess {
protected $internal_gapi_mappings = array();
protected $modelData = array();
protected $processed = array();
/**
* Polymorphic - accepts a variable number of arguments dependent
* on the type of the model subclass.
*/
final public function __construct() {
if (func_num_args() == 1 && is_array(func_get_arg(0))) {
// Initialize the model with the array's contents.
$array = func_get_arg(0);
$this->mapTypes($array);
}
$this->gapiInit();
}
/**
* Getter that handles passthrough access to the data array, and lazy
object creation.
*
* @param string $key Property name.
*
* @return mixed The value if any, or null.
*/
public function __get($key) {
$keyTypeName = $this->keyType($key);
$keyDataType = $this->dataType($key);
if (isset($this->$keyTypeName) &&
!isset($this->processed[$key])) {
if (isset($this->modelData[$key])) {
$val = $this->modelData[$key];
} else if (isset($this->$keyDataType) &&
($this->$keyDataType == 'array' || $this->$keyDataType ==
'map')) {
$val = array();
} else {
$val = null;
}
if ($this->isAssociativeArray($val)) {
if (isset($this->$keyDataType) &&
'map' == $this->$keyDataType) {
foreach ($val as $arrayKey => $arrayItem) {
$this->modelData[$key][$arrayKey] =
$this->createObjectFromName($keyTypeName, $arrayItem);
}
} else {
$this->modelData[$key] =
$this->createObjectFromName($keyTypeName, $val);
}
} else if (is_array($val)) {
$arrayObject = array();
foreach ($val as $arrayIndex => $arrayItem) {
$arrayObject[$arrayIndex] =
$this->createObjectFromName($keyTypeName, $arrayItem);
}
$this->modelData[$key] = $arrayObject;
}
$this->processed[$key] = true;
}
return isset($this->modelData[$key]) ? $this->modelData[$key]
: null;
}
/**
* Initialize this object's properties from an array.
*
* @param array $array Used to seed this object's properties.
*
* @return void
*/
protected function mapTypes($array) {
// Hard initilise simple types, lazy load more complex ones.
foreach ($array as $key => $val) {
if (!property_exists($this, $this->keyType($key)) &&
property_exists($this, $key)) {
$this->$key = $val;
unset($array[$key]);
} elseif (property_exists($this, $camelKey =
Google_Utils::camelCase($key))) {
// This checks if property exists as camelCase, leaving it
in array as snake_case
// in case of backwards compatibility issues.
$this->$camelKey = $val;
}
}
$this->modelData = $array;
}
/**
* Blank initialiser to be used in subclasses to do post-construction
initialisation - this
* avoids the need for subclasses to have to implement the variadics
handling in their
* constructors.
*/
protected function gapiInit() {
return;
}
/**
* Create a simplified object suitable for straightforward
* conversion to JSON. This is relatively expensive
* due to the usage of reflection, but shouldn't be called
* a whole lot, and is the most straightforward way to filter.
*/
public function toSimpleObject() {
$object = new stdClass();
// Process all other data.
foreach ($this->modelData as $key => $val) {
$result = $this->getSimpleValue($val);
if ($result !== null) {
$object->$key = $result;
}
}
// Process all public properties.
$reflect = new ReflectionObject($this);
$props =
$reflect->getProperties(ReflectionProperty::IS_PUBLIC);
foreach ($props as $member) {
$name = $member->getName();
$result = $this->getSimpleValue($this->$name);
if ($result !== null) {
$name = $this->getMappedName($name);
$object->$name = $result;
}
}
return $object;
}
/**
* Handle different types of values, primarily
* other objects and map and array data types.
*/
private function getSimpleValue($value) {
if ($value instanceof Google_Model) {
return $value->toSimpleObject();
} else if (is_array($value)) {
$return = array();
foreach ($value as $key => $a_value) {
$a_value = $this->getSimpleValue($a_value);
if ($a_value !== null) {
$key = $this->getMappedName($key);
$return[$key] = $a_value;
}
}
return $return;
}
return $value;
}
/**
* If there is an internal name mapping, use that.
*/
private function getMappedName($key) {
if (isset($this->internal_gapi_mappings) &&
isset($this->internal_gapi_mappings[$key])) {
$key = $this->internal_gapi_mappings[$key];
}
return $key;
}
/**
* Returns true only if the array is associative.
*
* @param array $array
*
* @return bool True if the array is associative.
*/
protected function isAssociativeArray($array) {
if (!is_array($array)) {
return false;
}
$keys = array_keys($array);
foreach ($keys as $key) {
if (is_string($key)) {
return true;
}
}
return false;
}
/**
* Given a variable name, discover its type.
*
* @param $name
* @param $item
*
* @return object The object from the item.
*/
private function createObjectFromName($name, $item) {
if (strpos($this->$name, 'Google_Service_YouTube') !==
false) {
$type =
'Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Service\\'
. $this->$name;
} else {
$type = __NAMESPACE__ . '\\' . $this->$name;
}
return new $type($item);
}
/**
* Verify if $obj is an array.
*
* @throws Google_Exception Thrown if $obj isn't an array.
*
* @param array $obj Items that should be validated.
* @param string $method Method expecting an array as an argument.
*/
public function assertIsArray($obj, $method) {
if ($obj && !is_array($obj)) {
throw new Google_Exception("Incorrect parameter type
passed to $method(). Expected an array.");
}
}
public function offsetExists($offset) {
return isset($this->$offset) ||
isset($this->modelData[$offset]);
}
public function offsetGet($offset) {
return isset($this->$offset) ? $this->$offset :
$this->__get($offset);
}
public function offsetSet($offset, $value) {
if (property_exists($this, $offset)) {
$this->$offset = $value;
} else {
$this->modelData[$offset] = $value;
$this->processed[$offset] = true;
}
}
public function offsetUnset($offset) {
unset($this->modelData[$offset]);
}
protected function keyType($key) {
return $key . "Type";
}
protected function dataType($key) {
return $key . "DataType";
}
public function __isset($key) {
return isset($this->modelData[$key]);
}
public function __unset($key) {
unset($this->modelData[$key]);
}
}
PK,C�[TY�CC8Generator/Common/YouTube/googleclient/Google_Service.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient;
/*
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the
"License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS"
BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class Google_Service {
public $version;
public $servicePath;
public $availableScopes;
public $resource;
private $client;
public function __construct(Google_Client $client) {
$this->client = $client;
}
/**
* Return the associated Google_Client class.
*
* @return Google_Client
*/
public function getClient() {
return $this->client;
}
}
PK,C�[O���336Generator/Common/YouTube/googleclient/Google_Utils.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient;
/**
* Collection of static utility methods used for convenience across
* the client library.
*
* @author Chirag Shah <chirags@google.com>
*/
class Google_Utils {
public static function urlSafeB64Encode($data) {
$b64 = n2_base64_encode($data);
$b64 = str_replace(array(
'+',
'/',
'\r',
'\n',
'='
), array(
'-',
'_'
), $b64);
return $b64;
}
public static function urlSafeB64Decode($b64) {
$b64 = str_replace(array(
'-',
'_'
), array(
'+',
'/'
), $b64);
return n2_base64_decode($b64);
}
/**
* Misc function used to count the number of bytes in a post body, in
the
* world of multi-byte chars and the unpredictability of
* strlen/mb_strlen/sizeof, this is the only way to do that in a sane
* manner at the moment.
*
* This algorithm was originally developed for the
* Solar Framework by Paul M. Jones
*
* @link http://solarphp.com/
* @link http://svn.solarphp.com/core/trunk/Solar/Json.php
* @link
http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php
*
* @param string $str
*
* @return int The number of bytes in a string.
*/
public static function getStrLen($str) {
$strlenVar = strlen($str);
$d = $ret = 0;
for ($count = 0; $count < $strlenVar; ++$count) {
$ordinalValue = ord($str[$ret]);
switch (true) {
case (($ordinalValue >= 0x20) && ($ordinalValue
<= 0x7F)):
// characters U-00000000 - U-0000007F (same as ASCII)
$ret++;
break;
case (($ordinalValue & 0xE0) == 0xC0):
// characters U-00000080 - U-000007FF, mask 110XXXXX
// see
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 2;
break;
case (($ordinalValue & 0xF0) == 0xE0):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 3;
break;
case (($ordinalValue & 0xF8) == 0xF0):
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 4;
break;
case (($ordinalValue & 0xFC) == 0xF8):
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 5;
break;
case (($ordinalValue & 0xFE) == 0xFC):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see
http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$ret += 6;
break;
default:
$ret++;
}
}
return $ret;
}
/**
* Normalize all keys in an array to lower-case.
*
* @param array $arr
*
* @return array Normalized array.
*/
public static function normalize($arr) {
if (!is_array($arr)) {
return array();
}
$normalized = array();
foreach ($arr as $key => $val) {
$normalized[strtolower($key)] = $val;
}
return $normalized;
}
/**
* Convert a string to camelCase
*
* @param string $value
*
* @return string
*/
public static function camelCase($value) {
$value = ucwords(str_replace(array(
'-',
'_'
), ' ', $value));
$value = str_replace(' ', '', $value);
$value[0] = strtolower($value[0]);
return $value;
}
}
PK.C�[��{[[FGenerator/Common/YouTube/googleclient/Http/Google_Http_CacheParser.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http;
/**
* Implement the caching directives specified in rfc2616. This
* implementation is guided by the guidance offered in rfc2616-sec13.
*
* @author Chirag Shah <chirags@google.com>
*/
class Google_Http_CacheParser {
public static $CACHEABLE_HTTP_METHODS = array(
'GET',
'HEAD'
);
public static $CACHEABLE_STATUS_CODES = array(
'200',
'203',
'300',
'301'
);
/**
* Check if an HTTP request can be cached by a private local cache.
*
* @static
*
* @param Google_Http_Request $resp
*
* @return bool True if the request is cacheable.
* False if the request is uncacheable.
*/
public static function isRequestCacheable(Google_Http_Request $resp) {
$method = $resp->getRequestMethod();
if (!in_array($method, self::$CACHEABLE_HTTP_METHODS)) {
return false;
}
// Don't cache authorized requests/responses.
// [rfc2616-14.8] When a shared cache receives a request containing
an
// Authorization field, it MUST NOT return the corresponding
response
// as a reply to any other request...
if ($resp->getRequestHeader("authorization")) {
return false;
}
return true;
}
/**
* Check if an HTTP response can be cached by a private local cache.
*
* @static
*
* @param Google_Http_Request $resp
*
* @return bool True if the response is cacheable.
* False if the response is un-cacheable.
*/
public static function isResponseCacheable(Google_Http_Request $resp) {
// First, check if the HTTP request was cacheable before inspecting
the
// HTTP response.
if (false == self::isRequestCacheable($resp)) {
return false;
}
$code = $resp->getResponseHttpCode();
if (!in_array($code, self::$CACHEABLE_STATUS_CODES)) {
return false;
}
// The resource is uncacheable if the resource is already expired
and
// the resource doesn't have an ETag for revalidation.
$etag = $resp->getResponseHeader("etag");
if (self::isExpired($resp) && $etag == false) {
return false;
}
// [rfc2616-14.9.2] If [no-store is] sent in a response, a cache
MUST NOT
// store any part of either this response or the request that
elicited it.
$cacheControl = $resp->getParsedCacheControl();
if (isset($cacheControl['no-store'])) {
return false;
}
// Pragma: no-cache is an http request directive, but is
occasionally
// used as a response header incorrectly.
$pragma = $resp->getResponseHeader('pragma');
if ($pragma == 'no-cache' || strpos($pragma,
'no-cache') !== false) {
return false;
}
// [rfc2616-14.44] Vary: * is extremely difficult to cache.
"It implies that
// a cache cannot determine from the request headers of a
subsequent request
// whether this response is the appropriate representation."
// Given this, we deem responses with the Vary header as
uncacheable.
$vary = $resp->getResponseHeader('vary');
if ($vary) {
return false;
}
return true;
}
/**
* @static
*
* @param Google_Http_Request $resp
*
* @return bool True if the HTTP response is considered to be expired.
* False if it is considered to be fresh.
*/
public static function isExpired(Google_Http_Request $resp) {
// HTTP/1.1 clients and caches MUST treat other invalid date
formats,
// especially including the value “0”, as in the past.
$parsedExpires = false;
$responseHeaders = $resp->getResponseHeaders();
if (isset($responseHeaders['expires'])) {
$rawExpires = $responseHeaders['expires'];
// Check for a malformed expires header first.
if (empty($rawExpires) || (is_numeric($rawExpires) &&
$rawExpires <= 0)) {
return true;
}
// See if we can parse the expires header.
$parsedExpires = strtotime($rawExpires);
if (false == $parsedExpires || $parsedExpires <= 0) {
return true;
}
}
// Calculate the freshness of an http response.
$freshnessLifetime = false;
$cacheControl = $resp->getParsedCacheControl();
if (isset($cacheControl['max-age'])) {
$freshnessLifetime = $cacheControl['max-age'];
}
$rawDate = $resp->getResponseHeader('date');
$parsedDate = strtotime($rawDate);
if (empty($rawDate) || false == $parsedDate) {
// We can't default this to now, as that means future
cache reads
// will always pass with the logic below, so we will require a
// date be injected if not supplied.
throw new Google_Exception("All cacheable requests must
have creation dates.");
}
if (false == $freshnessLifetime &&
isset($responseHeaders['expires'])) {
$freshnessLifetime = $parsedExpires - $parsedDate;
}
if (false == $freshnessLifetime) {
return true;
}
// Calculate the age of an http response.
$age = max(0, time() - $parsedDate);
if (isset($responseHeaders['age'])) {
$age = max($age, strtotime($responseHeaders['age']));
}
return $freshnessLifetime <= $age;
}
/**
* Determine if a cache entry should be revalidated with by the origin.
*
* @param Google_Http_Request $response
*
* @return bool True if the entry is expired, else return false.
*/
public static function mustRevalidate(Google_Http_Request $response) {
// [13.3] When a cache has a stale entry that it would like to use
as a
// response to a client's request, it first has to check with
the origin
// server to see if its cached entry is still usable.
return self::isExpired($response);
}
}
PK.C�[m-��.�.BGenerator/Common/YouTube/googleclient/Http/Google_Http_Request.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Utils;
/**
* HTTP Request to be executed by IO classes. Upon execution, the
* responseHttpCode, responseHeaders and responseBody will be filled in.
*
* @author Chris Chabot <chabotc@google.com>
* @author Chirag Shah <chirags@google.com>
*
*/
class Google_Http_Request {
const GZIP_UA = " (gzip)";
private $batchHeaders = array(
'Content-Type' =>
'application/http',
'Content-Transfer-Encoding' => 'binary',
'MIME-Version' => '1.0',
);
protected $queryParams;
protected $requestMethod;
protected $requestHeaders;
protected $baseComponent = null;
protected $path;
protected $postBody;
protected $userAgent;
protected $canGzip = null;
protected $responseHttpCode;
protected $responseHeaders;
protected $responseBody;
protected $expectedClass;
public $accessKey;
public function __construct($url, $method = 'GET', $headers =
array(), $postBody = null) {
$this->setUrl($url);
$this->setRequestMethod($method);
$this->setRequestHeaders($headers);
$this->setPostBody($postBody);
}
/**
* Misc function that returns the base url component of the $url
* used by the OAuth signing class to calculate the base string
*
* @return string The base url component of the $url.
*/
public function getBaseComponent() {
return $this->baseComponent;
}
/**
* Set the base URL that path and query parameters will be added to.
*
* @param $baseComponent string
*/
public function setBaseComponent($baseComponent) {
$this->baseComponent = $baseComponent;
}
/**
* Enable support for gzipped responses with this request.
*/
public function enableGzip() {
$this->setRequestHeaders(array("Accept-Encoding" =>
"gzip"));
$this->canGzip = true;
$this->setUserAgent($this->userAgent);
}
/**
* Disable support for gzip responses with this request.
*/
public function disableGzip() {
if (isset($this->requestHeaders['accept-encoding'])
&& $this->requestHeaders['accept-encoding'] ==
"gzip") {
unset($this->requestHeaders['accept-encoding']);
}
$this->canGzip = false;
$this->userAgent = str_replace(self::GZIP_UA, "",
$this->userAgent);
}
/**
* Can this request accept a gzip response?
*
* @return bool
*/
public function canGzip() {
return $this->canGzip;
}
/**
* Misc function that returns an array of the query parameters of the
current
* url used by the OAuth signing class to calculate the signature
*
* @return array Query parameters in the query string.
*/
public function getQueryParams() {
return $this->queryParams;
}
/**
* Set a new query parameter.
*
* @param $key - string to set, does not need to be URL encoded
* @param $value - string to set, does not need to be URL encoded
*/
public function setQueryParam($key, $value) {
$this->queryParams[$key] = $value;
}
/**
* @return string HTTP Response Code.
*/
public function getResponseHttpCode() {
return (int)$this->responseHttpCode;
}
/**
* @param int $responseHttpCode HTTP Response Code.
*/
public function setResponseHttpCode($responseHttpCode) {
$this->responseHttpCode = $responseHttpCode;
}
/**
* @return $responseHeaders (array) HTTP Response Headers.
*/
public function getResponseHeaders() {
return $this->responseHeaders;
}
/**
* @return string HTTP Response Body
*/
public function getResponseBody() {
return $this->responseBody;
}
/**
* Set the class the response to this request should expect.
*
* @param $class string the class name
*/
public function setExpectedClass($class) {
$this->expectedClass = $class;
}
/**
* Retrieve the expected class the response should expect.
*
* @return string class name
*/
public function getExpectedClass() {
return $this->expectedClass;
}
/**
* @param array $headers The HTTP response headers
* to be normalized.
*/
public function setResponseHeaders($headers) {
$headers = Google_Utils::normalize($headers);
if ($this->responseHeaders) {
$headers = array_merge($this->responseHeaders, $headers);
}
$this->responseHeaders = $headers;
}
/**
* @param string $key
*
* @return array|boolean Returns the requested HTTP header or
* false if unavailable.
*/
public function getResponseHeader($key) {
return isset($this->responseHeaders[$key]) ?
$this->responseHeaders[$key] : false;
}
/**
* @param string $responseBody The HTTP response body.
*/
public function setResponseBody($responseBody) {
$this->responseBody = $responseBody;
}
/**
* @return string $url The request URL.
*/
public function getUrl() {
return $this->baseComponent . $this->path .
(count($this->queryParams) ? "?" .
$this->buildQuery($this->queryParams) : '');
}
/**
* @return string $method HTTP Request Method.
*/
public function getRequestMethod() {
return $this->requestMethod;
}
/**
* @return array $headers HTTP Request Headers.
*/
public function getRequestHeaders() {
return $this->requestHeaders;
}
/**
* @param string $key
*
* @return array|boolean Returns the requested HTTP header or
* false if unavailable.
*/
public function getRequestHeader($key) {
return isset($this->requestHeaders[$key]) ?
$this->requestHeaders[$key] : false;
}
/**
* @return string $postBody HTTP Request Body.
*/
public function getPostBody() {
return $this->postBody;
}
/**
* @param string $url the url to set
*/
public function setUrl($url) {
if (substr($url, 0, 4) != 'http') {
// Force the path become relative.
if (substr($url, 0, 1) !== '/') {
$url = '/' . $url;
}
}
$parts = parse_url($url);
if (isset($parts['host'])) {
$this->baseComponent = sprintf("%s%s%s",
isset($parts['scheme']) ? $parts['scheme'] .
"://" : '', isset($parts['host']) ?
$parts['host'] : '', isset($parts['port']) ?
":" . $parts['port'] : '');
}
$this->path = isset($parts['path']) ?
$parts['path'] : '';
$this->queryParams = array();
if (isset($parts['query'])) {
$this->queryParams =
$this->parseQuery($parts['query']);
}
}
/**
* @param string $method Set he HTTP Method and normalize
* it to upper-case, as required by HTTP.
*
*/
public function setRequestMethod($method) {
$this->requestMethod = strtoupper($method);
}
/**
* @param array $headers The HTTP request headers
* to be set and normalized.
*/
public function setRequestHeaders($headers) {
$headers = Google_Utils::normalize($headers);
if ($this->requestHeaders) {
$headers = array_merge($this->requestHeaders, $headers);
}
$this->requestHeaders = $headers;
}
/**
* @param string $postBody the postBody to set
*/
public function setPostBody($postBody) {
$this->postBody = $postBody;
}
/**
* Set the User-Agent Header.
*
* @param string $userAgent The User-Agent.
*/
public function setUserAgent($userAgent) {
$this->userAgent = $userAgent;
if ($this->canGzip) {
$this->userAgent = $userAgent . self::GZIP_UA;
}
}
/**
* @return string The User-Agent.
*/
public function getUserAgent() {
return $this->userAgent;
}
/**
* Returns a cache key depending on if this was an OAuth signed request
* in which case it will use the non-signed url and access key to make
this
* cache key unique per authenticated user, else use the plain request
url
*
* @return string The md5 hash of the request cache key.
*/
public function getCacheKey() {
$key = $this->getUrl();
if (isset($this->accessKey)) {
$key .= $this->accessKey;
}
if (isset($this->requestHeaders['authorization'])) {
$key .= $this->requestHeaders['authorization'];
}
return md5($key);
}
public function getParsedCacheControl() {
$parsed = array();
$rawCacheControl =
$this->getResponseHeader('cache-control');
if ($rawCacheControl) {
$rawCacheControl = str_replace(', ',
'&', $rawCacheControl);
parse_str($rawCacheControl, $parsed);
}
return $parsed;
}
/**
* @param string $id
*
* @return string A string representation of the HTTP Request.
*/
public function toBatchString($id) {
$str = '';
$path = parse_url($this->getUrl(), PHP_URL_PATH) . "?"
. http_build_query($this->queryParams);
$str .= $this->getRequestMethod() . ' ' . $path .
" HTTP/1.1\n";
foreach ($this->getRequestHeaders() as $key => $val) {
$str .= $key . ': ' . $val . "\n";
}
if ($this->getPostBody()) {
$str .= "\n";
$str .= $this->getPostBody();
}
$headers = '';
foreach ($this->batchHeaders as $key => $val) {
$headers .= $key . ': ' . $val . "\n";
}
$headers .= "Content-ID: $id\n";
$str = $headers . "\n" . $str;
return $str;
}
/**
* Our own version of parse_str that allows for multiple variables
* with the same name.
*
* @param $string - the query string to parse
*/
private function parseQuery($string) {
$return = array();
$parts = explode("&", $string);
foreach ($parts as $part) {
list($key, $value) = explode('=', $part, 2);
$value = urldecode($value);
if (isset($return[$key])) {
if (!is_array($return[$key])) {
$return[$key] = array($return[$key]);
}
$return[$key][] = $value;
} else {
$return[$key] = $value;
}
}
return $return;
}
/**
* A version of build query that allows for multiple
* duplicate keys.
*
* @param $parts array of key value pairs
*/
private function buildQuery($parts) {
$return = array();
foreach ($parts as $key => $value) {
if (is_array($value)) {
foreach ($value as $v) {
$return[] = urlencode($key) . "=" .
urlencode($v);
}
} else {
$return[] = urlencode($key) . "=" .
urlencode($value);
}
}
return implode('&', $return);
}
/**
* If we're POSTing and have no body to send, we can send the
query
* parameters in there, which avoids length issues with longer query
* params.
*/
public function maybeMoveParametersToBody() {
if ($this->getRequestMethod() == "POST" &&
empty($this->postBody)) {
$this->setRequestHeaders(array(
"content-type" =>
"application/x-www-form-urlencoded; charset=UTF-8"
));
$this->setPostBody($this->buildQuery($this->queryParams));
$this->queryParams = array();
}
}
}
PK.C�[_�ƕ��?Generator/Common/YouTube/googleclient/Http/Google_Http_REST.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Client;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Service\Google_Service_Exception;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Task\Google_Task_Runner;
/**
* This class implements the RESTful transport of
apiServiceRequest()'s
*
* @author Chris Chabot <chabotc@google.com>
* @author Chirag Shah <chirags@google.com>
*/
class Google_Http_REST {
/**
* Executes a Google_Http_Request and (if applicable) automatically
retries
* when errors occur.
*
* @param Google_Client $client
* @param Google_Http_Request $req
*
* @return array decoded result
* @throws Google_Service_Exception on server side error (ie: not
authenticated,
* invalid or malformed post body, invalid url)
*/
public static function execute(Google_Client $client,
Google_Http_Request $req) {
$runner = new Google_Task_Runner($client, sprintf('%s
%s', $req->getRequestMethod(), $req->getUrl()), array(
get_class(),
'doExecute'
), array(
$client,
$req
));
return $runner->run();
}
/**
* Executes a Google_Http_Request
*
* @param Google_Client $client
* @param Google_Http_Request $req
*
* @return array decoded result
* @throws Google_Service_Exception on server side error (ie: not
authenticated,
* invalid or malformed post body, invalid url)
*/
public static function doExecute(Google_Client $client,
Google_Http_Request $req) {
$httpRequest = $client->getIo()
->makeRequest($req);
$httpRequest->setExpectedClass($req->getExpectedClass());
return self::decodeHttpResponse($httpRequest, $client);
}
/**
* Decode an HTTP Response.
*
* @static
*
* @param Google_Http_Request $response The http response to be
decoded.
* @param Google_Client $client
*
* @return mixed|null
* @throws Google_Service_Exception
*
*/
public static function decodeHttpResponse($response, Google_Client
$client = null) {
$code = $response->getResponseHttpCode();
$body = $response->getResponseBody();
$decoded = null;
if ((intVal($code)) >= 300) {
$decoded = json_decode($body, true);
$err = 'Error calling ' .
$response->getRequestMethod() . ' ' . $response->getUrl();
if (isset($decoded['error']) &&
isset($decoded['error']['message']) &&
isset($decoded['error']['code'])) {
// if we're getting a json encoded error definition,
use that instead of the raw response
// body for improved readability
$err .= ":
({$decoded['error']['code']})
{$decoded['error']['message']}";
} else {
$err .= ": ($code) $body";
}
$errors = null;
// Specific check for APIs which don't return error
details, such as Blogger.
if (isset($decoded['error']) &&
isset($decoded['error']['errors'])) {
$errors = $decoded['error']['errors'];
}
$map = null;
if ($client) {
$client->getLogger()
->error($err, array(
'code' => $code,
'errors' => $errors
));
$map =
$client->getClassConfig('Google_Service_Exception',
'retry_map');
}
throw new Google_Service_Exception($err, $code, null, $errors,
$map);
}
// Only attempt to decode the response, if the response code
wasn't (204) 'no content'
if ($code != '204') {
$decoded = json_decode($body, true);
if ($decoded === null || $decoded === "") {
$error = "Invalid json in service response:
$body";
if ($client) {
$client->getLogger()
->error($error);
}
throw new Google_Service_Exception($error);
}
if ($response->getExpectedClass()) {
$class = $response->getExpectedClass();
$decoded = new $class($decoded);
}
}
return $decoded;
}
/**
* Parse/expand request parameters and create a fully qualified
* request uri.
*
* @static
*
* @param string $servicePath
* @param string $restPath
* @param array $params
*
* @return string $requestUrl
*/
public static function createRequestUri($servicePath, $restPath,
$params) {
$requestUrl = $servicePath . $restPath;
$uriTemplateVars = array();
$queryVars = array();
foreach ($params as $paramName => $paramSpec) {
if ($paramSpec['type'] == 'boolean') {
$paramSpec['value'] =
($paramSpec['value']) ? 'true' : 'false';
}
if ($paramSpec['location'] == 'path') {
$uriTemplateVars[$paramName] =
$paramSpec['value'];
} else if ($paramSpec['location'] ==
'query') {
if (isset($paramSpec['repeated']) &&
is_array($paramSpec['value'])) {
foreach ($paramSpec['value'] as $value) {
$queryVars[] = $paramName . '=' .
rawurlencode($value);
}
} else {
$queryVars[] = $paramName . '=' .
rawurlencode($paramSpec['value']);
}
}
}
if (count($uriTemplateVars)) {
$uriTemplateParser = new Google_Utils_URITemplate();
$requestUrl = $uriTemplateParser->parse($requestUrl,
$uriTemplateVars);
}
if (count($queryVars)) {
$requestUrl .= '?' . implode('&',
$queryVars);
}
return $requestUrl;
}
}
PK.C�[�k��-�-?Generator/Common/YouTube/googleclient/IO/Google_IO_Abstract.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\IO;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Client;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_CacheParser;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_Request;
/**
* Abstract IO base class
*/
abstract class Google_IO_Abstract {
const UNKNOWN_CODE = 0;
const FORM_URLENCODED = 'application/x-www-form-urlencoded';
private static $CONNECTION_ESTABLISHED_HEADERS = array(
"HTTP/1.0 200 Connection established\r\n\r\n",
"HTTP/1.1 200 Connection established\r\n\r\n",
);
private static $ENTITY_HTTP_METHODS = array(
"POST" => null,
"PUT" => null
);
private static $HOP_BY_HOP = array(
'connection' => true,
'keep-alive' => true,
'proxy-authenticate' => true,
'proxy-authorization' => true,
'te' => true,
'trailers' => true,
'transfer-encoding' => true,
'upgrade' => true
);
/** @var Google_Client */
protected $client;
public function __construct(Google_Client $client) {
$this->client = $client;
$timeout =
$client->getClassConfig('Google_IO_Abstract',
'request_timeout_seconds');
if ($timeout > 0) {
$this->setTimeout($timeout);
}
}
/**
* Executes a Google_Http_Request and returns the resulting populated
Google_Http_Request
*
* @param Google_Http_Request $request
*
* @return Google_Http_Request $request
*/
abstract public function executeRequest(Google_Http_Request $request);
/**
* Set options that update the transport implementation's
behavior.
*
* @param $options
*/
abstract public function setOptions($options);
/**
* Set the maximum request time in seconds.
*
* @param $timeout in seconds
*/
abstract public function setTimeout($timeout);
/**
* Get the maximum request time in seconds.
*
* @return timeout in seconds
*/
abstract public function getTimeout();
/**
* Test for the presence of a cURL header processing bug
*
* The cURL bug was present in versions prior to 7.30.0 and caused the
header
* length to be miscalculated when a "Connection established"
header added by
* some proxies was present.
*
* @return boolean
*/
abstract protected function needsQuirk();
/**
* @visible for testing.
* Cache the response to an HTTP request if it is cacheable.
*
* @param Google_Http_Request $request
*
* @return bool Returns true if the insertion was successful.
* Otherwise, return false.
*/
public function setCachedRequest(Google_Http_Request $request) {
// Determine if the request is cacheable.
if (Google_Http_CacheParser::isResponseCacheable($request)) {
$this->client->getCache()
->set($request->getCacheKey(), $request);
return true;
}
return false;
}
/**
* Execute an HTTP Request
*
* @param Google_HttpRequest $request the http request to be executed
*
* @return Google_HttpRequest http request with the response http code,
* response headers and response body filled in
* @throws Google_IO_Exception on curl or IO error
*/
public function makeRequest(Google_Http_Request $request) {
// First, check to see if we have a valid cached version.
$cached = $this->getCachedRequest($request);
if ($cached !== false && $cached instanceof
Google_Http_Request) {
if (!$this->checkMustRevalidateCachedRequest($cached,
$request)) {
return $cached;
}
}
if (array_key_exists($request->getRequestMethod(),
self::$ENTITY_HTTP_METHODS)) {
$request = $this->processEntityRequest($request);
}
list($responseData, $responseHeaders, $respHttpCode) =
$this->executeRequest($request);
if ($respHttpCode == 304 && $cached) {
// If the server responded NOT_MODIFIED, return the cached
request.
$this->updateCachedRequest($cached, $responseHeaders);
return $cached;
}
if (!isset($responseHeaders['Date']) &&
!isset($responseHeaders['date'])) {
$responseHeaders['date'] = date("r");
}
$request->setResponseHttpCode($respHttpCode);
$request->setResponseHeaders($responseHeaders);
$request->setResponseBody($responseData);
// Store the request in cache (the function checks to see if the
request
// can actually be cached)
$this->setCachedRequest($request);
return $request;
}
/**
* @visible for testing.
*
* @param Google_Http_Request $request
*
* @return Google_Http_Request|bool Returns the cached object or
* false if the operation was unsuccessful.
*/
public function getCachedRequest(Google_Http_Request $request) {
if (false ===
Google_Http_CacheParser::isRequestCacheable($request)) {
return false;
}
return $this->client->getCache()
->get($request->getCacheKey());
}
/**
* @visible for testing
* Process an http request that contains an enclosed entity.
*
* @param Google_Http_Request $request
*
* @return Google_Http_Request Processed request with the enclosed
entity.
*/
public function processEntityRequest(Google_Http_Request $request) {
$postBody = $request->getPostBody();
$contentType =
$request->getRequestHeader("content-type");
// Set the default content-type as
application/x-www-form-urlencoded.
if (false == $contentType) {
$contentType = self::FORM_URLENCODED;
$request->setRequestHeaders(array('content-type'
=> $contentType));
}
// Force the payload to match the content-type asserted in the
header.
if ($contentType == self::FORM_URLENCODED &&
is_array($postBody)) {
$postBody = http_build_query($postBody, '',
'&');
$request->setPostBody($postBody);
}
// Make sure the content-length header is set.
if (!$postBody || is_string($postBody)) {
$postsLength = strlen($postBody);
$request->setRequestHeaders(array('content-length'
=> $postsLength));
}
return $request;
}
/**
* Check if an already cached request must be revalidated, and if so
update
* the request with the correct ETag headers.
*
* @param Google_Http_Request $cached A previously cached response.
* @param Google_Http_Request $request The outbound request.
* return bool If the cached object
needs to be revalidated, false if it is
* still current and can be
re-used.
*/
protected function checkMustRevalidateCachedRequest($cached, $request)
{
if (Google_Http_CacheParser::mustRevalidate($cached)) {
$addHeaders = array();
if ($cached->getResponseHeader('etag')) {
// [13.3.4] If an entity tag has been provided by the
origin server,
// we must use that entity tag in any cache-conditional
request.
$addHeaders['If-None-Match'] =
$cached->getResponseHeader('etag');
} elseif ($cached->getResponseHeader('date')) {
$addHeaders['If-Modified-Since'] =
$cached->getResponseHeader('date');
}
$request->setRequestHeaders($addHeaders);
return true;
} else {
return false;
}
}
/**
* Update a cached request, using the headers from the last response.
*
* @param Google_HttpRequest $cached A previously cached response.
* @param mixed Associative array of response headers from the last
request.
*/
protected function updateCachedRequest($cached, $responseHeaders) {
$hopByHop = self::$HOP_BY_HOP;
if (!empty($responseHeaders['connection'])) {
$connectionHeaders = array_map('strtolower',
array_filter(array_map('trim', explode(',',
$responseHeaders['connection']))));
$hopByHop += array_fill_keys($connectionHeaders,
true);
}
$endToEnd = array_diff_key($responseHeaders, $hopByHop);
$cached->setResponseHeaders($endToEnd);
}
/**
* Used by the IO lib and also the batch processing.
*
* @param $respData
* @param $headerSize
*
* @return array
*/
public function parseHttpResponse($respData, $headerSize) {
// check proxy header
foreach (self::$CONNECTION_ESTABLISHED_HEADERS as
$established_header) {
if (stripos($respData, $established_header) !== false) {
// existed, remove it
$respData = str_ireplace($established_header, '',
$respData);
// Subtract the proxy header size unless the cURL bug prior
to 7.30.0
// is present which prevented the proxy header size from
being taken into
// account.
if (!$this->needsQuirk()) {
$headerSize -= strlen($established_header);
}
break;
}
}
if ($headerSize) {
$responseBody = substr($respData, $headerSize);
$responseHeaders = substr($respData, 0, $headerSize);
} else {
$responseSegments = explode("\r\n\r\n", $respData,
2);
$responseHeaders = $responseSegments[0];
$responseBody = isset($responseSegments[1]) ?
$responseSegments[1] : null;
}
$responseHeaders =
$this->getHttpResponseHeaders($responseHeaders);
return array(
$responseHeaders,
$responseBody
);
}
/**
* Parse out headers from raw headers
*
* @param rawHeaders array or string
*
* @return array
*/
public function getHttpResponseHeaders($rawHeaders) {
if (is_array($rawHeaders)) {
return $this->parseArrayHeaders($rawHeaders);
} else {
return $this->parseStringHeaders($rawHeaders);
}
}
private function parseStringHeaders($rawHeaders) {
$headers = array();
$responseHeaderLines = explode("\r\n", $rawHeaders);
foreach ($responseHeaderLines as $headerLine) {
if ($headerLine && strpos($headerLine, ':')
!== false) {
list($header, $value) = explode(': ',
$headerLine, 2);
$header = strtolower($header);
if (isset($headers[$header])) {
$headers[$header] .= "\n" . $value;
} else {
$headers[$header] = $value;
}
}
}
return $headers;
}
private function parseArrayHeaders($rawHeaders) {
$header_count = count($rawHeaders);
$headers = array();
for ($i = 0; $i < $header_count; $i++) {
$header = $rawHeaders[$i];
// Times will have colons in - so we just want the first match.
$header_parts = explode(': ', $header, 2);
if (count($header_parts) == 2) {
$headers[strtolower($header_parts[0])] = $header_parts[1];
}
}
return $headers;
}
}
PK.C�[���MM;Generator/Common/YouTube/googleclient/IO/Google_IO_Curl.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\IO;
use Nextend\Framework\Misc\HttpClient;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Client;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_Request;
/**
* Curl based implementation of Google_IO.
*
* @author Stuart Langley <slangley@google.com>
*/
class Google_IO_Curl extends Google_IO_Abstract {
// cURL hex representation of version 7.30.0
const NO_QUIRK_VERSION = 0x071E00;
private $options = array();
public function __construct(Google_Client $client) {
if (!extension_loaded('curl')) {
$error = 'The cURL IO handler requires the cURL extension
to be enabled';
$client->getLogger()
->critical($error);
throw new Google_IO_Exception($error);
}
parent::__construct($client);
}
/**
* Execute an HTTP Request
*
* @param Google_HttpRequest $request the http request to be executed
*
* @return Google_HttpRequest http request with the response http code,
* response headers and response body filled in
* @throws Google_IO_Exception on curl or IO error
*/
public function executeRequest(Google_Http_Request $request) {
$curl = curl_init();
if ($request->getPostBody()) {
curl_setopt($curl, CURLOPT_POSTFIELDS,
$request->getPostBody());
}
$requestHeaders = $request->getRequestHeaders();
if ($requestHeaders && is_array($requestHeaders)) {
$curlHeaders = array();
foreach ($requestHeaders as $k => $v) {
$curlHeaders[] = "$k: $v";
}
curl_setopt($curl, CURLOPT_HTTPHEADER, $curlHeaders);
}
curl_setopt($curl, CURLOPT_URL, $request->getUrl());
curl_setopt($curl, CURLOPT_CUSTOMREQUEST,
$request->getRequestMethod());
curl_setopt($curl, CURLOPT_USERAGENT, $request->getUserAgent());
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
// 1 is CURL_SSLVERSION_TLSv1, which is not always defined in PHP.
curl_setopt($curl, CURLOPT_SSLVERSION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
if ($request->canGzip()) {
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
}
foreach ($this->options as $key => $var) {
curl_setopt($curl, $key, $var);
}
if (!isset($this->options[CURLOPT_CAINFO])) {
curl_setopt($curl, CURLOPT_CAINFO,
HttpClient::getCacertPath());
}
$this->client->getLogger()
->debug('cURL request', array(
'url' => $request->getUrl(),
'method' =>
$request->getRequestMethod(),
'headers' => $requestHeaders,
'body' =>
$request->getPostBody()
));
$response = curl_exec($curl);
if ($response === false) {
$error = curl_error($curl);
$code = curl_errno($curl);
$map =
$this->client->getClassConfig('Google_IO_Exception',
'retry_map');
$this->client->getLogger()
->error('cURL ' . $error);
throw new Google_IO_Exception($error, $code, null, $map);
}
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
list($responseHeaders, $responseBody) =
$this->parseHttpResponse($response, $headerSize);
$responseCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
$this->client->getLogger()
->debug('cURL response', array(
'code' => $responseCode,
'headers' => $responseHeaders,
'body' => $responseBody,
));
return array(
$responseBody,
$responseHeaders,
$responseCode
);
}
/**
* Set options that update the transport implementation's
behavior.
*
* @param $options
*/
public function setOptions($options) {
$this->options = $options + $this->options;
}
/**
* Set the maximum request time in seconds.
*
* @param $timeout in seconds
*/
public function setTimeout($timeout) {
// Since this timeout is really for putting a bound on the time
// we'll set them both to the same. If you need to specify a
longer
// CURLOPT_TIMEOUT, or a tigher CONNECTTIMEOUT, the best thing to
// do is use the setOptions method for the values individually.
$this->options[CURLOPT_CONNECTTIMEOUT] = $timeout;
$this->options[CURLOPT_TIMEOUT] = $timeout;
}
/**
* Get the maximum request time in seconds.
*
* @return timeout in seconds
*/
public function getTimeout() {
return $this->options[CURLOPT_TIMEOUT];
}
/**
* Test for the presence of a cURL header processing bug
*
* {@inheritDoc}
*
* @return boolean
*/
protected function needsQuirk() {
$ver = curl_version();
$versionNum = $ver['version_number'];
return $versionNum < Google_IO_Curl::NO_QUIRK_VERSION;
}
}
PK.C�[o���YY@Generator/Common/YouTube/googleclient/IO/Google_IO_Exception.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\IO;
use Exception;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Exception;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Task\Google_Task_Retryable;
class Google_IO_Exception extends Google_Exception implements
Google_Task_Retryable {
/**
* @var array $retryMap Map of errors with retry counts.
*/
private $retryMap = array();
/**
* Creates a new IO exception with an optional retry map.
*
* @param string $message
* @param int $code
* @param Exception|null $previous
* @param array|null $retryMap Map of errors with retry counts.
*/
public function __construct($message, $code = 0, Exception $previous =
null, array $retryMap = null) {
parent::__construct($message, $code, $previous);
if (is_array($retryMap)) {
$this->retryMap = $retryMap;
}
}
/**
* Gets the number of times the associated task can be retried.
*
* NOTE: -1 is returned if the task can be retried indefinitely
*
* @return integer
*/
public function allowedRetries() {
if (isset($this->retryMap[$this->code])) {
return $this->retryMap[$this->code];
}
return 0;
}
}
PK.C�[7U�ɺ'�'GGenerator/Common/YouTube/googleclient/Logger/Google_Logger_Abstract.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Logger;
use DateTime;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Client;
/**
* Abstract logging class based on the PSR-3 standard.
*
* NOTE: We don't implement `Psr\Log\LoggerInterface` because we need
to
* maintain PHP 5.2 support.
*
* @see
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
*/
abstract class Google_Logger_Abstract {
/**
* Default log format
*/
const DEFAULT_LOG_FORMAT = "[%datetime%] %level%: %message%
%context%\n";
/**
* Default date format
*
* Example: 16/Nov/2014:03:26:16 -0500
*/
const DEFAULT_DATE_FORMAT = 'd/M/Y:H:i:s O';
/**
* System is unusable
*/
const EMERGENCY = 'emergency';
/**
* Action must be taken immediately
*
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
*/
const ALERT = 'alert';
/**
* Critical conditions
*
* Example: Application component unavailable, unexpected exception.
*/
const CRITICAL = 'critical';
/**
* Runtime errors that do not require immediate action but should
typically
* be logged and monitored.
*/
const ERROR = 'error';
/**
* Exceptional occurrences that are not errors.
*
* Example: Use of deprecated APIs, poor use of an API, undesirable
things
* that are not necessarily wrong.
*/
const WARNING = 'warning';
/**
* Normal but significant events.
*/
const NOTICE = 'notice';
/**
* Interesting events.
*
* Example: User logs in, SQL logs.
*/
const INFO = 'info';
/**
* Detailed debug information.
*/
const DEBUG = 'debug';
/**
* @var array $levels Logging levels
*/
protected static $levels = array(
self::EMERGENCY => 600,
self::ALERT => 550,
self::CRITICAL => 500,
self::ERROR => 400,
self::WARNING => 300,
self::NOTICE => 250,
self::INFO => 200,
self::DEBUG => 100,
);
/**
* @var integer $level The minimum logging level
*/
protected $level = self::DEBUG;
/**
* @var string $logFormat The current log format
*/
protected $logFormat = self::DEFAULT_LOG_FORMAT;
/**
* @var string $dateFormat The current date format
*/
protected $dateFormat = self::DEFAULT_DATE_FORMAT;
/**
* @var boolean $allowNewLines If newlines are allowed
*/
protected $allowNewLines = false;
/**
* @param Google_Client $client The current Google client
*/
public function __construct(Google_Client $client) {
$this->setLevel($client->getClassConfig('Google_Logger_Abstract',
'level'));
$format =
$client->getClassConfig('Google_Logger_Abstract',
'log_format');
$this->logFormat = $format ? $format : self::DEFAULT_LOG_FORMAT;
$format =
$client->getClassConfig('Google_Logger_Abstract',
'date_format');
$this->dateFormat = $format ? $format :
self::DEFAULT_DATE_FORMAT;
$this->allowNewLines =
(bool)$client->getClassConfig('Google_Logger_Abstract',
'allow_newlines');
}
/**
* Sets the minimum logging level that this logger handles.
*
* @param integer $level
*/
public function setLevel($level) {
$this->level = $this->normalizeLevel($level);
}
/**
* Checks if the logger should handle messages at the provided level.
*
* @param integer $level
*
* @return boolean
*/
public function shouldHandle($level) {
return $this->normalizeLevel($level) >= $this->level;
}
/**
* System is unusable.
*
* @param string $message The log message
* @param array $context The log context
*/
public function emergency($message, array $context = array()) {
$this->log(self::EMERGENCY, $message, $context);
}
/**
* Action must be taken immediately.
*
* Example: Entire website down, database unavailable, etc. This should
* trigger the SMS alerts and wake you up.
*
* @param string $message The log message
* @param array $context The log context
*/
public function alert($message, array $context = array()) {
$this->log(self::ALERT, $message, $context);
}
/**
* Critical conditions.
*
* Example: Application component unavailable, unexpected exception.
*
* @param string $message The log message
* @param array $context The log context
*/
public function critical($message, array $context = array()) {
$this->log(self::CRITICAL, $message, $context);
}
/**
* Runtime errors that do not require immediate action but should
typically
* be logged and monitored.
*
* @param string $message The log message
* @param array $context The log context
*/
public function error($message, array $context = array()) {
$this->log(self::ERROR, $message, $context);
}
/**
* Exceptional occurrences that are not errors.
*
* Example: Use of deprecated APIs, poor use of an API, undesirable
things
* that are not necessarily wrong.
*
* @param string $message The log message
* @param array $context The log context
*/
public function warning($message, array $context = array()) {
$this->log(self::WARNING, $message, $context);
}
/**
* Normal but significant events.
*
* @param string $message The log message
* @param array $context The log context
*/
public function notice($message, array $context = array()) {
$this->log(self::NOTICE, $message, $context);
}
/**
* Interesting events.
*
* Example: User logs in, SQL logs.
*
* @param string $message The log message
* @param array $context The log context
*/
public function info($message, array $context = array()) {
$this->log(self::INFO, $message, $context);
}
/**
* Detailed debug information.
*
* @param string $message The log message
* @param array $context The log context
*/
public function debug($message, array $context = array()) {
$this->log(self::DEBUG, $message, $context);
}
/**
* Logs with an arbitrary level.
*
* @param mixed $level The log level
* @param string $message The log message
* @param array $context The log context
*/
public function log($level, $message, array $context = array()) {
if (!$this->shouldHandle($level)) {
return false;
}
$levelName = is_int($level) ? array_search($level, self::$levels) :
$level;
$message = $this->interpolate(array(
'message' => $message,
'context' => $context,
'level' => strtoupper($levelName),
'datetime' => new DateTime(),
));
$this->write($message);
}
/**
* Interpolates log variables into the defined log format.
*
* @param array $variables The log variables.
*
* @return string
*/
protected function interpolate(array $variables = array()) {
$template = $this->logFormat;
if (!$variables['context']) {
$template = str_replace('%context%', '',
$template);
unset($variables['context']);
} else {
$this->reverseJsonInContext($variables['context']);
}
foreach ($variables as $key => $value) {
if (strpos($template, '%' . $key . '%') !==
false) {
$template = str_replace('%' . $key .
'%', $this->export($value), $template);
}
}
return $template;
}
/**
* Reverses JSON encoded PHP arrays and objects so that they log
better.
*
* @param array $context The log context
*/
protected function reverseJsonInContext(array &$context) {
if (!$context) {
return;
}
foreach ($context as $key => $val) {
if (!$val || !is_string($val) || !($val[0] == '{' ||
$val[0] == '[')) {
continue;
}
$json = @json_decode($val);
if (is_object($json) || is_array($json)) {
$context[$key] = $json;
}
}
}
/**
* Exports a PHP value for logging to a string.
*
* @param mixed $value The value to
*/
protected function export($value) {
if (is_string($value)) {
if ($this->allowNewLines) {
return $value;
}
return preg_replace('/[\r\n]+/', ' ',
$value);
}
if (is_resource($value)) {
return sprintf('resource(%d) of type (%s)', $value,
get_resource_type($value));
}
if ($value instanceof DateTime) {
return $value->format($this->dateFormat);
}
$options = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;
if ($this->allowNewLines) {
$options |= JSON_PRETTY_PRINT;
}
return @json_encode($value, $options);
}
/**
* Converts a given log level to the integer form.
*
* @param mixed $level The logging level
*
* @return integer $level The normalized level
* @throws Google_Logger_Exception If $level is invalid
*/
protected function normalizeLevel($level) {
if (is_int($level) && array_search($level, self::$levels)
!== false) {
return $level;
}
if (is_string($level) && isset(self::$levels[$level])) {
return self::$levels[$level];
}
throw new Google_Logger_Exception(sprintf("Unknown LogLevel:
'%s'", $level));
}
/**
* Writes a message to the current log implementation.
*
* @param string $message The message
*/
abstract protected function write($message);
}
PK.C�[�-����CGenerator/Common/YouTube/googleclient/Logger/Google_Logger_Null.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Logger;
/**
* Null logger based on the PSR-3 standard.
*
* This logger simply discards all messages.
*/
class Google_Logger_Null extends Google_Logger_Abstract {
/**
* {@inheritdoc}
*/
public function shouldHandle($level) {
return false;
}
/**
* {@inheritdoc}
*/
protected function write($message, array $context = array()) {
}
}
PK.C�[2sH
R R JGenerator/Common/YouTube/googleclient/Service/Google_Service_Exception.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Service;
use Exception;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Exception;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Task\Google_Task_Retryable;
class Google_Service_Exception extends Google_Exception implements
Google_Task_Retryable {
/**
* Optional list of errors returned in a JSON body of an HTTP error
response.
*/
protected $errors = array();
/**
* @var array $retryMap Map of errors with retry counts.
*/
private $retryMap = array();
/**
* Override default constructor to add the ability to set $errors and a
retry
* map.
*
* @param string $message
* @param int $code
* @param Exception|null $previous
* @param [{string, string}] errors List of errors returned in an HTTP
* response. Defaults to [].
* @param array|null $retryMap Map of errors with retry counts.
*/
public function __construct($message, $code = 0, Exception $previous =
null, $errors = array(), array $retryMap = null) {
parent::__construct($message, $code, $previous);
$this->errors = $errors;
if (is_array($retryMap)) {
$this->retryMap = $retryMap;
}
}
/**
* An example of the possible errors returned.
*
* {
* "domain": "global",
* "reason": "authError",
* "message": "Invalid Credentials",
* "locationType": "header",
* "location": "Authorization",
* }
*
* @return [{string, string}] List of errors return in an HTTP response
or [].
*/
public function getErrors() {
return $this->errors;
}
/**
* Gets the number of times the associated task can be retried.
*
* NOTE: -1 is returned if the task can be retried indefinitely
*
* @return integer
*/
public function allowedRetries() {
if (isset($this->retryMap[$this->code])) {
return $this->retryMap[$this->code];
}
$errors = $this->getErrors();
if (!empty($errors) &&
isset($errors[0]['reason']) &&
isset($this->retryMap[$errors[0]['reason']])) {
return $this->retryMap[$errors[0]['reason']];
}
return 0;
}
}
PK.C�[J���##IGenerator/Common/YouTube/googleclient/Service/Google_Service_Resource.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Service;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_Request;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Http\Google_Http_REST;
/**
* Implements the actual methods/resources of the discovered Google API
using magic function
* calling overloading (__call()), which on call will see if the method
name (plus.activities.list)
* is available in this service, and if so construct an apiHttpRequest
representing it.
*
* @author Chris Chabot <chabotc@google.com>
* @author Chirag Shah <chirags@google.com>
*
*/
class Google_Service_Resource {
// Valid query parameters that work, but don't appear in
discovery.
private $stackParameters = array(
'alt' => array(
'type' => 'string',
'location' => 'query'
),
'fields' => array(
'type' => 'string',
'location' => 'query'
),
'trace' => array(
'type' => 'string',
'location' => 'query'
),
'userIp' => array(
'type' => 'string',
'location' => 'query'
),
'userip' => array(
'type' => 'string',
'location' => 'query'
),
'quotaUser' => array(
'type' => 'string',
'location' => 'query'
),
'data' => array(
'type' => 'string',
'location' => 'body'
),
'mimeType' => array(
'type' => 'string',
'location' => 'header'
),
'uploadType' => array(
'type' => 'string',
'location' => 'query'
),
'mediaUpload' => array(
'type' => 'complex',
'location' => 'query'
),
);
/** @var Google_Service $service */
private $service;
/** @var Google_Client $client */
private $client;
/** @var string $serviceName */
private $serviceName;
/** @var string $resourceName */
private $resourceName;
/** @var array $methods */
private $methods;
public function __construct($service, $serviceName, $resourceName,
$resource) {
$this->service = $service;
$this->client = $service->getClient();
$this->serviceName = $serviceName;
$this->resourceName = $resourceName;
$this->methods = isset($resource['methods']) ?
$resource['methods'] : array($resourceName => $resource);
}
/**
* TODO(ianbarber): This function needs simplifying.
*
* @param $name
* @param $arguments
* @param $expected_class - optional, the expected class name
*
* @return Google_Http_Request|expected_class
* @throws Google_Exception
*/
public function call($name, $arguments, $expected_class = null) {
if (!isset($this->methods[$name])) {
$this->client->getLogger()
->error('Service method unknown',
array(
'service' =>
$this->serviceName,
'resource' =>
$this->resourceName,
'method' => $name
));
throw new Google_Exception("Unknown function: " .
"{$this->serviceName}->{$this->resourceName}->{$name}()");
}
$method = $this->methods[$name];
$parameters = $arguments[0];
// postBody is a special case since it's not defined in the
discovery
// document as parameter, but we abuse the param entry for storing
it.
$postBody = null;
if (isset($parameters['postBody'])) {
if ($parameters['postBody'] instanceof Google_Model)
{
// In the cases the post body is an existing object, we
want
// to use the smart method to create a simple object for
// for JSONification.
$parameters['postBody'] =
$parameters['postBody']->toSimpleObject();
} else if (is_object($parameters['postBody'])) {
// If the post body is another kind of object, we will try
and
// wrangle it into a sensible format.
$parameters['postBody'] =
$this->convertToArrayAndStripNulls($parameters['postBody']);
}
$postBody = json_encode($parameters['postBody']);
unset($parameters['postBody']);
}
// TODO(ianbarber): optParams here probably should have been
// handled already - this may well be redundant code.
if (isset($parameters['optParams'])) {
$optParams = $parameters['optParams'];
unset($parameters['optParams']);
$parameters = array_merge($parameters, $optParams);
}
if (!isset($method['parameters'])) {
$method['parameters'] = array();
}
$method['parameters'] =
array_merge($method['parameters'], $this->stackParameters);
foreach ($parameters as $key => $val) {
if ($key != 'postBody' &&
!isset($method['parameters'][$key])) {
$this->client->getLogger()
->error('Service parameter
unknown', array(
'service' =>
$this->serviceName,
'resource' =>
$this->resourceName,
'method' => $name,
'parameter' => $key
));
throw new Google_Exception("($name) unknown parameter:
'$key'");
}
}
foreach ($method['parameters'] as $paramName =>
$paramSpec) {
if (isset($paramSpec['required']) &&
$paramSpec['required'] &&
!isset($parameters[$paramName])) {
$this->client->getLogger()
->error('Service parameter
missing', array(
'service' =>
$this->serviceName,
'resource' =>
$this->resourceName,
'method' => $name,
'parameter' => $paramName
));
throw new Google_Exception("($name) missing required
param: '$paramName'");
}
if (isset($parameters[$paramName])) {
$value = $parameters[$paramName];
$parameters[$paramName] = $paramSpec;
$parameters[$paramName]['value'] = $value;
unset($parameters[$paramName]['required']);
} else {
// Ensure we don't pass nulls.
unset($parameters[$paramName]);
}
}
$servicePath = $this->service->servicePath;
$this->client->getLogger()
->info('Service Call', array(
'service' => $this->serviceName,
'resource' =>
$this->resourceName,
'method' => $name,
'arguments' => $parameters,
));
$url = Google_Http_REST::createRequestUri($servicePath,
$method['path'], $parameters);
$httpRequest = new Google_Http_Request($url,
$method['httpMethod'], null, $postBody);
$httpRequest->setBaseComponent($this->client->getBasePath());
if ($postBody) {
$contentTypeHeader = array();
$contentTypeHeader['content-type'] =
'application/json; charset=UTF-8';
$httpRequest->setRequestHeaders($contentTypeHeader);
$httpRequest->setPostBody($postBody);
}
$httpRequest = $this->client->getAuth()
->sign($httpRequest);
$httpRequest->setExpectedClass($expected_class);
if (isset($parameters['data']) &&
($parameters['uploadType']['value'] ==
'media' || $parameters['uploadType']['value']
== 'multipart')) {
// If we are doing a simple media upload, trigger that as a
convenience.
$mfu = new Google_Http_MediaFileUpload($this->client,
$httpRequest, isset($parameters['mimeType']) ?
$parameters['mimeType']['value'] :
'application/octet-stream',
$parameters['data']['value']);
}
if ($this->client->shouldDefer()) {
// If we are in batch or upload mode, return the raw request.
return $httpRequest;
}
return $this->client->execute($httpRequest);
}
protected function convertToArrayAndStripNulls($o) {
$o = (array)$o;
foreach ($o as $k => $v) {
if ($v === null) {
unset($o[$k]);
} elseif (is_object($v) || is_array($v)) {
$o[$k] = $this->convertToArrayAndStripNulls($o[$k]);
}
}
return $o;
}
}
PK.C�[5���!L!LHGenerator/Common/YouTube/googleclient/Service/Google_Service_YouTube.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Service;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Client;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Collection;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Model;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Service;
/**
* Service definition for YouTube (v3).
*
* <p>
* Programmatic access to YouTube features.</p>
*
* <p>
* For more information about this service, see the API
* <a href="https://developers.google.com/youtube/v3"
target="_blank">Documentation</a>
* </p>
*
* @author Google, Inc.
*/
class Google_Service_YouTube extends Google_Service {
/** Manage your YouTube account. */
const YOUTUBE = "https://www.googleapis.com/auth/youtube";
/** View your YouTube account. */
const YOUTUBE_READONLY =
"https://www.googleapis.com/auth/youtube.readonly";
/** Manage your YouTube videos. */
const YOUTUBE_UPLOAD =
"https://www.googleapis.com/auth/youtube.upload";
/** View and manage your assets and associated content on YouTube. */
const YOUTUBEPARTNER =
"https://www.googleapis.com/auth/youtubepartner";
/** View private information of your YouTube channel relevant during
the audit process with a YouTube partner. */
const YOUTUBEPARTNER_CHANNEL_AUDIT =
"https://www.googleapis.com/auth/youtubepartner-channel-audit";
public $activities;
public $channelBanners;
public $channelSections;
public $channels;
public $guideCategories;
public $i18nLanguages;
public $i18nRegions;
public $liveBroadcasts;
public $liveStreams;
public $playlistItems;
public $playlists;
public $search;
public $subscriptions;
public $thumbnails;
public $videoCategories;
public $videos;
public $watermarks;
/**
* Constructs the internal representation of the YouTube service.
*
* @param Google_Client $client
*/
public function __construct(Google_Client $client) {
parent::__construct($client);
$this->servicePath = 'youtube/v3/';
$this->version = 'v3';
$this->serviceName = 'youtube';
$this->activities = new
Google_Service_YouTube_Activities_Resource($this, $this->serviceName,
'activities', array(
'methods' => array(
'insert' => array(
'path' => 'activities',
'httpMethod' => 'POST',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
),
),
'list' => array(
'path' => 'activities',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'regionCode' => array(
'location' => 'query',
'type' => 'string',
),
'publishedBefore' => array(
'location' => 'query',
'type' => 'string',
),
'channelId' => array(
'location' => 'query',
'type' => 'string',
),
'mine' => array(
'location' => 'query',
'type' => 'boolean',
),
'maxResults' => array(
'location' => 'query',
'type' => 'integer',
),
'pageToken' => array(
'location' => 'query',
'type' => 'string',
),
'home' => array(
'location' => 'query',
'type' => 'boolean',
),
'publishedAfter' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->channelBanners = new
Google_Service_YouTube_ChannelBanners_Resource($this,
$this->serviceName, 'channelBanners', array(
'methods' => array(
'insert' => array(
'path' =>
'channelBanners/insert',
'httpMethod' => 'POST',
'parameters' => array(
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->channelSections = new
Google_Service_YouTube_ChannelSections_Resource($this,
$this->serviceName, 'channelSections', array(
'methods' => array(
'delete' => array(
'path' =>
'channelSections',
'httpMethod' => 'DELETE',
'parameters' => array(
'id' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'insert' => array(
'path' =>
'channelSections',
'httpMethod' => 'POST',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'list' => array(
'path' =>
'channelSections',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
'channelId' => array(
'location' => 'query',
'type' => 'string',
),
'id' => array(
'location' => 'query',
'type' => 'string',
),
'mine' => array(
'location' => 'query',
'type' => 'boolean',
),
),
),
'update' => array(
'path' =>
'channelSections',
'httpMethod' => 'PUT',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->channels = new
Google_Service_YouTube_Channels_Resource($this, $this->serviceName,
'channels', array(
'methods' => array(
'list' => array(
'path' => 'channels',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'managedByMe' => array(
'location' => 'query',
'type' => 'boolean',
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
'forUsername' => array(
'location' => 'query',
'type' => 'string',
),
'mine' => array(
'location' => 'query',
'type' => 'boolean',
),
'maxResults' => array(
'location' => 'query',
'type' => 'integer',
),
'id' => array(
'location' => 'query',
'type' => 'string',
),
'pageToken' => array(
'location' => 'query',
'type' => 'string',
),
'mySubscribers' => array(
'location' => 'query',
'type' => 'boolean',
),
'categoryId' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'update' => array(
'path' => 'channels',
'httpMethod' => 'PUT',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->guideCategories = new
Google_Service_YouTube_GuideCategories_Resource($this,
$this->serviceName, 'guideCategories', array(
'methods' => array(
'list' => array(
'path' =>
'guideCategories',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'regionCode' => array(
'location' => 'query',
'type' => 'string',
),
'id' => array(
'location' => 'query',
'type' => 'string',
),
'hl' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->i18nLanguages = new
Google_Service_YouTube_I18nLanguages_Resource($this, $this->serviceName,
'i18nLanguages', array(
'methods' => array(
'list' => array(
'path' => 'i18nLanguages',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'hl' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->i18nRegions = new
Google_Service_YouTube_I18nRegions_Resource($this, $this->serviceName,
'i18nRegions', array(
'methods' => array(
'list' => array(
'path' => 'i18nRegions',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'hl' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->liveBroadcasts = new
Google_Service_YouTube_LiveBroadcasts_Resource($this,
$this->serviceName, 'liveBroadcasts', array(
'methods' => array(
'bind' => array(
'path' =>
'liveBroadcasts/bind',
'httpMethod' => 'POST',
'parameters' => array(
'id' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
'streamId' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'control' => array(
'path' =>
'liveBroadcasts/control',
'httpMethod' => 'POST',
'parameters' => array(
'id' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
'displaySlate' =>
array(
'location' => 'query',
'type' => 'boolean',
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'offsetTimeMs' =>
array(
'location' => 'query',
'type' => 'string',
),
'walltime' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'delete' => array(
'path' =>
'liveBroadcasts',
'httpMethod' => 'DELETE',
'parameters' => array(
'id' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'insert' => array(
'path' =>
'liveBroadcasts',
'httpMethod' => 'POST',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'list' => array(
'path' =>
'liveBroadcasts',
'httpMethod' => 'GET',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'broadcastStatus' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'mine' =>
array(
'location' => 'query',
'type' => 'boolean',
),
'maxResults' =>
array(
'location' => 'query',
'type' => 'integer',
),
'pageToken' =>
array(
'location' => 'query',
'type' => 'string',
),
'id' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'transition' => array(
'path' =>
'liveBroadcasts/transition',
'httpMethod' => 'POST',
'parameters' => array(
'broadcastStatus' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'id' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'update' => array(
'path' =>
'liveBroadcasts',
'httpMethod' => 'PUT',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->liveStreams = new
Google_Service_YouTube_LiveStreams_Resource($this, $this->serviceName,
'liveStreams', array(
'methods' => array(
'delete' => array(
'path' => 'liveStreams',
'httpMethod' => 'DELETE',
'parameters' => array(
'id' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'insert' => array(
'path' => 'liveStreams',
'httpMethod' => 'POST',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'list' => array(
'path' => 'liveStreams',
'httpMethod' => 'GET',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'mine' =>
array(
'location' => 'query',
'type' => 'boolean',
),
'maxResults' =>
array(
'location' => 'query',
'type' => 'integer',
),
'pageToken' =>
array(
'location' => 'query',
'type' => 'string',
),
'id' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'update' => array(
'path' => 'liveStreams',
'httpMethod' => 'PUT',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->playlistItems = new
Google_Service_YouTube_PlaylistItems_Resource($this, $this->serviceName,
'playlistItems', array(
'methods' => array(
'delete' => array(
'path' => 'playlistItems',
'httpMethod' => 'DELETE',
'parameters' => array(
'id' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
),
),
'insert' => array(
'path' => 'playlistItems',
'httpMethod' => 'POST',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'list' => array(
'path' => 'playlistItems',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
'playlistId' => array(
'location' => 'query',
'type' => 'string',
),
'videoId' => array(
'location' => 'query',
'type' => 'string',
),
'maxResults' => array(
'location' => 'query',
'type' => 'integer',
),
'pageToken' => array(
'location' => 'query',
'type' => 'string',
),
'id' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'update' => array(
'path' => 'playlistItems',
'httpMethod' => 'PUT',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
),
),
)
));
$this->playlists = new
Google_Service_YouTube_Playlists_Resource($this, $this->serviceName,
'playlists', array(
'methods' => array(
'delete' => array(
'path' => 'playlists',
'httpMethod' => 'DELETE',
'parameters' => array(
'id' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'insert' => array(
'path' => 'playlists',
'httpMethod' => 'POST',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'list' => array(
'path' => 'playlists',
'httpMethod' => 'GET',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'channelId' =>
array(
'location' => 'query',
'type' => 'string',
),
'mine' =>
array(
'location' => 'query',
'type' => 'boolean',
),
'maxResults' =>
array(
'location' => 'query',
'type' => 'integer',
),
'pageToken' =>
array(
'location' => 'query',
'type' => 'string',
),
'id' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
'update' => array(
'path' => 'playlists',
'httpMethod' => 'PUT',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->search = new
Google_Service_YouTube_Search_Resource($this, $this->serviceName,
'search', array(
'methods' => array(
'list' => array(
'path' => 'search',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'eventType' => array(
'location' => 'query',
'type' => 'string',
),
'channelId' => array(
'location' => 'query',
'type' => 'string',
),
'videoSyndicated' => array(
'location' => 'query',
'type' => 'string',
),
'channelType' => array(
'location' => 'query',
'type' => 'string',
),
'videoCaption' => array(
'location' => 'query',
'type' => 'string',
),
'publishedAfter' => array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
'pageToken' => array(
'location' => 'query',
'type' => 'string',
),
'forContentOwner' => array(
'location' => 'query',
'type' => 'boolean',
),
'regionCode' => array(
'location' => 'query',
'type' => 'string',
),
'location' => array(
'location' => 'query',
'type' => 'string',
),
'locationRadius' => array(
'location' => 'query',
'type' => 'string',
),
'videoType' => array(
'location' => 'query',
'type' => 'string',
),
'type' => array(
'location' => 'query',
'type' => 'string',
),
'topicId' => array(
'location' => 'query',
'type' => 'string',
),
'publishedBefore' => array(
'location' => 'query',
'type' => 'string',
),
'videoDimension' => array(
'location' => 'query',
'type' => 'string',
),
'videoLicense' => array(
'location' => 'query',
'type' => 'string',
),
'maxResults' => array(
'location' => 'query',
'type' => 'integer',
),
'relatedToVideoId' => array(
'location' => 'query',
'type' => 'string',
),
'videoDefinition' => array(
'location' => 'query',
'type' => 'string',
),
'videoDuration' => array(
'location' => 'query',
'type' => 'string',
),
'forMine' => array(
'location' => 'query',
'type' => 'boolean',
),
'q' => array(
'location' => 'query',
'type' => 'string',
),
'safeSearch' => array(
'location' => 'query',
'type' => 'string',
),
'videoEmbeddable' => array(
'location' => 'query',
'type' => 'string',
),
'videoCategoryId' => array(
'location' => 'query',
'type' => 'string',
),
'order' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->subscriptions = new
Google_Service_YouTube_Subscriptions_Resource($this, $this->serviceName,
'subscriptions', array(
'methods' => array(
'delete' => array(
'path' => 'subscriptions',
'httpMethod' => 'DELETE',
'parameters' => array(
'id' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
),
),
'insert' => array(
'path' => 'subscriptions',
'httpMethod' => 'POST',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
),
),
'list' => array(
'path' => 'subscriptions',
'httpMethod' => 'GET',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'channelId' =>
array(
'location' => 'query',
'type' => 'string',
),
'mine' =>
array(
'location' => 'query',
'type' => 'boolean',
),
'maxResults' =>
array(
'location' => 'query',
'type' => 'integer',
),
'forChannelId' =>
array(
'location' => 'query',
'type' => 'string',
),
'pageToken' =>
array(
'location' => 'query',
'type' => 'string',
),
'mySubscribers' =>
array(
'location' => 'query',
'type' => 'boolean',
),
'order' =>
array(
'location' => 'query',
'type' => 'string',
),
'id' =>
array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->thumbnails = new
Google_Service_YouTube_Thumbnails_Resource($this, $this->serviceName,
'thumbnails', array(
'methods' => array(
'set' => array(
'path' =>
'thumbnails/set',
'httpMethod' => 'POST',
'parameters' => array(
'videoId' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->videoCategories = new
Google_Service_YouTube_VideoCategories_Resource($this,
$this->serviceName, 'videoCategories', array(
'methods' => array(
'list' => array(
'path' =>
'videoCategories',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'regionCode' => array(
'location' => 'query',
'type' => 'string',
),
'id' => array(
'location' => 'query',
'type' => 'string',
),
'hl' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->videos = new
Google_Service_YouTube_Videos_Resource($this, $this->serviceName,
'videos', array(
'methods' => array(
'delete' => array(
'path' => 'videos',
'httpMethod' => 'DELETE',
'parameters' => array(
'id' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'getRating' => array(
'path' =>
'videos/getRating',
'httpMethod' => 'GET',
'parameters' => array(
'id' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'insert' => array(
'path' => 'videos',
'httpMethod' => 'POST',
'parameters' => array(
'part' =>
array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' =>
array(
'location' => 'query',
'type' => 'string',
),
'stabilize' =>
array(
'location' => 'query',
'type' => 'boolean',
),
'onBehalfOfContentOwnerChannel' =>
array(
'location' => 'query',
'type' => 'string',
),
'notifySubscribers' =>
array(
'location' => 'query',
'type' => 'boolean',
),
'autoLevels' =>
array(
'location' => 'query',
'type' => 'boolean',
),
),
),
'list' => array(
'path' => 'videos',
'httpMethod' => 'GET',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
'regionCode' => array(
'location' => 'query',
'type' => 'string',
),
'locale' => array(
'location' => 'query',
'type' => 'string',
),
'videoCategoryId' => array(
'location' => 'query',
'type' => 'string',
),
'chart' => array(
'location' => 'query',
'type' => 'string',
),
'maxResults' => array(
'location' => 'query',
'type' => 'integer',
),
'pageToken' => array(
'location' => 'query',
'type' => 'string',
),
'myRating' => array(
'location' => 'query',
'type' => 'string',
),
'id' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'rate' => array(
'path' => 'videos/rate',
'httpMethod' => 'POST',
'parameters' => array(
'id' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'rating' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'update' => array(
'path' => 'videos',
'httpMethod' => 'PUT',
'parameters' => array(
'part' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
$this->watermarks = new
Google_Service_YouTube_Watermarks_Resource($this, $this->serviceName,
'watermarks', array(
'methods' => array(
'set' => array(
'path' =>
'watermarks/set',
'httpMethod' => 'POST',
'parameters' => array(
'channelId' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
'unset' => array(
'path' =>
'watermarks/unset',
'httpMethod' => 'POST',
'parameters' => array(
'channelId' => array(
'location' => 'query',
'type' => 'string',
'required' => true,
),
'onBehalfOfContentOwner' => array(
'location' => 'query',
'type' => 'string',
),
),
),
)
));
}
}
/**
* The "activities" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $activities = $youtubeService->activities;
* </code>
*/
class Google_Service_YouTube_Activities_Resource extends
Google_Service_Resource {
/**
* Posts a bulletin for a specific channel. (The user submitting the
request
* must be authorized to act on the channel's behalf.)
*
* Note: Even though an activity resource can contain information about
actions
* like a user rating a video or marking a video as a favorite, you
need to use
* other API methods to generate those activity resources. For example,
you
* would use the API's videos.rate() method to rate a video and
the
* playlistItems.insert() method to mark a video as a favorite.
* (activities.insert)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties that
the write operation will set as well as the
* properties that the API response
will include.
*
* The part names that you can include in the parameter value are
snippet and
* contentDetails.
* @param Google_Activity $postBody
* @param array $optParams Optional parameters.
*
* @return Google_Service_YouTube_Activity
*/
public function insert($part, Google_Service_YouTube_Activity
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_Activity::class);
}
/**
* Returns a list of channel activity events that match the request
criteria.
* For example, you can retrieve events associated with a particular
channel,
* events associated with the user's subscriptions and Google+
friends, or the
* YouTube home page feed, which is customized for each user.
* (activities.listActivities)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more activity resource properties
that the API response will include.
* The part names that you can include in the
parameter value are id, snippet,
* and contentDetails.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
activity
* resource, the snippet property contains other properties that
identify the
* type of activity, a display title for the activity, and so forth. If
you set
* part=snippet, the API response will also contain all of those nested
* properties.
* @param array $optParams Optional parameters.
*
* @opt_param string regionCode The regionCode parameter instructs the
API to
* return results for the specified country. The parameter value is an
ISO
* 3166-1 alpha-2 country code. YouTube uses this value when the
authorized
* user's previous activity on YouTube does not provide enough
information to
* generate the activity feed.
* @opt_param string publishedBefore The publishedBefore parameter
specifies the
* date and time before which an activity must have occurred for that
activity
* to be included in the API response. If the parameter value specifies
a day,
* but not a time, then any activities that occurred that day will be
excluded
* from the result set. The value is specified in ISO 8601 (YYYY-MM-
* DDThh:mm:ss.sZ) format.
* @opt_param string channelId The channelId parameter specifies a
unique
* YouTube channel ID. The API will then return a list of that
channel's
* activities.
* @opt_param bool mine Set this parameter's value to true to
retrieve a feed of
* the authenticated user's activities.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
* @opt_param bool home Set this parameter's value to true to
retrieve the
* activity feed that displays on the YouTube home page for the
currently
* authenticated user.
* @opt_param string publishedAfter The publishedAfter parameter
specifies the
* earliest date and time that an activity could have occurred for that
activity
* to be included in the API response. If the parameter value specifies
a day,
* but not a time, then any activities that occurred that day will be
included
* in the result set. The value is specified in ISO 8601 (YYYY-MM-
* DDThh:mm:ss.sZ) format.
* @return Google_Service_YouTube_ActivityListResponse
*/
public function listActivities($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_ActivityListResponse::class);
}
}
/**
* The "channelBanners" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $channelBanners = $youtubeService->channelBanners;
* </code>
*/
class Google_Service_YouTube_ChannelBanners_Resource extends
Google_Service_Resource {
/**
* Uploads a channel banner image to YouTube. This method represents
the first
* two steps in a three-step process to update the banner image for a
channel:
*
* - Call the channelBanners.insert method to upload the binary image
data to
* YouTube. The image must have a 16:9 aspect ratio and be at least
2120x1192
* pixels. - Extract the url property's value from the response
that the API
* returns for step 1. - Call the channels.update method to update the
channel's
* branding settings. Set the brandingSettings.image.bannerExternalUrl
* property's value to the URL obtained in step 2.
(channelBanners.insert)
*
* @param Google_ChannelBannerResource $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_ChannelBannerResource
*/
public function insert(Google_Service_YouTube_ChannelBannerResource
$postBody, $optParams = array()) {
$params = array('postBody' => $postBody);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_ChannelBannerResource::class);
}
}
/**
* The "channelSections" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $channelSections = $youtubeService->channelSections;
* </code>
*/
class Google_Service_YouTube_ChannelSections_Resource extends
Google_Service_Resource {
/**
* Deletes a channelSection. (channelSections.delete)
*
* @param string $id The id parameter specifies the YouTube
channelSection ID
* for the resource that is being deleted. In
a channelSection resource, the id
* property specifies the YouTube
channelSection ID.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
*/
public function delete($id, $optParams = array()) {
$params = array('id' => $id);
$params = array_merge($params, $optParams);
return $this->call('delete', array($params));
}
/**
* Adds a channelSection for the authenticated user's channel.
* (channelSections.insert)
*
* @param string $part The part parameter serves
two purposes in this operation.
* It identifies the properties
that the write operation will set as well
* as the properties that the
API response will include.
*
* The part names that you can include in the parameter value are
snippet and
* contentDetails.
* @param Google_ChannelSection $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_ChannelSection
*/
public function insert($part, Google_Service_YouTube_ChannelSection
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_ChannelSection::class);
}
/**
* Returns channelSection resources that match the API request
criteria.
* (channelSections.listChannelSections)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more channelSection resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id,
* snippet, and contentDetails.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
* channelSection resource, the snippet property contains other
properties, such
* as a display title for the channelSection. If you set part=snippet,
the API
* response will also contain all of those nested properties.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string channelId The channelId parameter specifies a
YouTube
* channel ID. The API will only return that channel's
channelSections.
* @opt_param string id The id parameter specifies a comma-separated
list of the
* YouTube channelSection ID(s) for the resource(s) that are being
retrieved. In
* a channelSection resource, the id property specifies the YouTube
* channelSection ID.
* @opt_param bool mine Set this parameter's value to true to
retrieve a feed of
* the authenticated user's channelSections.
* @return Google_Service_YouTube_ChannelSectionListResponse
*/
public function listChannelSections($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_ChannelSectionListResponse::class);
}
/**
* Update a channelSection. (channelSections.update)
*
* @param string $part The part parameter serves
two purposes in this operation.
* It identifies the properties
that the write operation will set as well
* as the properties that the
API response will include.
*
* The part names that you can include in the parameter value are
snippet and
* contentDetails.
* @param Google_ChannelSection $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_ChannelSection
*/
public function update($part, Google_Service_YouTube_ChannelSection
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('update', array($params),
Google_Service_YouTube_ChannelSection::class);
}
}
/**
* The "channels" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $channels = $youtubeService->channels;
* </code>
*/
class Google_Service_YouTube_Channels_Resource extends
Google_Service_Resource {
/**
* Returns a collection of zero or more channel resources that match
the request
* criteria. (channels.listChannels)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more channel resource properties
that the API response will include.
* The part names that you can include in the
parameter value are id, snippet,
* contentDetails, statistics, topicDetails,
and invideoPromotion.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
channel
* resource, the contentDetails property contains other properties,
such as the
* uploads properties. As such, if you set part=contentDetails, the API
response
* will also contain all of those nested properties.
* @param array $optParams Optional parameters.
*
* @opt_param bool managedByMe Set this parameter's value to true
to instruct
* the API to only return channels managed by the content owner that
the
* onBehalfOfContentOwner parameter specifies. The user must be
authenticated as
* a CMS account linked to the specified content owner and
* onBehalfOfContentOwner must be provided.
* @opt_param string onBehalfOfContentOwner The onBehalfOfContentOwner
parameter
* indicates that the authenticated user is acting on behalf of the
content
* owner specified in the parameter value. This parameter is intended
for
* YouTube content partners that own and manage many different YouTube
channels.
* It allows content owners to authenticate once and get access to all
their
* video and channel data, without having to provide authentication
credentials
* for each individual channel. The actual CMS account that the user
* authenticates with needs to be linked to the specified YouTube
content owner.
* @opt_param string forUsername The forUsername parameter specifies a
YouTube
* username, thereby requesting the channel associated with that
username.
* @opt_param bool mine Set this parameter's value to true to
instruct the API
* to only return channels owned by the authenticated user.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
* @opt_param string id The id parameter specifies a comma-separated
list of the
* YouTube channel ID(s) for the resource(s) that are being retrieved.
In a
* channel resource, the id property specifies the channel's
YouTube channel ID.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
* @opt_param bool mySubscribers Set this parameter's value to
true to retrieve
* a list of channels that subscribed to the authenticated user's
channel.
* @opt_param string categoryId The categoryId parameter specifies a
YouTube
* guide category, thereby requesting YouTube channels associated with
that
* category.
* @return Google_Service_YouTube_ChannelListResponse
*/
public function listChannels($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_ChannelListResponse::class);
}
/**
* Updates a channel's metadata. (channels.update)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties that
the write operation will set as well as the
* properties that the API response
will include.
*
* The part names that you can include in the parameter value are id
and
* invideoPromotion.
*
* Note that this method will override the existing values for all of
the
* mutable properties that are contained in any parts that the
parameter value
* specifies.
* @param Google_Channel $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner The onBehalfOfContentOwner
parameter
* indicates that the authenticated user is acting on behalf of the
content
* owner specified in the parameter value. This parameter is intended
for
* YouTube content partners that own and manage many different YouTube
channels.
* It allows content owners to authenticate once and get access to all
their
* video and channel data, without having to provide authentication
credentials
* for each individual channel. The actual CMS account that the user
* authenticates with needs to be linked to the specified YouTube
content owner.
* @return Google_Service_YouTube_Channel
*/
public function update($part, Google_Service_YouTube_Channel $postBody,
$optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('update', array($params),
Google_Service_YouTube_Channel::class);
}
}
/**
* The "guideCategories" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $guideCategories = $youtubeService->guideCategories;
* </code>
*/
class Google_Service_YouTube_GuideCategories_Resource extends
Google_Service_Resource {
/**
* Returns a list of categories that can be associated with YouTube
channels.
* (guideCategories.listGuideCategories)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more guideCategory resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id
* and snippet.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
* guideCategory resource, the snippet property contains other
properties, such
* as the category's title. If you set part=snippet, the API
response will also
* contain all of those nested properties.
* @param array $optParams Optional parameters.
*
* @opt_param string regionCode The regionCode parameter instructs the
API to
* return the list of guide categories available in the specified
country. The
* parameter value is an ISO 3166-1 alpha-2 country code.
* @opt_param string id The id parameter specifies a comma-separated
list of the
* YouTube channel category ID(s) for the resource(s) that are being
retrieved.
* In a guideCategory resource, the id property specifies the YouTube
channel
* category ID.
* @opt_param string hl The hl parameter specifies the language that
will be
* used for text values in the API response.
* @return Google_Service_YouTube_GuideCategoryListResponse
*/
public function listGuideCategories($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_GuideCategoryListResponse::class);
}
}
/**
* The "i18nLanguages" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $i18nLanguages = $youtubeService->i18nLanguages;
* </code>
*/
class Google_Service_YouTube_I18nLanguages_Resource extends
Google_Service_Resource {
/**
* Returns a list of supported languages.
(i18nLanguages.listI18nLanguages)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more i18nLanguage resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id
* and snippet.
* @param array $optParams Optional parameters.
*
* @opt_param string hl The hl parameter specifies the language that
should be
* used for text values in the API response.
* @return Google_Service_YouTube_I18nLanguageListResponse
*/
public function listI18nLanguages($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_I18nLanguageListResponse::class);
}
}
/**
* The "i18nRegions" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $i18nRegions = $youtubeService->i18nRegions;
* </code>
*/
class Google_Service_YouTube_I18nRegions_Resource extends
Google_Service_Resource {
/**
* Returns a list of supported regions. (i18nRegions.listI18nRegions)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more i18nRegion resource properties
that the API response will
* include. The part names that you can
include in the parameter value are id
* and snippet.
* @param array $optParams Optional parameters.
*
* @opt_param string hl The hl parameter specifies the language that
should be
* used for text values in the API response.
* @return Google_Service_YouTube_I18nRegionListResponse
*/
public function listI18nRegions($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_I18nRegionListResponse::class);
}
}
/**
* The "liveBroadcasts" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $liveBroadcasts = $youtubeService->liveBroadcasts;
* </code>
*/
class Google_Service_YouTube_LiveBroadcasts_Resource extends
Google_Service_Resource {
/**
* Binds a YouTube broadcast to a stream or removes an existing binding
between
* a broadcast and a stream. A broadcast can only be bound to one video
stream.
* (liveBroadcasts.bind)
*
* @param string $id The id parameter specifies the unique ID of
the broadcast
* that is being bound to a video stream.
* @param string $part The part parameter specifies a
comma-separated list of
* one or more liveBroadcast resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id,
* snippet, contentDetails, and status.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string streamId The streamId parameter specifies the
unique ID of
* the video stream that is being bound to a broadcast. If this
parameter is
* omitted, the API will remove any existing binding between the
broadcast and a
* video stream.
* @return Google_Service_YouTube_LiveBroadcast
*/
public function bind($id, $part, $optParams = array()) {
$params = array(
'id' => $id,
'part' => $part
);
$params = array_merge($params, $optParams);
return $this->call('bind', array($params),
Google_Service_YouTube_LiveBroadcast::class);
}
/**
* Controls the settings for a slate that can be displayed in the
broadcast
* stream. (liveBroadcasts.control)
*
* @param string $id The id parameter specifies the YouTube live
broadcast ID
* that uniquely identifies the broadcast in
which the slate is being updated.
* @param string $part The part parameter specifies a
comma-separated list of
* one or more liveBroadcast resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id,
* snippet, contentDetails, and status.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param bool displaySlate The displaySlate parameter specifies
whether the
* slate is being enabled or disabled.
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string offsetTimeMs The offsetTimeMs parameter specifies
a
* positive time offset when the specified slate change will occur. The
value is
* measured in milliseconds from the beginning of the broadcast's
monitor
* stream, which is the time that the testing phase for the broadcast
began.
* Even though it is specified in milliseconds, the value is actually
an
* approximation, and YouTube completes the requested action as closely
as
* possible to that time.
*
* If you do not specify a value for this parameter, then YouTube
performs the
* action as soon as possible. See the Getting started guide for more
details.
*
* Important: You should only specify a value for this parameter if
your
* broadcast stream is delayed.
* @opt_param string walltime The walltime parameter specifies the wall
clock
* time at which the specified slate change will occur. The value is
specified
* in ISO 8601 (YYYY-MM-DDThh:mm:ss.sssZ) format.
* @return Google_Service_YouTube_LiveBroadcast
*/
public function control($id, $part, $optParams = array()) {
$params = array(
'id' => $id,
'part' => $part
);
$params = array_merge($params, $optParams);
return $this->call('control', array($params),
Google_Service_YouTube_LiveBroadcast::class);
}
/**
* Deletes a broadcast. (liveBroadcasts.delete)
*
* @param string $id The id parameter specifies the YouTube live
broadcast ID
* for the resource that is being deleted.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
*/
public function delete($id, $optParams = array()) {
$params = array('id' => $id);
$params = array_merge($params, $optParams);
return $this->call('delete', array($params));
}
/**
* Creates a broadcast. (liveBroadcasts.insert)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties
that the write operation will set as well as
* the properties that the API
response will include.
*
* The part properties that you can include in the parameter value are
id,
* snippet, contentDetails, and status.
* @param Google_LiveBroadcast $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_LiveBroadcast
*/
public function insert($part, Google_Service_YouTube_LiveBroadcast
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_LiveBroadcast::class);
}
/**
* Returns a list of YouTube broadcasts that match the API request
parameters.
* (liveBroadcasts.listLiveBroadcasts)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more liveBroadcast resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id,
* snippet, contentDetails, and status.
* @param array $optParams Optional parameters.
*
* @opt_param string broadcastStatus The broadcastStatus parameter
filters the
* API response to only include broadcasts with the specified status.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param bool mine The mine parameter can be used to instruct the
API to
* only return broadcasts owned by the authenticated user. Set the
parameter
* value to true to only retrieve your own broadcasts.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
* @opt_param string id The id parameter specifies a comma-separated
list of
* YouTube broadcast IDs that identify the broadcasts being retrieved.
In a
* liveBroadcast resource, the id property specifies the
broadcast's ID.
* @return Google_Service_YouTube_LiveBroadcastListResponse
*/
public function listLiveBroadcasts($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_LiveBroadcastListResponse::class);
}
/**
* Changes the status of a YouTube live broadcast and initiates any
processes
* associated with the new status. For example, when you transition a
* broadcast's status to testing, YouTube starts to transmit video
to that
* broadcast's monitor stream. Before calling this method, you
should confirm
* that the value of the status.streamStatus property for the stream
bound to
* your broadcast is active. (liveBroadcasts.transition)
*
* @param string $broadcastStatus The broadcastStatus parameter
identifies the
* state to which the broadcast is
changing. Note that to transition a broadcast
* to either the testing or live state,
the status.streamStatus must be active
* for the stream that the broadcast is
bound to.
* @param string $id The id parameter specifies the unique
ID of the broadcast
* that is transitioning to another
status.
* @param string $part The part parameter specifies a
comma-separated list of
* one or more liveBroadcast resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id,
* snippet, contentDetails, and status.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_LiveBroadcast
*/
public function transition($broadcastStatus, $id, $part, $optParams =
array()) {
$params = array(
'broadcastStatus' => $broadcastStatus,
'id' => $id,
'part' => $part
);
$params = array_merge($params, $optParams);
return $this->call('transition', array($params),
Google_Service_YouTube_LiveBroadcast::class);
}
/**
* Updates a broadcast. For example, you could modify the broadcast
settings
* defined in the liveBroadcast resource's contentDetails object.
* (liveBroadcasts.update)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties
that the write operation will set as well as
* the properties that the API
response will include.
*
* The part properties that you can include in the parameter value are
id,
* snippet, contentDetails, and status.
*
* Note that this method will override the existing values for all of
the
* mutable properties that are contained in any parts that the
parameter value
* specifies. For example, a broadcast's privacy status is defined
in the status
* part. As such, if your request is updating a private or unlisted
broadcast,
* and the request's part parameter value includes the status
part, the
* broadcast's privacy setting will be updated to whatever value
the request
* body specifies. If the request body does not specify a value, the
existing
* privacy setting will be removed and the broadcast will revert to the
default
* privacy setting.
* @param Google_LiveBroadcast $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_LiveBroadcast
*/
public function update($part, Google_Service_YouTube_LiveBroadcast
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('update', array($params),
Google_Service_YouTube_LiveBroadcast::class);
}
}
/**
* The "liveStreams" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $liveStreams = $youtubeService->liveStreams;
* </code>
*/
class Google_Service_YouTube_LiveStreams_Resource extends
Google_Service_Resource {
/**
* Deletes a video stream. (liveStreams.delete)
*
* @param string $id The id parameter specifies the YouTube live
stream ID for
* the resource that is being deleted.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
*/
public function delete($id, $optParams = array()) {
$params = array('id' => $id);
$params = array_merge($params, $optParams);
return $this->call('delete', array($params));
}
/**
* Creates a video stream. The stream enables you to send your video to
YouTube,
* which can then broadcast the video to your audience.
(liveStreams.insert)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties
that the write operation will set as well as the
* properties that the API response
will include.
*
* The part properties that you can include in the parameter value are
id,
* snippet, cdn, and status.
* @param Google_LiveStream $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_LiveStream
*/
public function insert($part, Google_Service_YouTube_LiveStream
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_LiveStream::class);
}
/**
* Returns a list of video streams that match the API request
parameters.
* (liveStreams.listLiveStreams)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more liveStream resource properties
that the API response will
* include. The part names that you can
include in the parameter value are id,
* snippet, cdn, and status.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param bool mine The mine parameter can be used to instruct the
API to
* only return streams owned by the authenticated user. Set the
parameter value
* to true to only retrieve your own streams.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
Acceptable values
* are 0 to 50, inclusive. The default value is 5.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
* @opt_param string id The id parameter specifies a comma-separated
list of
* YouTube stream IDs that identify the streams being retrieved. In a
liveStream
* resource, the id property specifies the stream's ID.
* @return Google_Service_YouTube_LiveStreamListResponse
*/
public function listLiveStreams($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_LiveStreamListResponse::class);
}
/**
* Updates a video stream. If the properties that you want to change
cannot be
* updated, then you need to create a new stream with the proper
settings.
* (liveStreams.update)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties
that the write operation will set as well as the
* properties that the API response
will include.
*
* The part properties that you can include in the parameter value are
id,
* snippet, cdn, and status.
*
* Note that this method will override the existing values for all of
the
* mutable properties that are contained in any parts that the
parameter value
* specifies. If the request body does not specify a value for a
mutable
* property, the existing value for that property will be removed.
* @param Google_LiveStream $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_LiveStream
*/
public function update($part, Google_Service_YouTube_LiveStream
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('update', array($params),
Google_Service_YouTube_LiveStream::class);
}
}
/**
* The "playlistItems" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $playlistItems = $youtubeService->playlistItems;
* </code>
*/
class Google_Service_YouTube_PlaylistItems_Resource extends
Google_Service_Resource {
/**
* Deletes a playlist item. (playlistItems.delete)
*
* @param string $id The id parameter specifies the YouTube
playlist item ID for
* the playlist item that is being deleted. In
a playlistItem resource, the id
* property specifies the playlist item's
ID.
* @param array $optParams Optional parameters.
*/
public function delete($id, $optParams = array()) {
$params = array('id' => $id);
$params = array_merge($params, $optParams);
return $this->call('delete', array($params));
}
/**
* Adds a resource to a playlist. (playlistItems.insert)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties
that the write operation will set as well as
* the properties that the API
response will include.
*
* The part names that you can include in the parameter value are
snippet,
* contentDetails, and status.
* @param Google_PlaylistItem $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_PlaylistItem
*/
public function insert($part, Google_Service_YouTube_PlaylistItem
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_PlaylistItem::class);
}
/**
* Returns a collection of playlist items that match the API request
parameters.
* You can retrieve all of the playlist items in a specified playlist
or
* retrieve one or more playlist items by their unique IDs.
* (playlistItems.listPlaylistItems)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more playlistItem resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id,
* snippet, contentDetails, and status.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
* playlistItem resource, the snippet property contains numerous
fields,
* including the title, description, position, and resourceId
properties. As
* such, if you set part=snippet, the API response will contain all of
those
* properties.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string playlistId The playlistId parameter specifies the
unique ID
* of the playlist for which you want to retrieve playlist items. Note
that even
* though this is an optional parameter, every request to retrieve
playlist
* items must specify a value for either the id parameter or the
playlistId
* parameter.
* @opt_param string videoId The videoId parameter specifies that the
request
* should return only the playlist items that contain the specified
video.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
* @opt_param string id The id parameter specifies a comma-separated
list of one
* or more unique playlist item IDs.
* @return Google_Service_YouTube_PlaylistItemListResponse
*/
public function listPlaylistItems($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_PlaylistItemListResponse::class);
}
/**
* Modifies a playlist item. For example, you could update the
item's position
* in the playlist. (playlistItems.update)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties
that the write operation will set as well as
* the properties that the API
response will include.
*
* The part names that you can include in the parameter value are
snippet,
* contentDetails, and status.
*
* Note that this method will override the existing values for all of
the
* mutable properties that are contained in any parts that the
parameter value
* specifies. For example, a playlist item can specify a start time and
end
* time, which identify the times portion of the video that should play
when
* users watch the video in the playlist. If your request is updating a
playlist
* item that sets these values, and the request's part parameter
value includes
* the contentDetails part, the playlist item's start and end
times will be
* updated to whatever value the request body specifies. If the request
body
* does not specify values, the existing start and end times will be
removed and
* replaced with the default settings.
* @param Google_PlaylistItem $postBody
* @param array $optParams Optional parameters.
*
* @return Google_Service_YouTube_PlaylistItem
*/
public function update($part, Google_Service_YouTube_PlaylistItem
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('update', array($params),
Google_Service_YouTube_PlaylistItem::class);
}
}
/**
* The "playlists" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $playlists = $youtubeService->playlists;
* </code>
*/
class Google_Service_YouTube_Playlists_Resource extends
Google_Service_Resource {
/**
* Deletes a playlist. (playlists.delete)
*
* @param string $id The id parameter specifies the YouTube
playlist ID for the
* playlist that is being deleted. In a
playlist resource, the id property
* specifies the playlist's ID.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
*/
public function delete($id, $optParams = array()) {
$params = array('id' => $id);
$params = array_merge($params, $optParams);
return $this->call('delete', array($params));
}
/**
* Creates a playlist. (playlists.insert)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties that
the write operation will set as well as the
* properties that the API response
will include.
*
* The part names that you can include in the parameter value are
snippet and
* status.
* @param Google_Playlist $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_Playlist
*/
public function insert($part, Google_Service_YouTube_Playlist
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_Playlist::class);
}
/**
* Returns a collection of playlists that match the API request
parameters. For
* example, you can retrieve all playlists that the authenticated user
owns, or
* you can retrieve one or more playlists by their unique IDs.
* (playlists.listPlaylists)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more playlist resource properties
that the API response will include.
* The part names that you can include in the
parameter value are id, snippet,
* status, and contentDetails.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
playlist
* resource, the snippet property contains properties like author,
title,
* description, tags, and timeCreated. As such, if you set
part=snippet, the API
* response will contain all of those properties.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string channelId This value indicates that the API should
only
* return the specified channel's playlists.
* @opt_param bool mine Set this parameter's value to true to
instruct the API
* to only return playlists owned by the authenticated user.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
* @opt_param string id The id parameter specifies a comma-separated
list of the
* YouTube playlist ID(s) for the resource(s) that are being retrieved.
In a
* playlist resource, the id property specifies the playlist's
YouTube playlist
* ID.
* @return Google_Service_YouTube_PlaylistListResponse
*/
public function listPlaylists($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_PlaylistListResponse::class);
}
/**
* Modifies a playlist. For example, you could change a playlist's
title,
* description, or privacy status. (playlists.update)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties that
the write operation will set as well as the
* properties that the API response
will include.
*
* The part names that you can include in the parameter value are
snippet and
* status.
*
* Note that this method will override the existing values for all of
the
* mutable properties that are contained in any parts that the
parameter value
* specifies. For example, a playlist's privacy setting is
contained in the
* status part. As such, if your request is updating a private
playlist, and the
* request's part parameter value includes the status part, the
playlist's
* privacy setting will be updated to whatever value the request body
specifies.
* If the request body does not specify a value, the existing privacy
setting
* will be removed and the playlist will revert to the default privacy
setting.
* @param Google_Playlist $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_Playlist
*/
public function update($part, Google_Service_YouTube_Playlist
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('update', array($params),
Google_Service_YouTube_Playlist::class);
}
}
/**
* The "search" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $search = $youtubeService->search;
* </code>
*/
class Google_Service_YouTube_Search_Resource extends
Google_Service_Resource {
/**
* Returns a collection of search results that match the query
parameters
* specified in the API request. By default, a search result set
identifies
* matching video, channel, and playlist resources, but you can also
configure
* queries to only retrieve a specific type of resource.
(search.listSearch)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more search resource properties that
the API response will include.
* The part names that you can include in the
parameter value are id and
* snippet.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
search
* result, the snippet property contains other properties that identify
the
* result's title, description, and so forth. If you set
part=snippet, the API
* response will also contain all of those nested properties.
* @param array $optParams Optional parameters.
*
* @opt_param string eventType The eventType parameter restricts a
search to
* broadcast events.
* @opt_param string channelId The channelId parameter indicates that
the API
* response should only contain resources created by the channel
* @opt_param string videoSyndicated The videoSyndicated parameter lets
you to
* restrict a search to only videos that can be played outside
youtube.com.
* @opt_param string channelType The channelType parameter lets you
restrict a
* search to a particular type of channel.
* @opt_param string videoCaption The videoCaption parameter indicates
whether
* the API should filter video search results based on whether they
have
* captions.
* @opt_param string publishedAfter The publishedAfter parameter
indicates that
* the API response should only contain resources created after the
specified
* time. The value is an RFC 3339 formatted date-time value
* (1970-01-01T00:00:00Z).
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
* @opt_param bool forContentOwner Note: This parameter is intended
exclusively
* for YouTube content partners.
*
* The forContentOwner parameter restricts the search to only retrieve
resources
* owned by the content owner specified by the onBehalfOfContentOwner
parameter.
* The user must be authenticated using a CMS account linked to the
specified
* content owner and onBehalfOfContentOwner must be provided.
* @opt_param string regionCode The regionCode parameter instructs the
API to
* return search results for the specified country. The parameter value
is an
* ISO 3166-1 alpha-2 country code.
* @opt_param string location The location parameter restricts a search
to
* videos that have a geographical location specified in their
metadata. The
* value is a string that specifies geographic latitude/longitude
coordinates
* e.g. (37.42307,-122.08427)
* @opt_param string locationRadius The locationRadius, in conjunction
with the
* location parameter, defines a geographic area. If the geographic
coordinates
* associated with a video fall within that area, then the video may be
included
* in search results. This parameter value must be a floating point
number
* followed by a measurement unit. Valid measurement units are m, km,
ft, and
* mi. For example, valid parameter values include 1500m, 5km, 10000ft,
and
* 0.75mi. The API does not support locationRadius parameter values
larger than
* 1000 kilometers.
* @opt_param string videoType The videoType parameter lets you
restrict a
* search to a particular type of videos.
* @opt_param string type The type parameter restricts a search query
to only
* retrieve a particular type of resource. The value is a
comma-separated list
* of resource types.
* @opt_param string topicId The topicId parameter indicates that the
API
* response should only contain resources associated with the specified
topic.
* The value identifies a Freebase topic ID.
* @opt_param string publishedBefore The publishedBefore parameter
indicates
* that the API response should only contain resources created before
the
* specified time. The value is an RFC 3339 formatted date-time value
* (1970-01-01T00:00:00Z).
* @opt_param string videoDimension The videoDimension parameter lets
you
* restrict a search to only retrieve 2D or 3D videos.
* @opt_param string videoLicense The videoLicense parameter filters
search
* results to only include videos with a particular license. YouTube
lets video
* uploaders choose to attach either the Creative Commons license or
the
* standard YouTube license to each of their videos.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
* @opt_param string relatedToVideoId The relatedToVideoId parameter
retrieves a
* list of videos that are related to the video that the parameter
value
* identifies. The parameter value must be set to a YouTube video ID
and, if you
* are using this parameter, the type parameter must be set to video.
* @opt_param string videoDefinition The videoDefinition parameter lets
you
* restrict a search to only include either high definition (HD) or
standard
* definition (SD) videos. HD videos are available for playback in at
least
* 720p, though higher resolutions, like 1080p, might also be
available.
* @opt_param string videoDuration The videoDuration parameter filters
video
* search results based on their duration.
* @opt_param bool forMine The forMine parameter restricts the search
to only
* retrieve videos owned by the authenticated user. If you set this
parameter to
* true, then the type parameter's value must also be set to
video.
* @opt_param string q The q parameter specifies the query term to
search for.
* @opt_param string safeSearch The safeSearch parameter indicates
whether the
* search results should include restricted content as well as standard
content.
* @opt_param string videoEmbeddable The videoEmbeddable parameter lets
you to
* restrict a search to only videos that can be embedded into a
webpage.
* @opt_param string videoCategoryId The videoCategoryId parameter
filters video
* search results based on their category.
* @opt_param string order The order parameter specifies the method
that will be
* used to order resources in the API response.
* @return Google_Service_YouTube_SearchListResponse
*/
public function listSearch($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_SearchListResponse::class);
}
}
/**
* The "subscriptions" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $subscriptions = $youtubeService->subscriptions;
* </code>
*/
class Google_Service_YouTube_Subscriptions_Resource extends
Google_Service_Resource {
/**
* Deletes a subscription. (subscriptions.delete)
*
* @param string $id The id parameter specifies the YouTube
subscription ID for
* the resource that is being deleted. In a
subscription resource, the id
* property specifies the YouTube subscription
ID.
* @param array $optParams Optional parameters.
*/
public function delete($id, $optParams = array()) {
$params = array('id' => $id);
$params = array_merge($params, $optParams);
return $this->call('delete', array($params));
}
/**
* Adds a subscription for the authenticated user's channel.
* (subscriptions.insert)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties
that the write operation will set as well as
* the properties that the API
response will include.
*
* The part names that you can include in the parameter value are
snippet and
* contentDetails.
* @param Google_Subscription $postBody
* @param array $optParams Optional parameters.
*
* @return Google_Service_YouTube_Subscription
*/
public function insert($part, Google_Service_YouTube_Subscription
$postBody, $optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_Subscription::class);
}
/**
* Returns subscription resources that match the API request criteria.
* (subscriptions.listSubscriptions)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more subscription resource
properties that the API response will
* include. The part names that you can
include in the parameter value are id,
* snippet, and contentDetails.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
* subscription resource, the snippet property contains other
properties, such
* as a display title for the subscription. If you set part=snippet,
the API
* response will also contain all of those nested properties.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param string channelId The channelId parameter specifies a
YouTube
* channel ID. The API will only return that channel's
subscriptions.
* @opt_param bool mine Set this parameter's value to true to
retrieve a feed of
* the authenticated user's subscriptions.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
* @opt_param string forChannelId The forChannelId parameter specifies
a comma-
* separated list of channel IDs. The API response will then only
contain
* subscriptions matching those channels.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
* @opt_param bool mySubscribers Set this parameter's value to
true to retrieve
* a feed of the subscribers of the authenticated user.
* @opt_param string order The order parameter specifies the method
that will be
* used to sort resources in the API response.
* @opt_param string id The id parameter specifies a comma-separated
list of the
* YouTube subscription ID(s) for the resource(s) that are being
retrieved. In a
* subscription resource, the id property specifies the YouTube
subscription ID.
* @return Google_Service_YouTube_SubscriptionListResponse
*/
public function listSubscriptions($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_SubscriptionListResponse::class);
}
}
/**
* The "thumbnails" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $thumbnails = $youtubeService->thumbnails;
* </code>
*/
class Google_Service_YouTube_Thumbnails_Resource extends
Google_Service_Resource {
/**
* Uploads a custom video thumbnail to YouTube and sets it for a video.
* (thumbnails.set)
*
* @param string $videoId The videoId parameter specifies a YouTube
video ID for
* which the custom video thumbnail is being
provided.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner The onBehalfOfContentOwner
parameter
* indicates that the authenticated user is acting on behalf of the
content
* owner specified in the parameter value. This parameter is intended
for
* YouTube content partners that own and manage many different YouTube
channels.
* It allows content owners to authenticate once and get access to all
their
* video and channel data, without having to provide authentication
credentials
* for each individual channel. The actual CMS account that the user
* authenticates with needs to be linked to the specified YouTube
content owner.
* @return Google_Service_YouTube_ThumbnailSetResponse
*/
public function set($videoId, $optParams = array()) {
$params = array('videoId' => $videoId);
$params = array_merge($params, $optParams);
return $this->call('set', array($params),
Google_Service_YouTube_ThumbnailSetResponse::class);
}
}
/**
* The "videoCategories" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $videoCategories = $youtubeService->videoCategories;
* </code>
*/
class Google_Service_YouTube_VideoCategories_Resource extends
Google_Service_Resource {
/**
* Returns a list of categories that can be associated with YouTube
videos.
* (videoCategories.listVideoCategories)
*
* @param string $part The part parameter specifies the
videoCategory resource
* parts that the API response will include.
Supported values are id and
* snippet.
* @param array $optParams Optional parameters.
*
* @opt_param string regionCode The regionCode parameter instructs the
API to
* return the list of video categories available in the specified
country. The
* parameter value is an ISO 3166-1 alpha-2 country code.
* @opt_param string id The id parameter specifies a comma-separated
list of
* video category IDs for the resources that you are retrieving.
* @opt_param string hl The hl parameter specifies the language that
should be
* used for text values in the API response.
* @return Google_Service_YouTube_VideoCategoryListResponse
*/
public function listVideoCategories($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_VideoCategoryListResponse::class);
}
}
/**
* The "videos" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $videos = $youtubeService->videos;
* </code>
*/
class Google_Service_YouTube_Videos_Resource extends
Google_Service_Resource {
/**
* Deletes a YouTube video. (videos.delete)
*
* @param string $id The id parameter specifies the YouTube
video ID for the
* resource that is being deleted. In a video
resource, the id property
* specifies the video's ID.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The actual
CMS
* account that the user authenticates with must be linked to the
specified
* YouTube content owner.
*/
public function delete($id, $optParams = array()) {
$params = array('id' => $id);
$params = array_merge($params, $optParams);
return $this->call('delete', array($params));
}
/**
* Retrieves the ratings that the authorized user gave to a list of
specified
* videos. (videos.getRating)
*
* @param string $id The id parameter specifies a
comma-separated list of the
* YouTube video ID(s) for the resource(s) for
which you are retrieving rating
* data. In a video resource, the id property
specifies the video's ID.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @return Google_Service_YouTube_VideoGetRatingResponse
*/
public function getRating($id, $optParams = array()) {
$params = array('id' => $id);
$params = array_merge($params, $optParams);
return $this->call('getRating', array($params),
Google_Service_YouTube_VideoGetRatingResponse::class);
}
/**
* Uploads a video to YouTube and optionally sets the video's
metadata.
* (videos.insert)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties that the
write operation will set as well as the
* properties that the API response will
include.
*
* The part names that you can include in the parameter value are
snippet,
* contentDetails, fileDetails, liveStreamingDetails, player,
processingDetails,
* recordingDetails, statistics, status, suggestions, and topicDetails.
However,
* not all of those parts contain properties that can be set when
setting or
* updating a video's metadata. For example, the statistics object
encapsulates
* statistics that YouTube calculates for a video and does not contain
values
* that you can set or modify. If the parameter value specifies a part
that does
* not contain mutable values, that part will still be included in the
API
* response.
* @param Google_Video $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param bool stabilize The stabilize parameter indicates whether
YouTube
* should adjust the video to remove shaky camera motions.
* @opt_param string onBehalfOfContentOwnerChannel This parameter can
only be
* used in a properly authorized request. Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwnerChannel parameter specifies the YouTube
channel ID
* of the channel to which a video is being added. This parameter is
required
* when a request specifies a value for the onBehalfOfContentOwner
parameter,
* and it can only be used in conjunction with that parameter. In
addition, the
* request must be authorized using a CMS account that is linked to the
content
* owner that the onBehalfOfContentOwner parameter specifies. Finally,
the
* channel that the onBehalfOfContentOwnerChannel parameter value
specifies must
* be linked to the content owner that the onBehalfOfContentOwner
parameter
* specifies.
*
* This parameter is intended for YouTube content partners that own and
manage
* many different YouTube channels. It allows content owners to
authenticate
* once and perform actions on behalf of the channel specified in the
parameter
* value, without having to provide authentication credentials for each
separate
* channel.
* @opt_param bool notifySubscribers The notifySubscribers parameter
indicates
* whether YouTube should send notification to subscribers about the
inserted
* video.
* @opt_param bool autoLevels The autoLevels parameter indicates
whether YouTube
* should automatically enhance the video's lighting and color.
* @return Google_Service_YouTube_Video
*/
public function insert($part, Google_Service_YouTube_Video $postBody,
$optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('insert', array($params),
Google_Service_YouTube_Video::class);
}
/**
* Returns a list of videos that match the API request parameters.
* (videos.listVideos)
*
* @param string $part The part parameter specifies a
comma-separated list of
* one or more video resource properties that
the API response will include. The
* part names that you can include in the
parameter value are id, snippet,
* contentDetails, fileDetails,
liveStreamingDetails, player, processingDetails,
* recordingDetails, statistics, status,
suggestions, and topicDetails.
*
* If the parameter identifies a property that contains child
properties, the
* child properties will be included in the response. For example, in a
video
* resource, the snippet property contains the channelId, title,
description,
* tags, and categoryId properties. As such, if you set part=snippet,
the API
* response will contain all of those properties.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
* @opt_param string regionCode The regionCode parameter instructs the
API to
* select a video chart available in the specified region. This
parameter can
* only be used in conjunction with the chart parameter. The parameter
value is
* an ISO 3166-1 alpha-2 country code.
* @opt_param string locale DEPRECATED
* @opt_param string videoCategoryId The videoCategoryId parameter
identifies
* the video category for which the chart should be retrieved. This
parameter
* can only be used in conjunction with the chart parameter. By
default, charts
* are not restricted to a particular category.
* @opt_param string chart The chart parameter identifies the chart
that you
* want to retrieve.
* @opt_param string maxResults The maxResults parameter specifies the
maximum
* number of items that should be returned in the result set.
*
* Note: This parameter is supported for use in conjunction with the
myRating
* parameter, but it is not supported for use in conjunction with the
id
* parameter.
* @opt_param string pageToken The pageToken parameter identifies a
specific
* page in the result set that should be returned. In an API response,
the
* nextPageToken and prevPageToken properties identify other pages that
could be
* retrieved.
*
* Note: This parameter is supported for use in conjunction with the
myRating
* parameter, but it is not supported for use in conjunction with the
id
* parameter.
* @opt_param string myRating Set this parameter's value to like
or dislike to
* instruct the API to only return videos liked or disliked by the
authenticated
* user.
* @opt_param string id The id parameter specifies a comma-separated
list of the
* YouTube video ID(s) for the resource(s) that are being retrieved. In
a video
* resource, the id property specifies the video's ID.
* @return Google_Service_YouTube_VideoListResponse
*/
public function listVideos($part, $optParams = array()) {
$params = array('part' => $part);
$params = array_merge($params, $optParams);
return $this->call('list', array($params),
Google_Service_YouTube_VideoListResponse::class);
}
/**
* Add a like or dislike rating to a video or remove a rating from a
video.
* (videos.rate)
*
* @param string $id The id parameter specifies the YouTube
video ID of the
* video that is being rated or having its
rating removed.
* @param string $rating Specifies the rating to record.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The CMS
account that
* the user authenticates with must be linked to the specified YouTube
content
* owner.
*/
public function rate($id, $rating, $optParams = array()) {
$params = array(
'id' => $id,
'rating' => $rating
);
$params = array_merge($params, $optParams);
return $this->call('rate', array($params));
}
/**
* Updates a video's metadata. (videos.update)
*
* @param string $part The part parameter serves two
purposes in this operation.
* It identifies the properties that the
write operation will set as well as the
* properties that the API response will
include.
*
* The part names that you can include in the parameter value are
snippet,
* contentDetails, fileDetails, liveStreamingDetails, player,
processingDetails,
* recordingDetails, statistics, status, suggestions, and topicDetails.
*
* Note that this method will override the existing values for all of
the
* mutable properties that are contained in any parts that the
parameter value
* specifies. For example, a video's privacy setting is contained
in the status
* part. As such, if your request is updating a private video, and the
request's
* part parameter value includes the status part, the video's
privacy setting
* will be updated to whatever value the request body specifies. If the
request
* body does not specify a value, the existing privacy setting will be
removed
* and the video will revert to the default privacy setting.
*
* In addition, not all of those parts contain properties that can be
set when
* setting or updating a video's metadata. For example, the
statistics object
* encapsulates statistics that YouTube calculates for a video and does
not
* contain values that you can set or modify. If the parameter value
specifies a
* part that does not contain mutable values, that part will still be
included
* in the API response.
* @param Google_Video $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner Note: This parameter is
intended
* exclusively for YouTube content partners.
*
* The onBehalfOfContentOwner parameter indicates that the
request's
* authorization credentials identify a YouTube CMS user who is acting
on behalf
* of the content owner specified in the parameter value. This
parameter is
* intended for YouTube content partners that own and manage many
different
* YouTube channels. It allows content owners to authenticate once and
get
* access to all their video and channel data, without having to
provide
* authentication credentials for each individual channel. The actual
CMS
* account that the user authenticates with must be linked to the
specified
* YouTube content owner.
* @return Google_Service_YouTube_Video
*/
public function update($part, Google_Service_YouTube_Video $postBody,
$optParams = array()) {
$params = array(
'part' => $part,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('update', array($params),
Google_Service_YouTube_Video::class);
}
}
/**
* The "watermarks" collection of methods.
* Typical usage is:
* <code>
* $youtubeService = new Google_Service_YouTube(...);
* $watermarks = $youtubeService->watermarks;
* </code>
*/
class Google_Service_YouTube_Watermarks_Resource extends
Google_Service_Resource {
/**
* Uploads a watermark image to YouTube and sets it for a channel.
* (watermarks.set)
*
* @param string $channelId The channelId parameter
specifies a YouTube channel
* ID for which the watermark
is being provided.
* @param Google_InvideoBranding $postBody
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner The onBehalfOfContentOwner
parameter
* indicates that the authenticated user is acting on behalf of the
content
* owner specified in the parameter value. This parameter is intended
for
* YouTube content partners that own and manage many different YouTube
channels.
* It allows content owners to authenticate once and get access to all
their
* video and channel data, without having to provide authentication
credentials
* for each individual channel. The actual CMS account that the user
* authenticates with needs to be linked to the specified YouTube
content owner.
*/
public function set($channelId, Google_Service_YouTube_InvideoBranding
$postBody, $optParams = array()) {
$params = array(
'channelId' => $channelId,
'postBody' => $postBody
);
$params = array_merge($params, $optParams);
return $this->call('set', array($params));
}
/**
* Deletes a watermark. (watermarks.unsetWatermarks)
*
* @param string $channelId The channelId parameter specifies a YouTube
channel
* ID for which the watermark is being unset.
* @param array $optParams Optional parameters.
*
* @opt_param string onBehalfOfContentOwner The onBehalfOfContentOwner
parameter
* indicates that the authenticated user is acting on behalf of the
content
* owner specified in the parameter value. This parameter is intended
for
* YouTube content partners that own and manage many different YouTube
channels.
* It allows content owners to authenticate once and get access to all
their
* video and channel data, without having to provide authentication
credentials
* for each individual channel. The actual CMS account that the user
* authenticates with needs to be linked to the specified YouTube
content owner.
*/
public function unsetWatermarks($channelId, $optParams = array()) {
$params = array('channelId' => $channelId);
$params = array_merge($params, $optParams);
return $this->call('unset', array($params));
}
}
class Google_Service_YouTube_AccessPolicy extends Google_Collection {
protected $collection_key = 'exception';
protected $internal_gapi_mappings = array();
public $allowed;
public $exception;
public function setAllowed($allowed) {
$this->allowed = $allowed;
}
public function getAllowed() {
return $this->allowed;
}
public function setException($exception) {
$this->exception = $exception;
}
public function getException() {
return $this->exception;
}
}
class Google_Service_YouTube_Activity extends Google_Model {
protected $internal_gapi_mappings = array();
protected $contentDetailsType =
'Google_Service_YouTube_ActivityContentDetails';
protected $contentDetailsDataType = '';
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_ActivitySnippet';
protected $snippetDataType = '';
public function
setContentDetails(Google_Service_YouTube_ActivityContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_ActivitySnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
}
class Google_Service_YouTube_ActivityContentDetails extends Google_Model {
protected $internal_gapi_mappings = array();
protected $bulletinType =
'Google_Service_YouTube_ActivityContentDetailsBulletin';
protected $bulletinDataType = '';
protected $channelItemType =
'Google_Service_YouTube_ActivityContentDetailsChannelItem';
protected $channelItemDataType = '';
protected $commentType =
'Google_Service_YouTube_ActivityContentDetailsComment';
protected $commentDataType = '';
protected $favoriteType =
'Google_Service_YouTube_ActivityContentDetailsFavorite';
protected $favoriteDataType = '';
protected $likeType =
'Google_Service_YouTube_ActivityContentDetailsLike';
protected $likeDataType = '';
protected $playlistItemType =
'Google_Service_YouTube_ActivityContentDetailsPlaylistItem';
protected $playlistItemDataType = '';
protected $promotedItemType =
'Google_Service_YouTube_ActivityContentDetailsPromotedItem';
protected $promotedItemDataType = '';
protected $recommendationType =
'Google_Service_YouTube_ActivityContentDetailsRecommendation';
protected $recommendationDataType = '';
protected $socialType =
'Google_Service_YouTube_ActivityContentDetailsSocial';
protected $socialDataType = '';
protected $subscriptionType =
'Google_Service_YouTube_ActivityContentDetailsSubscription';
protected $subscriptionDataType = '';
protected $uploadType =
'Google_Service_YouTube_ActivityContentDetailsUpload';
protected $uploadDataType = '';
public function
setBulletin(Google_Service_YouTube_ActivityContentDetailsBulletin
$bulletin) {
$this->bulletin = $bulletin;
}
public function getBulletin() {
return $this->bulletin;
}
public function
setChannelItem(Google_Service_YouTube_ActivityContentDetailsChannelItem
$channelItem) {
$this->channelItem = $channelItem;
}
public function getChannelItem() {
return $this->channelItem;
}
public function
setComment(Google_Service_YouTube_ActivityContentDetailsComment $comment) {
$this->comment = $comment;
}
public function getComment() {
return $this->comment;
}
public function
setFavorite(Google_Service_YouTube_ActivityContentDetailsFavorite
$favorite) {
$this->favorite = $favorite;
}
public function getFavorite() {
return $this->favorite;
}
public function
setLike(Google_Service_YouTube_ActivityContentDetailsLike $like) {
$this->like = $like;
}
public function getLike() {
return $this->like;
}
public function
setPlaylistItem(Google_Service_YouTube_ActivityContentDetailsPlaylistItem
$playlistItem) {
$this->playlistItem = $playlistItem;
}
public function getPlaylistItem() {
return $this->playlistItem;
}
public function
setPromotedItem(Google_Service_YouTube_ActivityContentDetailsPromotedItem
$promotedItem) {
$this->promotedItem = $promotedItem;
}
public function getPromotedItem() {
return $this->promotedItem;
}
public function
setRecommendation(Google_Service_YouTube_ActivityContentDetailsRecommendation
$recommendation) {
$this->recommendation = $recommendation;
}
public function getRecommendation() {
return $this->recommendation;
}
public function
setSocial(Google_Service_YouTube_ActivityContentDetailsSocial $social) {
$this->social = $social;
}
public function getSocial() {
return $this->social;
}
public function
setSubscription(Google_Service_YouTube_ActivityContentDetailsSubscription
$subscription) {
$this->subscription = $subscription;
}
public function getSubscription() {
return $this->subscription;
}
public function
setUpload(Google_Service_YouTube_ActivityContentDetailsUpload $upload) {
$this->upload = $upload;
}
public function getUpload() {
return $this->upload;
}
}
class Google_Service_YouTube_ActivityContentDetailsBulletin extends
Google_Model {
protected $internal_gapi_mappings = array();
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
}
class Google_Service_YouTube_ActivityContentDetailsChannelItem extends
Google_Model {
protected $internal_gapi_mappings = array();
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
}
class Google_Service_YouTube_ActivityContentDetailsComment extends
Google_Model {
protected $internal_gapi_mappings = array();
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
}
class Google_Service_YouTube_ActivityContentDetailsFavorite extends
Google_Model {
protected $internal_gapi_mappings = array();
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
}
class Google_Service_YouTube_ActivityContentDetailsLike extends
Google_Model {
protected $internal_gapi_mappings = array();
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
}
class Google_Service_YouTube_ActivityContentDetailsPlaylistItem extends
Google_Model {
protected $internal_gapi_mappings = array();
public $playlistId;
public $playlistItemId;
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
public function setPlaylistId($playlistId) {
$this->playlistId = $playlistId;
}
public function getPlaylistId() {
return $this->playlistId;
}
public function setPlaylistItemId($playlistItemId) {
$this->playlistItemId = $playlistItemId;
}
public function getPlaylistItemId() {
return $this->playlistItemId;
}
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
}
class Google_Service_YouTube_ActivityContentDetailsPromotedItem extends
Google_Collection {
protected $collection_key = 'impressionUrl';
protected $internal_gapi_mappings = array();
public $adTag;
public $clickTrackingUrl;
public $creativeViewUrl;
public $ctaType;
public $customCtaButtonText;
public $descriptionText;
public $destinationUrl;
public $forecastingUrl;
public $impressionUrl;
public $videoId;
public function setAdTag($adTag) {
$this->adTag = $adTag;
}
public function getAdTag() {
return $this->adTag;
}
public function setClickTrackingUrl($clickTrackingUrl) {
$this->clickTrackingUrl = $clickTrackingUrl;
}
public function getClickTrackingUrl() {
return $this->clickTrackingUrl;
}
public function setCreativeViewUrl($creativeViewUrl) {
$this->creativeViewUrl = $creativeViewUrl;
}
public function getCreativeViewUrl() {
return $this->creativeViewUrl;
}
public function setCtaType($ctaType) {
$this->ctaType = $ctaType;
}
public function getCtaType() {
return $this->ctaType;
}
public function setCustomCtaButtonText($customCtaButtonText) {
$this->customCtaButtonText = $customCtaButtonText;
}
public function getCustomCtaButtonText() {
return $this->customCtaButtonText;
}
public function setDescriptionText($descriptionText) {
$this->descriptionText = $descriptionText;
}
public function getDescriptionText() {
return $this->descriptionText;
}
public function setDestinationUrl($destinationUrl) {
$this->destinationUrl = $destinationUrl;
}
public function getDestinationUrl() {
return $this->destinationUrl;
}
public function setForecastingUrl($forecastingUrl) {
$this->forecastingUrl = $forecastingUrl;
}
public function getForecastingUrl() {
return $this->forecastingUrl;
}
public function setImpressionUrl($impressionUrl) {
$this->impressionUrl = $impressionUrl;
}
public function getImpressionUrl() {
return $this->impressionUrl;
}
public function setVideoId($videoId) {
$this->videoId = $videoId;
}
public function getVideoId() {
return $this->videoId;
}
}
class Google_Service_YouTube_ActivityContentDetailsRecommendation extends
Google_Model {
protected $internal_gapi_mappings = array();
public $reason;
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
protected $seedResourceIdType =
'Google_Service_YouTube_ResourceId';
protected $seedResourceIdDataType = '';
public function setReason($reason) {
$this->reason = $reason;
}
public function getReason() {
return $this->reason;
}
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
public function setSeedResourceId(Google_Service_YouTube_ResourceId
$seedResourceId) {
$this->seedResourceId = $seedResourceId;
}
public function getSeedResourceId() {
return $this->seedResourceId;
}
}
class Google_Service_YouTube_ActivityContentDetailsSocial extends
Google_Model {
protected $internal_gapi_mappings = array();
public $author;
public $imageUrl;
public $referenceUrl;
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
public $type;
public function setAuthor($author) {
$this->author = $author;
}
public function getAuthor() {
return $this->author;
}
public function setImageUrl($imageUrl) {
$this->imageUrl = $imageUrl;
}
public function getImageUrl() {
return $this->imageUrl;
}
public function setReferenceUrl($referenceUrl) {
$this->referenceUrl = $referenceUrl;
}
public function getReferenceUrl() {
return $this->referenceUrl;
}
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
public function setType($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
}
class Google_Service_YouTube_ActivityContentDetailsSubscription extends
Google_Model {
protected $internal_gapi_mappings = array();
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
}
class Google_Service_YouTube_ActivityContentDetailsUpload extends
Google_Model {
protected $internal_gapi_mappings = array();
public $videoId;
public function setVideoId($videoId) {
$this->videoId = $videoId;
}
public function getVideoId() {
return $this->videoId;
}
}
class Google_Service_YouTube_ActivityListResponse extends Google_Collection
{
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_Activity';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_ActivitySnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $channelTitle;
public $description;
public $groupId;
public $publishedAt;
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public $type;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setChannelTitle($channelTitle) {
$this->channelTitle = $channelTitle;
}
public function getChannelTitle() {
return $this->channelTitle;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setGroupId($groupId) {
$this->groupId = $groupId;
}
public function getGroupId() {
return $this->groupId;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
public function setType($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
}
class Google_Service_YouTube_CdnSettings extends Google_Model {
protected $internal_gapi_mappings = array();
public $format;
protected $ingestionInfoType =
'Google_Service_YouTube_IngestionInfo';
protected $ingestionInfoDataType = '';
public $ingestionType;
public function setFormat($format) {
$this->format = $format;
}
public function getFormat() {
return $this->format;
}
public function setIngestionInfo(Google_Service_YouTube_IngestionInfo
$ingestionInfo) {
$this->ingestionInfo = $ingestionInfo;
}
public function getIngestionInfo() {
return $this->ingestionInfo;
}
public function setIngestionType($ingestionType) {
$this->ingestionType = $ingestionType;
}
public function getIngestionType() {
return $this->ingestionType;
}
}
class Google_Service_YouTube_Channel extends Google_Model {
protected $internal_gapi_mappings = array();
protected $auditDetailsType =
'Google_Service_YouTube_ChannelAuditDetails';
protected $auditDetailsDataType = '';
protected $brandingSettingsType =
'Google_Service_YouTube_ChannelBrandingSettings';
protected $brandingSettingsDataType = '';
protected $contentDetailsType =
'Google_Service_YouTube_ChannelContentDetails';
protected $contentDetailsDataType = '';
protected $contentOwnerDetailsType =
'Google_Service_YouTube_ChannelContentOwnerDetails';
protected $contentOwnerDetailsDataType = '';
protected $conversionPingsType =
'Google_Service_YouTube_ChannelConversionPings';
protected $conversionPingsDataType = '';
public $etag;
public $id;
protected $invideoPromotionType =
'Google_Service_YouTube_InvideoPromotion';
protected $invideoPromotionDataType = '';
public $kind;
protected $localizationsType =
'Google_Service_YouTube_ChannelLocalization';
protected $localizationsDataType = 'map';
protected $snippetType =
'Google_Service_YouTube_ChannelSnippet';
protected $snippetDataType = '';
protected $statisticsType =
'Google_Service_YouTube_ChannelStatistics';
protected $statisticsDataType = '';
protected $statusType =
'Google_Service_YouTube_ChannelStatus';
protected $statusDataType = '';
protected $topicDetailsType =
'Google_Service_YouTube_ChannelTopicDetails';
protected $topicDetailsDataType = '';
public function
setAuditDetails(Google_Service_YouTube_ChannelAuditDetails $auditDetails) {
$this->auditDetails = $auditDetails;
}
public function getAuditDetails() {
return $this->auditDetails;
}
public function
setBrandingSettings(Google_Service_YouTube_ChannelBrandingSettings
$brandingSettings) {
$this->brandingSettings = $brandingSettings;
}
public function getBrandingSettings() {
return $this->brandingSettings;
}
public function
setContentDetails(Google_Service_YouTube_ChannelContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function
setContentOwnerDetails(Google_Service_YouTube_ChannelContentOwnerDetails
$contentOwnerDetails) {
$this->contentOwnerDetails = $contentOwnerDetails;
}
public function getContentOwnerDetails() {
return $this->contentOwnerDetails;
}
public function
setConversionPings(Google_Service_YouTube_ChannelConversionPings
$conversionPings) {
$this->conversionPings = $conversionPings;
}
public function getConversionPings() {
return $this->conversionPings;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function
setInvideoPromotion(Google_Service_YouTube_InvideoPromotion
$invideoPromotion) {
$this->invideoPromotion = $invideoPromotion;
}
public function getInvideoPromotion() {
return $this->invideoPromotion;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setLocalizations($localizations) {
$this->localizations = $localizations;
}
public function getLocalizations() {
return $this->localizations;
}
public function setSnippet(Google_Service_YouTube_ChannelSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
public function setStatistics(Google_Service_YouTube_ChannelStatistics
$statistics) {
$this->statistics = $statistics;
}
public function getStatistics() {
return $this->statistics;
}
public function setStatus(Google_Service_YouTube_ChannelStatus $status)
{
$this->status = $status;
}
public function getStatus() {
return $this->status;
}
public function
setTopicDetails(Google_Service_YouTube_ChannelTopicDetails $topicDetails) {
$this->topicDetails = $topicDetails;
}
public function getTopicDetails() {
return $this->topicDetails;
}
}
class Google_Service_YouTube_ChannelAuditDetails extends Google_Model {
protected $internal_gapi_mappings = array();
public $communityGuidelinesGoodStanding;
public $contentIdClaimsGoodStanding;
public $copyrightStrikesGoodStanding;
public $overallGoodStanding;
public function
setCommunityGuidelinesGoodStanding($communityGuidelinesGoodStanding) {
$this->communityGuidelinesGoodStanding =
$communityGuidelinesGoodStanding;
}
public function getCommunityGuidelinesGoodStanding() {
return $this->communityGuidelinesGoodStanding;
}
public function
setContentIdClaimsGoodStanding($contentIdClaimsGoodStanding) {
$this->contentIdClaimsGoodStanding =
$contentIdClaimsGoodStanding;
}
public function getContentIdClaimsGoodStanding() {
return $this->contentIdClaimsGoodStanding;
}
public function
setCopyrightStrikesGoodStanding($copyrightStrikesGoodStanding) {
$this->copyrightStrikesGoodStanding =
$copyrightStrikesGoodStanding;
}
public function getCopyrightStrikesGoodStanding() {
return $this->copyrightStrikesGoodStanding;
}
public function setOverallGoodStanding($overallGoodStanding) {
$this->overallGoodStanding = $overallGoodStanding;
}
public function getOverallGoodStanding() {
return $this->overallGoodStanding;
}
}
class Google_Service_YouTube_ChannelBannerResource extends Google_Model {
protected $internal_gapi_mappings = array();
public $etag;
public $kind;
public $url;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setUrl($url) {
$this->url = $url;
}
public function getUrl() {
return $this->url;
}
}
class Google_Service_YouTube_ChannelBrandingSettings extends
Google_Collection {
protected $collection_key = 'hints';
protected $internal_gapi_mappings = array();
protected $channelType =
'Google_Service_YouTube_ChannelSettings';
protected $channelDataType = '';
protected $hintsType =
'Google_Service_YouTube_PropertyValue';
protected $hintsDataType = 'array';
protected $imageType =
'Google_Service_YouTube_ImageSettings';
protected $imageDataType = '';
protected $watchType =
'Google_Service_YouTube_WatchSettings';
protected $watchDataType = '';
public function setChannel(Google_Service_YouTube_ChannelSettings
$channel) {
$this->channel = $channel;
}
public function getChannel() {
return $this->channel;
}
public function setHints($hints) {
$this->hints = $hints;
}
public function getHints() {
return $this->hints;
}
public function setImage(Google_Service_YouTube_ImageSettings $image) {
$this->image = $image;
}
public function getImage() {
return $this->image;
}
public function setWatch(Google_Service_YouTube_WatchSettings $watch) {
$this->watch = $watch;
}
public function getWatch() {
return $this->watch;
}
}
class Google_Service_YouTube_ChannelContentDetails extends Google_Model {
protected $internal_gapi_mappings = array();
public $googlePlusUserId;
protected $relatedPlaylistsType =
'Google_Service_YouTube_ChannelContentDetailsRelatedPlaylists';
protected $relatedPlaylistsDataType = '';
public function setGooglePlusUserId($googlePlusUserId) {
$this->googlePlusUserId = $googlePlusUserId;
}
public function getGooglePlusUserId() {
return $this->googlePlusUserId;
}
public function
setRelatedPlaylists(Google_Service_YouTube_ChannelContentDetailsRelatedPlaylists
$relatedPlaylists) {
$this->relatedPlaylists = $relatedPlaylists;
}
public function getRelatedPlaylists() {
return $this->relatedPlaylists;
}
}
class Google_Service_YouTube_ChannelContentDetailsRelatedPlaylists extends
Google_Model {
protected $internal_gapi_mappings = array();
public $favorites;
public $likes;
public $uploads;
public $watchHistory;
public $watchLater;
public function setFavorites($favorites) {
$this->favorites = $favorites;
}
public function getFavorites() {
return $this->favorites;
}
public function setLikes($likes) {
$this->likes = $likes;
}
public function getLikes() {
return $this->likes;
}
public function setUploads($uploads) {
$this->uploads = $uploads;
}
public function getUploads() {
return $this->uploads;
}
public function setWatchHistory($watchHistory) {
$this->watchHistory = $watchHistory;
}
public function getWatchHistory() {
return $this->watchHistory;
}
public function setWatchLater($watchLater) {
$this->watchLater = $watchLater;
}
public function getWatchLater() {
return $this->watchLater;
}
}
class Google_Service_YouTube_ChannelContentOwnerDetails extends
Google_Model {
protected $internal_gapi_mappings = array();
public $contentOwner;
public $timeLinked;
public function setContentOwner($contentOwner) {
$this->contentOwner = $contentOwner;
}
public function getContentOwner() {
return $this->contentOwner;
}
public function setTimeLinked($timeLinked) {
$this->timeLinked = $timeLinked;
}
public function getTimeLinked() {
return $this->timeLinked;
}
}
class Google_Service_YouTube_ChannelConversionPing extends Google_Model {
protected $internal_gapi_mappings = array();
public $context;
public $conversionUrl;
public function setContext($context) {
$this->context = $context;
}
public function getContext() {
return $this->context;
}
public function setConversionUrl($conversionUrl) {
$this->conversionUrl = $conversionUrl;
}
public function getConversionUrl() {
return $this->conversionUrl;
}
}
class Google_Service_YouTube_ChannelConversionPings extends
Google_Collection {
protected $collection_key = 'pings';
protected $internal_gapi_mappings = array();
protected $pingsType =
'Google_Service_YouTube_ChannelConversionPing';
protected $pingsDataType = 'array';
public function setPings($pings) {
$this->pings = $pings;
}
public function getPings() {
return $this->pings;
}
}
class Google_Service_YouTube_ChannelListResponse extends Google_Collection
{
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_Channel';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_ChannelLocalization extends Google_Model {
protected $internal_gapi_mappings = array();
public $description;
public $title;
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_ChannelLocalizations extends Google_Model {
}
class Google_Service_YouTube_ChannelSection extends Google_Model {
protected $internal_gapi_mappings = array();
protected $contentDetailsType =
'Google_Service_YouTube_ChannelSectionContentDetails';
protected $contentDetailsDataType = '';
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_ChannelSectionSnippet';
protected $snippetDataType = '';
public function
setContentDetails(Google_Service_YouTube_ChannelSectionContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_ChannelSectionSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
}
class Google_Service_YouTube_ChannelSectionContentDetails extends
Google_Collection {
protected $collection_key = 'playlists';
protected $internal_gapi_mappings = array();
public $channels;
public $playlists;
public function setChannels($channels) {
$this->channels = $channels;
}
public function getChannels() {
return $this->channels;
}
public function setPlaylists($playlists) {
$this->playlists = $playlists;
}
public function getPlaylists() {
return $this->playlists;
}
}
class Google_Service_YouTube_ChannelSectionListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType =
'Google_Service_YouTube_ChannelSection';
protected $itemsDataType = 'array';
public $kind;
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_ChannelSectionSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $position;
public $style;
public $title;
public $type;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setPosition($position) {
$this->position = $position;
}
public function getPosition() {
return $this->position;
}
public function setStyle($style) {
$this->style = $style;
}
public function getStyle() {
return $this->style;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
public function setType($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
}
class Google_Service_YouTube_ChannelSettings extends Google_Collection {
protected $collection_key = 'featuredChannelsUrls';
protected $internal_gapi_mappings = array();
public $defaultLanguage;
public $defaultTab;
public $description;
public $featuredChannelsTitle;
public $featuredChannelsUrls;
public $keywords;
public $moderateComments;
public $profileColor;
public $showBrowseView;
public $showRelatedChannels;
public $title;
public $trackingAnalyticsAccountId;
public $unsubscribedTrailer;
public function setDefaultLanguage($defaultLanguage) {
$this->defaultLanguage = $defaultLanguage;
}
public function getDefaultLanguage() {
return $this->defaultLanguage;
}
public function setDefaultTab($defaultTab) {
$this->defaultTab = $defaultTab;
}
public function getDefaultTab() {
return $this->defaultTab;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setFeaturedChannelsTitle($featuredChannelsTitle) {
$this->featuredChannelsTitle = $featuredChannelsTitle;
}
public function getFeaturedChannelsTitle() {
return $this->featuredChannelsTitle;
}
public function setFeaturedChannelsUrls($featuredChannelsUrls) {
$this->featuredChannelsUrls = $featuredChannelsUrls;
}
public function getFeaturedChannelsUrls() {
return $this->featuredChannelsUrls;
}
public function setKeywords($keywords) {
$this->keywords = $keywords;
}
public function getKeywords() {
return $this->keywords;
}
public function setModerateComments($moderateComments) {
$this->moderateComments = $moderateComments;
}
public function getModerateComments() {
return $this->moderateComments;
}
public function setProfileColor($profileColor) {
$this->profileColor = $profileColor;
}
public function getProfileColor() {
return $this->profileColor;
}
public function setShowBrowseView($showBrowseView) {
$this->showBrowseView = $showBrowseView;
}
public function getShowBrowseView() {
return $this->showBrowseView;
}
public function setShowRelatedChannels($showRelatedChannels) {
$this->showRelatedChannels = $showRelatedChannels;
}
public function getShowRelatedChannels() {
return $this->showRelatedChannels;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
public function
setTrackingAnalyticsAccountId($trackingAnalyticsAccountId) {
$this->trackingAnalyticsAccountId = $trackingAnalyticsAccountId;
}
public function getTrackingAnalyticsAccountId() {
return $this->trackingAnalyticsAccountId;
}
public function setUnsubscribedTrailer($unsubscribedTrailer) {
$this->unsubscribedTrailer = $unsubscribedTrailer;
}
public function getUnsubscribedTrailer() {
return $this->unsubscribedTrailer;
}
}
class Google_Service_YouTube_ChannelSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $defaultLanguage;
public $description;
protected $localizedType =
'Google_Service_YouTube_ChannelLocalization';
protected $localizedDataType = '';
public $publishedAt;
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public function setDefaultLanguage($defaultLanguage) {
$this->defaultLanguage = $defaultLanguage;
}
public function getDefaultLanguage() {
return $this->defaultLanguage;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setLocalized(Google_Service_YouTube_ChannelLocalization
$localized) {
$this->localized = $localized;
}
public function getLocalized() {
return $this->localized;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_ChannelStatistics extends Google_Model {
protected $internal_gapi_mappings = array();
public $commentCount;
public $hiddenSubscriberCount;
public $subscriberCount;
public $videoCount;
public $viewCount;
public function setCommentCount($commentCount) {
$this->commentCount = $commentCount;
}
public function getCommentCount() {
return $this->commentCount;
}
public function setHiddenSubscriberCount($hiddenSubscriberCount) {
$this->hiddenSubscriberCount = $hiddenSubscriberCount;
}
public function getHiddenSubscriberCount() {
return $this->hiddenSubscriberCount;
}
public function setSubscriberCount($subscriberCount) {
$this->subscriberCount = $subscriberCount;
}
public function getSubscriberCount() {
return $this->subscriberCount;
}
public function setVideoCount($videoCount) {
$this->videoCount = $videoCount;
}
public function getVideoCount() {
return $this->videoCount;
}
public function setViewCount($viewCount) {
$this->viewCount = $viewCount;
}
public function getViewCount() {
return $this->viewCount;
}
}
class Google_Service_YouTube_ChannelStatus extends Google_Model {
protected $internal_gapi_mappings = array();
public $isLinked;
public $longUploadsStatus;
public $privacyStatus;
public function setIsLinked($isLinked) {
$this->isLinked = $isLinked;
}
public function getIsLinked() {
return $this->isLinked;
}
public function setLongUploadsStatus($longUploadsStatus) {
$this->longUploadsStatus = $longUploadsStatus;
}
public function getLongUploadsStatus() {
return $this->longUploadsStatus;
}
public function setPrivacyStatus($privacyStatus) {
$this->privacyStatus = $privacyStatus;
}
public function getPrivacyStatus() {
return $this->privacyStatus;
}
}
class Google_Service_YouTube_ChannelTopicDetails extends Google_Collection
{
protected $collection_key = 'topicIds';
protected $internal_gapi_mappings = array();
public $topicIds;
public function setTopicIds($topicIds) {
$this->topicIds = $topicIds;
}
public function getTopicIds() {
return $this->topicIds;
}
}
class Google_Service_YouTube_ContentRating extends Google_Collection {
protected $collection_key = 'djctqRatingReasons';
protected $internal_gapi_mappings = array();
public $acbRating;
public $agcomRating;
public $anatelRating;
public $bbfcRating;
public $bfvcRating;
public $bmukkRating;
public $catvRating;
public $catvfrRating;
public $cbfcRating;
public $cccRating;
public $cceRating;
public $chfilmRating;
public $chvrsRating;
public $cicfRating;
public $cnaRating;
public $csaRating;
public $cscfRating;
public $czfilmRating;
public $djctqRating;
public $djctqRatingReasons;
public $eefilmRating;
public $egfilmRating;
public $eirinRating;
public $fcbmRating;
public $fcoRating;
public $fmocRating;
public $fpbRating;
public $fskRating;
public $grfilmRating;
public $icaaRating;
public $ifcoRating;
public $ilfilmRating;
public $incaaRating;
public $kfcbRating;
public $kijkwijzerRating;
public $kmrbRating;
public $lsfRating;
public $mccaaRating;
public $mccypRating;
public $mdaRating;
public $medietilsynetRating;
public $mekuRating;
public $mibacRating;
public $mocRating;
public $moctwRating;
public $mpaaRating;
public $mtrcbRating;
public $nbcRating;
public $nbcplRating;
public $nfrcRating;
public $nfvcbRating;
public $nkclvRating;
public $oflcRating;
public $pefilmRating;
public $rcnofRating;
public $resorteviolenciaRating;
public $rtcRating;
public $rteRating;
public $russiaRating;
public $skfilmRating;
public $smaisRating;
public $smsaRating;
public $tvpgRating;
public $ytRating;
public function setAcbRating($acbRating) {
$this->acbRating = $acbRating;
}
public function getAcbRating() {
return $this->acbRating;
}
public function setAgcomRating($agcomRating) {
$this->agcomRating = $agcomRating;
}
public function getAgcomRating() {
return $this->agcomRating;
}
public function setAnatelRating($anatelRating) {
$this->anatelRating = $anatelRating;
}
public function getAnatelRating() {
return $this->anatelRating;
}
public function setBbfcRating($bbfcRating) {
$this->bbfcRating = $bbfcRating;
}
public function getBbfcRating() {
return $this->bbfcRating;
}
public function setBfvcRating($bfvcRating) {
$this->bfvcRating = $bfvcRating;
}
public function getBfvcRating() {
return $this->bfvcRating;
}
public function setBmukkRating($bmukkRating) {
$this->bmukkRating = $bmukkRating;
}
public function getBmukkRating() {
return $this->bmukkRating;
}
public function setCatvRating($catvRating) {
$this->catvRating = $catvRating;
}
public function getCatvRating() {
return $this->catvRating;
}
public function setCatvfrRating($catvfrRating) {
$this->catvfrRating = $catvfrRating;
}
public function getCatvfrRating() {
return $this->catvfrRating;
}
public function setCbfcRating($cbfcRating) {
$this->cbfcRating = $cbfcRating;
}
public function getCbfcRating() {
return $this->cbfcRating;
}
public function setCccRating($cccRating) {
$this->cccRating = $cccRating;
}
public function getCccRating() {
return $this->cccRating;
}
public function setCceRating($cceRating) {
$this->cceRating = $cceRating;
}
public function getCceRating() {
return $this->cceRating;
}
public function setChfilmRating($chfilmRating) {
$this->chfilmRating = $chfilmRating;
}
public function getChfilmRating() {
return $this->chfilmRating;
}
public function setChvrsRating($chvrsRating) {
$this->chvrsRating = $chvrsRating;
}
public function getChvrsRating() {
return $this->chvrsRating;
}
public function setCicfRating($cicfRating) {
$this->cicfRating = $cicfRating;
}
public function getCicfRating() {
return $this->cicfRating;
}
public function setCnaRating($cnaRating) {
$this->cnaRating = $cnaRating;
}
public function getCnaRating() {
return $this->cnaRating;
}
public function setCsaRating($csaRating) {
$this->csaRating = $csaRating;
}
public function getCsaRating() {
return $this->csaRating;
}
public function setCscfRating($cscfRating) {
$this->cscfRating = $cscfRating;
}
public function getCscfRating() {
return $this->cscfRating;
}
public function setCzfilmRating($czfilmRating) {
$this->czfilmRating = $czfilmRating;
}
public function getCzfilmRating() {
return $this->czfilmRating;
}
public function setDjctqRating($djctqRating) {
$this->djctqRating = $djctqRating;
}
public function getDjctqRating() {
return $this->djctqRating;
}
public function setDjctqRatingReasons($djctqRatingReasons) {
$this->djctqRatingReasons = $djctqRatingReasons;
}
public function getDjctqRatingReasons() {
return $this->djctqRatingReasons;
}
public function setEefilmRating($eefilmRating) {
$this->eefilmRating = $eefilmRating;
}
public function getEefilmRating() {
return $this->eefilmRating;
}
public function setEgfilmRating($egfilmRating) {
$this->egfilmRating = $egfilmRating;
}
public function getEgfilmRating() {
return $this->egfilmRating;
}
public function setEirinRating($eirinRating) {
$this->eirinRating = $eirinRating;
}
public function getEirinRating() {
return $this->eirinRating;
}
public function setFcbmRating($fcbmRating) {
$this->fcbmRating = $fcbmRating;
}
public function getFcbmRating() {
return $this->fcbmRating;
}
public function setFcoRating($fcoRating) {
$this->fcoRating = $fcoRating;
}
public function getFcoRating() {
return $this->fcoRating;
}
public function setFmocRating($fmocRating) {
$this->fmocRating = $fmocRating;
}
public function getFmocRating() {
return $this->fmocRating;
}
public function setFpbRating($fpbRating) {
$this->fpbRating = $fpbRating;
}
public function getFpbRating() {
return $this->fpbRating;
}
public function setFskRating($fskRating) {
$this->fskRating = $fskRating;
}
public function getFskRating() {
return $this->fskRating;
}
public function setGrfilmRating($grfilmRating) {
$this->grfilmRating = $grfilmRating;
}
public function getGrfilmRating() {
return $this->grfilmRating;
}
public function setIcaaRating($icaaRating) {
$this->icaaRating = $icaaRating;
}
public function getIcaaRating() {
return $this->icaaRating;
}
public function setIfcoRating($ifcoRating) {
$this->ifcoRating = $ifcoRating;
}
public function getIfcoRating() {
return $this->ifcoRating;
}
public function setIlfilmRating($ilfilmRating) {
$this->ilfilmRating = $ilfilmRating;
}
public function getIlfilmRating() {
return $this->ilfilmRating;
}
public function setIncaaRating($incaaRating) {
$this->incaaRating = $incaaRating;
}
public function getIncaaRating() {
return $this->incaaRating;
}
public function setKfcbRating($kfcbRating) {
$this->kfcbRating = $kfcbRating;
}
public function getKfcbRating() {
return $this->kfcbRating;
}
public function setKijkwijzerRating($kijkwijzerRating) {
$this->kijkwijzerRating = $kijkwijzerRating;
}
public function getKijkwijzerRating() {
return $this->kijkwijzerRating;
}
public function setKmrbRating($kmrbRating) {
$this->kmrbRating = $kmrbRating;
}
public function getKmrbRating() {
return $this->kmrbRating;
}
public function setLsfRating($lsfRating) {
$this->lsfRating = $lsfRating;
}
public function getLsfRating() {
return $this->lsfRating;
}
public function setMccaaRating($mccaaRating) {
$this->mccaaRating = $mccaaRating;
}
public function getMccaaRating() {
return $this->mccaaRating;
}
public function setMccypRating($mccypRating) {
$this->mccypRating = $mccypRating;
}
public function getMccypRating() {
return $this->mccypRating;
}
public function setMdaRating($mdaRating) {
$this->mdaRating = $mdaRating;
}
public function getMdaRating() {
return $this->mdaRating;
}
public function setMedietilsynetRating($medietilsynetRating) {
$this->medietilsynetRating = $medietilsynetRating;
}
public function getMedietilsynetRating() {
return $this->medietilsynetRating;
}
public function setMekuRating($mekuRating) {
$this->mekuRating = $mekuRating;
}
public function getMekuRating() {
return $this->mekuRating;
}
public function setMibacRating($mibacRating) {
$this->mibacRating = $mibacRating;
}
public function getMibacRating() {
return $this->mibacRating;
}
public function setMocRating($mocRating) {
$this->mocRating = $mocRating;
}
public function getMocRating() {
return $this->mocRating;
}
public function setMoctwRating($moctwRating) {
$this->moctwRating = $moctwRating;
}
public function getMoctwRating() {
return $this->moctwRating;
}
public function setMpaaRating($mpaaRating) {
$this->mpaaRating = $mpaaRating;
}
public function getMpaaRating() {
return $this->mpaaRating;
}
public function setMtrcbRating($mtrcbRating) {
$this->mtrcbRating = $mtrcbRating;
}
public function getMtrcbRating() {
return $this->mtrcbRating;
}
public function setNbcRating($nbcRating) {
$this->nbcRating = $nbcRating;
}
public function getNbcRating() {
return $this->nbcRating;
}
public function setNbcplRating($nbcplRating) {
$this->nbcplRating = $nbcplRating;
}
public function getNbcplRating() {
return $this->nbcplRating;
}
public function setNfrcRating($nfrcRating) {
$this->nfrcRating = $nfrcRating;
}
public function getNfrcRating() {
return $this->nfrcRating;
}
public function setNfvcbRating($nfvcbRating) {
$this->nfvcbRating = $nfvcbRating;
}
public function getNfvcbRating() {
return $this->nfvcbRating;
}
public function setNkclvRating($nkclvRating) {
$this->nkclvRating = $nkclvRating;
}
public function getNkclvRating() {
return $this->nkclvRating;
}
public function setOflcRating($oflcRating) {
$this->oflcRating = $oflcRating;
}
public function getOflcRating() {
return $this->oflcRating;
}
public function setPefilmRating($pefilmRating) {
$this->pefilmRating = $pefilmRating;
}
public function getPefilmRating() {
return $this->pefilmRating;
}
public function setRcnofRating($rcnofRating) {
$this->rcnofRating = $rcnofRating;
}
public function getRcnofRating() {
return $this->rcnofRating;
}
public function setResorteviolenciaRating($resorteviolenciaRating) {
$this->resorteviolenciaRating = $resorteviolenciaRating;
}
public function getResorteviolenciaRating() {
return $this->resorteviolenciaRating;
}
public function setRtcRating($rtcRating) {
$this->rtcRating = $rtcRating;
}
public function getRtcRating() {
return $this->rtcRating;
}
public function setRteRating($rteRating) {
$this->rteRating = $rteRating;
}
public function getRteRating() {
return $this->rteRating;
}
public function setRussiaRating($russiaRating) {
$this->russiaRating = $russiaRating;
}
public function getRussiaRating() {
return $this->russiaRating;
}
public function setSkfilmRating($skfilmRating) {
$this->skfilmRating = $skfilmRating;
}
public function getSkfilmRating() {
return $this->skfilmRating;
}
public function setSmaisRating($smaisRating) {
$this->smaisRating = $smaisRating;
}
public function getSmaisRating() {
return $this->smaisRating;
}
public function setSmsaRating($smsaRating) {
$this->smsaRating = $smsaRating;
}
public function getSmsaRating() {
return $this->smsaRating;
}
public function setTvpgRating($tvpgRating) {
$this->tvpgRating = $tvpgRating;
}
public function getTvpgRating() {
return $this->tvpgRating;
}
public function setYtRating($ytRating) {
$this->ytRating = $ytRating;
}
public function getYtRating() {
return $this->ytRating;
}
}
class Google_Service_YouTube_GeoPoint extends Google_Model {
protected $internal_gapi_mappings = array();
public $altitude;
public $latitude;
public $longitude;
public function setAltitude($altitude) {
$this->altitude = $altitude;
}
public function getAltitude() {
return $this->altitude;
}
public function setLatitude($latitude) {
$this->latitude = $latitude;
}
public function getLatitude() {
return $this->latitude;
}
public function setLongitude($longitude) {
$this->longitude = $longitude;
}
public function getLongitude() {
return $this->longitude;
}
}
class Google_Service_YouTube_GuideCategory extends Google_Model {
protected $internal_gapi_mappings = array();
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_GuideCategorySnippet';
protected $snippetDataType = '';
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_GuideCategorySnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
}
class Google_Service_YouTube_GuideCategoryListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType =
'Google_Service_YouTube_GuideCategory';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_GuideCategorySnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $title;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_I18nLanguage extends Google_Model {
protected $internal_gapi_mappings = array();
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_I18nLanguageSnippet';
protected $snippetDataType = '';
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_I18nLanguageSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
}
class Google_Service_YouTube_I18nLanguageListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_I18nLanguage';
protected $itemsDataType = 'array';
public $kind;
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_I18nLanguageSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $hl;
public $name;
public function setHl($hl) {
$this->hl = $hl;
}
public function getHl() {
return $this->hl;
}
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
class Google_Service_YouTube_I18nRegion extends Google_Model {
protected $internal_gapi_mappings = array();
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_I18nRegionSnippet';
protected $snippetDataType = '';
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_I18nRegionSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
}
class Google_Service_YouTube_I18nRegionListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_I18nRegion';
protected $itemsDataType = 'array';
public $kind;
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_I18nRegionSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $gl;
public $name;
public function setGl($gl) {
$this->gl = $gl;
}
public function getGl() {
return $this->gl;
}
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
class Google_Service_YouTube_ImageSettings extends Google_Model {
protected $internal_gapi_mappings = array();
protected $backgroundImageUrlType =
'Google_Service_YouTube_LocalizedProperty';
protected $backgroundImageUrlDataType = '';
public $bannerExternalUrl;
public $bannerImageUrl;
public $bannerMobileExtraHdImageUrl;
public $bannerMobileHdImageUrl;
public $bannerMobileImageUrl;
public $bannerMobileLowImageUrl;
public $bannerMobileMediumHdImageUrl;
public $bannerTabletExtraHdImageUrl;
public $bannerTabletHdImageUrl;
public $bannerTabletImageUrl;
public $bannerTabletLowImageUrl;
public $bannerTvHighImageUrl;
public $bannerTvImageUrl;
public $bannerTvLowImageUrl;
public $bannerTvMediumImageUrl;
protected $largeBrandedBannerImageImapScriptType =
'Google_Service_YouTube_LocalizedProperty';
protected $largeBrandedBannerImageImapScriptDataType = '';
protected $largeBrandedBannerImageUrlType =
'Google_Service_YouTube_LocalizedProperty';
protected $largeBrandedBannerImageUrlDataType = '';
protected $smallBrandedBannerImageImapScriptType =
'Google_Service_YouTube_LocalizedProperty';
protected $smallBrandedBannerImageImapScriptDataType = '';
protected $smallBrandedBannerImageUrlType =
'Google_Service_YouTube_LocalizedProperty';
protected $smallBrandedBannerImageUrlDataType = '';
public $trackingImageUrl;
public $watchIconImageUrl;
public function
setBackgroundImageUrl(Google_Service_YouTube_LocalizedProperty
$backgroundImageUrl) {
$this->backgroundImageUrl = $backgroundImageUrl;
}
public function getBackgroundImageUrl() {
return $this->backgroundImageUrl;
}
public function setBannerExternalUrl($bannerExternalUrl) {
$this->bannerExternalUrl = $bannerExternalUrl;
}
public function getBannerExternalUrl() {
return $this->bannerExternalUrl;
}
public function setBannerImageUrl($bannerImageUrl) {
$this->bannerImageUrl = $bannerImageUrl;
}
public function getBannerImageUrl() {
return $this->bannerImageUrl;
}
public function
setBannerMobileExtraHdImageUrl($bannerMobileExtraHdImageUrl) {
$this->bannerMobileExtraHdImageUrl =
$bannerMobileExtraHdImageUrl;
}
public function getBannerMobileExtraHdImageUrl() {
return $this->bannerMobileExtraHdImageUrl;
}
public function setBannerMobileHdImageUrl($bannerMobileHdImageUrl) {
$this->bannerMobileHdImageUrl = $bannerMobileHdImageUrl;
}
public function getBannerMobileHdImageUrl() {
return $this->bannerMobileHdImageUrl;
}
public function setBannerMobileImageUrl($bannerMobileImageUrl) {
$this->bannerMobileImageUrl = $bannerMobileImageUrl;
}
public function getBannerMobileImageUrl() {
return $this->bannerMobileImageUrl;
}
public function setBannerMobileLowImageUrl($bannerMobileLowImageUrl) {
$this->bannerMobileLowImageUrl = $bannerMobileLowImageUrl;
}
public function getBannerMobileLowImageUrl() {
return $this->bannerMobileLowImageUrl;
}
public function
setBannerMobileMediumHdImageUrl($bannerMobileMediumHdImageUrl) {
$this->bannerMobileMediumHdImageUrl =
$bannerMobileMediumHdImageUrl;
}
public function getBannerMobileMediumHdImageUrl() {
return $this->bannerMobileMediumHdImageUrl;
}
public function
setBannerTabletExtraHdImageUrl($bannerTabletExtraHdImageUrl) {
$this->bannerTabletExtraHdImageUrl =
$bannerTabletExtraHdImageUrl;
}
public function getBannerTabletExtraHdImageUrl() {
return $this->bannerTabletExtraHdImageUrl;
}
public function setBannerTabletHdImageUrl($bannerTabletHdImageUrl) {
$this->bannerTabletHdImageUrl = $bannerTabletHdImageUrl;
}
public function getBannerTabletHdImageUrl() {
return $this->bannerTabletHdImageUrl;
}
public function setBannerTabletImageUrl($bannerTabletImageUrl) {
$this->bannerTabletImageUrl = $bannerTabletImageUrl;
}
public function getBannerTabletImageUrl() {
return $this->bannerTabletImageUrl;
}
public function setBannerTabletLowImageUrl($bannerTabletLowImageUrl) {
$this->bannerTabletLowImageUrl = $bannerTabletLowImageUrl;
}
public function getBannerTabletLowImageUrl() {
return $this->bannerTabletLowImageUrl;
}
public function setBannerTvHighImageUrl($bannerTvHighImageUrl) {
$this->bannerTvHighImageUrl = $bannerTvHighImageUrl;
}
public function getBannerTvHighImageUrl() {
return $this->bannerTvHighImageUrl;
}
public function setBannerTvImageUrl($bannerTvImageUrl) {
$this->bannerTvImageUrl = $bannerTvImageUrl;
}
public function getBannerTvImageUrl() {
return $this->bannerTvImageUrl;
}
public function setBannerTvLowImageUrl($bannerTvLowImageUrl) {
$this->bannerTvLowImageUrl = $bannerTvLowImageUrl;
}
public function getBannerTvLowImageUrl() {
return $this->bannerTvLowImageUrl;
}
public function setBannerTvMediumImageUrl($bannerTvMediumImageUrl) {
$this->bannerTvMediumImageUrl = $bannerTvMediumImageUrl;
}
public function getBannerTvMediumImageUrl() {
return $this->bannerTvMediumImageUrl;
}
public function
setLargeBrandedBannerImageImapScript(Google_Service_YouTube_LocalizedProperty
$largeBrandedBannerImageImapScript) {
$this->largeBrandedBannerImageImapScript =
$largeBrandedBannerImageImapScript;
}
public function getLargeBrandedBannerImageImapScript() {
return $this->largeBrandedBannerImageImapScript;
}
public function
setLargeBrandedBannerImageUrl(Google_Service_YouTube_LocalizedProperty
$largeBrandedBannerImageUrl) {
$this->largeBrandedBannerImageUrl = $largeBrandedBannerImageUrl;
}
public function getLargeBrandedBannerImageUrl() {
return $this->largeBrandedBannerImageUrl;
}
public function
setSmallBrandedBannerImageImapScript(Google_Service_YouTube_LocalizedProperty
$smallBrandedBannerImageImapScript) {
$this->smallBrandedBannerImageImapScript =
$smallBrandedBannerImageImapScript;
}
public function getSmallBrandedBannerImageImapScript() {
return $this->smallBrandedBannerImageImapScript;
}
public function
setSmallBrandedBannerImageUrl(Google_Service_YouTube_LocalizedProperty
$smallBrandedBannerImageUrl) {
$this->smallBrandedBannerImageUrl = $smallBrandedBannerImageUrl;
}
public function getSmallBrandedBannerImageUrl() {
return $this->smallBrandedBannerImageUrl;
}
public function setTrackingImageUrl($trackingImageUrl) {
$this->trackingImageUrl = $trackingImageUrl;
}
public function getTrackingImageUrl() {
return $this->trackingImageUrl;
}
public function setWatchIconImageUrl($watchIconImageUrl) {
$this->watchIconImageUrl = $watchIconImageUrl;
}
public function getWatchIconImageUrl() {
return $this->watchIconImageUrl;
}
}
class Google_Service_YouTube_IngestionInfo extends Google_Model {
protected $internal_gapi_mappings = array();
public $backupIngestionAddress;
public $ingestionAddress;
public $streamName;
public function setBackupIngestionAddress($backupIngestionAddress) {
$this->backupIngestionAddress = $backupIngestionAddress;
}
public function getBackupIngestionAddress() {
return $this->backupIngestionAddress;
}
public function setIngestionAddress($ingestionAddress) {
$this->ingestionAddress = $ingestionAddress;
}
public function getIngestionAddress() {
return $this->ingestionAddress;
}
public function setStreamName($streamName) {
$this->streamName = $streamName;
}
public function getStreamName() {
return $this->streamName;
}
}
class Google_Service_YouTube_InvideoBranding extends Google_Model {
protected $internal_gapi_mappings = array();
public $imageBytes;
public $imageUrl;
protected $positionType =
'Google_Service_YouTube_InvideoPosition';
protected $positionDataType = '';
public $targetChannelId;
protected $timingType =
'Google_Service_YouTube_InvideoTiming';
protected $timingDataType = '';
public function setImageBytes($imageBytes) {
$this->imageBytes = $imageBytes;
}
public function getImageBytes() {
return $this->imageBytes;
}
public function setImageUrl($imageUrl) {
$this->imageUrl = $imageUrl;
}
public function getImageUrl() {
return $this->imageUrl;
}
public function setPosition(Google_Service_YouTube_InvideoPosition
$position) {
$this->position = $position;
}
public function getPosition() {
return $this->position;
}
public function setTargetChannelId($targetChannelId) {
$this->targetChannelId = $targetChannelId;
}
public function getTargetChannelId() {
return $this->targetChannelId;
}
public function setTiming(Google_Service_YouTube_InvideoTiming $timing)
{
$this->timing = $timing;
}
public function getTiming() {
return $this->timing;
}
}
class Google_Service_YouTube_InvideoPosition extends Google_Model {
protected $internal_gapi_mappings = array();
public $cornerPosition;
public $type;
public function setCornerPosition($cornerPosition) {
$this->cornerPosition = $cornerPosition;
}
public function getCornerPosition() {
return $this->cornerPosition;
}
public function setType($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
}
class Google_Service_YouTube_InvideoPromotion extends Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
protected $defaultTimingType =
'Google_Service_YouTube_InvideoTiming';
protected $defaultTimingDataType = '';
protected $itemsType = 'Google_Service_YouTube_PromotedItem';
protected $itemsDataType = 'array';
protected $positionType =
'Google_Service_YouTube_InvideoPosition';
protected $positionDataType = '';
public $useSmartTiming;
public function setDefaultTiming(Google_Service_YouTube_InvideoTiming
$defaultTiming) {
$this->defaultTiming = $defaultTiming;
}
public function getDefaultTiming() {
return $this->defaultTiming;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setPosition(Google_Service_YouTube_InvideoPosition
$position) {
$this->position = $position;
}
public function getPosition() {
return $this->position;
}
public function setUseSmartTiming($useSmartTiming) {
$this->useSmartTiming = $useSmartTiming;
}
public function getUseSmartTiming() {
return $this->useSmartTiming;
}
}
class Google_Service_YouTube_InvideoTiming extends Google_Model {
protected $internal_gapi_mappings = array();
public $durationMs;
public $offsetMs;
public $type;
public function setDurationMs($durationMs) {
$this->durationMs = $durationMs;
}
public function getDurationMs() {
return $this->durationMs;
}
public function setOffsetMs($offsetMs) {
$this->offsetMs = $offsetMs;
}
public function getOffsetMs() {
return $this->offsetMs;
}
public function setType($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
}
class Google_Service_YouTube_LanguageTag extends Google_Model {
protected $internal_gapi_mappings = array();
public $value;
public function setValue($value) {
$this->value = $value;
}
public function getValue() {
return $this->value;
}
}
class Google_Service_YouTube_LiveBroadcast extends Google_Model {
protected $internal_gapi_mappings = array();
protected $contentDetailsType =
'Google_Service_YouTube_LiveBroadcastContentDetails';
protected $contentDetailsDataType = '';
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_LiveBroadcastSnippet';
protected $snippetDataType = '';
protected $statusType =
'Google_Service_YouTube_LiveBroadcastStatus';
protected $statusDataType = '';
public function
setContentDetails(Google_Service_YouTube_LiveBroadcastContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_LiveBroadcastSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
public function setStatus(Google_Service_YouTube_LiveBroadcastStatus
$status) {
$this->status = $status;
}
public function getStatus() {
return $this->status;
}
}
class Google_Service_YouTube_LiveBroadcastContentDetails extends
Google_Model {
protected $internal_gapi_mappings = array();
public $boundStreamId;
public $enableClosedCaptions;
public $enableContentEncryption;
public $enableDvr;
public $enableEmbed;
protected $monitorStreamType =
'Google_Service_YouTube_MonitorStreamInfo';
protected $monitorStreamDataType = '';
public $recordFromStart;
public $startWithSlate;
public function setBoundStreamId($boundStreamId) {
$this->boundStreamId = $boundStreamId;
}
public function getBoundStreamId() {
return $this->boundStreamId;
}
public function setEnableClosedCaptions($enableClosedCaptions) {
$this->enableClosedCaptions = $enableClosedCaptions;
}
public function getEnableClosedCaptions() {
return $this->enableClosedCaptions;
}
public function setEnableContentEncryption($enableContentEncryption) {
$this->enableContentEncryption = $enableContentEncryption;
}
public function getEnableContentEncryption() {
return $this->enableContentEncryption;
}
public function setEnableDvr($enableDvr) {
$this->enableDvr = $enableDvr;
}
public function getEnableDvr() {
return $this->enableDvr;
}
public function setEnableEmbed($enableEmbed) {
$this->enableEmbed = $enableEmbed;
}
public function getEnableEmbed() {
return $this->enableEmbed;
}
public function
setMonitorStream(Google_Service_YouTube_MonitorStreamInfo $monitorStream) {
$this->monitorStream = $monitorStream;
}
public function getMonitorStream() {
return $this->monitorStream;
}
public function setRecordFromStart($recordFromStart) {
$this->recordFromStart = $recordFromStart;
}
public function getRecordFromStart() {
return $this->recordFromStart;
}
public function setStartWithSlate($startWithSlate) {
$this->startWithSlate = $startWithSlate;
}
public function getStartWithSlate() {
return $this->startWithSlate;
}
}
class Google_Service_YouTube_LiveBroadcastListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType =
'Google_Service_YouTube_LiveBroadcast';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_LiveBroadcastSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $actualEndTime;
public $actualStartTime;
public $channelId;
public $description;
public $publishedAt;
public $scheduledEndTime;
public $scheduledStartTime;
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public function setActualEndTime($actualEndTime) {
$this->actualEndTime = $actualEndTime;
}
public function getActualEndTime() {
return $this->actualEndTime;
}
public function setActualStartTime($actualStartTime) {
$this->actualStartTime = $actualStartTime;
}
public function getActualStartTime() {
return $this->actualStartTime;
}
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setScheduledEndTime($scheduledEndTime) {
$this->scheduledEndTime = $scheduledEndTime;
}
public function getScheduledEndTime() {
return $this->scheduledEndTime;
}
public function setScheduledStartTime($scheduledStartTime) {
$this->scheduledStartTime = $scheduledStartTime;
}
public function getScheduledStartTime() {
return $this->scheduledStartTime;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_LiveBroadcastStatus extends Google_Model {
protected $internal_gapi_mappings = array();
public $lifeCycleStatus;
public $liveBroadcastPriority;
public $privacyStatus;
public $recordingStatus;
public function setLifeCycleStatus($lifeCycleStatus) {
$this->lifeCycleStatus = $lifeCycleStatus;
}
public function getLifeCycleStatus() {
return $this->lifeCycleStatus;
}
public function setLiveBroadcastPriority($liveBroadcastPriority) {
$this->liveBroadcastPriority = $liveBroadcastPriority;
}
public function getLiveBroadcastPriority() {
return $this->liveBroadcastPriority;
}
public function setPrivacyStatus($privacyStatus) {
$this->privacyStatus = $privacyStatus;
}
public function getPrivacyStatus() {
return $this->privacyStatus;
}
public function setRecordingStatus($recordingStatus) {
$this->recordingStatus = $recordingStatus;
}
public function getRecordingStatus() {
return $this->recordingStatus;
}
}
class Google_Service_YouTube_LiveStream extends Google_Model {
protected $internal_gapi_mappings = array();
protected $cdnType = 'Google_Service_YouTube_CdnSettings';
protected $cdnDataType = '';
protected $contentDetailsType =
'Google_Service_YouTube_LiveStreamContentDetails';
protected $contentDetailsDataType = '';
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_LiveStreamSnippet';
protected $snippetDataType = '';
protected $statusType =
'Google_Service_YouTube_LiveStreamStatus';
protected $statusDataType = '';
public function setCdn(Google_Service_YouTube_CdnSettings $cdn) {
$this->cdn = $cdn;
}
public function getCdn() {
return $this->cdn;
}
public function
setContentDetails(Google_Service_YouTube_LiveStreamContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_LiveStreamSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
public function setStatus(Google_Service_YouTube_LiveStreamStatus
$status) {
$this->status = $status;
}
public function getStatus() {
return $this->status;
}
}
class Google_Service_YouTube_LiveStreamContentDetails extends Google_Model
{
protected $internal_gapi_mappings = array();
public $closedCaptionsIngestionUrl;
public $isReusable;
public function
setClosedCaptionsIngestionUrl($closedCaptionsIngestionUrl) {
$this->closedCaptionsIngestionUrl = $closedCaptionsIngestionUrl;
}
public function getClosedCaptionsIngestionUrl() {
return $this->closedCaptionsIngestionUrl;
}
public function setIsReusable($isReusable) {
$this->isReusable = $isReusable;
}
public function getIsReusable() {
return $this->isReusable;
}
}
class Google_Service_YouTube_LiveStreamListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_LiveStream';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_LiveStreamSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $description;
public $publishedAt;
public $title;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_LiveStreamStatus extends Google_Model {
protected $internal_gapi_mappings = array();
public $streamStatus;
public function setStreamStatus($streamStatus) {
$this->streamStatus = $streamStatus;
}
public function getStreamStatus() {
return $this->streamStatus;
}
}
class Google_Service_YouTube_LocalizedProperty extends Google_Collection {
protected $collection_key = 'localized';
protected $internal_gapi_mappings = array();
public $default;
protected $defaultLanguageType =
'Google_Service_YouTube_LanguageTag';
protected $defaultLanguageDataType = '';
protected $localizedType =
'Google_Service_YouTube_LocalizedString';
protected $localizedDataType = 'array';
public function setDefault($default) {
$this->default = $default;
}
public function getDefault() {
return $this->default;
}
public function setDefaultLanguage(Google_Service_YouTube_LanguageTag
$defaultLanguage) {
$this->defaultLanguage = $defaultLanguage;
}
public function getDefaultLanguage() {
return $this->defaultLanguage;
}
public function setLocalized($localized) {
$this->localized = $localized;
}
public function getLocalized() {
return $this->localized;
}
}
class Google_Service_YouTube_LocalizedString extends Google_Model {
protected $internal_gapi_mappings = array();
public $language;
public $value;
public function setLanguage($language) {
$this->language = $language;
}
public function getLanguage() {
return $this->language;
}
public function setValue($value) {
$this->value = $value;
}
public function getValue() {
return $this->value;
}
}
class Google_Service_YouTube_MonitorStreamInfo extends Google_Model {
protected $internal_gapi_mappings = array();
public $broadcastStreamDelayMs;
public $embedHtml;
public $enableMonitorStream;
public function setBroadcastStreamDelayMs($broadcastStreamDelayMs) {
$this->broadcastStreamDelayMs = $broadcastStreamDelayMs;
}
public function getBroadcastStreamDelayMs() {
return $this->broadcastStreamDelayMs;
}
public function setEmbedHtml($embedHtml) {
$this->embedHtml = $embedHtml;
}
public function getEmbedHtml() {
return $this->embedHtml;
}
public function setEnableMonitorStream($enableMonitorStream) {
$this->enableMonitorStream = $enableMonitorStream;
}
public function getEnableMonitorStream() {
return $this->enableMonitorStream;
}
}
class Google_Service_YouTube_PageInfo extends Google_Model {
protected $internal_gapi_mappings = array();
public $resultsPerPage;
public $totalResults;
public function setResultsPerPage($resultsPerPage) {
$this->resultsPerPage = $resultsPerPage;
}
public function getResultsPerPage() {
return $this->resultsPerPage;
}
public function setTotalResults($totalResults) {
$this->totalResults = $totalResults;
}
public function getTotalResults() {
return $this->totalResults;
}
}
class Google_Service_YouTube_Playlist extends Google_Model {
protected $internal_gapi_mappings = array();
protected $contentDetailsType =
'Google_Service_YouTube_PlaylistContentDetails';
protected $contentDetailsDataType = '';
public $etag;
public $id;
public $kind;
protected $playerType =
'Google_Service_YouTube_PlaylistPlayer';
protected $playerDataType = '';
protected $snippetType =
'Google_Service_YouTube_PlaylistSnippet';
protected $snippetDataType = '';
protected $statusType =
'Google_Service_YouTube_PlaylistStatus';
protected $statusDataType = '';
public function
setContentDetails(Google_Service_YouTube_PlaylistContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setPlayer(Google_Service_YouTube_PlaylistPlayer
$player) {
$this->player = $player;
}
public function getPlayer() {
return $this->player;
}
public function setSnippet(Google_Service_YouTube_PlaylistSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
public function setStatus(Google_Service_YouTube_PlaylistStatus
$status) {
$this->status = $status;
}
public function getStatus() {
return $this->status;
}
}
class Google_Service_YouTube_PlaylistContentDetails extends Google_Model {
protected $internal_gapi_mappings = array();
public $itemCount;
public function setItemCount($itemCount) {
$this->itemCount = $itemCount;
}
public function getItemCount() {
return $this->itemCount;
}
}
class Google_Service_YouTube_PlaylistItem extends Google_Model {
protected $internal_gapi_mappings = array();
protected $contentDetailsType =
'Google_Service_YouTube_PlaylistItemContentDetails';
protected $contentDetailsDataType = '';
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_PlaylistItemSnippet';
protected $snippetDataType = '';
protected $statusType =
'Google_Service_YouTube_PlaylistItemStatus';
protected $statusDataType = '';
public function
setContentDetails(Google_Service_YouTube_PlaylistItemContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_PlaylistItemSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
public function setStatus(Google_Service_YouTube_PlaylistItemStatus
$status) {
$this->status = $status;
}
public function getStatus() {
return $this->status;
}
}
class Google_Service_YouTube_PlaylistItemContentDetails extends
Google_Model {
protected $internal_gapi_mappings = array();
public $endAt;
public $note;
public $startAt;
public $videoId;
public function setEndAt($endAt) {
$this->endAt = $endAt;
}
public function getEndAt() {
return $this->endAt;
}
public function setNote($note) {
$this->note = $note;
}
public function getNote() {
return $this->note;
}
public function setStartAt($startAt) {
$this->startAt = $startAt;
}
public function getStartAt() {
return $this->startAt;
}
public function setVideoId($videoId) {
$this->videoId = $videoId;
}
public function getVideoId() {
return $this->videoId;
}
}
class Google_Service_YouTube_PlaylistItemListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_PlaylistItem';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_PlaylistItemSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $channelTitle;
public $description;
public $playlistId;
public $position;
public $publishedAt;
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setChannelTitle($channelTitle) {
$this->channelTitle = $channelTitle;
}
public function getChannelTitle() {
return $this->channelTitle;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setPlaylistId($playlistId) {
$this->playlistId = $playlistId;
}
public function getPlaylistId() {
return $this->playlistId;
}
public function setPosition($position) {
$this->position = $position;
}
public function getPosition() {
return $this->position;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_PlaylistItemStatus extends Google_Model {
protected $internal_gapi_mappings = array();
public $privacyStatus;
public function setPrivacyStatus($privacyStatus) {
$this->privacyStatus = $privacyStatus;
}
public function getPrivacyStatus() {
return $this->privacyStatus;
}
}
class Google_Service_YouTube_PlaylistListResponse extends Google_Collection
{
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_Playlist';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_PlaylistPlayer extends Google_Model {
protected $internal_gapi_mappings = array();
public $embedHtml;
public function setEmbedHtml($embedHtml) {
$this->embedHtml = $embedHtml;
}
public function getEmbedHtml() {
return $this->embedHtml;
}
}
class Google_Service_YouTube_PlaylistSnippet extends Google_Collection {
protected $collection_key = 'tags';
protected $internal_gapi_mappings = array();
public $channelId;
public $channelTitle;
public $description;
public $publishedAt;
public $tags;
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setChannelTitle($channelTitle) {
$this->channelTitle = $channelTitle;
}
public function getChannelTitle() {
return $this->channelTitle;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setTags($tags) {
$this->tags = $tags;
}
public function getTags() {
return $this->tags;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_PlaylistStatus extends Google_Model {
protected $internal_gapi_mappings = array();
public $privacyStatus;
public function setPrivacyStatus($privacyStatus) {
$this->privacyStatus = $privacyStatus;
}
public function getPrivacyStatus() {
return $this->privacyStatus;
}
}
class Google_Service_YouTube_PromotedItem extends Google_Model {
protected $internal_gapi_mappings = array();
public $customMessage;
protected $idType = 'Google_Service_YouTube_PromotedItemId';
protected $idDataType = '';
public $promotedByContentOwner;
protected $timingType =
'Google_Service_YouTube_InvideoTiming';
protected $timingDataType = '';
public function setCustomMessage($customMessage) {
$this->customMessage = $customMessage;
}
public function getCustomMessage() {
return $this->customMessage;
}
public function setId(Google_Service_YouTube_PromotedItemId $id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setPromotedByContentOwner($promotedByContentOwner) {
$this->promotedByContentOwner = $promotedByContentOwner;
}
public function getPromotedByContentOwner() {
return $this->promotedByContentOwner;
}
public function setTiming(Google_Service_YouTube_InvideoTiming $timing)
{
$this->timing = $timing;
}
public function getTiming() {
return $this->timing;
}
}
class Google_Service_YouTube_PromotedItemId extends Google_Model {
protected $internal_gapi_mappings = array();
public $recentlyUploadedBy;
public $type;
public $videoId;
public $websiteUrl;
public function setRecentlyUploadedBy($recentlyUploadedBy) {
$this->recentlyUploadedBy = $recentlyUploadedBy;
}
public function getRecentlyUploadedBy() {
return $this->recentlyUploadedBy;
}
public function setType($type) {
$this->type = $type;
}
public function getType() {
return $this->type;
}
public function setVideoId($videoId) {
$this->videoId = $videoId;
}
public function getVideoId() {
return $this->videoId;
}
public function setWebsiteUrl($websiteUrl) {
$this->websiteUrl = $websiteUrl;
}
public function getWebsiteUrl() {
return $this->websiteUrl;
}
}
class Google_Service_YouTube_PropertyValue extends Google_Model {
protected $internal_gapi_mappings = array();
public $property;
public $value;
public function setProperty($property) {
$this->property = $property;
}
public function getProperty() {
return $this->property;
}
public function setValue($value) {
$this->value = $value;
}
public function getValue() {
return $this->value;
}
}
class Google_Service_YouTube_ResourceId extends Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $kind;
public $playlistId;
public $videoId;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setPlaylistId($playlistId) {
$this->playlistId = $playlistId;
}
public function getPlaylistId() {
return $this->playlistId;
}
public function setVideoId($videoId) {
$this->videoId = $videoId;
}
public function getVideoId() {
return $this->videoId;
}
}
class Google_Service_YouTube_SearchListResponse extends Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_SearchResult';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_SearchResult extends Google_Model {
protected $internal_gapi_mappings = array();
public $etag;
protected $idType = 'Google_Service_YouTube_ResourceId';
protected $idDataType = '';
public $kind;
protected $snippetType =
'Google_Service_YouTube_SearchResultSnippet';
protected $snippetDataType = '';
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId(Google_Service_YouTube_ResourceId $id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_SearchResultSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
}
class Google_Service_YouTube_SearchResultSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $channelTitle;
public $description;
public $liveBroadcastContent;
public $publishedAt;
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setChannelTitle($channelTitle) {
$this->channelTitle = $channelTitle;
}
public function getChannelTitle() {
return $this->channelTitle;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setLiveBroadcastContent($liveBroadcastContent) {
$this->liveBroadcastContent = $liveBroadcastContent;
}
public function getLiveBroadcastContent() {
return $this->liveBroadcastContent;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_Subscription extends Google_Model {
protected $internal_gapi_mappings = array();
protected $contentDetailsType =
'Google_Service_YouTube_SubscriptionContentDetails';
protected $contentDetailsDataType = '';
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_SubscriptionSnippet';
protected $snippetDataType = '';
protected $subscriberSnippetType =
'Google_Service_YouTube_SubscriptionSubscriberSnippet';
protected $subscriberSnippetDataType = '';
public function
setContentDetails(Google_Service_YouTube_SubscriptionContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_SubscriptionSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
public function
setSubscriberSnippet(Google_Service_YouTube_SubscriptionSubscriberSnippet
$subscriberSnippet) {
$this->subscriberSnippet = $subscriberSnippet;
}
public function getSubscriberSnippet() {
return $this->subscriberSnippet;
}
}
class Google_Service_YouTube_SubscriptionContentDetails extends
Google_Model {
protected $internal_gapi_mappings = array();
public $activityType;
public $newItemCount;
public $totalItemCount;
public function setActivityType($activityType) {
$this->activityType = $activityType;
}
public function getActivityType() {
return $this->activityType;
}
public function setNewItemCount($newItemCount) {
$this->newItemCount = $newItemCount;
}
public function getNewItemCount() {
return $this->newItemCount;
}
public function setTotalItemCount($totalItemCount) {
$this->totalItemCount = $totalItemCount;
}
public function getTotalItemCount() {
return $this->totalItemCount;
}
}
class Google_Service_YouTube_SubscriptionListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_Subscription';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_SubscriptionSnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $channelTitle;
public $description;
public $publishedAt;
protected $resourceIdType =
'Google_Service_YouTube_ResourceId';
protected $resourceIdDataType = '';
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setChannelTitle($channelTitle) {
$this->channelTitle = $channelTitle;
}
public function getChannelTitle() {
return $this->channelTitle;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setResourceId(Google_Service_YouTube_ResourceId
$resourceId) {
$this->resourceId = $resourceId;
}
public function getResourceId() {
return $this->resourceId;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_SubscriptionSubscriberSnippet extends
Google_Model {
protected $internal_gapi_mappings = array();
public $channelId;
public $description;
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_Thumbnail extends Google_Model {
protected $internal_gapi_mappings = array();
public $height;
public $url;
public $width;
public function setHeight($height) {
$this->height = $height;
}
public function getHeight() {
return $this->height;
}
public function setUrl($url) {
$this->url = $url;
}
public function getUrl() {
return $this->url;
}
public function setWidth($width) {
$this->width = $width;
}
public function getWidth() {
return $this->width;
}
}
class Google_Service_YouTube_ThumbnailDetails extends Google_Model {
protected $internal_gapi_mappings = array();
protected $defaultType = 'Google_Service_YouTube_Thumbnail';
protected $defaultDataType = '';
protected $highType = 'Google_Service_YouTube_Thumbnail';
protected $highDataType = '';
protected $maxresType = 'Google_Service_YouTube_Thumbnail';
protected $maxresDataType = '';
protected $mediumType = 'Google_Service_YouTube_Thumbnail';
protected $mediumDataType = '';
protected $standardType = 'Google_Service_YouTube_Thumbnail';
protected $standardDataType = '';
public function setDefault(Google_Service_YouTube_Thumbnail $default) {
$this->default = $default;
}
public function getDefault() {
return $this->default;
}
public function setHigh(Google_Service_YouTube_Thumbnail $high) {
$this->high = $high;
}
public function getHigh() {
return $this->high;
}
public function setMaxres(Google_Service_YouTube_Thumbnail $maxres) {
$this->maxres = $maxres;
}
public function getMaxres() {
return $this->maxres;
}
public function setMedium(Google_Service_YouTube_Thumbnail $medium) {
$this->medium = $medium;
}
public function getMedium() {
return $this->medium;
}
public function setStandard(Google_Service_YouTube_Thumbnail $standard)
{
$this->standard = $standard;
}
public function getStandard() {
return $this->standard;
}
}
class Google_Service_YouTube_ThumbnailSetResponse extends Google_Collection
{
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $itemsDataType = 'array';
public $kind;
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_TokenPagination extends Google_Model {
}
class Google_Service_YouTube_Video extends Google_Model {
protected $internal_gapi_mappings = array();
protected $ageGatingType =
'Google_Service_YouTube_VideoAgeGating';
protected $ageGatingDataType = '';
protected $contentDetailsType =
'Google_Service_YouTube_VideoContentDetails';
protected $contentDetailsDataType = '';
protected $conversionPingsType =
'Google_Service_YouTube_VideoConversionPings';
protected $conversionPingsDataType = '';
public $etag;
protected $fileDetailsType =
'Google_Service_YouTube_VideoFileDetails';
protected $fileDetailsDataType = '';
public $id;
public $kind;
protected $liveStreamingDetailsType =
'Google_Service_YouTube_VideoLiveStreamingDetails';
protected $liveStreamingDetailsDataType = '';
protected $monetizationDetailsType =
'Google_Service_YouTube_VideoMonetizationDetails';
protected $monetizationDetailsDataType = '';
protected $playerType = 'Google_Service_YouTube_VideoPlayer';
protected $playerDataType = '';
protected $processingDetailsType =
'Google_Service_YouTube_VideoProcessingDetails';
protected $processingDetailsDataType = '';
protected $projectDetailsType =
'Google_Service_YouTube_VideoProjectDetails';
protected $projectDetailsDataType = '';
protected $recordingDetailsType =
'Google_Service_YouTube_VideoRecordingDetails';
protected $recordingDetailsDataType = '';
protected $snippetType =
'Google_Service_YouTube_VideoSnippet';
protected $snippetDataType = '';
protected $statisticsType =
'Google_Service_YouTube_VideoStatistics';
protected $statisticsDataType = '';
protected $statusType = 'Google_Service_YouTube_VideoStatus';
protected $statusDataType = '';
protected $suggestionsType =
'Google_Service_YouTube_VideoSuggestions';
protected $suggestionsDataType = '';
protected $topicDetailsType =
'Google_Service_YouTube_VideoTopicDetails';
protected $topicDetailsDataType = '';
public function setAgeGating(Google_Service_YouTube_VideoAgeGating
$ageGating) {
$this->ageGating = $ageGating;
}
public function getAgeGating() {
return $this->ageGating;
}
public function
setContentDetails(Google_Service_YouTube_VideoContentDetails
$contentDetails) {
$this->contentDetails = $contentDetails;
}
public function getContentDetails() {
return $this->contentDetails;
}
public function
setConversionPings(Google_Service_YouTube_VideoConversionPings
$conversionPings) {
$this->conversionPings = $conversionPings;
}
public function getConversionPings() {
return $this->conversionPings;
}
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setFileDetails(Google_Service_YouTube_VideoFileDetails
$fileDetails) {
$this->fileDetails = $fileDetails;
}
public function getFileDetails() {
return $this->fileDetails;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function
setLiveStreamingDetails(Google_Service_YouTube_VideoLiveStreamingDetails
$liveStreamingDetails) {
$this->liveStreamingDetails = $liveStreamingDetails;
}
public function getLiveStreamingDetails() {
return $this->liveStreamingDetails;
}
public function
setMonetizationDetails(Google_Service_YouTube_VideoMonetizationDetails
$monetizationDetails) {
$this->monetizationDetails = $monetizationDetails;
}
public function getMonetizationDetails() {
return $this->monetizationDetails;
}
public function setPlayer(Google_Service_YouTube_VideoPlayer $player) {
$this->player = $player;
}
public function getPlayer() {
return $this->player;
}
public function
setProcessingDetails(Google_Service_YouTube_VideoProcessingDetails
$processingDetails) {
$this->processingDetails = $processingDetails;
}
public function getProcessingDetails() {
return $this->processingDetails;
}
public function
setProjectDetails(Google_Service_YouTube_VideoProjectDetails
$projectDetails) {
$this->projectDetails = $projectDetails;
}
public function getProjectDetails() {
return $this->projectDetails;
}
public function
setRecordingDetails(Google_Service_YouTube_VideoRecordingDetails
$recordingDetails) {
$this->recordingDetails = $recordingDetails;
}
public function getRecordingDetails() {
return $this->recordingDetails;
}
public function setSnippet(Google_Service_YouTube_VideoSnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
public function setStatistics(Google_Service_YouTube_VideoStatistics
$statistics) {
$this->statistics = $statistics;
}
public function getStatistics() {
return $this->statistics;
}
public function setStatus(Google_Service_YouTube_VideoStatus $status) {
$this->status = $status;
}
public function getStatus() {
return $this->status;
}
public function setSuggestions(Google_Service_YouTube_VideoSuggestions
$suggestions) {
$this->suggestions = $suggestions;
}
public function getSuggestions() {
return $this->suggestions;
}
public function
setTopicDetails(Google_Service_YouTube_VideoTopicDetails $topicDetails) {
$this->topicDetails = $topicDetails;
}
public function getTopicDetails() {
return $this->topicDetails;
}
}
class Google_Service_YouTube_VideoAgeGating extends Google_Model {
protected $internal_gapi_mappings = array();
public $alcoholContent;
public $restricted;
public $videoGameRating;
public function setAlcoholContent($alcoholContent) {
$this->alcoholContent = $alcoholContent;
}
public function getAlcoholContent() {
return $this->alcoholContent;
}
public function setRestricted($restricted) {
$this->restricted = $restricted;
}
public function getRestricted() {
return $this->restricted;
}
public function setVideoGameRating($videoGameRating) {
$this->videoGameRating = $videoGameRating;
}
public function getVideoGameRating() {
return $this->videoGameRating;
}
}
class Google_Service_YouTube_VideoCategory extends Google_Model {
protected $internal_gapi_mappings = array();
public $etag;
public $id;
public $kind;
protected $snippetType =
'Google_Service_YouTube_VideoCategorySnippet';
protected $snippetDataType = '';
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setId($id) {
$this->id = $id;
}
public function getId() {
return $this->id;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setSnippet(Google_Service_YouTube_VideoCategorySnippet
$snippet) {
$this->snippet = $snippet;
}
public function getSnippet() {
return $this->snippet;
}
}
class Google_Service_YouTube_VideoCategoryListResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType =
'Google_Service_YouTube_VideoCategory';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_VideoCategorySnippet extends Google_Model {
protected $internal_gapi_mappings = array();
public $assignable;
public $channelId;
public $title;
public function setAssignable($assignable) {
$this->assignable = $assignable;
}
public function getAssignable() {
return $this->assignable;
}
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_VideoContentDetails extends Google_Model {
protected $internal_gapi_mappings = array();
public $caption;
protected $contentRatingType =
'Google_Service_YouTube_ContentRating';
protected $contentRatingDataType = '';
protected $countryRestrictionType =
'Google_Service_YouTube_AccessPolicy';
protected $countryRestrictionDataType = '';
public $definition;
public $dimension;
public $duration;
public $licensedContent;
protected $regionRestrictionType =
'Google_Service_YouTube_VideoContentDetailsRegionRestriction';
protected $regionRestrictionDataType = '';
public function setCaption($caption) {
$this->caption = $caption;
}
public function getCaption() {
return $this->caption;
}
public function setContentRating(Google_Service_YouTube_ContentRating
$contentRating) {
$this->contentRating = $contentRating;
}
public function getContentRating() {
return $this->contentRating;
}
public function
setCountryRestriction(Google_Service_YouTube_AccessPolicy
$countryRestriction) {
$this->countryRestriction = $countryRestriction;
}
public function getCountryRestriction() {
return $this->countryRestriction;
}
public function setDefinition($definition) {
$this->definition = $definition;
}
public function getDefinition() {
return $this->definition;
}
public function setDimension($dimension) {
$this->dimension = $dimension;
}
public function getDimension() {
return $this->dimension;
}
public function setDuration($duration) {
$this->duration = $duration;
}
public function getDuration() {
return $this->duration;
}
public function setLicensedContent($licensedContent) {
$this->licensedContent = $licensedContent;
}
public function getLicensedContent() {
return $this->licensedContent;
}
public function
setRegionRestriction(Google_Service_YouTube_VideoContentDetailsRegionRestriction
$regionRestriction) {
$this->regionRestriction = $regionRestriction;
}
public function getRegionRestriction() {
return $this->regionRestriction;
}
}
class Google_Service_YouTube_VideoContentDetailsRegionRestriction extends
Google_Collection {
protected $collection_key = 'blocked';
protected $internal_gapi_mappings = array();
public $allowed;
public $blocked;
public function setAllowed($allowed) {
$this->allowed = $allowed;
}
public function getAllowed() {
return $this->allowed;
}
public function setBlocked($blocked) {
$this->blocked = $blocked;
}
public function getBlocked() {
return $this->blocked;
}
}
class Google_Service_YouTube_VideoConversionPing extends Google_Model {
protected $internal_gapi_mappings = array();
public $context;
public $conversionUrl;
public function setContext($context) {
$this->context = $context;
}
public function getContext() {
return $this->context;
}
public function setConversionUrl($conversionUrl) {
$this->conversionUrl = $conversionUrl;
}
public function getConversionUrl() {
return $this->conversionUrl;
}
}
class Google_Service_YouTube_VideoConversionPings extends Google_Collection
{
protected $collection_key = 'pings';
protected $internal_gapi_mappings = array();
protected $pingsType =
'Google_Service_YouTube_VideoConversionPing';
protected $pingsDataType = 'array';
public function setPings($pings) {
$this->pings = $pings;
}
public function getPings() {
return $this->pings;
}
}
class Google_Service_YouTube_VideoFileDetails extends Google_Collection {
protected $collection_key = 'videoStreams';
protected $internal_gapi_mappings = array();
protected $audioStreamsType =
'Google_Service_YouTube_VideoFileDetailsAudioStream';
protected $audioStreamsDataType = 'array';
public $bitrateBps;
public $container;
public $creationTime;
public $durationMs;
public $fileName;
public $fileSize;
public $fileType;
protected $recordingLocationType =
'Google_Service_YouTube_GeoPoint';
protected $recordingLocationDataType = '';
protected $videoStreamsType =
'Google_Service_YouTube_VideoFileDetailsVideoStream';
protected $videoStreamsDataType = 'array';
public function setAudioStreams($audioStreams) {
$this->audioStreams = $audioStreams;
}
public function getAudioStreams() {
return $this->audioStreams;
}
public function setBitrateBps($bitrateBps) {
$this->bitrateBps = $bitrateBps;
}
public function getBitrateBps() {
return $this->bitrateBps;
}
public function setContainer($container) {
$this->container = $container;
}
public function getContainer() {
return $this->container;
}
public function setCreationTime($creationTime) {
$this->creationTime = $creationTime;
}
public function getCreationTime() {
return $this->creationTime;
}
public function setDurationMs($durationMs) {
$this->durationMs = $durationMs;
}
public function getDurationMs() {
return $this->durationMs;
}
public function setFileName($fileName) {
$this->fileName = $fileName;
}
public function getFileName() {
return $this->fileName;
}
public function setFileSize($fileSize) {
$this->fileSize = $fileSize;
}
public function getFileSize() {
return $this->fileSize;
}
public function setFileType($fileType) {
$this->fileType = $fileType;
}
public function getFileType() {
return $this->fileType;
}
public function setRecordingLocation(Google_Service_YouTube_GeoPoint
$recordingLocation) {
$this->recordingLocation = $recordingLocation;
}
public function getRecordingLocation() {
return $this->recordingLocation;
}
public function setVideoStreams($videoStreams) {
$this->videoStreams = $videoStreams;
}
public function getVideoStreams() {
return $this->videoStreams;
}
}
class Google_Service_YouTube_VideoFileDetailsAudioStream extends
Google_Model {
protected $internal_gapi_mappings = array();
public $bitrateBps;
public $channelCount;
public $codec;
public $vendor;
public function setBitrateBps($bitrateBps) {
$this->bitrateBps = $bitrateBps;
}
public function getBitrateBps() {
return $this->bitrateBps;
}
public function setChannelCount($channelCount) {
$this->channelCount = $channelCount;
}
public function getChannelCount() {
return $this->channelCount;
}
public function setCodec($codec) {
$this->codec = $codec;
}
public function getCodec() {
return $this->codec;
}
public function setVendor($vendor) {
$this->vendor = $vendor;
}
public function getVendor() {
return $this->vendor;
}
}
class Google_Service_YouTube_VideoFileDetailsVideoStream extends
Google_Model {
protected $internal_gapi_mappings = array();
public $aspectRatio;
public $bitrateBps;
public $codec;
public $frameRateFps;
public $heightPixels;
public $rotation;
public $vendor;
public $widthPixels;
public function setAspectRatio($aspectRatio) {
$this->aspectRatio = $aspectRatio;
}
public function getAspectRatio() {
return $this->aspectRatio;
}
public function setBitrateBps($bitrateBps) {
$this->bitrateBps = $bitrateBps;
}
public function getBitrateBps() {
return $this->bitrateBps;
}
public function setCodec($codec) {
$this->codec = $codec;
}
public function getCodec() {
return $this->codec;
}
public function setFrameRateFps($frameRateFps) {
$this->frameRateFps = $frameRateFps;
}
public function getFrameRateFps() {
return $this->frameRateFps;
}
public function setHeightPixels($heightPixels) {
$this->heightPixels = $heightPixels;
}
public function getHeightPixels() {
return $this->heightPixels;
}
public function setRotation($rotation) {
$this->rotation = $rotation;
}
public function getRotation() {
return $this->rotation;
}
public function setVendor($vendor) {
$this->vendor = $vendor;
}
public function getVendor() {
return $this->vendor;
}
public function setWidthPixels($widthPixels) {
$this->widthPixels = $widthPixels;
}
public function getWidthPixels() {
return $this->widthPixels;
}
}
class Google_Service_YouTube_VideoGetRatingResponse extends
Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_VideoRating';
protected $itemsDataType = 'array';
public $kind;
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_VideoListResponse extends Google_Collection {
protected $collection_key = 'items';
protected $internal_gapi_mappings = array();
public $etag;
public $eventId;
protected $itemsType = 'Google_Service_YouTube_Video';
protected $itemsDataType = 'array';
public $kind;
public $nextPageToken;
protected $pageInfoType = 'Google_Service_YouTube_PageInfo';
protected $pageInfoDataType = '';
public $prevPageToken;
protected $tokenPaginationType =
'Google_Service_YouTube_TokenPagination';
protected $tokenPaginationDataType = '';
public $visitorId;
public function setEtag($etag) {
$this->etag = $etag;
}
public function getEtag() {
return $this->etag;
}
public function setEventId($eventId) {
$this->eventId = $eventId;
}
public function getEventId() {
return $this->eventId;
}
public function setItems($items) {
$this->items = $items;
}
public function getItems() {
return $this->items;
}
public function setKind($kind) {
$this->kind = $kind;
}
public function getKind() {
return $this->kind;
}
public function setNextPageToken($nextPageToken) {
$this->nextPageToken = $nextPageToken;
}
public function getNextPageToken() {
return $this->nextPageToken;
}
public function setPageInfo(Google_Service_YouTube_PageInfo $pageInfo)
{
$this->pageInfo = $pageInfo;
}
public function getPageInfo() {
return $this->pageInfo;
}
public function setPrevPageToken($prevPageToken) {
$this->prevPageToken = $prevPageToken;
}
public function getPrevPageToken() {
return $this->prevPageToken;
}
public function
setTokenPagination(Google_Service_YouTube_TokenPagination $tokenPagination)
{
$this->tokenPagination = $tokenPagination;
}
public function getTokenPagination() {
return $this->tokenPagination;
}
public function setVisitorId($visitorId) {
$this->visitorId = $visitorId;
}
public function getVisitorId() {
return $this->visitorId;
}
}
class Google_Service_YouTube_VideoLiveStreamingDetails extends Google_Model
{
protected $internal_gapi_mappings = array();
public $actualEndTime;
public $actualStartTime;
public $concurrentViewers;
public $scheduledEndTime;
public $scheduledStartTime;
public function setActualEndTime($actualEndTime) {
$this->actualEndTime = $actualEndTime;
}
public function getActualEndTime() {
return $this->actualEndTime;
}
public function setActualStartTime($actualStartTime) {
$this->actualStartTime = $actualStartTime;
}
public function getActualStartTime() {
return $this->actualStartTime;
}
public function setConcurrentViewers($concurrentViewers) {
$this->concurrentViewers = $concurrentViewers;
}
public function getConcurrentViewers() {
return $this->concurrentViewers;
}
public function setScheduledEndTime($scheduledEndTime) {
$this->scheduledEndTime = $scheduledEndTime;
}
public function getScheduledEndTime() {
return $this->scheduledEndTime;
}
public function setScheduledStartTime($scheduledStartTime) {
$this->scheduledStartTime = $scheduledStartTime;
}
public function getScheduledStartTime() {
return $this->scheduledStartTime;
}
}
class Google_Service_YouTube_VideoMonetizationDetails extends Google_Model
{
protected $internal_gapi_mappings = array();
protected $accessType =
'Google_Service_YouTube_AccessPolicy';
protected $accessDataType = '';
public function setAccess(Google_Service_YouTube_AccessPolicy $access)
{
$this->access = $access;
}
public function getAccess() {
return $this->access;
}
}
class Google_Service_YouTube_VideoPlayer extends Google_Model {
protected $internal_gapi_mappings = array();
public $embedHtml;
public function setEmbedHtml($embedHtml) {
$this->embedHtml = $embedHtml;
}
public function getEmbedHtml() {
return $this->embedHtml;
}
}
class Google_Service_YouTube_VideoProcessingDetails extends Google_Model {
protected $internal_gapi_mappings = array();
public $editorSuggestionsAvailability;
public $fileDetailsAvailability;
public $processingFailureReason;
public $processingIssuesAvailability;
protected $processingProgressType =
'Google_Service_YouTube_VideoProcessingDetailsProcessingProgress';
protected $processingProgressDataType = '';
public $processingStatus;
public $tagSuggestionsAvailability;
public $thumbnailsAvailability;
public function
setEditorSuggestionsAvailability($editorSuggestionsAvailability) {
$this->editorSuggestionsAvailability =
$editorSuggestionsAvailability;
}
public function getEditorSuggestionsAvailability() {
return $this->editorSuggestionsAvailability;
}
public function setFileDetailsAvailability($fileDetailsAvailability) {
$this->fileDetailsAvailability = $fileDetailsAvailability;
}
public function getFileDetailsAvailability() {
return $this->fileDetailsAvailability;
}
public function setProcessingFailureReason($processingFailureReason) {
$this->processingFailureReason = $processingFailureReason;
}
public function getProcessingFailureReason() {
return $this->processingFailureReason;
}
public function
setProcessingIssuesAvailability($processingIssuesAvailability) {
$this->processingIssuesAvailability =
$processingIssuesAvailability;
}
public function getProcessingIssuesAvailability() {
return $this->processingIssuesAvailability;
}
public function
setProcessingProgress(Google_Service_YouTube_VideoProcessingDetailsProcessingProgress
$processingProgress) {
$this->processingProgress = $processingProgress;
}
public function getProcessingProgress() {
return $this->processingProgress;
}
public function setProcessingStatus($processingStatus) {
$this->processingStatus = $processingStatus;
}
public function getProcessingStatus() {
return $this->processingStatus;
}
public function
setTagSuggestionsAvailability($tagSuggestionsAvailability) {
$this->tagSuggestionsAvailability = $tagSuggestionsAvailability;
}
public function getTagSuggestionsAvailability() {
return $this->tagSuggestionsAvailability;
}
public function setThumbnailsAvailability($thumbnailsAvailability) {
$this->thumbnailsAvailability = $thumbnailsAvailability;
}
public function getThumbnailsAvailability() {
return $this->thumbnailsAvailability;
}
}
class Google_Service_YouTube_VideoProcessingDetailsProcessingProgress
extends Google_Model {
protected $internal_gapi_mappings = array();
public $partsProcessed;
public $partsTotal;
public $timeLeftMs;
public function setPartsProcessed($partsProcessed) {
$this->partsProcessed = $partsProcessed;
}
public function getPartsProcessed() {
return $this->partsProcessed;
}
public function setPartsTotal($partsTotal) {
$this->partsTotal = $partsTotal;
}
public function getPartsTotal() {
return $this->partsTotal;
}
public function setTimeLeftMs($timeLeftMs) {
$this->timeLeftMs = $timeLeftMs;
}
public function getTimeLeftMs() {
return $this->timeLeftMs;
}
}
class Google_Service_YouTube_VideoProjectDetails extends Google_Collection
{
protected $collection_key = 'tags';
protected $internal_gapi_mappings = array();
public $tags;
public function setTags($tags) {
$this->tags = $tags;
}
public function getTags() {
return $this->tags;
}
}
class Google_Service_YouTube_VideoRating extends Google_Model {
protected $internal_gapi_mappings = array();
public $rating;
public $videoId;
public function setRating($rating) {
$this->rating = $rating;
}
public function getRating() {
return $this->rating;
}
public function setVideoId($videoId) {
$this->videoId = $videoId;
}
public function getVideoId() {
return $this->videoId;
}
}
class Google_Service_YouTube_VideoRecordingDetails extends Google_Model {
protected $internal_gapi_mappings = array();
protected $locationType = 'Google_Service_YouTube_GeoPoint';
protected $locationDataType = '';
public $locationDescription;
public $recordingDate;
public function setLocation(Google_Service_YouTube_GeoPoint $location)
{
$this->location = $location;
}
public function getLocation() {
return $this->location;
}
public function setLocationDescription($locationDescription) {
$this->locationDescription = $locationDescription;
}
public function getLocationDescription() {
return $this->locationDescription;
}
public function setRecordingDate($recordingDate) {
$this->recordingDate = $recordingDate;
}
public function getRecordingDate() {
return $this->recordingDate;
}
}
class Google_Service_YouTube_VideoSnippet extends Google_Collection {
protected $collection_key = 'tags';
protected $internal_gapi_mappings = array();
public $categoryId;
public $channelId;
public $channelTitle;
public $description;
public $liveBroadcastContent;
public $publishedAt;
public $tags;
protected $thumbnailsType =
'Google_Service_YouTube_ThumbnailDetails';
protected $thumbnailsDataType = '';
public $title;
public function setCategoryId($categoryId) {
$this->categoryId = $categoryId;
}
public function getCategoryId() {
return $this->categoryId;
}
public function setChannelId($channelId) {
$this->channelId = $channelId;
}
public function getChannelId() {
return $this->channelId;
}
public function setChannelTitle($channelTitle) {
$this->channelTitle = $channelTitle;
}
public function getChannelTitle() {
return $this->channelTitle;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setLiveBroadcastContent($liveBroadcastContent) {
$this->liveBroadcastContent = $liveBroadcastContent;
}
public function getLiveBroadcastContent() {
return $this->liveBroadcastContent;
}
public function setPublishedAt($publishedAt) {
$this->publishedAt = $publishedAt;
}
public function getPublishedAt() {
return $this->publishedAt;
}
public function setTags($tags) {
$this->tags = $tags;
}
public function getTags() {
return $this->tags;
}
public function setThumbnails(Google_Service_YouTube_ThumbnailDetails
$thumbnails) {
$this->thumbnails = $thumbnails;
}
public function getThumbnails() {
return $this->thumbnails;
}
public function setTitle($title) {
$this->title = $title;
}
public function getTitle() {
return $this->title;
}
}
class Google_Service_YouTube_VideoStatistics extends Google_Model {
protected $internal_gapi_mappings = array();
public $commentCount;
public $dislikeCount;
public $favoriteCount;
public $likeCount;
public $viewCount;
public function setCommentCount($commentCount) {
$this->commentCount = $commentCount;
}
public function getCommentCount() {
return $this->commentCount;
}
public function setDislikeCount($dislikeCount) {
$this->dislikeCount = $dislikeCount;
}
public function getDislikeCount() {
return $this->dislikeCount;
}
public function setFavoriteCount($favoriteCount) {
$this->favoriteCount = $favoriteCount;
}
public function getFavoriteCount() {
return $this->favoriteCount;
}
public function setLikeCount($likeCount) {
$this->likeCount = $likeCount;
}
public function getLikeCount() {
return $this->likeCount;
}
public function setViewCount($viewCount) {
$this->viewCount = $viewCount;
}
public function getViewCount() {
return $this->viewCount;
}
}
class Google_Service_YouTube_VideoStatus extends Google_Model {
protected $internal_gapi_mappings = array();
public $embeddable;
public $failureReason;
public $license;
public $privacyStatus;
public $publicStatsViewable;
public $publishAt;
public $rejectionReason;
public $uploadStatus;
public function setEmbeddable($embeddable) {
$this->embeddable = $embeddable;
}
public function getEmbeddable() {
return $this->embeddable;
}
public function setFailureReason($failureReason) {
$this->failureReason = $failureReason;
}
public function getFailureReason() {
return $this->failureReason;
}
public function setLicense($license) {
$this->license = $license;
}
public function getLicense() {
return $this->license;
}
public function setPrivacyStatus($privacyStatus) {
$this->privacyStatus = $privacyStatus;
}
public function getPrivacyStatus() {
return $this->privacyStatus;
}
public function setPublicStatsViewable($publicStatsViewable) {
$this->publicStatsViewable = $publicStatsViewable;
}
public function getPublicStatsViewable() {
return $this->publicStatsViewable;
}
public function setPublishAt($publishAt) {
$this->publishAt = $publishAt;
}
public function getPublishAt() {
return $this->publishAt;
}
public function setRejectionReason($rejectionReason) {
$this->rejectionReason = $rejectionReason;
}
public function getRejectionReason() {
return $this->rejectionReason;
}
public function setUploadStatus($uploadStatus) {
$this->uploadStatus = $uploadStatus;
}
public function getUploadStatus() {
return $this->uploadStatus;
}
}
class Google_Service_YouTube_VideoSuggestions extends Google_Collection {
protected $collection_key = 'tagSuggestions';
protected $internal_gapi_mappings = array();
public $editorSuggestions;
public $processingErrors;
public $processingHints;
public $processingWarnings;
protected $tagSuggestionsType =
'Google_Service_YouTube_VideoSuggestionsTagSuggestion';
protected $tagSuggestionsDataType = 'array';
public function setEditorSuggestions($editorSuggestions) {
$this->editorSuggestions = $editorSuggestions;
}
public function getEditorSuggestions() {
return $this->editorSuggestions;
}
public function setProcessingErrors($processingErrors) {
$this->processingErrors = $processingErrors;
}
public function getProcessingErrors() {
return $this->processingErrors;
}
public function setProcessingHints($processingHints) {
$this->processingHints = $processingHints;
}
public function getProcessingHints() {
return $this->processingHints;
}
public function setProcessingWarnings($processingWarnings) {
$this->processingWarnings = $processingWarnings;
}
public function getProcessingWarnings() {
return $this->processingWarnings;
}
public function setTagSuggestions($tagSuggestions) {
$this->tagSuggestions = $tagSuggestions;
}
public function getTagSuggestions() {
return $this->tagSuggestions;
}
}
class Google_Service_YouTube_VideoSuggestionsTagSuggestion extends
Google_Collection {
protected $collection_key = 'categoryRestricts';
protected $internal_gapi_mappings = array();
public $categoryRestricts;
public $tag;
public function setCategoryRestricts($categoryRestricts) {
$this->categoryRestricts = $categoryRestricts;
}
public function getCategoryRestricts() {
return $this->categoryRestricts;
}
public function setTag($tag) {
$this->tag = $tag;
}
public function getTag() {
return $this->tag;
}
}
class Google_Service_YouTube_VideoTopicDetails extends Google_Collection {
protected $collection_key = 'topicIds';
protected $internal_gapi_mappings = array();
public $relevantTopicIds;
public $topicIds;
public function setRelevantTopicIds($relevantTopicIds) {
$this->relevantTopicIds = $relevantTopicIds;
}
public function getRelevantTopicIds() {
return $this->relevantTopicIds;
}
public function setTopicIds($topicIds) {
$this->topicIds = $topicIds;
}
public function getTopicIds() {
return $this->topicIds;
}
}
class Google_Service_YouTube_WatchSettings extends Google_Model {
protected $internal_gapi_mappings = array();
public $backgroundColor;
public $featuredPlaylistId;
public $textColor;
public function setBackgroundColor($backgroundColor) {
$this->backgroundColor = $backgroundColor;
}
public function getBackgroundColor() {
return $this->backgroundColor;
}
public function setFeaturedPlaylistId($featuredPlaylistId) {
$this->featuredPlaylistId = $featuredPlaylistId;
}
public function getFeaturedPlaylistId() {
return $this->featuredPlaylistId;
}
public function setTextColor($textColor) {
$this->textColor = $textColor;
}
public function getTextColor() {
return $this->textColor;
}
}
PK/C�[+�w��DGenerator/Common/YouTube/googleclient/Task/Google_Task_Exception.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Task;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Exception;
class Google_Task_Exception extends Google_Exception {
}
PK/C�[M�tm��DGenerator/Common/YouTube/googleclient/Task/Google_Task_Retryable.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Task;
/**
* Interface for checking how many times a given task can be retried
following
* a failure.
*/
interface Google_Task_Retryable {
/**
* Gets the number of times the associated task can be retried.
*
* NOTE: -1 is returned if the task can be retried indefinitely
*
* @return integer
*/
public function allowedRetries();
}
PK/C�[{K�AGenerator/Common/YouTube/googleclient/Task/Google_Task_Runner.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Task;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Google_Client;
/**
* A task runner with exponential backoff support.
*
* @see
https://developers.google.com/drive/web/handle-errors#implementing_exponential_backoff
*/
class Google_Task_Runner {
/**
* @var integer $maxDelay The max time (in seconds) to wait before a
retry.
*/
private $maxDelay = 60;
/**
* @var integer $delay The previous delay from which the next is
calculated.
*/
private $delay = 1;
/**
* @var integer $factor The base number for the exponential back off.
*/
private $factor = 2;
/**
* @var float $jitter A random number between -$jitter and $jitter will
be
* added to $factor on each iteration to allow for a better
distribution of
* retries.
*/
private $jitter = 0.5;
/**
* @var integer $attempts The number of attempts that have been tried
so far.
*/
private $attempts = 0;
/**
* @var integer $maxAttempts The max number of attempts allowed.
*/
private $maxAttempts = 1;
/**
* @var Google_Client $client The current API client.
*/
private $client;
/**
* @var string $name The name of the current task (used for logging).
*/
private $name;
/**
* @var callable $action The task to run and possibly retry.
*/
private $action;
/**
* @var array $arguments The task arguments.
*/
private $arguments;
/**
* Creates a new task runner with exponential backoff support.
*
* @param Google_Client $client The current API client
* @param string $name The name of the current task (used
for logging)
* @param callable $action The task to run and possibly retry
* @param array $arguments The task arguments
*
* @throws Google_Task_Exception when misconfigured
*/
public function __construct(Google_Client $client, $name, $action,
array $arguments = array()) {
$config =
(array)$client->getClassConfig('Google_Task_Runner');
if (isset($config['initial_delay'])) {
if ($config['initial_delay'] < 0) {
throw new Google_Task_Exception('Task configuration
`initial_delay` must not be negative.');
}
$this->delay = $config['initial_delay'];
}
if (isset($config['max_delay'])) {
if ($config['max_delay'] <= 0) {
throw new Google_Task_Exception('Task configuration
`max_delay` must be greater than 0.');
}
$this->maxDelay = $config['max_delay'];
}
if (isset($config['factor'])) {
if ($config['factor'] <= 0) {
throw new Google_Task_Exception('Task configuration
`factor` must be greater than 0.');
}
$this->factor = $config['factor'];
}
if (isset($config['jitter'])) {
if ($config['jitter'] <= 0) {
throw new Google_Task_Exception('Task configuration
`jitter` must be greater than 0.');
}
$this->jitter = $config['jitter'];
}
if (isset($config['retries'])) {
if ($config['retries'] < 0) {
throw new Google_Task_Exception('Task configuration
`retries` must not be negative.');
}
$this->maxAttempts += $config['retries'];
}
if (!is_callable($action)) {
throw new Google_Task_Exception('Task argument `$action`
must be a valid callable.');
}
$this->name = $name;
$this->client = $client;
$this->action = $action;
$this->arguments = $arguments;
}
/**
* Checks if a retry can be attempted.
*
* @return boolean
*/
public function canAttmpt() {
return $this->attempts < $this->maxAttempts;
}
/**
* Runs the task and (if applicable) automatically retries when errors
occur.
*
* @return mixed
* @throws Google_Task_Retryable on failure when no retries are
available.
*/
public function run() {
while ($this->attempt()) {
try {
return call_user_func_array($this->action,
$this->arguments);
} catch (Google_Task_Retryable $exception) {
$allowedRetries = $exception->allowedRetries();
if (!$this->canAttmpt() || !$allowedRetries) {
throw $exception;
}
if ($allowedRetries > 0) {
$this->maxAttempts = min($this->maxAttempts,
$this->attempts + $allowedRetries);
}
}
}
}
/**
* Runs a task once, if possible. This is useful for bypassing the
`run()`
* loop.
*
* NOTE: If this is not the first attempt, this function will sleep in
* accordance to the backoff configurations before running the task.
*
* @return boolean
*/
public function attempt() {
if (!$this->canAttmpt()) {
return false;
}
if ($this->attempts > 0) {
$this->backOff();
}
$this->attempts++;
return true;
}
/**
* Sleeps in accordance to the backoff configurations.
*/
private function backOff() {
$delay = $this->getDelay();
$this->client->getLogger()
->debug('Retrying task with backoff',
array(
'request' => $this->name,
'retry' =>
$this->attempts,
'backoff_seconds' => $delay
));
usleep($delay * 1000000);
}
/**
* Gets the delay (in seconds) for the current backoff period.
*
* @return float
*/
private function getDelay() {
$jitter = $this->getJitter();
$factor = $this->attempts > 1 ? $this->factor + $jitter :
1 + abs($jitter);
return $this->delay = min($this->maxDelay, $this->delay *
$factor);
}
/**
* Gets the current jitter (random number between -$this->jitter and
* $this->jitter).
*
* @return float
*/
private function getJitter() {
return $this->jitter * 2 * mt_rand() / mt_getrandmax() -
$this->jitter;
}
}
PK/C�[�Sc��6Generator/Common/YouTube/Sources/YouTubeByPlaylist.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\FormContainer;
use Nextend\Framework\Notification\Notification;
use Nextend\GoogleApi\Google_Service_YouTube_SearchListResponse;
use Nextend\GoogleApi\Google_Service_YouTube_SearchResult;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\Elements\YouTubePlaylistByUser;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Service\Google_Service_YouTube;
class YouTubeByPlaylist extends AbstractGenerator {
private $resultPerPage = 50;
private $pages;
private $youtubeClient;
protected $layout = 'youtube';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'YouTube ' . n2_('Playlist'));
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Text($filter, 'channel-id', 'Channel id - '
. n2_('optional'), '', array(
'style' => "width:400px;"
));
new YouTubePlaylistByUser($filter, 'playlist-id',
'Playlist', '', array(
'config' => $this->group->getConfiguration()
));
}
protected function resetState() {
$this->pages = array();
if (!$this->youtubeClient) {
$client = $this->group->getConfiguration()
->getApi();
$this->youtubeClient = new Google_Service_YouTube($client);
}
}
protected function _getData($count, $startIndex) {
$data = array();
try {
$offset = $startIndex;
$limit = $count;
for ($i = 0, $j = $offset; $j < $offset + $limit; $i++,
$j++) {
$items = $this->getPage(intval($j /
$this->resultPerPage))
->getItems();
/** @var Google_Service_YouTube_SearchResult $item */
$item = @$items[$j % $this->resultPerPage];
if (empty($item)) {
// There is no more item in the list
break;
}
$snippet = $item['snippet'];
$record = array();
$record['video_id'] =
$snippet['resourceId']['videoId'];
$record['video_url'] =
'http://www.youtube.com/watch?v=' .
$snippet['resourceId']['videoId'];
$record['title'] =
$snippet['title'];
$record['description'] =
$snippet['description'];
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['default']) &&
isset($snippet['thumbnails']['default']['url']))
{
$record['thumbnail'] =
$snippet['thumbnails']['default']['url'];
}
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['medium']) &&
isset($snippet['thumbnails']['medium']['url']))
{
$record['thumbnail_medium'] =
$snippet['thumbnails']['medium']['url'];
}
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['high']) &&
isset($snippet['thumbnails']['high']['url']))
{
$record['thumbnail_high'] =
$snippet['thumbnails']['high']['url'];
}
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['standard']) &&
isset($snippet['thumbnails']['standard']['url']))
{
$record['thumbnail_standard'] =
$snippet['thumbnails']['standard']['url'];
}
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['maxres']) &&
isset($snippet['thumbnails']['maxres']['url']))
{
$record['thumbnail_maxres'] =
$snippet['thumbnails']['maxres']['url'];
}
$record['channel_title'] =
$snippet['channelTitle'];
$record['channel_url'] =
'http://www.youtube.com/channel/' .
$snippet['channelId'];
$data[$i] = &$record;
unset($record);
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
return $data;
}
private function getPage($page) {
if (!isset($this->pages[$page])) {
$request = array(
'maxResults' => $this->resultPerPage,
'playlistId' =>
$this->data->get('playlist-id', '')
);
if ($page != 0) {
$request['pageToken'] = $this->getPage($page -
1)
->getNextPageToken();
}
/** @var Google_Service_YouTube_SearchListResponse
$searchResponse */
$this->pages[$page] =
$this->youtubeClient->playlistItems->listPlaylistItems('id,snippet',
$request);
}
return $this->pages[$page];
}
}PK/C�[7���114Generator/Common/YouTube/Sources/YouTubeBySearch.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Common\YouTube\Sources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\FormContainer;
use Nextend\Framework\Notification\Notification;
use Nextend\GoogleApi\Google_Service_YouTube_SearchListResponse;
use Nextend\GoogleApi\Google_Service_YouTube_SearchResult;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Common\YouTube\googleclient\Service\Google_Service_YouTube;
class YouTubeBySearch extends AbstractGenerator {
private $resultPerPage = 50;
private $pages;
private $youtubeClient;
protected $layout = 'youtube';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
'YouTube ' . n2_('Search'));
}
public function renderFields($container) {
$filterGroup = new ContainerTable($container,
'filter-group', n2_('Filter'));
$filter = $filterGroup->createRow('filter');
new Text($filter, 'search-term', n2_('Search'),
'', array(
'style' => 'width:200px;'
));
}
protected function resetState() {
$this->pages = array();
if (!$this->youtubeClient) {
$client = $this->group->getConfiguration()
->getApi();
$this->youtubeClient = new Google_Service_YouTube($client);
}
}
protected function _getData($count, $startIndex) {
$data = array();
try {
$offset = $startIndex;
$limit = $count;
for ($i = 0, $j = $offset; $j < $offset + $limit; $i++,
$j++) {
$items = $this->getPage(intval($j /
$this->resultPerPage))
->getItems();
/** @var Google_Service_YouTube_SearchResult $item */
$item = $items[$j % $this->resultPerPage];
if (empty($item)) {
// There is no more item in the list
break;
}
$record = array();
$record['video_id'] =
$item['id']['videoId'];
$record['video_url'] =
'http://www.youtube.com/watch?v=' .
$item['id']['videoId'];
$snippet = $item['snippet'];
$record['title'] =
$snippet['title'];
$record['description'] =
$snippet['description'];
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['default']) &&
isset($snippet['thumbnails']['default']['url']))
{
$record['thumbnail'] =
$snippet['thumbnails']['default']['url'];
}
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['medium']) &&
isset($snippet['thumbnails']['medium']['url']))
{
$record['thumbnail_medium'] =
$snippet['thumbnails']['medium']['url'];
}
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['high']) &&
isset($snippet['thumbnails']['high']['url']))
{
$record['thumbnail_high'] =
$snippet['thumbnails']['high']['url'];
}
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['standard']) &&
isset($snippet['thumbnails']['standard']['url']))
{
$record['thumbnail_standard'] =
$snippet['thumbnails']['standard']['url'];
}
if (isset($snippet['thumbnails']) &&
isset($snippet['thumbnails']['maxres']) &&
isset($snippet['thumbnails']['maxres']['url']))
{
$record['thumbnail_maxres'] =
$snippet['thumbnails']['maxres']['url'];
}
$record['channel_title'] =
$snippet['channelTitle'];
$record['channel_url'] =
'http://www.youtube.com/user/' .
$snippet['channelTitle'];
$data[$i] = &$record;
unset($record);
}
} catch (\Exception $e) {
Notification::error($e->getMessage());
}
return $data;
}
private function getPage($page) {
if (!isset($this->pages[$page])) {
$request = array(
'q' =>
$this->data->get('search-term', ''),
'maxResults' => $this->resultPerPage,
'type' => 'video',
'videoEmbeddable' => 'true'
);
if ($page != 0) {
$request['pageToken'] = $this->getPage($page -
1)
->getNextPageToken();
}
/** @var Google_Service_YouTube_SearchListResponse
$searchResponse */
$this->pages[$page] =
$this->youtubeClient->search->listSearch('id,snippet',
$request);
}
return $this->pages[$page];
}
}PK/C�[T���Generator/GeneratorLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3Pro\Generator;
class GeneratorLoader {
public function __construct() {
Plugin::addAction('PluggableFactorySliderGenerator',
array(
$this,
'sliderGenerator'
));
}
public function sliderGenerator() {
new Generator\Common\GeneratorCommonLoader();
new Generator\Joomla\GeneratorJoomlaLoader();
}
}PK/C�[59!CGenerator/Joomla/Djclassifieds/Elements/DjclassifiedsCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds\Elements;
use JFactory;
use JHTML;
use Nextend\Framework\Form\Element\Select;
class DjclassifiedsCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
$query = 'SELECT
id,
name AS title,
name,
parent_id AS parent,
parent_id
FROM #__djcf_categories
ORDER BY id';
$db->setQuery($query);
$menuItems = $db->loadObjectList();
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
$this->options['0'] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
if ($this->getValue() == '') {
reset($this->options);
$this->setValue(key($this->options));
}
}
}PK/C�[�P¤BGenerator/Joomla/Djclassifieds/Elements/DjclassifiedsLocations.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds\Elements;
use JFactory;
use JHTML;
use Nextend\Framework\Form\Element\Select;
class DjclassifiedsLocations extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
$query = 'SELECT
id,
name AS title,
name,
parent_id AS parent,
parent_id
FROM #__djcf_regions
ORDER BY id';
$db->setQuery($query);
$menuItems = $db->loadObjectList();
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
$this->options['0'] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
if ($this->getValue() == '') {
reset($this->options);
$this->setValue(key($this->options));
}
}
}PK/C�[�䫿�>Generator/Joomla/Djclassifieds/Elements/DjclassifiedsTypes.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class DjclassifiedsTypes extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$types = Database::queryAll("SELECT id, name FROM
#__djcf_types ORDER BY id", false, "object");
$this->options['0'] = n2_('All');
if (count($types)) {
foreach ($types AS $type) {
$this->options[$type->id] = $type->name;
}
}
}
}PK/C�[fgVV>Generator/Joomla/Djclassifieds/GeneratorGroupDjclassifieds.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds\Sources\DjclassifiedsItems;
class GeneratorGroupDjclassifieds extends AbstractGeneratorGroup {
protected $name = 'djclassifieds';
protected $url =
'https://extensions.joomla.org/extension/dj-classifieds/';
protected $isDeprecated = true;
public function getLabel() {
return 'DJ Classifieds';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'DJ Classifieds');
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_djclassifieds');
}
protected function loadSources() {
new DjclassifiedsItems($this, 'items',
n2_('Items'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupDjclassifieds);
PK/C�[*I\"k*k*=Generator/Joomla/Djclassifieds/Sources/DjclassifiedsItems.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds\Sources;
use DJClassifiedsSEO;
use JRoute;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds\Elements\DjclassifiedsCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds\Elements\DjclassifiedsLocations;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Djclassifieds\Elements\DjclassifiedsTypes;
class DjclassifiedsItems extends AbstractGenerator {
protected $layout = 'image';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'DJ Classifieds');
}
public function renderFields($container) {
Notification::notice(sprintf('%s is deprecated and will be
removed after %s.', 'DJ Classifieds generator',
'December 31st, 2020'));
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new DjclassifiedsCategories($source, 'categories',
n2_('Categories'), 0, array(
'isMultiple' => true,
'size' => 10
));
new DjclassifiedsLocations($source, 'locations',
n2_('Locations'), 0, array(
'isMultiple' => true,
'size' => 10
));
new DjclassifiedsTypes($source, 'types',
n2_('Types'), 0, array(
'isMultiple' => true,
'size' => 10
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'expired', n2_('Expired'),
'-1');
new Filter($limit, 'started', n2_('Started'),
'1');
new Filter($limit, 'auction', n2_('Auction'),
0);
new Filter($limit, 'negotiable', n2_('Negotiable
price'), 0);
new Filter($limit, 'blocked', n2_('Blocked by
User'), '-1');
new Filter($limit, 'paid', n2_('Paid'), 0);
new Filter($limit, 'buynow', n2_('Buynow'), 0);
$url = $filterGroup->createRow('url-row');
new MenuItems($url, 'itemid', n2_('Menu item (item
ID)'), 0, array(
'tipLabel' => n2_('URL'),
'tipDescription' => n2_('Your url will point
to the item within this menu item. You will only get a good result, if you
will pick one of your DJ Classifields menu items or leave it on
\'Default\'.'),
'tipLink' => '??????'
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'djclassifiedsorder',
'date_start|*|asc', array(
'options' => array(
'' => n2_('None'),
'i.name' => n2_('Name'),
'i.date_start' => n2_('Start date'),
'i.date_exp' => n2_('Expiration
date'),
'ABS(i.price)' => n2_('Price'),
'i.id' => 'ID'
)
));
}
protected function fileExists($path, $root = JPATH_SITE) {
$file = $root . $path;
if (Filesystem::fileexists($file)) {
return
ResourceTranslator::urlToResource(Url::pathToUri($file));
} else {
return '';
}
}
protected function _getData($count, $startIndex) {
if (!defined("DS")) {
define('DS', DIRECTORY_SEPARATOR);
}
require_once(JPATH_ADMINISTRATOR . DS . 'components' . DS
. 'com_djclassifieds' . DS . 'lib' . DS .
'djseo.php');
$categories = array_map('intval', explode('||',
$this->data->get('categories', 0)));
$locations = array_map('intval', explode('||',
$this->data->get('locations', 0)));
$types = array_map('intval', explode('||',
$this->data->get('types', 0)));
$where = array(
"i.published = 1 "
);
if (!in_array(0, $categories) && count($categories) > 0)
{
$where[] = "i.cat_id IN (" . implode(',',
$categories) . ")";
}
if (!in_array(0, $locations) && count($locations) > 0) {
$where[] = "i.region_id IN (" .
implode(',', $locations) . ")";
}
if (!in_array(0, $types) && count($types) > 0) {
$where[] = "i.type_id IN (" . implode(',',
$types) . ")";
}
$today = date('Y-m-d h:i:s', time());
switch ($this->data->get('expired',
'-1')) {
case 1:
$where[] = "i.date_exp <= '" . $today .
"'";
break;
case -1:
$where[] = "i.date_exp > '" . $today .
"'";
break;
}
switch ($this->data->get('started', '1'))
{
case 1:
$where[] = "i.date_start <= '" . $today .
"'";
break;
case -1:
$where[] = "i.date_start > '" . $today .
"'";
break;
}
switch ($this->data->get('negotiable', 0)) {
case 1:
$where[] = "i.price_negotiable = 1 ";
break;
case -1:
$where[] = "i.price_negotiable = 0 ";
break;
}
switch ($this->data->get('blocked', 0)) {
case 1:
$where[] = "i.blocked = 1 ";
break;
case -1:
$where[] = "i.blocked = 0 ";
break;
}
switch ($this->data->get('paid', 0)) {
case 1:
$where[] = "i.payed = 1 ";
break;
case -1:
$where[] = "i.payed = 0 ";
break;
}
switch ($this->data->get('buynow', 0)) {
case 1:
$where[] = "i.buynow = 1 ";
break;
case -1:
$where[] = "i.buynow = 0 ";
break;
}
switch ($this->data->get('auction', 0)) {
case 1:
$where[] = "i.auction = 1 ";
break;
case -1:
$where[] = "i.auction = 0 ";
break;
}
$query = "SELECT
i.id, i.cat_id, i.name, i.alias, i.description,
i.intro_desc, i.date_start, i.date_exp,
i.price, i.contact, i.address, i.post_code, i.video,
i.website, i.currency,
i.metakey, i.metadesc, i.email, i.bid_min, i.bid_max,
i.price_reserve, i.price_start,
im.path, im.name AS image_name, im.ext, im.caption,
c.name AS category_name, c.alias AS category_alias,
r.name AS region_name, r.id AS region_id
FROM #__djcf_items AS i
LEFT JOIN #__djcf_images AS im ON i.id = im.item_id AND
im.type='item'
LEFT JOIN #__djcf_categories AS c ON i.cat_id = c.id
LEFT JOIN #__djcf_regions AS r ON i.region_id = r.id
WHERE " . implode(' AND ', $where);
$order =
Common::parse($this->data->get('djclassifiedsorder',
'date_start|*|asc'));
if ($order[0]) {
$query .= ' ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= ' LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
if ($this->data->get('itemid', 0)) {
$itemid = '&Itemid=' .
$this->data->get('itemid', 0);
} else {
$itemid = '';
}
$data = array();
for ($i = 0; $i < count($result); $i++) {
$r = array(
'name' =>
$result[$i]['name'],
'title' =>
$result[$i]['name'],
'description' =>
$result[$i]['description'],
'intro_desc' =>
$result[$i]['intro_desc'],
'url' =>
JRoute::_(DJClassifiedsSEO::getItemRoute($result[$i]['id'],
$result[$i]['cat_id'], $result[$i]['region_id']) .
$itemid, false)
);
if (!empty($result[$i]['image_name'])) {
$r += array(
'image_original' =>
$this->fileExists($result[$i]['path'] .
$result[$i]['image_name'] . '.' .
$result[$i]['ext']),
'image_ths' =>
$this->fileExists($result[$i]['path'] .
$result[$i]['image_name'] . '_ths.' .
$result[$i]['ext']),
'image_thm' =>
$this->fileExists($result[$i]['path'] .
$result[$i]['image_name'] . '_thm.' .
$result[$i]['ext']),
'image_thb' =>
$this->fileExists($result[$i]['path'] .
$result[$i]['image_name'] . '_thb.' .
$result[$i]['ext']),
);
$r['image'] = ImageFallback::fallback(array(
ltrim($r['image_original'], '$/'),
ltrim($r['image_thb'], '$/'),
ltrim($r['image_thm'], '$/'),
ltrim($r['image_ths'], '$/')
), array(
$result[$i]['description'],
$result[$i]['intro_desc']
));
}
$r += array(
'date_start' =>
$result[$i]['date_start'],
'date_exp' =>
$result[$i]['date_exp'],
'price' =>
$result[$i]['price'],
'currency' =>
$result[$i]['currency'],
'contact' =>
$result[$i]['contact'],
'address' =>
$result[$i]['address'],
'post_code' =>
$result[$i]['post_code'],
'video' =>
$result[$i]['video'],
'website' =>
$result[$i]['website'],
'metakey' =>
$result[$i]['metakey'],
'metadesc' =>
$result[$i]['metadesc'],
'email' =>
$result[$i]['email'],
'bid_min' =>
$result[$i]['bid_min'],
'bid_max' =>
$result[$i]['bid_max'],
'price_reserve' =>
$result[$i]['price_reserve'],
'price_start' =>
$result[$i]['price_start'],
'image_caption' =>
$result[$i]['caption'],
'id' =>
$result[$i]['id'],
'cat_id' =>
$result[$i]['cat_id'],
);
$data[] = $r;
}
return $data;
}
}PK/C�[�j����9Generator/Joomla/Easyblog/Elements/EasyblogCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easyblog\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EasyblogCategories extends Select {
protected $isMultiple = true;
protected $size = 10;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$menuItems = Database::queryAll('SELECT * FROM
#__easyblog_category WHERE published = 1 ORDER BY parent_id,
ordering', false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
$this->options['0'] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}PK/C�[�²�$$3Generator/Joomla/Easyblog/Elements/EasyblogTags.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easyblog\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EasyblogTags extends Select {
protected $isMultiple = true;
protected $size = 10;
public function __construct($insertAt, $name = '', $label =
'', $default = '', array $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$menuItems = Database::queryAll('SELECT * FROM #__easyblog_tag
WHERE published = 1 ORDER BY ordering, id', false,
"object");
$this->options['0'] = n2_('All');
if (count($menuItems)) {
foreach ($menuItems AS $option) {
$this->options[$option->id] = $option->title;
}
}
}
}PK/C�[������4Generator/Joomla/Easyblog/GeneratorGroupEasyblog.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easyblog;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easyblog\Sources\EasyblogPosts;
class GeneratorGroupEasyblog extends AbstractGeneratorGroup {
protected $name = 'easyblog';
protected $url =
'https://extensions.joomla.org/extension/easyblog/';
public function getLabel() {
return 'EasyBlog';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasyBlog');
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_easyblog');
}
protected function loadSources() {
new EasyblogPosts($this, 'posts', 'Posts');
}
}
GeneratorFactory::addGenerator(new GeneratorGroupEasyblog);
PK/C�[4����(�(3Generator/Joomla/Easyblog/Sources/EasyblogPosts.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easyblog\Sources;
use EB;
use EBMM;
use EBR;
use Foundry;
use JFactory;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easyblog\Elements\EasyblogCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easyblog\Elements\EasyblogTags;
class EasyblogPosts extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasyBlog');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EasyblogCategories($source, 'easyblogcategories',
n2_('Categories'), 0);
new EasyblogTags($source, 'easyblogtags',
n2_('Tags'), 0);
new OnOff($source, 'easyblogsubcategories',
n2_('Include subcategories'), 0);
$limit = $filterGroup->createRow('limit-row');
new Text($limit, 'easybloguserid', n2_('User
ID'), '');
new Filter($limit, 'easyblogfrontpage',
n2_('Frontpage'), 0);
new Filter($limit, 'easyblogfeatured',
n2_('Featured'), 0);
new Text($limit, 'easyblogexclude', n2_('Exclude
ID'), '');
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'easyblogorder',
'con.created|*|desc', array(
'options' => array(
'' => n2_('None'),
'con.title' => n2_('Title'),
'cattitle' => n2_('Category
title'),
'blogger' => n2_('Username'),
'con.ordering' => n2_('Ordering'),
'con.created' => n2_('Creation
time'),
'con.modified' => n2_('Modification
time')
)
));
}
private function findImage($path, $url) {
$locations = array(
'easyblog_images',
'easyblog_articles',
'easyblog_shared',
'easyblog_cavatar',
'easyblog_tavatar'
);
$pathlocation = '';
foreach ($locations AS $l) {
if (strpos($path, $l)) {
$pathlocation = $l;
break;
}
}
if ($pathlocation != '') {
foreach ($locations AS $l) {
if ($pathlocation != $l) {
if (file_exists(str_replace($pathlocation, $l, $path)))
{
return str_replace($pathlocation, $l, $url);
break;
}
}
}
}
}
protected function _getData($count, $startIndex) {
require_once(JPATH_ADMINISTRATOR .
"/components/com_easyblog/includes/easyblog.php");
EB::mediamanager();
$category = array_map('intval', explode('||',
$this->data->get('easyblogcategories', '')));
if (!in_array('0', $category) &&
$this->data->get('easyblogsubcategories', 0)) {
$checkCategory = $category;
do {
$catQuery = 'SELECT id FROM #__easyblog_category
WHERE parent_id IN (' . implode(',', $checkCategory) .
')';
$catResult = Database::queryAll($catQuery);
if (!empty($catResult)) {
$checkCategory = array();
foreach ($catResult AS $subCategory) {
$checkCategory[] = $category[] =
$subCategory['id'];
}
}
} while (!empty($catResult));
}
$query = 'SELECT con.*, con.intro as
"main_content_of_post", con.content as
"rest_of_the_post", usr.id AS "user_id", usr.nickname
as "blogger", usr.avatar as "blogger_avatar_picture",
cat.title as cat_title ';
/* id created_by title description alias avatar parent_id
private created status published ordering level lft rgt default */
$query .= 'FROM #__easyblog_post con ';
$query .= 'LEFT JOIN #__easyblog_users usr ON usr.id =
con.created_by ';
$query .= 'LEFT JOIN #__easyblog_category cat ON cat.id =
con.category_id ';
$jnow = JFactory::getDate();
$now = $jnow->toSql();
$where = array("con.published = 1 AND (con.publish_up =
'0000-00-00 00:00:00' OR con.publish_up IS NULL OR con.publish_up
< '" . $now . "') AND (con.publish_down =
'0000-00-00 00:00:00' OR con.publish_down IS NULL OR
con.publish_down > '" . $now . "') ");
$exclude = $this->data->get('easyblogexclude',
'');
if (!empty($exclude)) {
$where[] = ' con.id NOT IN (' . $exclude . ')
';
}
if (!in_array('0', $category)) {
$where[] = 'con.id IN (SELECT post_id FROM
#__easyblog_post_category WHERE category_id in (' .
implode(',', $category) . ')) ';
}
$tags = array_map('intval', explode('||',
$this->data->get('easyblogtags', '0')));
if (!in_array(0, $tags)) {
$where[] = 'con.id IN (SELECT post_id FROM
#__easyblog_post_tag WHERE tag_id IN(' . implode(',', $tags)
. '))';
}
switch ($this->data->get('easyblogfrontpage', 0)) {
case 1:
$where[] = "con.frontpage = 1 ";
break;
case -1:
$where[] = "con.frontpage = 0 ";
break;
}
switch ($this->data->get('easyblogfeatured', 0)) {
case 1:
$where[] = "con.id IN (SELECT content_id FROM
#__easyblog_featured WHERE type = 'post')";
break;
case -1:
$where[] = "con.id NOT IN (SELECT content_id FROM
#__easyblog_featured WHERE type = 'post')";
break;
}
$sourceUserId =
intval($this->data->get('easybloguserid', ''));
if (!empty($sourceUserId)) {
$where[] = 'con.created_by = ' . $sourceUserId .
' ';
}
$where[] = " con.state = 0 ";
if (count($where) > 0) {
$query .= 'WHERE ' . implode(' AND ',
$where) . ' ';
}
$order =
Common::parse($this->data->get('easyblogorder',
'con.title|*|asc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count . ' ';
$result = Database::queryAll($query);
$data = array();
$root = Url::getBaseUri();
for ($i = 0; $i < count($result); $i++) {
$description =
preg_replace('/<script\b[^>]*>(.*?)<\/script>/is',
"", $result[$i]['main_content_of_post']);
$url =
'index.php?option=com_easyblog&view=entry&id=' .
$result[$i]['id'];
if (class_exists('EBR', false)) {
$url = EBR::_($url, true, null, false, false, false);
}
$r = array(
'title' =>
$result[$i]['title'],
'description' => $description,
'url' => $url,
);
if (!empty($result[$i]['image'])) {
$imageUrl = EBMM::getUrl($result[$i]['image']);
$filename = EBMM::getTitle($result[$i]['image']);
$filepath = EBMM::getPath($result[$i]['image']);
if (file_exists($filepath)) {
$fullRoot = '';
$image = $imageUrl;
} else {
$newImageUrl = $this->findImage($filepath,
$imageUrl);
if (!empty($newImageUrl)) {
$fullRoot = str_replace($filename, '',
$newImageUrl);
$image = $filename;
} else {
$fullRoot = $root;
$image = '';
}
}
} else {
$fullRoot = $root;
$image = '';
}
$r['image'] = $r['thumbnail'] =
ImageFallback::fallback(array($image),
array($result[$i]['content']), $fullRoot);
$content =
preg_replace('/<script\b[^>]*>(.*?)<\/script>/is',
"", $result[$i]['content']);
$category_url =
'index.php?option=com_easyblog&view=categories&id=' .
$result[$i]['category_id'];
if (class_exists('EBR', false)) {
$category_url = EBR::_($category_url);
}
$r += array(
'url_label' => n2_('View
post'),
'category_url' => $category_url,
'category_title' =>
$result[$i]['cat_title'],
'blogger' =>
$result[$i]['blogger'],
'created_by_id' =>
$result[$i]['created_by'],
'creation_time' =>
$result[$i]['created'],
'modification_time' =>
$result[$i]['modified'],
'content' => $content,
'latitude' =>
$result[$i]['latitude'],
'longitude' =>
$result[$i]['longitude'],
'address' =>
$result[$i]['address'],
'hits' =>
$result[$i]['hits'],
'category_id' =>
$result[$i]['category_id'],
'id' =>
$result[$i]['id'],
);
if (class_exists('Foundry')) {
$user = Foundry::user($result[$i]['user_id']);
$r += array(
'blogger_avatar_picture' =>
$user->getAvatar("medium"),
'blogger_avatar_picture_small' =>
$user->getAvatar("small"),
'blogger_avatar_picture_square' =>
$user->getAvatar("square"),
'blogger_avatar_picture_large' =>
$user->getAvatar("large"),
);
}
$data[] = $r;
}
return $data;
}
}
PK/C�[�r��?Generator/Joomla/Easydiscuss/Elements/EasydiscussCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easydiscuss\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EasydiscussCategories extends Select {
protected $isMultiple = true;
protected $size = 10;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$menuItems = Database::queryAll('SELECT * FROM
#__discuss_category WHERE published = 1 ORDER BY parent_id, ordering',
false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
$this->options['0'] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}PK/C�[����9Generator/Joomla/Easydiscuss/Elements/EasydiscussTags.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easydiscuss\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EasydiscussTags extends Select {
protected $isMultiple = true;
protected $size = 10;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$menuItems = Database::queryAll('SELECT * FROM #__discuss_tags
WHERE published = 1 ORDER BY id', false, "object");
$this->options['0'] = n2_('All');
if (count($menuItems)) {
foreach ($menuItems AS $option) {
$this->options[$option->id] = $option->title;
}
}
}
}PK0C�[��YY:Generator/Joomla/Easydiscuss/GeneratorGroupEasydiscuss.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easydiscuss;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easydiscuss\Sources\EasydiscussDiscussions;
class GeneratorGroupEasydiscuss extends AbstractGeneratorGroup {
protected $name = 'easydiscuss';
protected $url =
'https://extensions.joomla.org/extensions/extension/communication/question-a-answers/easydiscuss/';
public function getLabel() {
return 'EasyDiscuss';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasyDiscuss');
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_easydiscuss');
}
protected function loadSources() {
new EasydiscussDiscussions($this, 'discussions',
'Discussions');
}
}
GeneratorFactory::addGenerator(new GeneratorGroupEasydiscuss);
PK1C�[�AV�bb?Generator/Joomla/Easydiscuss/Sources/EasydiscussDiscussions.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easydiscuss\Sources;
use JFactory;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easydiscuss\Elements\EasydiscussCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easydiscuss\Elements\EasydiscussTags;
class EasydiscussDiscussions extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasyDiscuss');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EasydiscussCategories($source,
'easydiscusscategories', n2_('Category'), 0);
new EasydiscussTags($source, 'easydiscusstags',
n2_('Tags'), 0);
$limit = $filterGroup->createRow('limit-row');
new Text($limit, 'easydiscussuserid', n2_('User
ID'), '');
new Filter($limit, 'easydiscussfeatured',
n2_('Featured'), 0);
new Filter($limit, 'easydiscussresolved',
n2_('Resolved'), 0);
new OnOff($limit, 'easydiscussmain', n2_('Only main
discussions'), 1);
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'easydiscussorder',
'created|*|desc', array(
'options' => array(
'' => n2_('None'),
'title' => n2_('Title'),
'cattitle' => n2_('Category title'),
'ordering' => n2_('Ordering'),
'created' => n2_('Creation time'),
'modified' => n2_('Modification
time')
)
));
}
protected function _getData($count, $startIndex) {
$category = array_map('intval', explode('||',
$this->data->get('easydiscusscategories', '')));
$where = array("published = '1'");
if (!in_array('0', $category)) {
$where[] = 'category_id IN (' .
implode(',', $category) . ') ';
}
$tags = array_map('intval', explode('||',
$this->data->get('easydiscusstags', '0')));
if (!in_array(0, $tags)) {
$where[] = 'id IN (SELECT post_id FROM
#__discuss_posts_tags WHERE tag_id IN(' . implode(',',
$tags) . ')) ';
}
switch ($this->data->get('easydiscussfeatured', 0))
{
case 1:
$where[] = "featured = 1 ";
break;
case -1:
$where[] = "featured = 0 ";
break;
}
switch ($this->data->get('easydiscussresolved', 0))
{
case 1:
$where[] = "isresolve = 1 ";
break;
case -1:
$where[] = "isresolve = 0 ";
break;
}
$sourceUserId =
intval($this->data->get('easydiscussuserid',
''));
if (!empty($sourceUserId)) {
$where[] = 'user_id = ' . $sourceUserId . '
';
}
$sourceDiscussionMain =
intval($this->data->get('easydiscussmain', ''));
if (!empty($sourceDiscussionMain)) {
$where[] = "parent_id = '0' ";
}
$query = 'SELECT * FROM #__discuss_posts WHERE ' .
implode(' AND ', $where) . ' ';
$order =
Common::parse($this->data->get('easydiscussorder',
'created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count . ' ';
$result = Database::queryAll($query);
$data = array();
for ($i = 0; $i < count($result); $i++) {
$user = JFactory::getUser($result[$i]['user_id']);
$r = array(
'title' =>
$result[$i]['title'],
'description' =>
$result[$i]['content'],
'url' =>
'index.php?option=com_easydiscuss&view=post&id=' .
$result[$i]['id'],
'url_label' => n2_('View
discussion'),
'category_url' =>
'index.php?option=com_easydiscuss&view=categories&layout=listings&category_id='
. $result[$i]['category_id'],
'user_name' => $user->username,
'user_real_name' => $user->name,
'vote' =>
$result[$i]['vote'],
'hits' =>
$result[$i]['hits'],
'number_of_likes' =>
$result[$i]['num_likes'],
'number_of_votes' =>
$result[$i]['sum_totalvote'],
'created' =>
$result[$i]['created'],
'modified' =>
$result[$i]['modified'],
'user_id' =>
$result[$i]['user_id'],
'latitude' =>
$result[$i]['latitude'],
'longitude' =>
$result[$i]['longitude'],
'parent_id' =>
$result[$i]['parent_id'],
'category_id' =>
$result[$i]['category_id'],
'id' =>
$result[$i]['id']
);
$r['image'] = $r['thumbnail'] =
ImageFallback::fallback(array(), array($result[$i]['content']));
$data[] = $r;
}
return $data;
}
}
PK1C�[=�CC=Generator/Joomla/Easysocial/Elements/EasysocialCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EasysocialCategories extends Select {
protected $table = '';
protected $typeDb = '';
protected $clusterType = '';
protected $orderBy = 'ordering, id';
protected $ini = false;
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
if (!empty($this->typeDb)) {
$typeDb = "AND type='" . $this->typeDb .
"'";
} else {
$typeDb = '';
}
if (!empty($this->clusterType)) {
$cluserType = "AND cluster_type='" .
$this->clusterType . "'";
} else {
$cluserType = '';
}
$categories = Database::queryAll("SELECT * FROM #__" .
$this->table . " WHERE state = 1 " . $typeDb . $cluserType .
" ORDER BY " . $this->orderBy, false, "object");
$this->options[0] = n2_('All');
if (count($categories)) {
foreach ($categories AS $category) {
$this->options[$category->id] =
$this->runIni($category->title);
}
}
}
public function setTable($table) {
$this->table = $table;
}
public function setTypeDb($typeDb) {
$this->typeDb = $typeDb;
}
public function setClusterType($clusterType) {
$this->clusterType = $clusterType;
}
public function setOrderBy($orderBy) {
$this->orderBy = $orderBy;
}
public function setIni($ini) {
$this->ini = true;
}
private function runIni($title) {
if ($this->ini &&
function_exists('parse_ini_file')) {
$language = parse_ini_file(JPATH_ROOT .
'/language/en-GB/en-GB.com_easysocial.ini');
if (isset($language[$title])) {
return $language[$title];
} else {
return $title;
}
} else {
return $title;
}
}
}PK1C�[����8Generator/Joomla/Easysocial/GeneratorGroupEasysocial.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources\EasysocialAlbums;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources\EasysocialEvents;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources\EasysocialGroups;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources\EasysocialPages;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources\EasysocialUsers;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources\EasysocialVideos;
class GeneratorGroupEasysocial extends AbstractGeneratorGroup {
protected $name = 'easysocial';
protected $url =
'https://extensions.joomla.org/extension/easysocial/';
public function getLabel() {
return 'EasySocial';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasySocial');
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_easysocial');
}
protected function loadSources() {
new EasysocialEvents($this, 'events',
n2_('Events'));
new EasysocialGroups($this, 'groups',
n2_('Groups'));
new EasysocialAlbums($this, 'albums',
n2_('Albums'));
new EasysocialVideos($this, 'videos',
n2_('Videos'));
new EasysocialPages($this, 'pages',
n2_('Pages'));
new EasysocialUsers($this, 'users',
n2_('Users'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupEasysocial);
PK1C�[��"i i
8Generator/Joomla/Easysocial/Sources/EasysocialAlbums.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources;
use ES;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Elements\EasysocialCategories;
class EasysocialAlbums extends AbstractGenerator {
protected $layout = 'image';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasySocial ' . n2_('Albums'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EasysocialCategories($source, 'easysocialgroups',
n2_('Groups'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' => 'social_clusters',
'clusterType' => 'group',
'orderBy' => 'id'
));
new EasysocialCategories($source, 'easysocialevents',
n2_('Events'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' => 'social_clusters',
'clusterType' => 'event',
'orderBy' => 'id'
));
new EasysocialCategories($source, 'easysocialpages',
n2_('Pages'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' => 'social_clusters',
'clusterType' => 'page',
'orderBy' => 'id'
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'featured', n2_('Featured'),
0);
new Text($limit, 'albumtitle', 'Album title',
'*');
new Filter($limit, 'avatarandcover', 'Include avatar
and cover images', 0);
new Text($limit, 'allowed-users', n2_('Allowed user
IDs'), '', array(
'tipLabel' => n2_('Allowed user
IDs'),
'tipDescription' => n2_('Separate them by
comma.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1887-joomla-easysocial-generator#allowed-user-ids-50'
));
new Text($limit, 'banned-users', n2_('Banned user
IDs'), '', array(
'tipLabel' => n2_('Allowed user
IDs'),
'tipDescription' => n2_('Separate them by
comma.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1887-joomla-easysocial-generator#banned-user-ids-51'
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'easysocialorder',
'created|*|desc', array(
'options' => array(
'' => n2_('None'),
'title' => n2_('Title'),
'created' => n2_('Creation time'),
'id' => 'ID'
)
));
}
protected function _getData($count, $startIndex) {
$groups = array_map('intval', explode('||',
$this->data->get('easysocialgroups', '0')));
$events = array_map('intval', explode('||',
$this->data->get('easysocialevents', '0')));
$pages = array_map('intval', explode('||',
$this->data->get('easysocialpages', '0')));
if (!in_array('0', $groups) &&
!in_array('0', $events) && !in_array('0',
$pages)) {
$clusters = array_merge($groups, $events, $pages);
} else {
$cluster_helper = array();
if (!in_array('0', $groups)) {
$cluster_helper = array_merge($cluster_helper, $groups);
}
if (!in_array('0', $events)) {
$cluster_helper = array_merge($cluster_helper, $events);
}
if (!in_array('0', $pages)) {
$cluster_helper = array_merge($cluster_helper, $pages);
}
$clusters = $cluster_helper;
}
if (in_array('0', $groups) &&
in_array('0', $events) && in_array('0',
$pages)) {
$all = "OR uid IN (SELECT id FROM #__social_clusters WHERE
cluster_type = 'group' OR cluster_type = 'event' OR
cluster_type = 'page')";
} else if (in_array('0', $groups) &&
in_array('0', $events)) {
$all = "OR uid IN (SELECT id FROM #__social_clusters WHERE
cluster_type = 'group' OR cluster_type =
'event')";
} else if (in_array('0', $groups) &&
in_array('0', $pages)) {
$all = "OR uid IN (SELECT id FROM #__social_clusters WHERE
cluster_type = 'group' OR cluster_type = 'page')";
} else if (in_array('0', $events) &&
in_array('0', $pages)) {
$all = "OR uid IN (SELECT id FROM #__social_clusters WHERE
cluster_type = 'event' OR cluster_type = 'page')";
} else if (in_array('0', $pages)) {
$all = "OR uid IN (SELECT id FROM #__social_clusters WHERE
cluster_type = 'page')";
} else if (in_array('0', $events)) {
$all = "OR uid IN (SELECT id FROM #__social_clusters WHERE
cluster_type = 'event')";
} else if (in_array('0', $groups)) {
$all = "OR uid IN (SELECT id FROM #__social_clusters WHERE
cluster_type = 'group')";
}
$albumWhere = array("1=1");
if (!empty($clusters)) {
$albumWhere[] = "(uid IN (" . implode(',',
$clusters) . ") " . $all . ")";
}
if ($this->data->get('avatarandcover',
'0') == '0') {
$albumWhere[] = "title =
'COM_EASYSOCIAL_ALBUMS_PROFILE_AVATAR' OR title =
'COM_EASYSOCIAL_ALBUMS_PROFILE_COVER'";
} elseif ($this->data->get('avatarandcover',
'0') == '-1') {
$albumWhere[] = "title <>
'COM_EASYSOCIAL_ALBUMS_PROFILE_AVATAR' AND title <>
'COM_EASYSOCIAL_ALBUMS_PROFILE_COVER'";
}
$albumTitle = $this->data->get('albumtitle',
'*');
if ($albumTitle != '*' && !empty($albumTitle)) {
$albumWhere[] = "title = '" . $albumTitle .
"'";
}
$allowedUsers = $this->data->get('allowed-users',
'');
if (!empty($allowedUsers)) {
$albumWhere[] = "user_id IN (" . $allowedUsers .
")";
}
$bannedUsers = $this->data->get('banned-users',
'');
if (!empty($bannedUsers)) {
$albumWhere[] = "user_id NOT IN (" . $bannedUsers .
")";
}
$where = array(
"album_id IN (SELECT id FROM #__social_albums WHERE
" . implode(' AND ', $albumWhere) . ")",
"state = 1"
);
switch ($this->data->get('featured', 0)) {
case 1:
$where[] = 'featured = 1';
break;
case -1:
$where[] = 'featured = 0';
break;
}
$query = "SELECT
id, title
FROM #__social_photos
WHERE " . implode(' AND ', $where);
$order =
Common::parse($this->data->get('easysocialorder',
'created|*|desc'));
if ($order[0]) {
$query .= ' ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= " LIMIT " . $startIndex . ", " .
$count;
$result = Database::queryAll($query);
$data = array();
// EasySocial quote: "Prior to ES 2.0, we no longer use square
and featured as image variation". This is why the photos are returning
thumbnail and large images.
$photo = ES::table('Photo');
for ($i = 0; $i < count($result); $i++) {
$photo->load($result[$i]['id']);
$r = array(
'title' => $result[$i]['title'],
'image' =>
$photo->getSource('original'),
'thumbnail' =>
$photo->getSource('thumbnail'),
'square' =>
$photo->getSource('square'),
'featured' =>
$photo->getSource('featured'),
'large' =>
$photo->getSource('large'),
'stock' =>
$photo->getSource('stock')
);
$data[] = $r;
}
return $data;
}
}
PK1C�[��,ށ(�(8Generator/Joomla/Easysocial/Sources/EasysocialEvents.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources;
use ES;
use FRoute;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Elements\EasysocialCategories;
class EasysocialEvents extends AbstractGenerator {
protected $layout = 'event';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasySocial ' . n2_('Events'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EasysocialCategories($source, 'easysocialcategories',
n2_('Categories'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' =>
'social_clusters_categories',
'typeDb' => 'event'
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'started', n2_('Started'),
0);
new Filter($limit, 'ended', n2_('Ended'), -1);
new Filter($limit, 'allday', n2_('All day'),
0);
new Filter($limit, 'recurring', n2_('Recurring
events'), 0);
new Filter($limit, 'featured', n2_('Featured'),
0);
new Select($limit, 'eventtype', n2_('Type'), 0,
array(
'options' => array(
'0' => n2_('All'),
'1' => n2_('Open'),
'2' => n2_('Closed'),
'3' => n2_('Invite only')
)
));
new Text($limit, 'location', n2_('Location'),
'*');
new Text($limit, 'allowed-users', n2_('Allowed user
IDs'), '', array('tipLabel' =>
n2_('Allowed user IDs'), 'tipDescription' =>
n2_('Pull posts only from these users. Separate them by comma.')
));
new Text($limit, 'banned-users', n2_('Banned user
IDs'), '', array('tipLabel' => n2_('Banned
user IDs'), 'tipDescription' => n2_('Do not pull
posts from these users. Separate them by comma.') ));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'easysocialorder',
'b.start|*|asc', array(
'options' => array(
'' => n2_('None'),
'a.title' => n2_('Title'),
'a.created' => n2_('Creation time'),
'b.start' => n2_('Start time'),
'b.end' => n2_('End time'),
'a.id' => 'ID'
)
));
}
private function formatDate($datetime, $dateOrTime = 0) {
switch ($dateOrTime) {
case 0:
$dot = 'Y-m-d';
break;
case 1:
$dot = 'H:i:s';
break;
}
if ($dateOrTime == 1 || $datetime != '0000-00-00
00:00:00') {
return date($dot, strtotime($datetime));
} else {
return '0000-00-00';
}
}
protected function _getData($count, $startIndex) {
$where = array(
"a.cluster_type = 'event'",
"a.state = '1'"
);
$category = array_map('intval', explode('||',
$this->data->get('easysocialcategories', '')));
if (!in_array('0', $category)) {
$where[] = 'a.category_id IN (' .
implode(',', $category) . ')';
}
$today = date('Y-m-d h:i:s', time());
switch ($this->data->get('started', '0'))
{
case 1:
$where[] = "b.start < '" . $today .
"'";
break;
case -1:
$where[] = "b.start >= '" . $today .
"'";
break;
}
switch ($this->data->get('ended', '-1'))
{
case 1:
$where[] = "(b.end < '" . $today .
"' AND b.end <> '0000-00-00 00:00:00')";
break;
case -1:
$where[] = "(b.end >= '" . $today .
"' OR b.end = '0000-00-00 00:00:00')";
break;
}
switch ($this->data->get('allday', 0)) {
case 1:
$where[] = 'b.all_day = 1';
break;
case -1:
$where[] = 'b.all_day = 0';
break;
}
switch ($this->data->get('recurring', 0)) {
case 0:
$groupby = 'GROUP BY a.id ';
break;
case 1:
$where[] = 'a.parent_id <> 0';
$groupby = 'GROUP BY a.parent_id ';
break;
case -1:
$where[] = 'a.parent_id = 0';
$groupby = 'GROUP BY a.id ';
break;
}
switch ($this->data->get('featured', 0)) {
case 1:
$where[] = 'a.featured = 1';
break;
case -1:
$where[] = 'a.featured = 0';
break;
}
$typeDb = $this->data->get('eventtype', 0);
if ($typeDb != 0) {
$where[] = 'a.type = ' . $typeDb;
}
$location = $this->data->get('location',
'*');
if ($location != '*' && !empty($location)) {
$where[] = "a.address = '" . $location .
"'";
}
$allowedUsers = $this->data->get('allowed-users',
'');
if (!empty($allowedUsers)) {
$where[] = "a.creator_uid IN (" . $allowedUsers .
")";
}
$bannedUsers = $this->data->get('banned-users',
'');
if (!empty($bannedUsers)) {
$where[] = "a.creator_uid NOT IN (" . $bannedUsers .
")";
}
$query = "SELECT
a.title, a.description, a.address, a.longitude,
a.latitude, a.created, a.alias, a.category_id, a.id, a.alias,
b.start, b.end,
c.small, c.medium, c.square, c.large, c.uid,
(SELECT photo_id FROM #__social_covers WHERE uid = a.id
and type='event' LIMIT 1) AS photo_id
FROM #__social_clusters AS a
LEFT JOIN #__social_events_meta AS b ON b.cluster_id =
a.id
LEFT JOIN #__social_avatars AS c ON c.uid = a.id
WHERE " . implode(' AND ', $where) .
" ";
$query .= $groupby;
$order =
Common::parse($this->data->get('easysocialorder',
'b.start|*|asc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
if (!class_exists('FRoute')) {
$file = JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'easysocial.php';
if (file_exists($file)) {
require_once($file);
}
require_once(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'router.php');
}
$urlOptions = array(
'layout' => 'item',
'external' => false,
'sef' => true
);
$avatar = ES::table('Avatar');
$photo = ES::table('Photo');
$data = array();
for ($i = 0; $i < count($result); $i++) {
$urlOptions['id'] = $result[$i]['id'];
$photo->load($result[$i]['photo_id']);
$avatar->load(array(
'uid' => $result[$i]['uid'],
'type' => 'event'
));
$r = array(
'title' =>
$result[$i]['title'],
'description' =>
$result[$i]['description']
);
$r['thumbnail'] =
$photo->getSource('thumbnail');
$r['image'] = ImageFallback::fallback(array(
$photo->getSource('original'),
$photo->getSource('large')
));
if ($r['thumbnail'] == '' &&
$r['image'] != '') {
$thumbnail =
$photo->getSource('thumbnail');
$r['thumbnail'] = !empty($thumbnail) ? $thumbnail
: $r['image'];
}
// EasySocial quote: "Prior to ES 2.0, we no longer use
square and featured as image variation". This is why the photos are
returning thumbnail and large images.
$r += array(
'square_image' =>
$photo->getSource('square'),
'featured_image' =>
$photo->getSource('featured'),
'large_image' =>
$photo->getSource('large'),
'stock_image' =>
$photo->getSource('stock'),
'avatar_small_image' =>
$avatar->getSource('small'),
'avatar_medium_image' =>
$avatar->getSource('medium'),
'avatar_square_image' =>
$avatar->getSource('square'),
'avatar_large_image' =>
$avatar->getSource('large'),
'url' =>
FRoute::events($urlOptions, true),
'start_date' =>
$this->formatDate($result[$i]['start']),
'start_time' =>
$this->formatDate($result[$i]['start'], 1),
'end_date' =>
$this->formatDate($result[$i]['end']),
'end_time' =>
$this->formatDate($result[$i]['end'], 1),
'address' =>
$result[$i]['address'],
'longitude' =>
$result[$i]['longitude'],
'latitude' =>
$result[$i]['latitude'],
'creation_time' =>
$result[$i]['created'],
'alias' =>
$result[$i]['alias'],
'category_id' =>
$result[$i]['category_id'],
'id' =>
$result[$i]['id']
);
$data[] = $r;
}
return $data;
}
}PK1C�[�-��{{8Generator/Joomla/Easysocial/Sources/EasysocialGroups.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources;
use ES;
use FRoute;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Elements\EasysocialCategories;
class EasysocialGroups extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasySocial ' . n2_('Groups'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EasysocialCategories($source, 'easysocialcategories',
n2_('Categories'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' =>
'social_clusters_categories',
'typeDb' => 'group'
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'featured', n2_('Featured'),
0);
new Select($limit, 'grouptype', n2_('Type'), 0,
array(
'options' => array(
'0' => n2_('All'),
'1' => n2_('Open'),
'2' => n2_('Closed'),
'3' => n2_('Invite only')
)
));
new Text($limit, 'allowed-users', n2_('Allowed user
IDs'), '', array('tipLabel' =>
n2_('Allowed user IDs'), 'tipDescription' =>
n2_('Pull posts only from these users. Separate them by comma.')
));
new Text($limit, 'banned-users', n2_('Banned user
IDs'), '', array('tipLabel' => n2_('Banned
user IDs'), 'tipDescription' => n2_('Do not pull
posts from these users. Separate them by comma.') ));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'easysocialorder',
'a.created|*|desc', array(
'options' => array(
'' => n2_('None'),
'a.title' => n2_('Title'),
'a.created' => n2_('Creation time'),
'a.id' => 'ID'
)
));
}
protected function _getData($count, $startIndex) {
$where = array(
"a.parent_id = 0",
"a.cluster_type = 'group'",
"a.state = '1'"
);
$category = array_map('intval', explode('||',
$this->data->get('easysocialcategories', '')));
if (!in_array('0', $category)) {
$where[] = 'a.category_id IN (' .
implode(',', $category) . ')';
}
switch ($this->data->get('featured', 0)) {
case 1:
$where[] = 'a.featured = 1';
break;
case -1:
$where[] = 'a.featured = 0';
break;
}
$typeDb = $this->data->get('grouptype', 0);
if ($typeDb != 0) {
$where[] = 'a.type = ' . $typeDb;
}
$location = $this->data->get('location',
'*');
if ($location != '*' && !empty($location)) {
$where[] = "a.address = '" . $location .
"'";
}
$allowedUsers = $this->data->get('allowed-users',
'');
if (!empty($allowedUsers)) {
$where[] = "a.creator_uid IN (" . $allowedUsers .
")";
}
$bannedUsers = $this->data->get('banned-users',
'');
if (!empty($bannedUsers)) {
$where[] = "a.creator_uid NOT IN (" . $bannedUsers .
")";
}
$query = "SELECT
a.id, a.title, a.description, a.created, a.alias,
a.category_id,
(SELECT photo_id FROM #__social_covers WHERE uid = a.id
and type='group' LIMIT 1) AS photo_id
FROM #__social_clusters AS a
WHERE " . implode(' AND ', $where) .
" ";
$order =
Common::parse($this->data->get('easysocialorder',
'a.created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count . ' ';
$result = Database::queryAll($query);
if (!class_exists('FRoute')) {
if (file_exists(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'easysocial.php')) {
require_once(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'easysocial.php');
}
require_once(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'router.php');
}
$urlOptions = array(
'layout' => 'item',
'external' => false,
'sef' => true
);
$avatar = ES::table('Avatar');
$photo = ES::table('Photo');
$data = array();
for ($i = 0; $i < count($result); $i++) {
$urlOptions['id'] = $result[$i]['id'];
$photo->load($result[$i]['photo_id']);
$avatar->load(array(
'uid' => $result[$i]['id'],
'type' => 'group'
));
$r = array(
'title' =>
$result[$i]['title'],
'description' =>
$result[$i]['description']
);
$photoLarge = $photo->getSource('large');
$avatarLarge = $avatar->getSource('large');
$r['image'] = $r['thumbnail'] =
ImageFallback::fallback(array(
@$photo->getSource('original'),
@$photoLarge,
@$avatarLarge
));
$r += array(
'thumbnail' =>
$photo->getSource('thumbnail'),
'square_image' =>
$photo->getSource('square'),
'featured_image' =>
$photo->getSource('featured'),
'large_image' => $photoLarge,
'stock_image' =>
$photo->getSource('stock'),
'avatar_small_image' =>
$avatar->getSource('small'),
'avatar_medium_image' =>
$avatar->getSource('medium'),
'avatar_square_image' =>
$avatar->getSource('square'),
'avatar_large_image' => $avatarLarge,
'url' =>
FRoute::groups($urlOptions, true),
'creation_time' =>
$result[$i]['created'],
'alias' =>
$result[$i]['alias'],
'category_id' =>
$result[$i]['category_id'],
'id' =>
$result[$i]['id']
);
$data[] = $r;
}
return $data;
}
}PK1C�[�
����7Generator/Joomla/Easysocial/Sources/EasysocialPages.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources;
use ES;
use FRoute;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Elements\EasysocialCategories;
class EasysocialPages extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasySocial ' . n2_('Pages'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EasysocialCategories($source, 'easysocialcategories',
n2_('Categories'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' =>
'social_clusters_categories',
'typeDb' => 'page'
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'featured', n2_('Featured'),
0);
new Text($limit, 'allowed-users', n2_('Allowed user
IDs'), '', array('tipLabel' =>
n2_('Allowed user IDs'), 'tipDescription' =>
n2_('Pull posts only from these users. Separate them by comma.')
));
new Text($limit, 'banned-users', n2_('Banned user
IDs'), '', array('tipLabel' => n2_('Banned
user IDs'), 'tipDescription' => n2_('Do not pull
posts from these users. Separate them by comma.') ));
new Select($limit, 'accesstype', n2_('Type'),
0, array(
'options' => array(
'0' => n2_('All'),
'1' => n2_('Public'),
'2' => n2_('Private'),
'3' => n2_('Invite only')
)
));
new Select($limit, 'notification',
n2_('Notification'), 0, array(
'options' => array(
'0' => n2_('All'),
'1' => n2_('Both'),
'2' => n2_('Email only'),
'3' => n2_('Internal only'),
'4' => n2_('None')
)
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'easysocialorder',
'a.created|*|desc', array(
'options' => array(
'' => n2_('None'),
'a.title' => n2_('Title'),
'a.created' => n2_('Creation time'),
'a.hits' => n2_('Hits'),
'a.id' => 'ID'
)
));
}
protected function _getData($count, $startIndex) {
$where = array(
"a.cluster_type = 'page'",
"a.state = '1'"
);
$category = array_map('intval', explode('||',
$this->data->get('easysocialcategories', '')));
if (!in_array('0', $category)) {
$where[] = 'a.category_id IN (' .
implode(',', $category) . ')';
}
switch ($this->data->get('featured', 0)) {
case 1:
$where[] = 'a.featured = 1';
break;
case -1:
$where[] = 'a.featured = 0';
break;
}
$typeDb = $this->data->get('accesstype', 0);
if ($typeDb != 0) {
$where[] = 'a.type = ' . $typeDb;
}
$typeDb = $this->data->get('notification', 0);
if ($typeDb != 0) {
$where[] = 'a.notification = ' . $typeDb;
}
$allowedUsers = $this->data->get('allowed-users',
'');
if (!empty($allowedUsers)) {
$where[] = "a.creator_uid IN (" . $allowedUsers .
")";
}
$bannedUsers = $this->data->get('banned-users',
'');
if (!empty($bannedUsers)) {
$where[] = "a.creator_uid NOT IN (" . $bannedUsers .
")";
}
$query = "SELECT
a.title, a.description, a.created, a.hits, a.category_id,
a.id, a.alias,
c.small, c.medium, c.square, c.large, c.uid,
(SELECT photo_id FROM #__social_covers WHERE uid = a.id
and type='page' LIMIT 1) AS photo_id
FROM #__social_clusters AS a
LEFT JOIN #__social_avatars AS c ON c.uid = a.id
WHERE " . implode(' AND ', $where) .
" ";
$order =
Common::parse($this->data->get('easysocialorder',
'a.created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
if (!class_exists('FRoute')) {
$file = JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'easysocial.php';
if (file_exists($file)) {
require_once($file);
}
require_once(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'router.php');
}
$urlOptions = array(
'layout' => 'item',
'external' => false,
'sef' => true
);
$avatar = ES::table('Avatar');
$photo = ES::table('Photo');
$data = array();
for ($i = 0; $i < count($result); $i++) {
$urlOptions['id'] = $result[$i]['id'];
$photo->load($result[$i]['photo_id']);
$avatar->load(array(
'uid' => $result[$i]['uid'],
'type' => 'page'
));
$r = array(
'title' =>
$result[$i]['title'],
'description' =>
$result[$i]['description']
);
$r['thumbnail'] =
$photo->getSource('thumbnail');
$r['image'] = ImageFallback::fallback(array(
$photo->getSource('original'),
$photo->getSource('large')
));
if ($r['thumbnail'] == '' &&
$r['image'] != '') {
$thumbnail =
$photo->getSource('thumbnail');
$r['thumbnail'] = !empty($thumbnail) ? $thumbnail
: $r['image'];
}
$r += array(
'large_image' =>
$photo->getSource('large'),
'avatar_small_image' =>
$avatar->getSource('small'),
'avatar_medium_image' =>
$avatar->getSource('medium'),
'avatar_square_image' =>
$avatar->getSource('square'),
'avatar_large_image' =>
$avatar->getSource('large'),
'url' =>
FRoute::pages($urlOptions, true),
'hits' =>
$result[$i]['hits'],
'creation_time' =>
$result[$i]['created'],
'alias' =>
$result[$i]['alias'],
'category_id' =>
$result[$i]['category_id'],
'id' =>
$result[$i]['id']
);
$data[] = $r;
}
return $data;
}
}PK1C�[y Gi%i%7Generator/Joomla/Easysocial/Sources/EasysocialUsers.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources;
use ES;
use Foundry;
use FRoute;
use JRoute;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Elements\EasysocialCategories;
class EasysocialUsers extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasySocial ' . n2_('Users'));
}
private function removeSpaces($str) {
return str_replace(' ', '', $str);
}
private function runIni($title) {
if (function_exists('parse_ini_file')) {
$language = parse_ini_file(JPATH_ROOT .
'/administrator/language/en-GB/en-GB.com_easysocial.ini');
if (isset($language[$title])) {
return $this->removeSpaces($language[$title]);
} else {
return $title;
}
} else {
return $title;
}
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EasysocialCategories($source, 'easysocialprofiles',
n2_('Profiles'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' => 'social_profiles'
));
new EasysocialCategories($source, 'easysocialbadges',
n2_('Badges'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' => 'social_badges',
'orderBy' => 'id',
'ini' => 1
));
$limit = $filterGroup->createRow('limit-row');
new Text($limit, 'maxphotos', 'Max photos asked down
per user', '3');
new Text($limit, 'allowed-users', n2_('Allowed user
IDs'), '', array(
'tipLabel' => n2_('Allowed user
IDs'),
'tipDescription' => n2_('Pull posts only from
these users. Separate them by comma.')
));
new Text($limit, 'banned-users', n2_('Banned user
IDs'), '', array(
'tipLabel' => n2_('Banned user
IDs'),
'tipDescription' => n2_('Do not pull posts
from these users. Separate them by comma.')
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'easysocialorder',
'u.registerDate|*|desc', array(
'options' => array(
'' => n2_('None'),
'u.registerDate' => n2_('Register
date'),
'u.lastvisitDate' => n2_('Last visit
date'),
'points' => n2_('Points'),
'u.name' => n2_('Name'),
'u.id' => 'ID'
)
));
}
protected function _getData($count, $startIndex) {
$where = array(
"su.state <> '0'"
);
$profiles = array_map('intval', explode('||',
$this->data->get('easysocialprofiles', '')));
if (!in_array('0', $profiles)) {
$where[] = 'spm.profile_id IN (' .
implode(',', $profiles) . ')';
}
$badges = array_map('intval', explode('||',
$this->data->get('easysocialbadges', '')));
if (!in_array('0', $badges)) {
$where[] = 'u.id IN (SELECT user_id FROM
#__social_badges_maps WHERE badge_id IN (' . implode(',',
$badges) . '))';
}
$allowedUsers = $this->data->get('allowed-users',
'');
if (!empty($allowedUsers)) {
$where[] = "u.id IN (" . $allowedUsers .
")";
}
$bannedUsers = $this->data->get('banned-users',
'');
if (!empty($bannedUsers)) {
$where[] = "u.id NOT IN (" . $bannedUsers .
")";
}
$query = "SELECT u.name, u.username, u.email, u.id,
SUM(sph.points) AS points FROM #__social_users AS su
LEFT JOIN #__users AS u ON u.id = su.user_id
LEFT JOIN #__social_profiles_maps AS spm ON spm.user_id =
su.user_id
LEFT JOIN #__social_points_history AS sph ON sph.user_id
= su.user_id
WHERE " . implode(' AND ', $where) .
" ";
$order =
Common::parse($this->data->get('easysocialorder',
'u.registerDate|*|desc'));
if ($order[0]) {
$query .= 'GROUP BY su.user_id ORDER BY ' . $order[0]
. ' ' . $order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
if (!class_exists('FRoute')) {
$file = JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'easysocial.php';
if (file_exists($file)) {
require_once($file);
}
require_once(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_easysocial' .
DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR .
'router.php');
}
$avatar = ES::table('Avatar');
$photo = ES::table('Photo');
$maxPhotos =
intval(Common::parse($this->data->get('maxphotos',
'3')));
$data = array();
for ($i = 0; $i < count($result); $i++) {
$r = array(
'title' => $result[$i]['name'],
'name' => $result[$i]['name'],
'username' =>
$result[$i]['username'],
'email' => $result[$i]['email'],
'id' => $result[$i]['id']
);
if (!empty($result[$i]['points'])) {
$r['points'] = $result[$i]['points'];
} else {
$r['points'] = 0;
}
$query = "SELECT id FROM #__social_photos WHERE uid =
'" . $result[$i]['id'] . "' ORDER BY id
DESC";
if (!empty($maxPhotos)) {
$query .= " LIMIT " . $maxPhotos;
}
$photo_ids = Database::queryAll($query);
$j = 0;
foreach ($photo_ids as $photo_id) {
$j++;
$photo->load($photo_id);
$original =
$photo->getSource('original');
$large = $photo->getSource('large');
$thumbnail =
$photo->getSource('thumbnail');
$r += array(
'photo' . $j . '_original' =>
$original,
'photo' . $j . '_large' =>
$large,
'photo' . $j . '_thumbnail' =>
$thumbnail,
);
$r['image'] = $original;
$r['thumbnail'] = $thumbnail;
}
$avatar->load(array(
'uid' => $result[$i]['id'],
'type' => 'user'
));
if ($avatar->uid == $result[$i]['id']) {
$avatar_small = $avatar->getSource('small');
$avatar_medium = $avatar->getSource('medium');
$avatar_square = $avatar->getSource('square');
$avatar_large = $avatar->getSource('large');
if (empty($r['image'])) {
$r['image'] = $avatar_large;
}
if (empty($r['thumbnail'])) {
$r['thumbnail'] = $avatar_square;
}
$r += array(
'avatar_small_image' => $avatar_small,
'avatar_medium_image' => $avatar_medium,
'avatar_square_image' => $avatar_square,
'avatar_large_image' => $avatar_large
);
}
$user = Foundry::user($result[$i]['id']);
$r += array(
'url' =>
JRoute::_($user->getPermalink('', true))
);
$query = "SELECT sf.title, sfd.datakey, sfd.data FROM
#__social_fields_data AS sfd LEFT JOIN #__social_fields AS sf ON
sfd.field_id = sf.id WHERE uid = '" . $result[$i]['id']
. "' AND type = 'user'";
$user_datas = Database::queryAll($query);
$j = 0;
foreach ($user_datas as $user_data) {
if (!empty($user_data['title'])) {
$user_data['title'] =
$this->removeSpaces($this->runIni($user_data['title']));
}
if (!empty($user_data['datakey'])) {
$user_data['datakey'] =
$this->removeSpaces($user_data['datakey']);
$r += array(
$user_data['title'] . '_' .
$user_data['datakey'] => $user_data['data']
);
} else if (!empty($user_data['data']) &&
!empty($user_data['title'])) {
$r += array(
$user_data['title'] =>
$user_data['data']
);
} else if (!empty($user_data['data'])) {
$j++;
$r += array(
'user_data' . $j =>
$user_data['data']
);
}
}
$data[] = $r;
}
return $data;
}
}PK1C�[&-���8Generator/Joomla/Easysocial/Sources/EasysocialVideos.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Sources;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Easysocial\Elements\EasysocialCategories;
class EasysocialVideos extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EasySocial ' . n2_('Videos'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EasysocialCategories($source, 'easysocialcategories',
n2_('Categories'), 0, array(
'isMultiple' => true,
'size' => 10,
'table' =>
'social_videos_categories'
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'featured', n2_('Featured'),
0);
new Text($limit, 'allowed-users', n2_('Allowed user
IDs'), '', array('tipLabel' =>
n2_('Allowed user IDs'), 'tipDescription' =>
n2_('Pull posts only from these users. Separate them by comma.')
));
new Text($limit, 'banned-users', n2_('Banned user
IDs'), '', array('tipLabel' => n2_('Banned
user IDs'), 'tipDescription' => n2_('Do not pull
posts from these users. Separate them by comma.') ));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'easysocialorder',
'created|*|desc', array(
'options' => array(
'' => n2_('None'),
'title' => n2_('Title'),
'created' => n2_('Creation time'),
'id' => 'ID'
)
));
}
protected function _getData($count, $startIndex) {
$where = array(
"state = '1'"
);
$category = array_map('intval', explode('||',
$this->data->get('easysocialcategories', '')));
if (!in_array('0', $category)) {
$where[] = 'category_id IN (' .
implode(',', $category) . ')';
}
switch ($this->data->get('featured', 0)) {
case 1:
$where[] = 'featured = 1';
break;
case -1:
$where[] = 'featured = 0';
break;
}
$allowedUsers = $this->data->get('allowed-users',
'');
if (!empty($allowedUsers)) {
$where[] = "user_id IN (" . $allowedUsers .
")";
}
$bannedUsers = $this->data->get('banned-users',
'');
if (!empty($bannedUsers)) {
$where[] = "user_id NOT IN (" . $bannedUsers .
")";
}
$query = "SELECT * FROM #__social_videos WHERE " .
implode(' AND ', $where) . " ";
$order =
Common::parse($this->data->get('easysocialorder',
'created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
$data = array();
for ($i = 0; $i < count($result); $i++) {
$r = array(
'video' =>
$result[$i]['path'],
'title' =>
$result[$i]['title'],
'description' =>
$result[$i]['description'],
'hits' =>
$result[$i]['hits'],
'thumbnail' =>
!empty($result[$i]['thumbnail']) ? '$/' .
$result[$i]['thumbnail'] : '',
'id' => $result[$i]['id']
);
$data[] = $r;
}
return $data;
}
}
PK1C�[�\7��3Generator/Joomla/Eshop/Elements/EshopCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EshopCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT a.id AS id, a.category_parent_id AS
parent_id, b.category_name AS title
FROM #__eshop_categories AS a
LEFT JOIN #__eshop_categorydetails AS b ON a.id =
b.category_id
WHERE a.published = 1
ORDER BY parent_id';
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
$this->options[0] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK1C�[S��F009Generator/Joomla/Eshop/Elements/EshopCategoryLanguage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EshopCategoryLanguage extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT language
FROM #__eshop_categorydetails
GROUP BY language';
$languages = Database::queryAll($query, false, "object");
$this->options[0] = n2_('Default');
if (count($languages)) {
foreach ($languages AS $language) {
$this->options[$language->language] =
$language->language;
}
}
}
}
PK1C�[Fm�-1Generator/Joomla/Eshop/Elements/EshopCurrency.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EshopCurrency extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT currency_code
FROM #__eshop_currencies
ORDER BY id';
$codes = Database::queryAll($query, false, "object");
$this->options[0] = n2_('Default');
if (count($codes)) {
foreach ($codes AS $code) {
$this->options[$code->currency_code] =
$code->currency_code;
}
}
}
}
PK1C�[@]�U77=Generator/Joomla/Eshop/Elements/EshopManufacturerLanguage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EshopManufacturerLanguage extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT language
FROM #__eshop_manufacturerdetails
GROUP BY language';
$languages = Database::queryAll($query, false, "object");
$this->options[0] = n2_('Default');
if (count($languages)) {
foreach ($languages AS $language) {
$this->options[$language->language] =
$language->language;
}
}
}
}
PK1C�[n�]dvv6Generator/Joomla/Eshop/Elements/EshopManufacturers.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EshopManufacturers extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT manufacturer_name, manufacturer_id
FROM #__eshop_manufacturerdetails
ORDER BY manufacturer_id';
$manufacturers = Database::queryAll($query, false,
"object");
$this->options[0] = n2_('All');
if (count($manufacturers)) {
foreach ($manufacturers AS $manufacturer) {
$this->options[$manufacturer->manufacturer_id] =
$manufacturer->manufacturer_name;
}
}
}
}
PK1C�[>a��--8Generator/Joomla/Eshop/Elements/EshopProductLanguage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EshopProductLanguage extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT language
FROM #__eshop_productdetails
GROUP BY language';
$languages = Database::queryAll($query, false, "object");
$this->options[0] = n2_('Default');
if (count($languages)) {
foreach ($languages AS $language) {
$this->options[$language->language] =
$language->language;
}
}
}
}
PK1C�[{����-Generator/Joomla/Eshop/Elements/EshopTags.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EshopTags extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT tag_name, id
FROM #__eshop_tags
ORDER BY id';
$tags = Database::queryAll($query, false, "object");
$this->options[0] = n2_('All');
if (count($tags)) {
foreach ($tags AS $tag) {
$this->options[$tag->id] = $tag->tag_name;
}
}
}
}
PK1C�[�g"W.Generator/Joomla/Eshop/GeneratorGroupEshop.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Sources\EshopProducts;
class GeneratorGroupEshop extends AbstractGeneratorGroup {
protected $name = 'eshop';
protected $url =
'https://extensions.joomla.org/extension/e-commerce/shopping-cart/eshop/';
public function getLabel() {
return 'EShop';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EShop');
}
public function isInstalled() {
return Filesystem::existsFile(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_eshop' . DIRECTORY_SEPARATOR . 'eshop.php');
}
protected function loadSources() {
new EshopProducts($this, 'products',
n2_('Products'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupEshop);
PK1C�[�hM�?�?0Generator/Joomla/Eshop/Sources/EshopProducts.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Sources;
use EshopHelper;
use EshopRoute;
use JFactory;
use JRoute;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements\EshopCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements\EshopCategoryLanguage;
use Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements\EshopCurrency;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements\EshopManufacturerLanguage;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements\EshopManufacturers;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements\EshopProductLanguage;
use Nextend\SmartSlider3Pro\Generator\Joomla\Eshop\Elements\EshopTags;
class EshopProducts extends AbstractGenerator {
protected $layout = 'product';
var $leftSymbol;
var $rightSymbol;
var $decimalPlace;
var $currentTime;
var $exchangeValue;
var $decimalPoint;
var $thousandsSeparator;
var $categoryTree;
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'EShop');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EshopCategories($source, 'eshopsourcecategories',
n2_('Categories'), 0, array(
'isMultiple' => true
));
new EshopManufacturers($source,
'eshopsourcemanufacturers', n2_('Manufacturer'), 0,
array(
'isMultiple' => true
));
new EshopTags($source, 'eshopsourcetags',
n2_('Tags'), 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'eshopsourcefeatured',
n2_('Featured'), 0);
new Filter($limit, 'eshopsourcediscount', n2_('On
discount'), 0);
new Filter($limit, 'eshopsourceinstock', n2_('In
stock'), 0);
new OnOff($limit, 'eshopsourcesubcategory',
n2_('Include subcategories'), 0);
$language = $filterGroup->createRow('language');
new EshopCurrency($language, 'eshopsourcecurrencycode',
n2_('Currency'), 0);
new EshopProductLanguage($language,
'eshopsourceproductlanguage', n2_('Product language'),
0);
new EshopCategoryLanguage($language,
'eshopsourcecategorylanguage', n2_('Category
language'), 0);
new EshopManufacturerLanguage($language,
'eshopsourcemanufacturerlanguage', n2_('Manufacturer
language'), 0);
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'eshoporder',
'p.created_date|*|desc', array(
'options' => array(
'' => n2_('None'),
'p.product_price' => n2_('Price'),
'pd.product_name' => n2_('Product
name'),
'p.ordering' =>
n2_('Ordering'),
'p.hits' => n2_('Hits'),
'p.created_date' => n2_('Creation
time'),
'p.modified_date' => n2_('Modification
time'),
'p.id' => n2_('Product
ID')
)
));
}
protected function resetState() {
$this->leftSymbol = '';
$this->rightSymbol = '';
$this->decimalPlace = '';
$this->currentTime = '';
$this->exchangeValue = '';
$this->decimalPoint = '';
$this->thousandsSeparator = '';
$this->categoryTree = array();
}
function setCurrencyDetails($left, $right, $dec, $point, $thou, $now,
$exchange) {
$this->leftSymbol = $left;
$this->rightSymbol = $right;
$this->decimalPlace = $dec;
$this->decimalPoint = $point;
$this->thousandsSeparator = $thou;
$this->currentTime = $now;
$this->exchangeValue = $exchange;
}
function decimals($var) {
if (!empty($this->decimalPlace)) {
return number_format($var, $this->decimalPlace,
$this->decimalPoint, $this->thousandsSeparator);
} else {
return round($var);
}
}
function createPrice($product_price, $discount_price = null,
$discount_date_start = null, $discount_date_end = null, $symbol = true) {
if ($symbol) {
$price = $this->leftSymbol;
} else {
$price = '';
}
if (!empty($discount_price)) {
if (($discount_date_start == '0000-00-00 00:00:00' ||
$discount_date_start <= $this->currentTime) &&
($discount_date_end == '0000-00-00 00:00:00' ||
$discount_date_end > $this->currentTime)) {
$product_price = $discount_price;
}
}
$product_price = $this->exchangeValue * $product_price;
$price .= $this->decimals($product_price);
$price .= $this->rightSymbol;
return $price;
}
function buildCategoryTree($categoryID) {
$categories = EshopHelper::getCategories($categoryID);
if (!empty($categories)) {
foreach ($categories as $cat) {
$this->categoryTree[] = $cat->id;
$this->buildCategoryTree($cat->id);
}
}
}
protected function _getData($count, $startIndex) {
if (!class_exists('EshopRoute')) {
require_once(JPATH_SITE .
'/components/com_eshop/helpers/helper.php');
require_once(JPATH_SITE .
'/components/com_eshop/helpers/route.php');
}
$categories = array_map('intval', explode(' ||
', $this->data->get('eshopsourcecategories',
'0')));
$manufacturers = array_map('intval', explode(' ||
', $this->data->get('eshopsourcemanufacturers',
'0')));
$tags = array_map('intval', explode(' ||
', $this->data->get('eshopsourcetags',
'0')));
if ($this->data->get('eshopsourcesubcategory',
'0') == 1) {
foreach ($categories as $cat) {
$this->buildCategoryTree($cat);
}
$categories = $this->categoryTree;
}
$where = array('p . published = 1');
if (!in_array(0, $categories) && count($categories) > 0)
{
$where[] = 'pc . category_id IN(' . implode(',
', $categories) . ') ';
}
if (!in_array(0, $manufacturers) && count($manufacturers)
> 0) {
$where[] = 'p . manufacturer_id IN(' .
implode(', ', $manufacturers) . ') ';
}
if (!in_array(0, $tags) && count($tags) > 0) {
$where[] = 'pt . tag_id IN(' . implode(',
', $tags) . ') ';
}
switch ($this->data->get('eshopsourcefeatured', 0))
{
case 1:
$where[] = 'p . product_featured = 1 ';
break;
case -1:
$where[] = 'p . product_featured = 0 ';
break;
}
$jNow = JFactory::getDate();
$now = $jNow->toSql();
switch ($this->data->get('eshopsourcediscount', 0))
{
case 1:
$where[] = "p.id IN (SELECT product_id FROM
#__eshop_productdiscounts WHERE
date_start = '0000-00-00 00:00:00' OR date_start IS NULL
OR date_start <= '" . $now . "' AND date_end =
'0000-00-00 00:00:00' OR date_end IS NULL OR date_end >
'" . $now . "') ";
break;
case -1:
$where[] = "p.id NOT IN (SELECT product_id FROM
#__eshop_productdiscounts WHERE
date_start = '0000-00-00 00:00:00' OR date_start IS NULL
OR date_start <= '" . $now . "' AND date_end =
'0000-00-00 00:00:00' OR date_end IS NULL OR date_end >
'" . $now . "') ";
break;
}
switch ($this->data->get('eshopsourceinstock', 0))
{
case 1:
$where[] = "p.product_quantity > 0";
break;
case -1:
$where[] = "product_quantity = 0";
break;
}
$prodLang =
$this->data->get('eshopsourceproductlanguage',
'');
if (!empty($prodLang)) {
$where[] = "pd.language = '" . $prodLang .
"'";
}
$catLang =
$this->data->get('eshopsourcecategorylanguage',
'');
if (!empty($catLang)) {
$where[] = "cd.language = '" . $catLang .
"'";
}
$manLang =
$this->data->get('eshopsourcemanufacturerlanguage',
'');
if (!empty($manLang)) {
$where[] = "md.language = '" . $manLang .
"'";
}
$currencyCode =
$this->data->get('eshopsourcecurrencycode', '');
if (!empty($currencyCode)) {
$where[] = "cu.currency_code = '" .
$currencyCode . "'";
} else {
$where[] = "cu.currency_code = (SELECT config_value FROM
#__eshop_configs WHERE config_key = 'default_currency_code' LIMIT
1)";
}
$query = "SELECT *, cow.config_value AS image_thumb_width,
coh.config_value AS image_thumb_height, p.id AS id
FROM #__eshop_products AS p
LEFT JOIN #__eshop_productcategories AS pc ON p.id =
pc.product_id
LEFT JOIN #__eshop_productdetails AS pd ON p.id =
pd.product_id
LEFT JOIN #__eshop_productimages AS pi ON p.id =
pi.product_id
LEFT JOIN #__eshop_productdiscounts AS pdi ON p.id =
pdi.product_id
LEFT JOIN #__eshop_producttags as pt ON p.id =
pt.product_id
LEFT JOIN #__eshop_categories as c ON c.id =
pc.category_id
LEFT JOIN #__eshop_categorydetails as cd ON
cd.category_id = pc.category_id
LEFT JOIN #__eshop_manufacturers as m ON
p.manufacturer_id = m.id
LEFT JOIN #__eshop_manufacturerdetails AS md ON
p.manufacturer_id = md.manufacturer_id
CROSS JOIN #__eshop_currencies AS cu
CROSS JOIN #__eshop_configs AS cow
CROSS JOIN #__eshop_configs AS coh
WHERE cow.config_key = 'image_thumb_width' AND
coh.config_key = 'image_thumb_height' AND " . implode('
AND ', $where) . " ";
$order =
Common::parse($this->data->get('eshoporder',
'p.created_date|*|desc'));
if ($order[0]) {
$query .= 'GROUP BY p.id ORDER BY ' . $order[0] .
' ' . $order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count . ' ';
$result = Database::queryAll($query);
$query = 'SELECT tax_rate FROM #__eshop_taxes';
$taxes = Database::queryAll($query);
$data = array();
foreach ($result as $res) {
$this->setCurrencyDetails($res['left_symbol'],
$res['right_symbol'], $res['decimal_place'],
$res['decimal_symbol'], $res['thousands_separator'],
$now, $res['exchanged_value']);
$r = array(
'title' =>
$res['product_name'],
'url' =>
JRoute::_(EshopRoute::getProductRoute($res['id'],
$res['category_id'])),
'description' =>
$res['product_desc'],
'short_description' =>
$res['product_short_desc']
);
$r['image'] = ImageFallback::fallback(array(
!empty($res['product_image']) ?
'media/com_eshop/products/' . $res['product_image'] :
''
), array($res['product_desc']));
$reSized = explode('.',
$res['product_image']);
if (count($reSized) == 2 && file_exists(JPATH_ROOT .
'/media/com_eshop/products/resized/' . $reSized[0] .
'-' . $res['image_thumb_width'] . 'x' .
$res['image_thumb_height'] . '.' . $reSized[1])) {
$r['thumbnail'] =
ResourceTranslator::urlToResource(JPATH_ROOT .
'media/com_eshop/products/resized/' . $reSized[0] . '-'
. $res['image_thumb_width'] . 'x' .
$res['image_thumb_height'] . '.' . $reSized[1]);
} else {
$r['thumbnail'] = $r['image'];
}
$r += array(
'price' =>
$this->createPrice($res['product_price']),
'price_without_currency_symbol' =>
$this->createPrice($res['product_price'], null, null, null,
false),
'discount_price' =>
$this->createPrice($res['price']),
'discount_price_without_currency_symbol' =>
$this->createPrice($res['price'], null, null, null, false),
'id' =>
$res['id'],
'product_sku' =>
$res['product_sku'],
'product_weight' =>
$this->decimals($res['product_weight']),
'product_length' =>
$this->decimals($res['product_length']),
'product_width' =>
$this->decimals($res['product_width']),
'product_height' =>
$this->decimals($res['product_height']),
'product_shipping_cost' =>
$this->createPrice($res['product_shipping_cost']),
'hits' =>
$res['hits'],
'product_page_title' =>
$res['product_page_title'],
'product_page_heading' =>
$res['product_page_heading'],
'tab1_title' =>
$res['tab1_title'],
'tab1_content' =>
$res['tab1_content'],
'tab2_title' =>
$res['tab2_title'],
'tab2_content' =>
$res['tab2_content'],
'tab3_title' =>
$res['tab3_title'],
'tab3_content' =>
$res['tab3_content'],
'tab4_title' =>
$res['tab4_title'],
'tab4_content' =>
$res['tab4_content'],
'tab5_title' =>
$res['tab5_title'],
'tab5_content' =>
$res['tab5_content'],
'category_name' =>
$res['category_name'],
'category_desc' =>
$res['category_desc'],
'category_image' =>
!empty($res['category_image']) ?
ResourceTranslator::urlToResource(JPATH_ROOT .
'media/com_eshop/categories/' . $res['category_image'])
: '',
'category_url' =>
JRoute::_(EshopRoute::getCategoryRoute($res['category_id'])),
'manufacturer_email' =>
$res['manufacturer_email'],
'manufacturer_url' =>
$res['manufacturer_url'],
'manufacturer_site_url' =>
'index.php?option=com_eshop&view=manufacturer&id=' .
$res['manufacturer_id'],
'manufacturer_image' =>
!empty($res['manufacturer_image']) ?
ResourceTranslator::urlToResource(JPATH_ROOT .
'media/com_eshop/manufacturers/' .
$res['manufacturer_image']) : '',
'manufacturer_name' =>
$res['manufacturer_name'],
'manufacturer_desc' =>
$res['manufacturer_desc'],
'manufacturer_page_title' =>
$res['manufacturer_page_title'],
'manufacturer_page_heading' =>
$res['manufacturer_page_heading']
);
$r['full_price'] = $r['price'];
$j = 1;
foreach ($taxes as $tax) {
$r['price_with_tax' . $j] =
$this->createPrice($res['product_price'] +
$res['product_price'] * $tax['tax_rate'] / 100);
$j++;
}
$k = 1;
$query = 'SELECT tag_name FROM #__eshop_producttags as pt
LEFT JOIN #__eshop_tags AS t ON pt.tag_id = t.id WHERE product_id = '
. $res['id'] . ';';
$tags = Database::queryAll($query);
foreach ($tags as $tag) {
$r['tag_name' . $k] = $tag['tag_name'];
$k++;
}
$data[] = $r;
}
return $data;
}
}PK1C�[�����CGenerator/Joomla/Eventsbooking/Elements/EventsbookingCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eventsbooking\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EventsbookingCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT id, parent AS parent_id, name AS title
FROM #__eb_categories";
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
$this->options[0] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK1C�[��m��BGenerator/Joomla/Eventsbooking/Elements/EventsbookingLocations.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eventsbooking\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class EventsbookingLocations extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT id, name FROM #__eb_locations";
$locations = Database::queryAll($query, false, "object");
$this->options[0] = n2_('All');
if (count($locations)) {
foreach ($locations AS $location) {
$this->options[$location->id] = $location->name;
}
}
}
}
PK1C�[
30'YY>Generator/Joomla/Eventsbooking/GeneratorGroupEventsbooking.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eventsbooking;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Eventsbooking\Sources\EventsbookingEvents;
class GeneratorGroupEventsbooking extends AbstractGeneratorGroup {
protected $name = 'eventsbooking';
protected $url =
'https://extensions.joomla.org/extension/event-booking/';
public function getLabel() {
return 'Event Booking';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'Event Booking');
}
public function isInstalled() {
return Filesystem::existsFile(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_eventbooking' . DIRECTORY_SEPARATOR .
'eventbooking.php');
}
protected function loadSources() {
new EventsbookingEvents($this, 'events',
n2_('Events'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupEventsbooking);
PK1C�[!�^.�*�*>Generator/Joomla/Eventsbooking/Sources/EventsbookingEvents.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Eventsbooking\Sources;
use EventbookingHelper;
use EventbookingHelperRoute;
use JRoute;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Eventsbooking\Elements\EventsbookingCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Eventsbooking\Elements\EventsbookingLocations;
require_once(JPATH_SITE .
'/components/com_eventbooking/helper/helper.php');
require_once(JPATH_SITE .
'/components/com_eventbooking/helper/route.php');
class EventsbookingEvents extends AbstractGenerator {
protected $layout = 'event';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'Event Booking');
}
private function formatDate($datetime, $dateOrTime, $format) {
if ($dateOrTime == 1 || $datetime != '0000-00-00
00:00:00') {
return date($format, strtotime($datetime));
} else {
return '';
}
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new EventsbookingCategories($source, 'sourcecategories',
n2_('Categories'), 0, array(
'isMultiple' => true
));
new EventsbookingLocations($source, 'sourcelocations',
n2_('Locations'), 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'started', n2_('Started'),
0);
new Filter($limit, 'ended', n2_('Ended'), -1);
new Filter($limit, 'published',
n2_('Published'), 1);
new Filter($limit, 'featured', n2_('Featured'),
0);
new Select($limit, 'recurring',
n2_('Recurring'), '0', array(
'options' => array(
'0' => n2_('All'),
'1' => n2_('All, but from recurring ones
only parent events'),
'2' => n2_('Only recurring events'),
'3' => n2_('Only recurring event
parents'),
'4' => n2_('Only not recurring
events')
)
));
$variables = $filterGroup->createRow('variable');
new Text($variables, 'dateformat', n2_('Date
format'), n2_('m-d-Y'));
new Text($variables, 'timeformat', n2_('Time
format'), 'G:i');
new MenuItems($variables, 'itemid', n2_('Menu item
(item ID)'), 0);
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'eventsbookingorder',
'event_date|*|asc', array(
'options' => array(
'' =>
n2_('None'),
'event_date' =>
n2_('Start date'),
'event_end_date' => n2_('End
date'),
'id' =>
n2_('ID'),
'title' =>
n2_('Title'),
'individual_price' =>
n2_('Price'),
'discount' =>
n2_('Discount'),
'registration_start_date' =>
n2_('Registration start date'),
'cut_off_date' => n2_('Cut
off date'),
'cancel_before_date' =>
n2_('Cancel before date'),
'publish_up' =>
n2_('Publish up date'),
'publish_down' =>
n2_('Publish down date'),
'early_bird_discount_date' =>
n2_('Early bird discount date'),
'early_bird_discount_amount' =>
n2_('Early bird discount amount'),
'late_fee_date' => n2_('Late
fee date'),
'recurring_end_date' =>
n2_('Recurring end date'),
'max_end_date' => n2_('Max
end date')
)
));
}
protected function _getData($count, $startIndex) {
$dateFormat = $this->data->get('dateformat',
'Y-m-d');
if (empty($dateFormat)) {
$dateFormat = 'Y-m-d';
}
$timeFormat = $this->data->get('timeformat',
'H:i:s');
if (empty($timeFormat)) {
$timeFormat = 'H:i:s';
}
$itemId = $this->data->get('itemid',
'0');
$where = array();
$categories = array_map('intval', explode('||',
$this->data->get('sourcecategories', '')));
if (!in_array('0', $categories)) {
$where[] = ' id IN (SELECT event_id FROM
#__eb_event_categories WHERE category_id IN (' . implode(',
', $categories) . '))';
}
$locations = array_map('intval', explode('||',
$this->data->get('sourcelocations', '')));
if (!in_array('0', $locations)) {
$where[] = ' location_id IN(' . implode(',
', $locations) . ')';
}
$today = date('Y-m-d h:i:s', time());
switch ($this->data->get('started', '0'))
{
case 1:
$where[] = " event_date < '" . $today .
"'";
break;
case -1:
$where[] = " event_date >= '" . $today .
"'";
break;
}
switch ($this->data->get('ended', '-1'))
{
case 1:
$where[] = " event_end_date < '" . $today
. "'";
break;
case -1:
$where[] = " event_end_date >= '" .
$today . "'";
break;
}
switch ($this->data->get('recurring',
'0')) {
case 0:
break;
case 1:
$where[] = " parent_id = 0";
break;
case 2:
$where[] = " ((recurring_type > 0) || (parent_id
> 0))";
break;
case 3:
$where[] = " recurring_type > 0";
break;
case 4:
$where[] = " recurring_frequency is NULL";
break;
}
switch ($this->data->get('published',
'1')) {
case 0:
break;
case 1:
$where[] = " published = 1";
break;
case -1:
$where[] = " published = 0";
break;
}
switch ($this->data->get('featured',
'1')) {
case 0:
break;
case 1:
$where[] = " featured = 1";
break;
case -1:
$where[] = " featured = 0";
break;
}
$query = 'SELECT * FROM #__eb_events';
if (!empty($where)) {
$query .= ' WHERE' . implode(' AND ',
$where);
}
$order =
Common::parse($this->data->get('eventsbookingorder',
'event_date|*|asc'));
if ($order[0]) {
$query .= ' ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= ' LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
$data = array();
$config = EventbookingHelper::getConfig();
foreach ($result AS $res) {
$r = array(
'title' =>
$res['title'],
'description' =>
$res['description'],
'short_description' =>
$res['short_description']
);
$r['image'] = ImageFallback::fallback(array(
!empty($res['image']) ? $res['image'] :
'',
!empty($res['thumb']) ?
'images/com_eventbooking/' . $res['thumb'] :
'',
!empty($res['thumb']) ?
'media/com_eventbooking/images/' . $res['thumb'] :
''
), array(
$res['description'],
$res['short_description']
));
$r['thumbnail'] = ImageFallback::fallback(array(
!empty($res['thumb']) ?
'images/com_eventbooking/thumb/' . $res['thumb'] :
'',
!empty($res['thumb']) ?
'media/com_eventbooking/images/thumb/' . $res['thumb']
: '',
$r['image']
));
$r['url'] =
JRoute::_(EventbookingHelperRoute::getEventRoute($res['id'], 0,
$itemId), false);
$r += array(
'start_date' =>
$this->formatDate($res['event_date'], 0, $dateFormat),
'start_time' =>
$this->formatDate($res['event_date'], 1, $timeFormat),
'end_date' =>
$this->formatDate($res['event_end_date'], 0, $dateFormat),
'end_time' =>
$this->formatDate($res['event_end_date'], 1, $timeFormat),
'price' =>
EventbookingHelper::formatCurrency($res['individual_price'],
$config, $res['currency_symbol']),
'discount' =>
EventbookingHelper::formatCurrency($res['discount'], $config,
$res['currency_symbol']),
'unformatted_price' =>
$res['individual_price'],
'unformatted_discount' =>
$res['discount'],
'tax_rate' =>
$res['tax_rate'],
'price_with_tax' =>
EventbookingHelper::formatCurrency(round($res['individual_price']
* (1 + $res['tax_rate'] / 100), 2), $config,
$res['currency_symbol']),
'unformatted_price_with_tax' =>
round($res['individual_price'] * (1 + $res['tax_rate']
/ 100), 2),
'early_bird_discount_date' =>
$this->formatDate($res['early_bird_discount_date'], 0,
$dateFormat),
'early_bird_discount_amount' =>
EventbookingHelper::formatCurrency($res['early_bird_discount_amount'],
$config, $res['currency_symbol']),
'unformatted_early_bird_discount_amount' =>
$res['early_bird_discount_amount'],
'cut_off_date' =>
$this->formatDate($res['cut_off_date'], 0, $dateFormat),
'cancel_before_date' =>
$this->formatDate($res['cancel_before_date'], 0, $dateFormat),
'recurring_end_date' =>
$this->formatDate($res['recurring_end_date'], 0, $dateFormat),
'registration_start_date' =>
$this->formatDate($res['registration_start_date'], 0,
$dateFormat)
);
$data[] = $r;
}
return $data;
}
}PK1C�[��AGenerator/Joomla/Flexicontent/Elements/FlexicontentCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent\Elements;
use JFactory;
use JHTML;
use Nextend\Framework\Form\Element\Select;
class FlexicontentCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
$query = 'SELECT
m.id,
m.title AS name,
m.title,
m.parent_id AS parent,
m.parent_id
FROM #__categories m
WHERE m.published = 1 AND (m.extension =
"com_content" OR m.extension = "system")
ORDER BY m.lft';
$db->setQuery($query);
$menuItems = $db->loadObjectList();
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
$this->options['0'] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
array_shift($options);
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK1C�[6o��;Generator/Joomla/Flexicontent/Elements/FlexicontentTags.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent\Elements;
use JFactory;
use Nextend\Framework\Form\Element\Select;
class FlexicontentTags extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
$db->setQuery('SELECT id, name FROM #__flexicontent_tags
WHERE published = 1 ORDER BY id');
$menuItems = $db->loadObjectList();
$this->options['0'] = n2_('All');
if (count($menuItems)) {
foreach ($menuItems AS $option) {
$this->options[$option->id] = $option->name;
}
}
}
}
PK1C�[a7�`ff<Generator/Joomla/Flexicontent/Elements/FlexicontentTypes.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent\Elements;
use JFactory;
use Nextend\Framework\Form\Element\Select;
class FlexicontentTypes extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
$db->setQuery('SELECT id, name FROM #__flexicontent_types
WHERE published = 1 ORDER BY id');
$menuItems = $db->loadObjectList();
$this->options[0] = 'All';
if (count($menuItems)) {
foreach ($menuItems AS $option) {
$this->options[$option->id] = $option->name;
}
if ($this->getValue() == '') {
$this->setValue($menuItems[0]->id);
}
}
}
}
PK1C�[�k�W
<Generator/Joomla/Flexicontent/GeneratorGroupFlexicontent.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent\Sources\FlexicontentItems;
class GeneratorGroupFlexicontent extends AbstractGeneratorGroup {
protected $name = 'flexicontent';
protected $url =
'https://extensions.joomla.org/extension/flexicontent/';
public function getLabel() {
return 'FLEXIcontent';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'FLEXIcontent');
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_flexicontent');
}
protected function loadSources() {
new FlexicontentItems($this, 'items', 'Items');
}
}
GeneratorFactory::addGenerator(new GeneratorGroupFlexicontent);
PK1C�[��#�!�!;Generator/Joomla/Flexicontent/Sources/FlexicontentItems.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent\Sources;
use FlexicontentFields;
use FlexicontentHelperRoute;
use FlexicontentModelItem;
use JApplicationCms;
use JFactory;
use JTable;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent\Elements\FlexicontentCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent\Elements\FlexicontentTags;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Flexicontent\Elements\FlexicontentTypes;
class FlexicontentItems extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'FLEXIcontent');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new FlexicontentTypes($source, 'sourcetype',
n2_('Type'), 0);
new FlexicontentCategories($source, 'sourcecategory',
n2_('Categories'), 0, array(
'isMultiple' => true
));
new FlexicontentTags($source, 'sourcetag',
n2_('Tags'), 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'sourcefeatured',
n2_('Featured'), 0);
new Text($limit, 'sourcelanguage',
n2_('Language'), '*');
new Text($limit, 'sourceids', n2_('Only display
items with these IDs'), '');
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'flexiorder',
'con.created|*|desc', array(
'options' => array(
'' => n2_('None'),
'con.title' => n2_('Title'),
'cat_title' => n2_('Category
title'),
'created_by_alias' =>
n2_('Username'),
'con.featured' =>
n2_('Featured'),
'con.ordering' =>
n2_('Ordering'),
'con.hits' => n2_('Hits'),
'con.created' => n2_('Creation
time'),
'con.modified' => n2_('Modification
time')
)
));
}
protected function _getData($count, $startIndex) {
$query = 'SELECT ';
$query .= 'con.id, con.images, con.introtext, con.fulltext
';
$query .= 'FROM #__content AS con ';
$query .= 'LEFT JOIN #__flexicontent_cats_item_relations AS
fcat ON fcat.itemid = con.id ';
$query .= 'LEFT JOIN #__categories AS cat ON fcat.catid =
cat.id ';
$jNow = JFactory::getDate();
$now = $jNow->toSql();
$where = array(
"(con.publish_up = '0000-00-00 00:00:00' OR
con.publish_up IS NULL OR con.publish_up < '" . $now .
"') AND (con.publish_down = '0000-00-00 00:00:00' OR
con.publish_down IS NULL OR con.publish_down > '" . $now .
"') ",
'con.state = 1 '
);
$category = array_map('intval', explode('||',
$this->data->get('sourcecategory', '')));
if (!in_array('0', $category)) {
$where[] = 'fcat.catid IN (' . implode(',',
$category) . ') ';
}
$tag = array_map('intval', explode('||',
$this->data->get('sourcetag', '0')));
if (!in_array('0', $tag)) {
$where[] = ' con.id IN (SELECT itemid FROM
#__flexicontent_tags_item_relations WHERE tid IN(' .
implode(',', $tag) . '))';
}
$type = array_map('intval', explode('||',
$this->data->get('sourcetype', '0')));
if (!in_array('0', $type)) {
$where[] = ' con.id IN (SELECT item_id FROM
#__flexicontent_items_ext WHERE type_id IN(' . implode(',',
$type) . '))';
}
$ids = $this->data->get('sourceids', '');
if (!empty($ids)) {
$where[] = ' con.id IN (' . $ids . ')';
}
switch ($this->data->get('sourcefeatured', 0)) {
case 1:
$where[] = 'con.featured = 1 ';
break;
case -1:
$where[] = 'con.featured = 0 ';
break;
}
$language = $this->data->get('sourcelanguage',
'*');
if ($language) {
$db = JFactory::getDbo();
$where[] = 'con.language = ' .
$db->quote($language) . ' ';
}
if (count($where)) {
$query .= ' WHERE ' . implode(' AND ',
$where);
}
$query .= 'GROUP BY con.id ';
$order =
Common::parse($this->data->get('flexiorder',
'con.created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
$lng = JFactory::getLanguage();
$adminApp = JFactory::$application;
$siteApp = JApplicationCms::getInstance('site');
$siteApp->loadLanguage($lng);
require_once(JPATH_ADMINISTRATOR . DS .
'components/com_flexicontent/defineconstants.php');
JTable::addIncludePath(JPATH_ADMINISTRATOR . DS .
'components' . DS . 'com_flexicontent' . DS .
'tables');
require_once(JPATH_SITE . DS . 'components' . DS .
'com_flexicontent' . DS . 'helpers' . DS .
'permission.php');
require_once(JPATH_SITE . DS . 'components' . DS .
'com_flexicontent' . DS . 'helpers' . DS .
'route.php');
require_once(JPATH_SITE . DS .
"components/com_flexicontent/classes/flexicontent.fields.php");
require_once(JPATH_SITE . DS .
"components/com_flexicontent/classes/flexicontent.helper.php");
require_once(JPATH_SITE .
'/components/com_flexicontent/models/item.php');
$app = JFactory::getApplication();
$user = JFactory::getUser();
$aid = $user->getAuthorisedViewLevels();
$itemModel = new FlexicontentModelItem();
$data = array();
for ($i = 0; $i < count($result); $i++) {
JFactory::$application = $siteApp;
$item =
$itemModel->getItem($result[$i]['id'], $check_view_access =
false);
list($item) = FlexicontentFields::getFields($item,
'', $item->parameters, $aid);
JFactory::$application = $adminApp;
$helper = array();
foreach ($item->fields AS $k => $field) {
if ($k == 'favourites' || $k ==
'voting' || $k == 'state') {
continue;
}
$helper[$k] = @FlexicontentFields::getFieldDisplay($item,
$k, $values = null, $method = 'display');
}
$r = array(
'title' => $helper['title'],
'description' => $helper['text'],
'introtext' =>
$result[$i]['introtext'],
'fulltext' =>
$result[$i]['fulltext'],
);
if (!empty($result[$i]['images'])) {
$img = json_decode($result[$i]['images']);
$r['image'] = $r['thumbnail'] =
ImageFallback::fallback(array(
@$img->image_intro,
@$img->image_fulltext
), array(
$helper['text']
));
}
$r += array(
'url' =>
FlexicontentHelperRoute::getItemRoute($item->id, $item->catid),
'url_label' => n2_('View'),
'creation_date' =>
$helper['created'],
'created_by' =>
$helper['created_by'],
'modification_date' =>
$helper['modified'],
'modified_by' =>
$helper['modified_by'],
'hits' =>
$helper['hits'],
'document_type' =>
$helper['document_type'],
'version' =>
$helper['version'],
'categories' =>
$helper['categories'],
'tags' =>
$helper['tags'],
'id' =>
$result[$i]['id']
);
$data[] = $r;
}
JFactory::$application = $adminApp;
return $data;
}
}PK1C�[��v���*Generator/Joomla/GeneratorJoomlaLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla;
use Nextend\SmartSlider3\Generator\AbstractGeneratorLoader;
class GeneratorJoomlaLoader extends AbstractGeneratorLoader {
}PK1C�["��ee5Generator/Joomla/Hikashop/Elements/HikashopBrands.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class HikashopBrands extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT category_id AS id, category_name AS title,
category_name AS name,
category_parent_id AS parent_id, category_parent_id AS parent FROM
#__hikashop_category WHERE category_published = 1 AND category_type =
'manufacturer'";
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 1, '',
array(), $children, 9999, 0, 0);
$this->options['0'] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK1C�[$��xdd9Generator/Joomla/Hikashop/Elements/HikashopCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class HikashopCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT category_id AS id, category_name AS title,
category_name AS name,
category_parent_id AS parent_id, category_parent_id AS parent FROM
#__hikashop_category WHERE category_published = 1 AND category_type =
'product'";
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 1, '',
array(), $children, 9999, 0, 0);
$this->options['0'] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK1C�[�4mQ��3Generator/Joomla/Hikashop/Elements/HikashopTags.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class HikashopTags extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT title, id FROM #__tags WHERE published = 1
AND parent_id <> 0";
$tags = Database::queryAll($query, false, "object");
$this->options['0'] = n2_('All');
if (count($tags)) {
foreach ($tags AS $tag) {
$this->options[$tag->id] = $tag->title;
}
}
}
}
PK1C�[P�%)779Generator/Joomla/Hikashop/Elements/HikashopWarehouses.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class HikashopWarehouses extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT warehouse_name, warehouse_id FROM
#__hikashop_warehouse WHERE warehouse_published = 1";
$warehouses = Database::queryAll($query, false,
"object");
$this->options['0'] = n2_('All');
if (count($warehouses)) {
foreach ($warehouses AS $warehouse) {
$this->options[$warehouse->warehouse_id] =
$warehouse->warehouse_name;
}
}
}
}
PK1C�[�7����4Generator/Joomla/Hikashop/GeneratorGroupHikashop.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Sources\HikashopProducts;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Sources\HikashopProductsbyid;
class GeneratorGroupHikashop extends AbstractGeneratorGroup {
protected $name = 'hikashop';
protected $url =
'https://extensions.joomla.org/extension/hikashop/';
public function getLabel() {
return 'HikaShop';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'HikaShop');
}
public function isInstalled() {
return Filesystem::existsFile(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_hikashop' . DIRECTORY_SEPARATOR . 'hikashop.php');
}
protected function loadSources() {
new HikashopProducts($this, 'products',
n2_('Products'));
new HikashopProductsbyid($this, 'productsbyid',
n2_('Products') . ' - IDs');
}
}
GeneratorFactory::addGenerator(new GeneratorGroupHikashop);
PK1C�[��-))6Generator/Joomla/Hikashop/Sources/HikashopProducts.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Sources;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Elements\HikashopBrands;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Elements\HikashopCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Elements\HikashopTags;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Elements\HikashopWarehouses;
use stdClass;
class HikashopProducts extends AbstractGenerator {
protected $layout = 'product';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('Products'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new HikashopCategories($source, 'hikashopcategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new HikashopBrands($source, 'hikashopbrands',
n2_('Brand'), 0, array(
'isMultiple' => true
));
new HikashopTags($source, 'hikashoptags',
n2_('Tag'), 0, array(
'isMultiple' => true
));
new HikashopWarehouses($source, 'hikashopwarehouses',
n2_('Warehouse'), 0, array(
'isMultiple' => true
));
$options = $filterGroup->createRow('options');
new MenuItems($options, 'hikashopitemid', n2_('Menu
item (item ID)'), 0);
new OnOff($options, 'hikashopimages', n2_('Include
all images'), 1);
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'hikashopproductsorder',
'p.product_created|*|desc', array(
'options' => array(
'' =>
n2_('None'),
'p.product_id' => 'ID',
'p.product_name' => n2_('Product
name'),
'p.product_hit' =>
n2_('Hits'),
'p.product_sales' =>
n2_('Sales'),
'p.product_average_score' => n2_('Average
score'),
'p.product_total_vote' => n2_('Total
vote'),
'p.product_created' =>
n2_('Creation time'),
'p.product_modified' =>
n2_('Modification time')
)
));
}
function getPrice($pid, $tax_id = 0) {
$arr = array();
$arr[0] = new stdClass();
$arr[0]->product_id = $pid;
$arr[0]->product_tax_id = $tax_id;
$currencyClass = hikashop_get('class.currency');
$zone = hikashop_getZone();
$cur = hikashop_getCurrency();
$currencyClass->getListingPrices($arr, $zone, $cur);
$i = 0;
$currPrice = 0;
if (isset($arr[0]->prices)) {
foreach ($arr[0]->prices as $k => $price) {
if (!$i) {
$currPrice = $price->price_value_with_tax;
}
if ($price->price_value_with_tax < $currPrice)
$currPrice = $price->price_value_with_tax;
$i++;
}
return $currencyClass->format($currPrice, $cur);
} else {
return '';
}
}
function url($id, $alias, $itemID) {
$url =
'index.php?option=com_hikashop&ctrl=product&task=show&cid='
. $id;
if (!empty($alias)) {
$url .= '&name=' . $alias;
}
if (!empty($itemID) && $itemID != 0) {
$url .= '&Itemid=' . $itemID;
}
return $url;
}
protected function _getData($count, $startIndex) {
require_once(JPATH_ADMINISTRATOR . DS . 'components' . DS
. 'com_hikashop' . DS . 'helpers' . DS .
'helper.php');
$categories = array_map('intval', explode('||',
$this->data->get('hikashopcategories', '')));
$brands = array_map('intval', explode('||',
$this->data->get('hikashopbrands', '0')));
$tags = array_map('intval', explode('||',
$this->data->get('hikashoptags', '0')));
$warehouses = array_map('intval', explode('||',
$this->data->get('hikashopwarehouses', '0')));
$where = array(
"p.product_published = 1 ",
"p.product_type <> 'variant'"
);
if (!in_array(0, $categories) && count($categories) > 0)
{
$where[] = "p.product_id IN (SELECT product_id FROM
#__hikashop_product_category WHERE category_id IN (" .
implode(',', $categories) . "))";
}
if (!in_array(0, $brands) && count($brands) > 0) {
$where[] = "p.product_manufacturer_id IN (" .
implode(',', $brands) . ")";
}
if (!in_array(0, $tags)) {
$where[] = 'p.product_id IN (SELECT content_item_id FROM
#__contentitem_tag_map WHERE type_alias =
\'com_hikashop.product\' AND tag_id IN (' .
implode(',', $tags) . ')) ';
}
if (!in_array(0, $warehouses) && count($warehouses) > 0)
{
$where[] = "p.product_warehouse_id IN (" .
implode(',', $warehouses) . ")";
}
$query = "SELECT * FROM #__hikashop_product AS p LEFT JOIN
#__hikashop_file AS f ON p.product_id = f.file_ref_id AND
f.file_type='product' WHERE " . implode(' AND ',
$where);
$query .= " GROUP BY p.product_id ";
$order =
Common::parse($this->data->get('hikashopproductsorder',
'p.product_created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1];
}
$query .= ' LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
if (function_exists('hikashop_config')) {
$config = hikashop_config();
$folder = $config->get('uploadfolder');
if (empty($folder)) {
$folder = 'media/com_hikashop/upload/';
} else if (substr($folder, -1) != '/') {
$folder .= '/';
}
} else {
$folder = 'media/com_hikashop/upload/';
}
$image_result_array = array();
$hikashopimages =
$this->data->get('hikashopimages', 0);
if (!empty($hikashopimages)) {
$id_array = array();
for ($i = 0; $i < count($result); $i++) {
$id_array[] = $result[$i]['product_id'];
}
$image_result = array();
if (!empty($id_array)) {
$query = "SELECT file_ref_id, file_path FROM
#__hikashop_file WHERE file_ref_id IN(" . implode(",",
$id_array) . ") AND file_type = 'product' ORDER BY
file_ordering";
$image_result = Database::queryAll($query);
}
foreach ($image_result AS $ir) {
if (!empty($ir['file_path'])) {
$image_result_array[$ir['file_ref_id']][] =
$ir['file_path'];
}
}
}
$data = array();
for ($i = 0; $i < count($result); $i++) {
$r = array(
'title' =>
$result[$i]['product_name'],
'url' =>
$this->url($result[$i]['product_id'],
$result[$i]['product_alias'],
$this->data->get('hikashopitemid', '0')),
'description' =>
$result[$i]['product_description']
);
$r['image'] = ImageFallback::fallback(array(
!empty($result[$i]['file_path']) ? $folder .
$result[$i]['file_path'] : '',
), array(
@$r['description']
));
if (!empty($result[$i]['file_path'])) {
$r['thumbnail'] = str_replace($folder, $folder .
'thumbnails/100x100/', $r['image']);
} else {
$r['thumbnail'] = $r['image'];
}
$r += array(
'price' =>
$this->getPrice($result[$i]['product_id'],
$result[$i]['product_tax_id']),
'price_without_tax' =>
$this->getPrice($result[$i]['product_id']),
'product_code' =>
$result[$i]['product_code'],
'hits' =>
$result[$i]['product_hit'],
'brand_url' =>
$result[$i]['product_url'],
'product_weight' =>
$result[$i]['product_weight'],
'product_weight_unit' =>
$result[$i]['product_weight_unit'],
'product_keywords' =>
$result[$i]['product_keywords'],
'product_meta_description' =>
$result[$i]['product_meta_description'],
'product_width' =>
$result[$i]['product_width'],
'product_length' =>
$result[$i]['product_length'],
'product_height' =>
$result[$i]['product_height'],
'product_dimension_unit' =>
$result[$i]['product_dimension_unit'],
'product_sales' =>
$result[$i]['product_sales'],
'product_average_score' =>
$result[$i]['product_average_score'],
'product_total_vote' =>
$result[$i]['product_total_vote'],
'product_page_title' =>
$result[$i]['product_page_title'],
'product_alias' =>
$result[$i]['product_alias'],
'product_price_percentage' =>
$result[$i]['product_price_percentage'],
'product_msrp' =>
$result[$i]['product_msrp'],
'product_canonical' =>
$result[$i]['product_canonical'],
'product_id' =>
$result[$i]['product_id']
);
if
(!empty($image_result_array[$result[$i]['product_id']])) {
$j = 0;
foreach
($image_result_array[$result[$i]['product_id']] AS $image) {
$j++;
$r['image_' . $j] =
ImageFallback::fallback(array($folder . $image));
}
}
$data[] = $r;
}
return $data;
}
}
PK1C�[�S4�**:Generator/Joomla/Hikashop/Sources/HikashopProductsbyid.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Hikashop\Sources;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use stdClass;
class HikashopProductsbyid extends AbstractGenerator {
protected $layout = 'product';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('Products') . ' - IDs');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new Textarea($source, 'ids', n2_('Product
IDs'), '', array(
'width' => 300,
'height' => 200,
'tipLabel' => n2_('Product IDs'),
'tipDescription' => n2_('Write the product
IDs you want to display here, in the order you want them to appear in the
generator. One product ID per line.')
));
new MenuItems($source, 'hikashopitemid', n2_('Menu
item (item ID)'), 0);
}
function getPrice($pid, $tax_id = 0) {
$arr = array();
$arr[0] = new stdClass();
$arr[0]->product_id = $pid;
$arr[0]->product_tax_id = $tax_id;
$currencyClass = hikashop_get('class.currency');
$zone = hikashop_getZone();
$cur = hikashop_getCurrency();
$currencyClass->getListingPrices($arr, $zone, $cur);
$i = 0;
$currPrice = 0;
if (isset($arr[0]->prices)) {
foreach ($arr[0]->prices as $k => $price) {
if (!$i) {
$currPrice = $price->price_value_with_tax;
}
if ($price->price_value_with_tax < $currPrice)
$currPrice = $price->price_value_with_tax;
$i++;
}
return $currencyClass->format($currPrice, $cur);
} else {
return '';
}
}
function url($id, $alias, $itemID) {
$url =
'index.php?option=com_hikashop&ctrl=product&task=show&cid='
. $id;
if (!empty($alias)) {
$url .= '&name=' . $alias;
}
if (!empty($itemID) && $itemID != 0) {
$url .= '&Itemid=' . $itemID;
}
return $url;
}
function getProductIDs() {
return array_map('intval', explode("\n",
str_replace(array(
"\r\n",
"\n\r",
"\r"
), "\n", $this->data->get('ids'))));
}
protected function _getData($count, $startIndex) {
require_once(JPATH_ADMINISTRATOR . DS . 'components' . DS
. 'com_hikashop' . DS . 'helpers' . DS .
'helper.php');
$idarray = self::getProductIDs();
$where = array(
"p.product_published = 1 "
);
if (count($idarray) > 0) {
$where[] = "p.product_id IN (" .
implode(',', $idarray) . ")";
}
$query = "SELECT * FROM #__hikashop_product AS p LEFT JOIN
#__hikashop_file AS f ON p.product_id = f.file_ref_id AND
f.file_type='product' WHERE " . implode(' AND ',
$where);
$query .= " GROUP BY p.product_id ";
$order =
Common::parse($this->data->get('hikashopproductsorder',
'p.product_created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1];
}
$query .= ' LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
if (function_exists('hikashop_config')) {
$config = hikashop_config();
$folder = $config->get('uploadfolder');
if (empty($folder)) {
$folder = 'media/com_hikashop/upload/';
} else if (substr($folder, -1) != '/') {
$folder .= '/';
}
} else {
$folder = 'media/com_hikashop/upload/';
}
$data = array();
for ($i = 0; $i < count($result); $i++) {
$r = array(
'title' =>
$result[$i]['product_name'],
'url' =>
$this->url($result[$i]['product_id'],
$result[$i]['product_alias'],
$this->data->get('hikashopitemid', '0')),
'description' =>
$result[$i]['product_description']
);
$r['image'] = ImageFallback::fallback(array(
!empty($result[$i]['file_path']) ? $folder .
$result[$i]['file_path'] : '',
), array(
@$r['description']
));
if (!empty($result[$i]['file_path'])) {
$r['thumbnail'] = str_replace($folder, $folder .
'thumbnails/100x100/', $r['image']);
} else {
$r['thumbnail'] = $r['image'];
}
$r += array(
'price' =>
$this->getPrice($result[$i]['product_id'],
$result[$i]['product_tax_id']),
'price_without_tax' =>
$this->getPrice($result[$i]['product_id']),
'product_code' =>
$result[$i]['product_code'],
'hits' =>
$result[$i]['product_hit'],
'brand_url' =>
$result[$i]['product_url'],
'product_weight' =>
$result[$i]['product_weight'],
'product_weight_unit' =>
$result[$i]['product_weight_unit'],
'product_keywords' =>
$result[$i]['product_keywords'],
'product_meta_description' =>
$result[$i]['product_meta_description'],
'product_width' =>
$result[$i]['product_width'],
'product_length' =>
$result[$i]['product_length'],
'product_height' =>
$result[$i]['product_height'],
'product_dimension_unit' =>
$result[$i]['product_dimension_unit'],
'product_sales' =>
$result[$i]['product_sales'],
'product_average_score' =>
$result[$i]['product_average_score'],
'product_total_vote' =>
$result[$i]['product_total_vote'],
'product_page_title' =>
$result[$i]['product_page_title'],
'product_alias' =>
$result[$i]['product_alias'],
'product_price_percentage' =>
$result[$i]['product_price_percentage'],
'product_msrp' =>
$result[$i]['product_msrp'],
'product_canonical' =>
$result[$i]['product_canonical'],
'product_id' =>
$result[$i]['product_id']
);
$data[] = $r;
}
return $data;
}
}
PK1C�[C=D##CGenerator/Joomla/Ignitegallery/Elements/IgnitegalleryCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Ignitegallery\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class IgnitegalleryCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT
*, name AS title,
parent, parent AS parent_id
FROM #__igallery
WHERE published = 1 ORDER BY parent';
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
$this->options['0'] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK1C�[)+�TT>Generator/Joomla/Ignitegallery/GeneratorGroupIgnitegallery.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Ignitegallery;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Ignitegallery\Sources\IgnitegalleryImages;
class GeneratorGroupIgnitegallery extends AbstractGeneratorGroup {
protected $name = 'ignitegallery';
protected $url =
'https://extensions.joomla.org/profile/extension/photos-a-images/galleries/ignite-gallery/';
public function getLabel() {
return 'Ignite Gallery';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'Ignite Gallery');
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_igallery');
}
protected function loadSources() {
new IgnitegalleryImages($this, 'images',
n2_('Images'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupIgnitegallery);
PK1C�[��jj>Generator/Joomla/Ignitegallery/Sources/IgnitegalleryImages.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Ignitegallery\Sources;
use igFileHelper;
use JFile;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Ignitegallery\Elements\IgnitegalleryCategories;
class IgnitegalleryImages extends AbstractGenerator {
protected $layout = 'image_extended';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'Ignite Gallery');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new IgnitegalleryCategories($source,
'ignitegallerysourcecategory', n2_('Category'), 0,
array(
'isMultiple' => true
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'ignitegalleryorder',
'con.date|*|desc', array(
'options' => array(
'' => n2_('None'),
'con.filename' => n2_('Filename'),
'cat_title' => n2_('Category'),
'con.ordering' => n2_('Ordering'),
'con.hits' => n2_('Hits'),
'con.date' => n2_('Creation
time')
)
));
}
protected function _getData($count, $startIndex) {
require_once(JPATH_ADMINISTRATOR .
'/components/com_igallery/defines.php');
$categories = array_map('intval', explode('||',
$this->data->get('ignitegallerysourcecategory',
'')));
$query = 'SELECT ';
$query .= 'con.id, ';
$query .= 'con.filename, ';
$query .= 'con.description, ';
$query .= 'con.alt_text, ';
$query .= 'con.link, ';
$query .= 'con.hits, ';
$query .= 'con.rotation, ';
$query .= 'con.gallery_id, ';
$query .= 'cat.name AS cat_title, ';
$query .= 'cat.alias AS cat_alias ';
$query .= 'FROM #__igallery_img AS con ';
$query .= 'LEFT JOIN #__igallery AS cat ON cat.id =
con.gallery_id ';
$where = array('con.published = 1 ');
if (count($categories) > 0 && !in_array('0',
$categories)) {
$where[] = 'con.gallery_id IN (' .
implode(',', $categories) . ') ';
}
if (count($where)) {
$query .= ' WHERE ' . implode(' AND ',
$where);
}
$order =
Common::parse($this->data->get('ignitegalleryorder',
'con.date|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count . ' ';
$result = Database::queryAll($query);
$root = isset($_SERVER['HTTPS']) &&
$_SERVER['HTTPS'] != 'off' ? 'https' :
'http';
$root .= '://' . $_SERVER['SERVER_NAME'];
$data = array();
for ($i = 0; $i < count($result); $i++) {
$fileHashNoExt =
JFile::stripExt($result[$i]['filename']);
$fileHashNoRef = substr($fileHashNoExt, 0,
strrpos($fileHashNoExt, '-'));
$increment =
igFileHelper::getIncrementFromFilename($result[$i]['filename']);
$folderName = igFileHelper::getFolderName($increment);
$sourceFile = IG_ORIG_PATH . '/' . $folderName .
'/' . $result[$i]['filename'];
$size = getimagesize($sourceFile);
$fileArray =
igFileHelper::originalToResized($result[$i]['filename'],
$size[0], $size[1], 100, 0, $result[$i]['rotation'], 0, 0);
$result[$i]['thumbnail'] =
$result[$i]['image'] = ResourceTranslator::urlToResource($root .
IG_IMAGE_HTML_RESIZE . $fileArray['folderName'] . '/' .
$fileArray['fullFileName']);
$result[$i]['url'] =
$result[$i]['image_url'] =
'index.php?option=com_igallery&view=category&igid=' .
$result[$i]['gallery_id'] . '#!' . $fileHashNoRef;
$result[$i]['category_url'] =
'index.php?option=com_igallery&view=category&igid=' .
$result[$i]['gallery_id'];
if (!empty($result[$i]['link'])) {
$result[$i]['url'] =
$result[$i]['link'];
}
$result[$i]['url_label'] = n2_('View');
if (!empty($result[$i]['alt_text'])) {
$result[$i]['title'] =
$result[$i]['alt_text'];
} else {
$result[$i]['title'] =
$result[$i]['filename'];
}
$r = array(
'image' =>
$result[$i]['image'],
'thumbnail' =>
$result[$i]['thumbnail'],
'title' =>
$result[$i]['title'],
'description' =>
$result[$i]['description'],
'url' =>
$result[$i]['url'],
'url_label' =>
$result[$i]['url_label'],
'filename' =>
$result[$i]['filename'],
'image_url' =>
$result[$i]['image_url'],
'hits' =>
$result[$i]['hits'],
'category_title' =>
$result[$i]['cat_title'],
'category_url' =>
$result[$i]['category_url'],
'id' =>
$result[$i]['id']
);
$data[] = $r;
}
return $data;
}
}
PK1C�[G�N�6Generator/Joomla/Jevents/Elements/JeventsCalendars.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class JeventsCalendars extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT ics_id, label FROM #__jevents_icsfile
WHERE state = '1'";
$calendars = Database::queryAll($query, false, "object");
$this->options['0'] = n2_('All');
if (count($calendars)) {
foreach ($calendars AS $calendar) {
$this->options[$calendar->ics_id] =
$calendar->label;
}
}
}
}
PK1C�[]�8m��7Generator/Joomla/Jevents/Elements/JeventsCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class JeventsCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT id, parent_id, title, name FROM #__assets
WHERE name LIKE '%com_jevents.category%' ORDER BY
parent_id";
$menuItems = Database::queryAll($query, false, "object");
$query = "SELECT id FROM #__assets WHERE name =
'com_jevents' LIMIT 1";
$mainParent = Database::queryAll($query, false,
"object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse',
$mainParent[0]->id, '', array(), $children, 9999, 0, 0);
$this->options['0'] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$id = explode('.',
$option->name);
$this->options[$id[2]] = $option->treename;
}
}
}
}
PK1C�[�Ou2Generator/Joomla/Jevents/GeneratorGroupJevents.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Jevents;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Sources\JeventsEvents;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Sources\JeventsRepeatingevents;
class GeneratorGroupJevents extends AbstractGeneratorGroup {
protected $name = 'jevents';
protected $url =
'https://extensions.joomla.org/extension/jevents/';
public function getLabel() {
return 'JEvents';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'JEvents');
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_jevents');
}
protected function loadSources() {
new JeventsEvents($this, 'events', n2_('One time
events'));
new JeventsRepeatingevents($this, 'repeatingevents',
n2_('Repeating events'));
}
public static function formatDate($datetime, $dateOrTime, $format,
$dateLanguage) {
$checkDateTime = strtotime($datetime);
if ($dateOrTime == 1 || $checkDateTime != '0000-00-00
00:00:00') {
if (!empty($dateLanguage)) {
$locale = setlocale(LC_ALL, 0);
setlocale(LC_ALL, $dateLanguage);
$date = strftime($format, $datetime);
setlocale(LC_ALL, $locale);
} else {
$date = date($format, $datetime);
}
return $date;
} else {
return '0000-00-00';
}
}
}
GeneratorFactory::addGenerator(new GeneratorGroupJevents);
PK1C�[�l��/�/2Generator/Joomla/Jevents/Sources/JeventsEvents.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Sources;
use DateTime;
use DateTimeZone;
use JFactory;
use JPluginHelper;
use JRegistry;
use JURI;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Elements\JeventsCalendars;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Elements\JeventsCategories;
use Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\GeneratorGroupJevents;
class JeventsEvents extends AbstractGenerator {
protected $layout = 'event';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('One time events'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new JeventsCategories($source, 'sourcecategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new JeventsCalendars($source, 'sourcecalendars',
'Calendar', 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'started', n2_('Started'),
0);
new Filter($limit, 'ended', n2_('Ended'), -1);
new Filter($limit, 'noendtime', 'Specified end
time', 0);
new Text($limit, 'location', n2_('Location'),
'*');
new Text($limit, 'dateformat', n2_('Date
format'), n2_('m-d-Y'));
new Text($limit, 'timeformat', n2_('Time
format'), 'G:i');
new Text($limit, 'datelanguage', n2_('Date
language'), '');
new Text($limit, 'variableoffset', 'Date variable
offset', '', array(
'tipLabel' => n2_('Offset value'),
'tipDescription' => n2_('Timezone offset in
hours. For example: +2 or -7. If you leave it empty, Joomla\'s System
-> Global Configuration -> Server -> Server Time Zone setting will
be used.')
));
new Text($limit, 'filteroffset', 'Date filter
offset', '', array(
'tipLabel' => n2_('Offset value'),
'tipDescription' => n2_('Timezone offset in
hours. For example: +2 or -7. If you leave it empty, Joomla\'s System
-> Global Configuration -> Server -> Server Time Zone setting will
be used.')
));
new MenuItems($limit, 'itemid', n2_('Menu item (item
ID)'), 0);
new Select($limit, 'eventstate', n2_('Status'),
1, array(
'options' => array(
'' => n2_('All'),
'1' => n2_('Published'),
'0' => n2_('Unpublished'),
'-1' => n2_('Trashed')
)
));
$standardImages =
$filterGroup->createRow('images-row');
new OnOff($standardImages, 'multiimages', 'JEvents
Standard Image and File Uploads plugin', 0);
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'jeventsorder',
'a.dtstart|*|desc', array(
'options' => array(
'' => n2_('None'),
'a.dtstart' => n2_('Start date'),
'a.dtend' => n2_('End date'),
'b.created' => n2_('Creation
time'),
'a.modified' => n2_('Modification
time'),
'a.summary' => n2_('Title'),
'a.hits' => n2_('Hits'),
'b.ev_id' => 'ID'
)
));
}
protected function _getData($count, $startIndex) {
$categories = array_map('intval', explode('||',
$this->data->get('sourcecategories', '')));
$calendars = array_map('intval', explode('||',
$this->data->get('sourcecalendars', '')));
$dateFormat = $this->data->get('dateformat',
'Y-m-d');
if (empty($dateFormat)) {
$dateFormat = 'Y-m-d';
}
$timeFormat = $this->data->get('timeformat',
'H:i:s');
if (empty($timeFormat)) {
$timeFormat = 'H:i:s';
}
$dateLanguage = $this->data->get('datelanguage',
'');
$itemId = $this->data->get('itemid',
'0');
$innerWhere = array();
if (!in_array('0', $categories)) {
$innerWhere[] = ' catid IN(' . implode(',
', $categories) . ')';
}
if (!in_array('0', $calendars)) {
$innerWhere[] = ' icsid IN(' . implode(',
', $calendars) . ')';
}
if (!empty($innerWhere)) {
$innerWhereStrAll = 'WHERE';
$innerWhereStrAll .= implode(' AND ', $innerWhere);
} else {
$innerWhereStrAll = '';
}
$where = array(
'a.evdet_id IN (SELECT detail_id FROM #__jevents_vevent
' . $innerWhereStrAll . ')',
'a.evdet_id NOT IN (SELECT eventdetail_id FROM
#__jevents_repetition GROUP BY eventdetail_id HAVING COUNT(eventdetail_id)
> 1)'
);
if (Filesystem::existsFile(JPATH_SITE . DIRECTORY_SEPARATOR .
'plugins' . DIRECTORY_SEPARATOR . 'jevents' .
DIRECTORY_SEPARATOR . 'jevfiles' . DIRECTORY_SEPARATOR .
'jevfiles.php') &&
$this->data->get('multiimages', 0)) {
$multi = true;
} else {
$multi = false;
}
$folder = '';
if ($multi) {
$plugin = JPluginHelper::getPlugin('jevents',
'jevfiles');
$params = new JRegistry($plugin->params);
$folder .= rtrim(JURI::root(false), '/') .
'/' . trim($params->get('image_path',
'images'), '/') . '/' .
trim($params->get('folder'), '/');
}
$config = JFactory::getConfig();
$timezone = new DateTimeZone($config->get('offset'));
$JOffset = $offset = $timezone->getOffset(new DateTime);
if ($this->data->get('filteroffset', '')
!== '') {
$offset =
intval($this->data->get('filteroffset', 0)) * 3600;
}
$today = time() + $offset;
switch ($this->data->get('started', '0'))
{
case 1:
$where[] = 'a.dtstart < ' . $today;
break;
case -1:
$where[] = 'a.dtstart >= ' . $today;
break;
}
switch ($this->data->get('ended', '-1'))
{
case 1:
$where[] = 'a.dtend < ' . $today;
break;
case -1:
$where[] = 'a.dtend >= ' . $today;
break;
}
switch ($this->data->get('noendtime', 0)) {
case 1:
$where[] = 'a.noendtime = 0';
break;
case -1:
$where[] = 'a.noendtime = 1';
break;
}
$location = $this->data->get('location',
'*');
if ($location != '*' && !empty($location)) {
$where[] = "location = '" . $location .
"'";
}
$state = $this->data->get('eventstate',
'1');
if ($state != "") {
$where[] = "b.state = '" . $state .
"'";
}
$order =
Common::parse($this->data->get('jeventsorder',
'a.dtstart|*|desc'));
if ($order[0]) {
$orderBy = 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query = 'SELECT d.rp_id, b.ev_id, FROM_UNIXTIME(a.dtstart) AS
event_start,
FROM_UNIXTIME(a.dtend) AS event_end, a.description,
a.location, a.summary,
a.contact, a.hits, a.extra_info';
$query .= ' FROM #__jevents_vevdetail AS a LEFT JOIN
#__jevents_vevent
AS b ON a.evdet_id = b.detail_id ';
$query .= 'LEFT JOIN #__jevents_repetition AS d ON a.evdet_id
= d.eventid ';
$query .= ' WHERE ' . implode(' AND ', $where)
. ' GROUP BY b.ev_id ' . $orderBy . ' LIMIT ' .
$startIndex . ', ' . $count;
$result = Database::queryAll($query);
$data = array();
if ($multi) {
$query = "SELECT ev_id,";
for ($i = 1; $i < 30; $i++) {
$query .= "imagename" . $i . ",";
}
$query .= "imagename30 FROM #__jev_files_combined
WHERE ev_id IN (SELECT ev_id FROM #__jevents_vevent " .
$innerWhereStrAll . ") AND ev_id NOT IN (SELECT eventid FROM
#__jevents_repetition GROUP BY eventid HAVING COUNT(eventid) > 1)";
$jevfilesresult = Database::queryAll($query);
foreach ($jevfilesresult AS $files) {
$event_id = $files['ev_id'];
unset($files['ev_id']);
foreach ($files AS $file) {
if (!empty($file)) {
$jffile[$event_id][] = $folder .
'/' . $file;
$jffileoriginals[$event_id][] = $folder .
'/originals/orig_' . $file;
$jffilethumbnails[$event_id][] = $folder .
'/thumbnails/thumb_' . $file;
}
}
}
}
if ($this->data->get('variableoffset',
'') !== '') {
$offset =
intval($this->data->get('variableoffset', 0)) * 3600;
} else {
$offset = $JOffset;
}
foreach ($result AS $res) {
$r = array(
'title' => $res['summary'],
'description' => $res['description']
);
$image = '';
$thumbnail = '';
if ($multi) {
$i = 0;
if (isset($jffile[$res['ev_id']])) {
$images = array();
foreach ($jffile[$res['ev_id']] AS $jff) {
$images += array(
'image_' . $i => $jff,
'image_orig_' . $i =>
$jffileoriginals[$res['ev_id']][$i],
'image_thumb_' . $i =>
$jffilethumbnails[$res['ev_id']][$i]
);
if (empty($image)) {
$image = $images['image_orig_' .
$i];
$thumbnail = $images['image_thumb_' .
$i];
}
$i++;
}
}
}
$r['image'] = ImageFallback::fallback(array($image),
array(
$res['description']
), $folder);
$r['thumbnail'] = ImageFallback::fallback(array(
$thumbnail,
$r['image']
), array(), $folder);
$r += array(
'url' =>
'index.php?option=com_jevents&task=icalrepeat.detail&evid='
. $res['rp_id'] . '&Itemid=' . $itemId,
'start_date' =>
GeneratorGroupJevents::formatDate(strtotime($res['event_start'])
+ $offset, 0, $dateFormat, $dateLanguage),
'start_time' =>
GeneratorGroupJevents::formatDate(strtotime($res['event_start'])
+ $offset, 1, $timeFormat, $dateLanguage),
'end_date' =>
GeneratorGroupJevents::formatDate(strtotime($res['event_end']) +
$offset, 0, $dateFormat, $dateLanguage),
'end_time' =>
GeneratorGroupJevents::formatDate(strtotime($res['event_end']) +
$offset, 1, $timeFormat, $dateLanguage),
'location' => $res['location'],
'contact' => $res['contact'],
'hits' => $res['hits'],
'extra_info' => $res['extra_info'],
'ev_id' => $res['ev_id'],
'rp_id' => $res['rp_id']
);
if ($multi) {
$r = array_merge($r, $images);
}
$data[] = $r;
}
return $data;
}
}PK1C�[ϩXj�(�(;Generator/Joomla/Jevents/Sources/JeventsRepeatingevents.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Sources;
use DateTime;
use DateTimeZone;
use JFactory;
use JPluginHelper;
use JRegistry;
use JURI;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Elements\JeventsCalendars;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\Elements\JeventsCategories;
use Nextend\SmartSlider3Pro\Generator\Joomla\Jevents\GeneratorGroupJevents;
class JeventsRepeatingevents extends AbstractGenerator {
protected $layout = 'event';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s.'),
n2_('Repeating events'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new JeventsCategories($source, 'sourcecategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new JeventsCalendars($source, 'sourcecalendars',
'Calendar', 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'noendtime', 'Specified end
time', 0);
new Text($limit, 'location', n2_('Location'),
'*');
new Text($limit, 'dateformat', n2_('Date
format'), n2_('m-d-Y'));
new Text($limit, 'timeformat', n2_('Time
format'), 'G:i');
new Text($limit, 'datelanguage', n2_('Date
language'), '');
new Text($limit, 'offset', 'Date variable
offset', '', array(
'tipLabel' => n2_('Offset value'),
'tipDescription' => n2_('Timezone offset in
hours. For example: +2 or -7. If you leave it empty, Joomla\'s System
-> Global Configuration -> Server -> Server Time Zone setting will
be used.')
));
new MenuItems($limit, 'itemid', n2_('Menu item (item
ID)'), 0);
$standardImages =
$filterGroup->createRow('images-row');
new OnOff($standardImages, 'multiimages', 'JEvents
Standard Image and File Uploads plugin', 0);
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'jeventsorder',
'a.dtstart|*|desc', array(
'options' => array(
'' => n2_('None'),
'a.dtstart' => n2_('Start date'),
'a.dtend' => n2_('End date'),
'b.created' => n2_('Creation
time'),
'a.modified' => n2_('Modification
time'),
'a.summary' => n2_('Title'),
'a.hits' => n2_('Hits'),
'b.ev_id' => 'ID',
)
));
}
protected function _getData($count, $startIndex) {
$categories = array_map('intval', explode('||',
$this->data->get('sourcecategories', '')));
$calendars = array_map('intval', explode('||',
$this->data->get('sourcecalendars', '')));
$dateFormat = $this->data->get('dateformat',
'Y-m-d');
if (empty($dateFormat)) {
$dateFormat = 'Y-m-d';
}
$timeFormat = $this->data->get('timeformat',
'H:i:s');
if (empty($timeFormat)) {
$timeFormat = 'H:i:s';
}
$dateLanguage = $this->data->get('datelanguage',
'');
$config = JFactory::getConfig();
$timezone = new DateTimeZone($config->get('offset'));
$offset = $timezone->getOffset(new DateTime);
if ($this->data->get('offset', '') !==
'') {
$offset = intval($this->data->get('offset', 0))
* 3600;
}
$itemId = $this->data->get('itemid',
'0');
$innerWhere = array();
if (!in_array('0', $categories)) {
$innerWhere[] = ' catid IN(' . implode(',
', $categories) . ')';
}
if (!in_array('0', $calendars)) {
$innerWhere[] = ' icsid IN(' . implode(',
', $calendars) . ')';
}
if (!empty($innerWhere)) {
$innerWhereStrAll = 'WHERE';
$innerWhereStrAll .= implode(' AND ', $innerWhere);
} else {
$innerWhereStrAll = '';
}
$where = array(
"a.evdet_id IN (SELECT detail_id FROM #__jevents_vevent
" . $innerWhereStrAll . ")",
"a.evdet_id IN (SELECT eventdetail_id FROM
#__jevents_repetition GROUP BY eventdetail_id HAVING COUNT(eventdetail_id)
> 1)",
"b.state = '1'"
);
if (Filesystem::existsFile(JPATH_SITE . DIRECTORY_SEPARATOR .
'plugins' . DIRECTORY_SEPARATOR . 'jevents' .
DIRECTORY_SEPARATOR . 'jevfiles' . DIRECTORY_SEPARATOR .
'jevfiles.php') &&
$this->data->get('multiimages', 0)) {
$multi = true;
} else {
$multi = false;
}
$folder = '';
if ($multi) {
$plugin = JPluginHelper::getPlugin('jevents',
'jevfiles');
$params = new JRegistry($plugin->params);
$folder .= rtrim(JURI::root(false), '/') .
'/' . trim($params->get('image_path',
'images'), '/') . '/' .
trim($params->get('folder'), '/');
}
switch ($this->data->get('noendtime', 0)) {
case 1:
$where[] = 'a.noendtime = 0';
break;
case -1:
$where[] = 'a.noendtime = 1';
break;
}
$location = $this->data->get('location',
'*');
if ($location != '*' && !empty($location)) {
$where[] = "location = '" . $location .
"'";
}
$order =
Common::parse($this->data->get('jeventsorder',
'a.dtstart|*|desc'));
if ($order[0]) {
$orderBy = 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query = 'SELECT d.rp_id, b.ev_id, FROM_UNIXTIME(a.dtstart) AS
event_start,
FROM_UNIXTIME(a.dtend) AS event_end, a.description,
a.location, a.summary,
a.contact, a.hits, a.extra_info ';
$query .= ' FROM #__jevents_vevdetail AS a LEFT JOIN
#__jevents_vevent
AS b ON a.evdet_id = b.detail_id ';
$query .= 'LEFT JOIN #__jevents_repetition AS d ON a.evdet_id
= d.eventid ';
$query .= ' WHERE ' . implode(' AND ', $where)
. ' GROUP BY b.ev_id ' . $orderBy . ' LIMIT ' .
$startIndex . ', ' . $count;
$result = Database::queryAll($query);
$data = array();
if ($multi) {
$query = "SELECT ev_id,";
for ($i = 1; $i < 30; $i++) {
$query .= "imagename" . $i . ",";
}
$query .= "imagename30 FROM #__jev_files_combined
WHERE ev_id IN (SELECT eventid FROM #__jevents_repetition GROUP BY eventid
HAVING COUNT(eventid) > 1)";
$jevfilesresult = Database::queryAll($query);
foreach ($jevfilesresult AS $files) {
$event_id = $files['ev_id'];
unset($files['ev_id']);
foreach ($files AS $file) {
if (!empty($file)) {
$jffile[$event_id][] = $folder .
'/' . $file;
$jffileoriginals[$event_id][] = $folder .
'/originals/orig_' . $file;
$jffilethumbnails[$event_id][] = $folder .
'/thumbnails/thumb_' . $file;
}
}
}
}
foreach ($result AS $res) {
$r = array(
'title' => $res['summary'],
'description' => $res['description']
);
$image = '';
$thumbnail = '';
if ($multi) {
$i = 0;
if (isset($jffile[$res['ev_id']])) {
$images = array();
foreach ($jffile[$res['ev_id']] AS $jff) {
$images += array(
'image_' . $i => $jff,
'image_orig_' . $i =>
$jffileoriginals[$res['ev_id']][$i],
'image_thumb_' . $i =>
$jffilethumbnails[$res['ev_id']][$i]
);
if (empty($image)) {
$image = $images['image_orig_' .
$i];
$thumbnail = $images['image_thumb_' .
$i];
}
$i++;
}
}
}
$r['image'] = ImageFallback::fallback(array($image),
array(
$res['description']
), $folder);
$r['thumbnail'] = ImageFallback::fallback(array(
$thumbnail,
$r['image']
), array(), $folder);
$r += array(
'url' =>
'index.php?option=com_jevents&task=icalrepeat.detail&evid='
. $res['rp_id'] . '&Itemid=' . $itemId,
'start_date' =>
GeneratorGroupJevents::formatDate(strtotime($res['event_start'])
+ $offset, 0, $dateFormat, $dateLanguage),
'start_time' =>
GeneratorGroupJevents::formatDate(strtotime($res['event_start'])
+ $offset, 1, $timeFormat, $dateLanguage),
'end_date' =>
GeneratorGroupJevents::formatDate(strtotime($res['event_end']) +
$offset, 0, $dateFormat, $dateLanguage),
'end_time' =>
GeneratorGroupJevents::formatDate(strtotime($res['event_end']) +
$offset, 1, $timeFormat, $dateLanguage),
'location' => $res['location'],
'contact' => $res['contact'],
'hits' => $res['hits'],
'extra_info' => $res['extra_info'],
'ev_id' => $res['ev_id'],
'rp_id' => $res['rp_id']
);
if ($multi) {
$r = array_merge($r, $images);
}
$data[] = $r;
}
return $data;
}
}PK1C�[��VV��AGenerator/Joomla/Joomshopping/Elements/JoomshoppingCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping\Elements;
use JFactory;
use JHTML;
use JSFactory;
use Nextend\Framework\Form\Element\Select;
class JoomshoppingCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
require_once(JPATH_SITE .
"/components/com_jshopping/lib/factory.php");
$lang = JSFactory::getLang();
$query = "SELECT m.category_id AS id, `" .
$lang->get('name') . "` AS title, `" .
$lang->get('name') . "` AS name, m.category_parent_id AS
parent_id, m.category_parent_id as parent
FROM #__jshopping_categories AS m
LEFT JOIN #__jshopping_products_to_categories AS f
ON m.category_id = f.category_id
WHERE m.category_publish = 1
ORDER BY ordering";
$db->setQuery($query);
$menuItems = $db->loadObjectList();
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0,
'', array(), $children, 9999, 0, 0);
$this->options['0'] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK1C�[!�
7��=Generator/Joomla/Joomshopping/Elements/JoomshoppingLabels.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping\Elements;
use JFactory;
use JSFactory;
use Nextend\Framework\Form\Element\Select;
class JoomshoppingLabels extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
require_once(JPATH_SITE .
"/components/com_jshopping/lib/factory.php");
$lang = JSFactory::getLang();
$query = "SELECT id, `" . $lang->get('name')
. "` AS name
FROM #__jshopping_product_labels
ORDER BY name";
$db->setQuery($query);
$labels = $db->loadObjectList();
$this->options['-1'] = n2_('All');
$this->options['0'] = n2_('None');
if (count($labels)) {
foreach ($labels AS $option) {
$this->options[$option->id] = $option->name;
}
}
}
}
PK1C�[n�DGenerator/Joomla/Joomshopping/Elements/JoomshoppingManufacturers.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping\Elements;
use JFactory;
use JSFactory;
use Nextend\Framework\Form\Element\Select;
class JoomshoppingManufacturers extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
require_once(JPATH_SITE .
"/components/com_jshopping/lib/factory.php");
$lang = JSFactory::getLang();
$query = "SELECT manufacturer_id AS id, `" .
$lang->get('name') . "` AS title
FROM #__jshopping_manufacturers
WHERE manufacturer_publish = 1
ORDER BY ordering";
$db->setQuery($query);
$menuItems = $db->loadObjectList();
$this->options['0'] = n2_('All');
if (count($menuItems)) {
foreach ($menuItems AS $option) {
$this->options[$option->id] = $option->title;
}
}
}
}
PK1C�[9���TT<Generator/Joomla/Joomshopping/GeneratorGroupJoomshopping.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping\Sources\JoomshoppingProducts;
class GeneratorGroupJoomshopping extends AbstractGeneratorGroup {
protected $name = 'joomshopping';
protected $url =
'https://extensions.joomla.org/extension/joomshopping/';
public function getLabel() {
return 'JoomShopping';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'JoomShopping');
}
public function isInstalled() {
return Filesystem::existsFile(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_jshopping' . DIRECTORY_SEPARATOR .
'jshopping.php');
}
protected function loadSources() {
new JoomshoppingProducts($this, 'products',
n2_('Products'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupJoomshopping);
PK1C�[b$C�1�1>Generator/Joomla/Joomshopping/Sources/JoomshoppingProducts.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping\Sources;
use JFactory;
use JSFactory;
use JTable;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping\Elements\JoomshoppingCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping\Elements\JoomshoppingLabels;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Joomshopping\Elements\JoomshoppingManufacturers;
class JoomshoppingProducts extends AbstractGenerator {
protected $layout = 'product';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'JoomShopping');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new JoomshoppingCategories($source, 'sourcecategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new JoomshoppingManufacturers($source,
'sourcemanufacturers', n2_('Manufacturer'), 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'sourceinstock', n2_('In
stock'), 0);
new JoomshoppingLabels($limit, 'sourcelabel',
n2_('Label'), -1);
new MenuItems($limit, 'itemid', n2_('Menu item (item
ID)'), 0);
new Text($limit, 'language', n2_('Language'),
'', array(
'tipLabel' => n2_('Language'),
'tipDescription' =>
'en-GB,de-DE,hu-HU,...',
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1882-joomla-joomshopping-generator#language',
));
new OnOff($limit, 'allimage', n2_('Ask down all
product images'), 0);
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'productsorder',
'pr.product_date_added|*|desc', array(
'options' => array(
'' =>
n2_('None'),
'pr.name' => n2_('Product
name'),
'category_name' =>
n2_('Category'),
'pr_cat.product_ordering' =>
n2_('Ordering'),
'pr.hits' =>
n2_('Hits'),
'pr.product_date_added' =>
n2_('Creation time'),
'pr.date_modify' =>
n2_('Modification time')
)
));
}
protected function _getData($count, $startIndex) {
require_once(JPATH_SITE .
"/components/com_jshopping/lib/factory.php");
$jShopConfig = JSFactory::getConfig();
$langObject = JSFactory::getLang();
$language = $this->data->get('language',
'');
$customLang = !empty($language);
if ($customLang) {
$checkLanguage = Database::queryRow("SELECT * FROM
#__jshopping_languages WHERE language = '" . $language .
"'");
if (empty($checkLanguage)) {
Notification::error('Wrong language code is used in
the generator settings!');
return null;
}
}
$session = JFactory::getSession();
$where = array(' pr.product_publish = 1 ');
$category = array_map('intval', explode('||',
$this->data->get('sourcecategories', '')));
if (!in_array(0, $category) && count($category) > 0) {
$where[] = 'pr_cat.category_id IN (' .
implode(',', $category) . ') ';
}
$manufacturers = array_map('intval',
explode('||',
$this->data->get('sourcemanufacturers', '')));
if (!in_array(0, $manufacturers) && count($manufacturers)
> 0) {
$where[] = 'pr.product_manufacturer_id IN (' .
implode(',', $manufacturers) . ') ';
}
switch ($this->data->get('sourceinstock', 0)) {
case 1:
$where[] = ' (pr.product_quantity > 0 OR
pr.unlimited = 1) ';
break;
case -1:
$where[] = ' (pr.product_quantity = 0 AND pr.unlimited
= 0) ';
break;
}
$label_id = intval($this->data->get('sourcelabel',
-1));
if ($label_id != -1) {
$where[] = ' pr.label_id = "' . $label_id .
'" ';
}
$o = '';
$order =
Common::parse($this->data->get('productsorder',
'pr.product_date_added|*|desc'));
if ($order[0]) {
if ($order[0] == 'pr.name') $order[0] =
'pr.`' . $langObject->get('name') . '`';
$o .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query = "SELECT
pr.product_id,
pr.product_publish,
pr_cat.product_ordering, ";
if ($customLang) {
$query .= " pr.`name_" . $language . "` as name,
pr.`short_description_" . $language . "`
as short_description,
pr.`description_" . $language . "` as
description,
man.`name_" . $language . "` as
man_name,";
} else {
$query .= " pr.`" .
$langObject->get('name') . "` as name,
pr.`" .
$langObject->get('short_description') . "` as
short_description,
pr.`" .
$langObject->get('description') . "` as description,
man.`" . $langObject->get('name')
. "` as man_name,";
}
$query .= " pr.product_ean as ean,
pr.product_quantity as qty,
pr.image as image,
pr.product_price,
pr.currency_id,
pr.hits,
pr.unlimited,
pr.product_date_added,
pr.label_id,
pr.vendor_id,
V.f_name as v_f_name,
V.l_name as v_l_name,
cat.category_image,
cat.category_id,";
if ($customLang) {
$query .= " cat.`name_" . $language . "` as
category_name,
cat.`alias_" . $language . "` as
category_alias,
cat.`short_description_" . $language . "`
as category_short_description,
cat.`description_" . $language . "` as
category_description";
} else {
$query .= " cat.`" .
$langObject->get('name') . "` as category_name,
cat.`" .
$langObject->get('alias') . "` as category_alias,
cat.`" .
$langObject->get('short_description') . "` as
category_short_description,
cat.`" .
$langObject->get('description') . "` as
category_description";
}
$query .= " FROM `#__jshopping_products` AS pr
LEFT JOIN `#__jshopping_products_to_categories` AS
pr_cat USING (product_id)
LEFT JOIN `#__jshopping_categories` AS cat USING
(category_id)
LEFT JOIN `#__jshopping_manufacturers` AS man ON
pr.product_manufacturer_id=man.manufacturer_id
LEFT JOIN `#__jshopping_vendors` as V on
pr.vendor_id=V.id
WHERE pr.parent_id=0 " . (count($where) ? '
AND ' . implode(' AND ', $where) : '') . "
GROUP BY pr.product_id " . $o . " LIMIT " . $startIndex .
", " . $count;
$result = Database::queryAll($query);
$data = array();
$itemID = $this->data->get('itemid',
'0');
$allImage = $this->data->get('allimage', 0);
for ($i = 0; $i < count($result); $i++) {
$product = JTable::getInstance('product',
'jshop');
$product->load($result[$i]['product_id']);
$jinput = JFactory::getApplication()->input;
$attr = $jinput->get('attr', null, null);
$back_value = $session->get('product_back_value');
if (!isset($back_value['pid'])) $back_value = array(
'pid' => null,
'attr' => null,
'qty' => null
);
if ($back_value['pid'] !=
$result[$i]['product_id']) $back_value = array(
'pid' => null,
'attr' => null,
'qty' => null
);
if (!is_array($back_value['attr']))
$back_value['attr'] = array();
if (count($back_value['attr']) == 0 &&
is_array($attr)) $back_value['attr'] = $attr;
$attributesDatas =
$product->getAttributesDatas($back_value['attr']);
$product->setAttributeActive($attributesDatas['attributeActive']);
getDisplayPriceForProduct($product->product_price);
$product->getExtendsData();
$r = array(
'title' =>
$result[$i]['name'],
'url' =>
SEFLink('index.php?option=com_jshopping&controller=product&task=view&product_id='
. $result[$i]['product_id'] . '&category_id=' .
$result[$i]['category_id']),
'joomla_url' =>
'index.php?option=com_jshopping&controller=product&task=view&product_id='
. $result[$i]['product_id'] . '&category_id=' .
$result[$i]['category_id'] . '&Itemid=' . $itemID,
'description' =>
$result[$i]['description'],
'short_description' =>
$result[$i]['short_description']
);
$op = $product->getOldPrice();
if ($result[$i]['image'] != null) {
$r += array(
'image' =>
ResourceTranslator::urlToResource($jShopConfig->image_product_live_path
. '/' . $result[$i]['image']),
'thumbnail' =>
ResourceTranslator::urlToResource($jShopConfig->image_product_live_path
. '/thumb_' . $result[$i]['image']),
'image_full' =>
ResourceTranslator::urlToResource($jShopConfig->image_product_live_path
. '/full_' . $result[$i]['image'])
);
} else {
$image =
ImageFallback::findImage($r['description']);
$r['image'] = $r['thumbnail'] =
ImageFallback::fallback(array($image));
}
$r += array(
'price' =>
formatprice($product->getPriceCalculate()),
'product_old_price' => $op > 0 ?
formatprice($op) : '',
'category_name' =>
$result[$i]['category_name'],
'category_short_description' =>
$result[$i]['category_short_description'],
'category_description' =>
$result[$i]['category_description'],
'category_url' =>
SEFLink('index.php?option=com_jshopping&controller=category&task=view&category_id='
. $result[$i]['category_id']),
'add_to_cart_url' =>
SEFLink('index.php?option=com_jshopping&controller=cart&task=add&quantity=1&to=cart&product_id='
. $result[$i]['product_id'] . '&category_id=' .
$result[$i]['category_id']),
'manufacturer_name' =>
$result[$i]['man_name'],
'product_id' =>
$result[$i]['product_id']
);
if ($allImage) {
$imageQuery = 'SELECT image_name FROM
#__jshopping_products_images WHERE product_id = ' .
$result[$i]['product_id'] . ' ORDER BY ordering asc';
$images = Database::queryAll($imageQuery);
for ($j = 0; $j < count($images); $j++) {
$r += array(
'image' . ($j + 1) =>
ImageFallback::fallback(array($images[$j]['image_name']),
array(), $jShopConfig->image_product_live_path),
'thumbnail' . ($j + 1) =>
ImageFallback::fallback(array('thumb_' .
$images[$j]['image_name']), array(),
$jShopConfig->image_product_live_path),
'image_full' . ($j + 1) =>
ImageFallback::fallback(array('full_' .
$images[$j]['image_name']), array(),
$jShopConfig->image_product_live_path)
);
}
}
$data[] = $r;
}
return $data;
}
}PK1C�[�K�-Generator/Joomla/K2/Elements/K2Categories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\K2\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class K2Categories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT m.*, m.name AS title, m.parent AS parent,
m.parent AS parent_id FROM #__k2_categories m WHERE published = 1 ORDER BY
parent, ordering';
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
$this->options['0'] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK1C�[S��D��'Generator/Joomla/K2/Elements/K2Tags.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\K2\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class K2Tags extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT id, name FROM #__k2_tags WHERE published = 1
ORDER BY id';
$tags = Database::queryAll($query, false, "object");
$this->options['0'] = n2_('All');
if (count($tags)) {
foreach ($tags AS $tag) {
$this->options[$tag->id] = $tag->name;
}
}
}
}
PK1C�[�< /��(Generator/Joomla/K2/GeneratorGroupK2.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\K2;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use Nextend\SmartSlider3Pro\Generator\Joomla\K2\Sources\K2Items;
class GeneratorGroupK2 extends AbstractGeneratorGroup {
protected $name = 'k2';
protected $url =
'https://extensions.joomla.org/extension/authoring-a-content/content-construction/k2/';
public function getLabel() {
return 'K2';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'K2 ' . n2_('Items'));
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_k2');
}
protected function loadSources() {
new K2Items($this, 'items', n2_('Items'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupK2);
PK1C�[R�g++'Generator/Joomla/K2/Sources/K2Items.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\K2\Sources;
use DateTime;
use DateTimeZone;
use JFactory;
use K2ModelItem;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use Nextend\SmartSlider3Pro\Generator\Joomla\K2\Elements\K2Categories;
use Nextend\SmartSlider3Pro\Generator\Joomla\K2\Elements\K2Tags;
class K2Items extends AbstractGenerator {
private $extraFields, $offset;
protected $layout = 'article';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
n2_('Items'));
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new K2Categories($source, 'k2itemssourcecategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new K2Tags($source, 'k2itemssourcetags',
n2_('Tag'), 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'k2itemssourcefeatured',
n2_('Featured'), 0);
new Text($limit, 'k2itemssourceuserid', n2_('User
ID'), '');
new Text($limit, 'k2itemssourcelanguage',
n2_('Language'), '');
new MenuItems($limit, 'k2itemsitemid', n2_('Menu
item (item ID)'), 0);
$date = $filterGroup->createRow('date-row');
new Text($date, 'sourcedateformat', n2_('Date
format'), n2_('m-d-Y'));
new Text($date, 'sourcetimeformat', n2_('Time
format'), 'G:i');
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'k2itemsorder',
'con.created|*|desc', array(
'options' => array(
'' => n2_('None'),
'con.title' => n2_('Title'),
'cat_title' =>
n2_('Category'),
'created_by_alias' => n2_('User
name'),
'con.featured' =>
n2_('Featured'),
'con.ordering' =>
n2_('Ordering'),
'con.hits' => n2_('Hits'),
'con.created' => n2_('Creation
time'),
'con.modified' => n2_('Modification
time')
)
));
}
protected function resetState() {
$this->extraFields = null;
}
function loadExtraFields() {
static $extraFields = null;
if ($extraFields === null) {
$query = 'SELECT ';
$query .= 'fgroups.name AS group_name, ';
$query .= 'field.name AS name, ';
$query .= 'field.id ';
$query .= 'FROM #__k2_extra_fields_groups AS fgroups
';
$query .= 'LEFT JOIN #__k2_extra_fields AS field ON
field.group = fgroups.id ';
$query .= 'WHERE field.published = 1 ';
$this->extraFields = Database::queryAll($query, false,
"assoc", "id");
}
}
public function datify($date, $format) {
$timestamp = strtotime($date) + $this->offset;
return date($format, $timestamp);
}
public function removeSpecChar($str) {
return iconv('UTF-8',
'ISO-8859-1//TRANSLIT//IGNORE', $str);
}
protected function _getData($count, $startIndex) {
$categories = array_map('intval', explode('||',
$this->data->get('k2itemssourcecategories',
'0')));
$tags = array_map('intval', explode('||',
$this->data->get('k2itemssourcetags', '0')));
$query = 'SELECT ';
$query .= 'con.id, ';
$query .= 'con.title, ';
$query .= 'con.alias, ';
$query .= 'con.introtext, ';
$query .= 'con.fulltext, ';
$query .= 'con.catid, ';
$query .= 'con.created, ';
$query .= 'con.modified, ';
$query .= 'cat.name AS cat_title, ';
$query .= 'cat.alias AS cat_alias, ';
$query .= 'con.created_by, ';
$query .= 'usr.name AS created_by_alias, ';
$query .= 'con.hits, ';
$query .= 'con.image_caption, ';
$query .= 'con.image_credits, ';
$query .= 'con.video, ';
$query .= 'con.extra_fields ';
$query .= 'FROM #__k2_items AS con ';
$query .= 'LEFT JOIN #__users AS usr ON usr.id =
con.created_by ';
$query .= 'LEFT JOIN #__k2_categories AS cat ON cat.id =
con.catid ';
$jNow = JFactory::getDate();
$now = $jNow->toSql();
$where = array(
"con.published = 1 AND (con.publish_up = '0000-00-00
00:00:00' OR con.publish_up IS NULL OR con.publish_up <
'" . $now . "') AND (con.publish_down =
'0000-00-00 00:00:00' OR con.publish_down IS NULL OR
con.publish_down > '" . $now . "') ",
'con.trash = 0 '
);
if (!in_array('0', $categories)) {
$where[] = 'con.catid IN (' . implode(',',
$categories) . ') ';
}
if (!in_array('0', $tags)) {
$where[] = 'con.id IN ( SELECT itemID FROM #__k2_tags_xref
WHERE tagID IN (' . implode(",", $tags) . ')) ';
}
$sourceUserId =
intval($this->data->get('k2itemssourceuserid',
''));
if ($sourceUserId) {
$where[] = 'con.created_by = ' . $sourceUserId .
' ';
}
switch ($this->data->get('k2itemssourcefeatured',
0)) {
case 1:
$where[] = 'con.featured = 1 ';
break;
case -1:
$where[] = 'con.featured = 0 ';
break;
}
$language =
$this->data->get('k2itemssourcelanguage', '*');
if ($language) {
$where[] = 'con.language = ' .
Database::quote($language) . ' ';
}
if (count($where) > 0) {
$query .= 'WHERE ' . implode(' AND ',
$where) . ' ';
}
$order =
Common::parse($this->data->get('k2itemsorder',
'con.created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count . ' ';
$result = Database::queryAll($query);
$this->loadExtraFields();
require_once(JPATH_SITE .
'/components/com_k2/helpers/utilities.php');
if (!class_exists('K2ModelItem')) {
require_once(JPATH_ADMINISTRATOR .
'/components/com_k2/models/model.php');
require_once(JPATH_SITE .
'/components/com_k2/models/item.php');
}
$k2item = new K2ModelItem();
$config = JFactory::getConfig();
$timezone = new
DateTimeZone($config->get('offset'));
$this->offset = $timezone->getOffset(new DateTime);
$data = array();
for ($i = 0; $i < count($result); $i++) {
$modified = '?t=' .
strftime("%Y%m%d_%H%M%S",
strtotime($result[$i]['modified']));
$r = array(
'title' =>
$result[$i]['title'],
'description' =>
$result[$i]['introtext'],
);
$thumbnail = JPATH_SITE . "/media/k2/items/cache/" .
md5("Image" . $result[$i]['id']) . "_S.jpg";
if (Filesystem::fileexists($thumbnail)) {
$r['thumbnail'] =
ResourceTranslator::urlToResource(Url::pathToUri($thumbnail)) . $modified;
}
$image = JPATH_SITE . "/media/k2/items/cache/" .
md5("Image" . $result[$i]['id']) . "_XL.jpg";
if (Filesystem::fileexists($image)) {
$r['image'] =
ResourceTranslator::urlToResource(Url::pathToUri($image)) . $modified;
} else {
$r['image'] = ImageFallback::fallback(array(),
array($r['description']));
}
if (!isset($r['thumbnail'])) {
$r['thumbnail'] = $r['image'];
}
$image = JPATH_SITE . "/media/k2/items/src/" .
md5("Image" . $result[$i]['id']) . ".jpg";
if (Filesystem::fileexists($image)) {
$r['src_image'] =
ResourceTranslator::urlToResource(Url::pathToUri($image)) . $modified;
}
if (!empty($result[$i]['video'])) {
$r['video'] = $result[$i]['video'];
preg_match_all('/(<source.*?src=[\'"](.*?)[\'"][^>]+>)/i',
$result[$i]['video'], $video);
$r['video_src'] = $video[2][0];
preg_match_all('/(<source.*?src=[\'"](.*mp4)[\'"][^>]+>)/i',
$result[$i]['video'], $mp4);
if (isset($mp4[2][0])) {
$r['video_src_mp4'] = $mp4[2][0];
}
}
$itemID = $this->data->get('k2itemsitemid',
'0');
$url =
'index.php?option=com_k2&view=item&id=' .
$result[$i]['id'] . ':' .
$result[$i]['alias'];
if (!empty($itemID) && $itemID != 0) {
$url .= '&Itemid=' . $itemID;
}
$r += array(
'url' => $url,
'url_label' => n2_('View
item'),
'category_title' =>
$result[$i]['cat_title'],
'category_url' =>
'index.php?option=com_k2&view=itemlist&task=category&id='
. $result[$i]['catid'] . ':' .
$result[$i]['cat_alias'],
'alias' =>
$result[$i]['alias'],
'id' =>
$result[$i]['id'],
'category_id' =>
$result[$i]['catid'],
'created_by_alias' =>
$result[$i]['created_by_alias'],
'hits' =>
$result[$i]['hits'],
'image_caption' =>
$result[$i]['image_caption'],
'image_credits' =>
$result[$i]['image_credits'],
'created_date' =>
$this->datify($result[$i]['created'],
$this->data->get('sourcedateformat', 'm-d-Y')),
'created_time' =>
$this->datify($result[$i]['created'],
$this->data->get('sourcetimeformat', 'G:i'))
);
$item = (object)$result[$i];
$extras =
$k2item->getItemExtraFields($result[$i]['extra_fields'],
$item);
$count = 0;
if (is_array($extras) && count($extras) > 0) {
foreach ($extras as $field) {
$count++;
$r['extra' . $count] = $r['extra' .
$this->removeSpecChar($field->id)] = $r['extra' .
$this->removeSpecChar($field->id . '_' .
preg_replace("/\W|_/", "",
$this->extraFields[$field->id]['group_name'] .
'_' . $this->extraFields[$field->id]['name']))] =
$field->value;
}
}
$data[] = $r;
}
return $data;
}
}
PK4C�[5���xx9Generator/Joomla/Mijoshop/Elements/MijoshopCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop\Elements;
use JHTML;
use MijoShop;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class MijoshopCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$lang = '';
$config = MijoShop::get('opencart')
->get('config');
$languageId = $config->get('config_language_id');
if (is_object($config) && $languageId) {
$lang = ' AND cd.language_id = ' . $languageId;
}
$query = 'SELECT
m.category_id AS id,
cd.name AS name,
cd.name AS title,
m.parent_id AS parent,
m.parent_id as parent_id
FROM #__mijoshop_category m
LEFT JOIN #__mijoshop_category_description AS cd ON
cd.category_id = m.category_id
WHERE m.status = 1 ' . $lang . '
ORDER BY m.sort_order';
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
$this->options['0'] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK4C�[ �8Generator/Joomla/Mijoshop/Elements/MijoshopLanguages.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class MijoshopLanguages extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT lang_id, title
FROM #__languages
WHERE published = 1';
$languages = Database::queryAll($query, false, "object");
$this->options['0'] = 'Auto';
if (count($languages)) {
foreach ($languages AS $language) {
$this->options[$language->lang_id] =
$language->title;
}
}
}
}
PK4C�[����44<Generator/Joomla/Mijoshop/Elements/MijoshopManufacturers.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class MijoshopManufacturers extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT manufacturer_id AS id, name FROM
#__mijoshop_manufacturer ORDER BY sort_order, id';
$manufacturers = Database::queryAll($query, false,
"object");
$this->options['0'] = n2_('All');
if (count($manufacturers)) {
foreach ($manufacturers AS $manufacturer) {
$this->options[$manufacturer->id] =
$manufacturer->name;
}
}
}
}
PK4C�[�<!�<<4Generator/Joomla/Mijoshop/GeneratorGroupMijoshop.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop\Sources\MijoshopProducts;
class GeneratorGroupMijoshop extends AbstractGeneratorGroup {
protected $name = 'mijoshop';
protected $url =
'https://miwisoft.com/joomla-extensions/mijoshop-joomla-shopping-cart';
public function getLabel() {
return 'MijoShop';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'MijoShop');
}
public function isInstalled() {
return Filesystem::existsFile(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_mijoshop' . DIRECTORY_SEPARATOR . 'mijoshop.php');
}
protected function loadSources() {
new MijoshopProducts($this, 'products',
n2_('Products'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupMijoshop);
PK4C�[��E�`!`!6Generator/Joomla/Mijoshop/Sources/MijoshopProducts.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop\Sources;
use JFactory;
use MijoShop;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop\Elements\MijoshopCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop\Elements\MijoshopLanguages;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Mijoshop\Elements\MijoshopManufacturers;
class MijoshopProducts extends AbstractGenerator {
protected $layout = 'product';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'MijoShop');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new MijoshopCategories($source,
'mijoshopsourcecategories', n2_('Category'), 0, array(
'isMultiple' => true
));
new MijoshopManufacturers($source,
'mijoshopsourcemanufacturers', n2_('Manufacturer'), 0,
array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'mijoshopsourcespecial',
'Special', 0);
new Filter($limit, 'mijoshopsourceinstock', n2_('In
stock'), 0);
new MijoshopLanguages($limit, 'mijoshopsourcelanguage',
n2_('Language'), '');
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'mijoshoporder',
'p.date_added|*|desc', array(
'options' => array(
'' => n2_('None'),
'pc.name' => n2_('Product
name'),
'p.sort_order' =>
n2_('Ordering'),
'p.viewed' => n2_('Viewed'),
'p.price' => n2_('Price'),
'p.date_added' => n2_('Creation
time'),
'p.date_modified' => n2_('Modification
time')
)
));
}
protected function _getData($count, $startIndex) {
//Load Mijoshop config
MijoShop::get('opencart')
->loadControllerFunction('startup/startup/index');
$config = MijoShop::get('opencart')
->get('config');
$currency = MijoShop::get('opencart')
->get('currency');
$router = MijoShop::get('router');
$language_id =
intval($this->data->get('mijoshopsourcelanguage'));
if (!$language_id) $language_id =
intval($config->get('config_language_id'));
$tmpLng = $config->get('config_language_id');
$config->set('config_language_id', $language_id);
$tax = MijoShop::get('opencart')
->get('tax');
$length = MijoShop::get('opencart')
->get('length');
$weight = MijoShop::get('opencart')
->get('weight');
$query = 'SELECT ';
$query .= 'p.product_id ';
$where = array(' p.status = 1 ');
switch ($this->data->get('mijoshopsourcespecial',
0)) {
case 0:
$query .= ', ps.price AS special_price ';
break;
case 1:
$query .= ', ps.price AS special_price ';
$where[] = ' ps.price IS NOT NULL';
$jNow = JFactory::getDate();
$now = $jNow->toSql();
$where[] = ' (ps.date_start = "0000-00-00"
OR ps.date_start < \'' . $now . '\')';
$where[] = ' (ps.date_end = "0000-00-00" OR
ps.date_end > \'' . $now . '\')';
break;
case -1:
$jNow = JFactory::getDate();
$now = $jNow->toSql();
$where[] = ' (ps.price IS NULL OR (ps.date_start >
\'' . $now . '\' OR ps.date_end < \'' .
$now . '\' AND ps.date_end <>
"0000-00-00"))';
break;
}
$query .= 'FROM #__mijoshop_product AS p ';
$query .= 'LEFT JOIN #__mijoshop_product_description AS pc
USING(product_id) ';
$query .= 'LEFT JOIN #__mijoshop_product_to_category AS ptc
USING(product_id) ';
$query .= 'LEFT JOIN #__mijoshop_product_special AS ps
USING(product_id) ';
$categories = array_map('intval', explode('||',
$this->data->get('mijoshopsourcecategories',
'0')));
if (!in_array(0, $categories) && count($categories) > 0)
{
$where[] = 'ptc.category_id IN (' .
implode(',', $categories) . ') ';
}
$manufacturers = array_map('intval',
explode('||',
$this->data->get('mijoshopmanufacturers', '0')));
if (!in_array(0, $manufacturers) && count($manufacturers)
> 0) {
$where[] = 'p.manufacturer_id IN (' .
implode(',', $manufacturers) . ') ';
}
switch ($this->data->get('mijoshopsourceinstock',
0)) {
case 1:
$where[] = ' p.quantity > 0 ';
break;
case -1:
$where[] = ' p.quantity = 0 ';
break;
}
$where[] = ' pc.language_id = ' . $language_id;
if (count($where) > 0) {
$query .= 'WHERE ' . implode(' AND ',
$where) . ' ';
}
$query .= 'GROUP BY p.product_id ';
$order =
Common::parse($this->data->get('mijoshoporder',
'p.date_added|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
$data = array();
for ($i = 0; $i < count($result); $i++) {
$pi = MijoShop::get('opencart')
->loadModelFunction('catalog/product/getProduct',
$result[$i]['product_id']);
$r = array(
'title' => $pi['name'],
'url' =>
$router->route('index.php?option=com_mijoshop&route=product/product&product_id='
. $pi['product_id']),
'description' =>
html_entity_decode($pi['description'])
);
if (!empty($pi['image'])) {
$r['image'] =
ResourceTranslator::urlToResource(Filesystem::pathToAbsoluteURL(DIR_IMAGE)
. $pi['image']);
} else {
$r['image'] = ImageFallback::fallback(array(),
array($r['description']));
}
$r += array(
'thumbnail' => $r['image'],
'price' =>
$currency->format($tax->calculate($pi['price'],
$pi['tax_class_id'], $config->get('config_tax')),
$config->get('config_currency'))
);
if (!empty($result[$i]['special_price'])) {
$r['special_price'] =
$currency->format($tax->calculate($result[$i]['special_price'],
$pi['tax_class_id'], $config->get('config_tax')),
$config->get('config_currency'));
}
if ($config->get('config_tax')) {
$r['price_without_tax'] =
$currency->format(!empty($result[$i]['special_price']) ?
$result[$i]['special_price'] : $pi['price'],
$config->get('config_currency'));
}
$r += array(
'model' => $pi['model'],
'sku' => $pi['sku'],
'upc' => $pi['upc'],
'ean' => $pi['ean'],
'jan' => $pi['jan'],
'isbn' => $pi['isbn'],
'mpn' => $pi['mpn'],
'location' => $pi['location'],
'weight' =>
$weight->format($pi['weight'],
$pi['weight_class_id']),
'length' =>
$length->format($pi['length'],
$pi['length_class_id']),
'width' =>
$length->format($pi['width'],
$pi['length_class_id']),
'height' =>
$length->format($pi['height'],
$pi['length_class_id']),
'tag' => $pi['tag']
);
$data[] = $r;
}
$config->set('config_language_id', $tmpLng);
return $data;
}
}
PK4C�["�99AGenerator/Joomla/Phocagallery/Elements/PhocagalleryCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Phocagallery\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class PhocagalleryCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT
*, title,
parent_id AS parent, parent_id
FROM #__phocagallery_categories
WHERE published = 1 ORDER BY parent_id, ordering';
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
$this->options['0'] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK4C�[��\���;Generator/Joomla/Phocagallery/Elements/PhocagalleryTags.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Phocagallery\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class PhocagalleryTags extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT id, title FROM #__phocagallery_tags WHERE
published = 1 ORDER BY ordering';
$tags = Database::queryAll($query, false, "object");
$this->options['0'] = n2_('All');
if (count($tags)) {
foreach ($tags AS $tag) {
$this->options[$tag->id] = $tag->title;
}
}
}
}
PK4C�[�p��++<Generator/Joomla/Phocagallery/GeneratorGroupPhocagallery.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Phocagallery;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Phocagallery\Sources\PhocagalleryImages;
class GeneratorGroupPhocagallery extends AbstractGeneratorGroup {
protected $name = 'phocagallery';
protected $url =
'https://extensions.joomla.org/extension/phoca-gallery/';
public function getLabel() {
return 'Phoca Gallery';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'Phoca Gallery');
}
public function isInstalled() {
return Filesystem::existsFolder(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_phocagallery');
}
protected function loadSources() {
new PhocagalleryImages($this, 'images',
n2_('Images'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupPhocagallery);
PK4C�[M���<Generator/Joomla/Phocagallery/Sources/PhocagalleryImages.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Phocagallery\Sources;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Phocagallery\Elements\PhocagalleryCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Phocagallery\Elements\PhocagalleryTags;
class PhocagalleryImages extends AbstractGenerator {
protected $layout = 'image_extended';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'Phoca Gallery');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new PhocagalleryCategories($source,
'phocagallerysourcecategories', n2_('Category'), 0,
array(
'isMultiple' => true
));
new PhocagalleryTags($source, 'phocagallerysourcetags',
n2_('Tag'), 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Text($limit, 'phocagallerysourcelanguage',
n2_('Language'), '*');
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'phocagalleryorder',
'con.date|*|desc', array(
'options' => array(
'' => n2_('None'),
'con.title' => n2_('Title'),
'cat_title' => n2_('Category
title'),
'con.ordering' => n2_('Ordering'),
'con.hits' => n2_('Hits'),
'con.date' => n2_('Date')
)
));
}
protected function _getData($count, $startIndex) {
$categories = array_map('intval', explode('||',
$this->data->get('phocagallerysourcecategories',
'')));
$tags = array_map('intval', explode('||',
$this->data->get('phocagallerysourcetags', '')));
$query = 'SELECT ';
$query .= 'con.id, ';
$query .= 'con.title, ';
$query .= 'con.alias, ';
$query .= 'con.filename, ';
$query .= 'con.description, ';
$query .= 'con.hits, ';
$query .= 'con.catid, ';
$query .= 'cat.title AS cat_title, ';
$query .= 'cat.description AS cat_description, ';
$query .= 'cat.alias AS cat_alias ';
$query .= 'FROM #__phocagallery AS con ';
$query .= 'LEFT JOIN #__phocagallery_categories AS cat ON
cat.id = con.catid ';
$where = array(
'con.published = 1 ',
'con.approved = 1 '
);
if (count($categories) > 0 && !in_array('0',
$categories)) {
$where[] = 'con.catid IN (' . implode(',',
$categories) . ') ';
}
if (count($tags) > 0 && !in_array('0', $tags))
{
$where[] = 'con.id IN (SELECT imgid FROM
#__phocagallery_tags_ref WHERE tagid IN (' . implode(',',
$tags) . ')) ';
}
$language =
$this->data->get('phocagallerysourcelanguage',
'*');
if ($language) {
$where[] = 'con.language = ' .
Database::quote($language) . ' ';
}
if (count($where)) {
$query .= ' WHERE ' . implode(' AND ',
$where);
}
$order =
Common::parse($this->data->get('phocagalleryorder',
'con.date|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
$data = array();
$uri = Url::getBaseUri();
for ($i = 0; $i < count($result); $i++) {
$image = ResourceTranslator::urlToResource($uri .
"/images/phocagallery/" . $result[$i]['filename']);
$r = array(
'image' => $image,
'thumbnail' => $image,
'title' =>
$result[$i]['title'],
'description' =>
$result[$i]['description'],
'url' =>
'index.php?option=com_phocagallery&view=detail&catid=' .
$result[$i]['catid'] . ':' .
$result[$i]['cat_alias'] . '&id=' .
$result[$i]['id'] . ':' .
$result[$i]['alias'],
'url_label' => n2_('View
image'),
'filename' =>
$result[$i]['filename'],
'category_title' =>
$result[$i]['cat_title'],
'category_description' =>
$result[$i]['cat_description'],
'category_url' =>
'index.php?option=com_phocagallery&view=category&id=' .
$result[$i]['catid'] . ':' .
$result[$i]['cat_alias'],
'hits' =>
$result[$i]['hits'],
'id' =>
$result[$i]['id']
);
$data[] = $r;
}
return $data;
}
}PK4C�[}�ـ�7Generator/Joomla/Redshop/Elements/RedshopCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Redshop\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class RedshopCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT
m.id AS id,
m.name AS name,
m.name AS title,
m.parent_id as parent_id
FROM #__redshop_category m
WHERE m.published = 1
ORDER BY m.id';
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
$this->options['0'] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK4C�[k8l6``:Generator/Joomla/Redshop/Elements/RedshopManufacturers.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Redshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class RedshopManufacturers extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT manufacturer_name, manufacturer_id FROM
#__redshop_manufacturer WHERE published = 1 ORDER BY ordering';
$manufacturers = Database::queryAll($query, false,
"object");
$this->options['0'] = n2_('All');
if (count($manufacturers)) {
foreach ($manufacturers AS $manufacturer) {
$this->options[$manufacturer->manufacturer_id] =
$manufacturer->manufacturer_name;
}
}
}
}
PK4C�[�V`6Generator/Joomla/Redshop/Elements/RedshopSuppliers.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Redshop\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class RedshopSuppliers extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = 'SELECT name, id FROM #__redshop_supplier WHERE
published = 1 ORDER BY id';
$suppliers = Database::queryAll($query, false, "object");
$this->options['0'] = n2_('All');
if (count($suppliers)) {
foreach ($suppliers AS $supplier) {
$this->options[$supplier->id] = $supplier->name;
}
}
}
}
PK4C�[�vAA2Generator/Joomla/Redshop/GeneratorGroupRedshop.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Redshop;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Redshop\Sources\RedshopProducts;
class GeneratorGroupRedshop extends AbstractGeneratorGroup {
protected $name = 'redshop';
protected $url =
'https://extensions.joomla.org/extensions/extension/e-commerce/shopping-cart/redshop/';
public function getLabel() {
return 'redSHOP';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'redSHOP');
}
public function isInstalled() {
return Filesystem::existsFile(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_redshop' . DIRECTORY_SEPARATOR . 'redshop.php');
}
protected function loadSources() {
new RedshopProducts($this, 'products',
n2_('Products'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupRedshop);
PK4C�[Qad��'�'4Generator/Joomla/Redshop/Sources/RedshopProducts.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Redshop\Sources;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Redshop\Elements\RedshopCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Redshop\Elements\RedshopManufacturers;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Redshop\Elements\RedshopSuppliers;
use producthelper;
use Redconfiguration;
class RedshopProducts extends AbstractGenerator {
protected $layout = 'product';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'redSHOP');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new RedshopCategories($source, 'sourcecategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new RedshopManufacturers($source, 'sourcemanufacturers',
n2_('Manufacturer'), 0, array(
'isMultiple' => true
));
new RedshopSuppliers($source, 'sourcesuppliers',
n2_('Supplier'), 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'sourcefeatured',
n2_('Featured'), 0);
new Filter($limit, 'sourceonsale', n2_('On
sale'), 0);
new Filter($limit, 'sourceexpired',
n2_('Expired'), 0);
new Filter($limit, 'sourceforsell', 'For sell',
0);
new Text($limit, 'product_parent_id', 'Parent
product ID', '*');
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'redshopproductsorder',
'pr.publish_date|*|desc', array(
'options' => array(
'' => n2_('None'),
'pr.product_name' => n2_('Product
name'),
'pr_cat.ordering' =>
n2_('Ordering'),
'pr.publish_date' => n2_('Creation
time'),
'pr.update_date' => n2_('Modification
time'),
'pr.visited' => n2_('Hits'),
'pr.product_price' => n2_('Price'),
'pr.discount_price' => n2_('Discount
price')
)
));
}
protected function _getData($count, $startIndex) {
$where = array(' pr.published = 1 ');
$categories = array_map('intval', explode('||',
$this->data->get('sourcecategories', '')));
if (!in_array(0, $categories) && count($categories) > 0)
{
$where[] = 'pr_cat.category_id IN (' .
implode(',', $categories) . ') ';
}
$manufacturers = array_map('intval',
explode('||',
$this->data->get('sourcemanufacturers', '')));
if (!in_array(0, $manufacturers) && count($manufacturers)
> 0) {
$where[] = 'pr.manufacturer_id IN (' .
implode(',', $manufacturers) . ') ';
}
$suppliers = array_map('intval', explode('||',
$this->data->get('sourcesuppliers', '')));
if (!in_array(0, $suppliers) && count($suppliers) > 0) {
$where[] = 'pr.supplier_id IN (' .
implode(',', $suppliers) . ') ';
}
switch ($this->data->get('sourcefeatured', 0)) {
case 1:
$where[] = ' pr.product_special = 1 ';
break;
case -1:
$where[] = ' pr.product_special = 0 ';
break;
}
switch ($this->data->get('sourceonsale', 0)) {
case 1:
$where[] = ' pr.product_on_sale = 1 ';
break;
case -1:
$where[] = ' pr.product_on_sale = 0 ';
break;
}
switch ($this->data->get('sourceexpired', 0)) {
case 1:
$where[] = ' pr.expired = 1 ';
break;
case -1:
$where[] = ' pr.expired = 0 ';
break;
}
switch ($this->data->get('sourceforsell', 0)) {
case 1:
$where[] = ' pr.not_for_sale = 1 ';
break;
case -1:
$where[] = ' pr.not_for_sale = 0 ';
break;
}
$parentID = $this->data->get('product_parent_id',
'*');
if (is_numeric($parentID)) {
$where[] = ' pr.product_parent_id = ' . $parentID .
' ';
}
$o = '';
$order =
Common::parse($this->data->get('redshopproductsorder',
'pr.publish_date|*|desc'));
if ($order[0]) {
$o .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query = "SELECT
pr.product_id,
pr.published,
pr_cat.ordering,
pr.product_name as name,
pr.product_s_desc as short_description,
pr.product_desc as description,
man.manufacturer_name as man_name,
pr.product_full_image as image,
pr.product_thumb_image as image_thumbnail,
pr.product_price,
pr.discount_price,
pr.visited,
pr.weight,
pr.product_length,
pr.product_height,
pr.product_width,
pr.product_diameter,
pr.product_preview_image,
pr.product_preview_back_image,
cat.id,
cat.id as category_id,
cat.name as category_name,
cat.short_description as
category_short_description,
cat.description as category_description
FROM `#__redshop_product` AS pr
LEFT JOIN `#__redshop_product_category_xref` AS pr_cat
USING (product_id)
LEFT JOIN `#__redshop_category` AS cat ON cat.id =
pr_cat.category_id
LEFT JOIN `#__redshop_manufacturer` AS man
USING(manufacturer_id)
WHERE " . implode(' AND ', $where) .
" GROUP BY pr.product_id " . $o . " LIMIT " .
$startIndex . ", " . $count;
$result = Database::queryAll($query);
$product = new producthelper;
//Redconfiguration needed for REDSHOP_FRONT_IMAGES_ABSPATH
new Redconfiguration;
$data = array();
for ($i = 0; $i < count($result); $i++) {
$r = array(
'title' =>
$result[$i]['name'],
'url' =>
'index.php?option=com_redshop&view=product&pid=' .
$result[$i]['product_id'] . '&cid=' .
$result[$i]['category_id'],
'description' =>
$result[$i]['description'],
'short_description' =>
$result[$i]['short_description'],
);
$r['image'] = ImageFallback::fallback(array(
@$result[$i]['image'],
@$result[$i]['product_preview_image'],
@$result[$i]['image_thumbnail']
), REDSHOP_FRONT_IMAGES_ABSPATH . "product");
if (empty($r['image'])) {
$r['image'] = ImageFallback::fallback(array(),
array(
$r['description'],
$r['short_description']
));
}
if (!empty($result[$i]['image_thumbnail'])) {
$r['thumbnail'] =
ResourceTranslator::urlToResource(REDSHOP_FRONT_IMAGES_ABSPATH .
"product/" . $result[$i]['image_thumbnail']);
} else if (!empty($result[$i]['image'])) {
$r['thumbnail'] =
ResourceTranslator::urlToResource(REDSHOP_FRONT_IMAGES_ABSPATH .
"product/" . $result[$i]['image']);
}
$r['price'] =
$product->getProductFormattedPrice($result[$i]['product_price']);
if (!empty($result[$i]['product_preview_image'])) {
$r['product_preview_image'] =
ResourceTranslator::urlToResource(REDSHOP_FRONT_IMAGES_ABSPATH .
"product/" . $result[$i]['product_preview_image']);
}
if
(!empty($result[$i]['product_preview_back_image'])) {
$r['product_preview_back_image'] =
ResourceTranslator::urlToResource(REDSHOP_FRONT_IMAGES_ABSPATH .
"product/" .
$result[$i]['product_preview_back_image']);
}
$r += array(
'unformatted_price' =>
$result[$i]['product_price'],
'discount_price' =>
$result[$i]['discount_price'],
'category_name' =>
$result[$i]['category_name'],
'category_url' =>
'index.php?option=com_redshop&view=category&cid=' .
$result[$i]['category_id'] . '&layout=detail',
'category_description' =>
$result[$i]['category_description'],
'category_short_description' =>
$result[$i]['category_short_description'],
'manufacturer_name' =>
$result[$i]['man_name'],
'hits' =>
$result[$i]['visited'],
'weight' =>
$result[$i]['weight'],
'product_length' =>
$result[$i]['product_length'],
'product_height' =>
$result[$i]['product_height'],
'product_width' =>
$result[$i]['product_width'],
'product_diameter' =>
$result[$i]['product_diameter'],
'id' =>
$result[$i]['product_id']
);
$data[] = $r;
}
return $data;
}
}
PK4C�[�Z�k��?Generator/Joomla/Rseventspro/Elements/RseventsproCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
jimport('joomla.access.access');
class RseventsproCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT id, name, parent_id, title FROM #__assets
WHERE name LIKE '%com_rseventspro.category%' ORDER BY
parent_id";
$menuItems = Database::queryAll($query, false, "object");
for ($i = 0; $i < count($menuItems); $i++) {
$name = explode('.', $menuItems[$i]->name);
@$menuItems[$i]->rsEventCatId = end($name);
}
$query = "SELECT id FROM #__assets WHERE name =
'com_rseventspro' LIMIT 1";
$mainParent = Database::queryAll($query, false,
"object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse',
$mainParent[0]->id, '', array(), $children, 9999, 0, 0);
$this->options['0'] = n2_('All');
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->rsEventCatId] =
$option->treename;
}
}
}
}
PK4C�[r/�
��;Generator/Joomla/Rseventspro/Elements/RseventsproGroups.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class RseventsproGroups extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT id, name FROM #__rseventspro_groups";
$groups = Database::queryAll($query, false, "object");
$this->options['0'] = n2_('All');
if (count($groups)) {
foreach ($groups AS $group) {
$this->options[$group->id] = $group->name;
}
}
}
}
PK4C�[��\�
>Generator/Joomla/Rseventspro/Elements/RseventsproLocations.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class RseventsproLocations extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT id, name FROM #__rseventspro_locations
WHERE published = 1";
$locations = Database::queryAll($query, false, "object");
$this->options['0'] = n2_('All');
if (count($locations)) {
foreach ($locations AS $location) {
$this->options[$location->id] = $location->name;
}
}
}
}
PK4C�[c��8��9Generator/Joomla/Rseventspro/Elements/RseventsproTags.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
class RseventsproTags extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$query = "SELECT id, name FROM #__rseventspro_tags WHERE
published = 1";
$tags = Database::queryAll($query, false, "object");
$this->options['0'] = n2_('All');
if (count($tags)) {
foreach ($tags AS $tag) {
$this->options[$tag->id] = $tag->name;
}
}
}
}
PK4C�[�[xHH:Generator/Joomla/Rseventspro/GeneratorGroupRseventspro.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Sources\RseventsproEvents;
class GeneratorGroupRseventspro extends AbstractGeneratorGroup {
protected $name = 'rseventspro';
protected $url =
'https://extensions.joomla.org/extension/rsevents-pro/';
public function getLabel() {
return 'RSEvents!Pro';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'RSEvents!Pro');
}
public function isInstalled() {
return Filesystem::existsFile(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_rseventspro' . DIRECTORY_SEPARATOR .
'rseventspro.php');
}
protected function loadSources() {
new RseventsproEvents($this, 'events',
n2_('Events'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupRseventspro);
PK5C�[)'��7�7:Generator/Joomla/Rseventspro/Sources/RseventsproEvents.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Sources;
use DateTime;
use DateTimeZone;
use JFactory;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Joomla\Element\Select\MenuItems;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Elements\RseventsproCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Elements\RseventsproGroups;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Elements\RseventsproLocations;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Rseventspro\Elements\RseventsproTags;
use rseventsproHelper;
use RseventsproHelperRoute;
class RseventsproEvents extends AbstractGenerator {
protected $layout = 'event';
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'RSEvents!Pro');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new RseventsproCategories($source, 'sourcecategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new RseventsproGroups($source, 'sourcegroups',
n2_('Group'), 0, array(
'isMultiple' => true
));
new RseventsproLocations($source, 'sourcelocations',
n2_('Location'), 0, array(
'isMultiple' => true
));
new RseventsproTags($source, 'sourcetags',
n2_('Tag'), 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'started', n2_('Started'),
0);
new Filter($limit, 'ended', n2_('Ended'), -1);
new Filter($limit, 'featured', n2_('Featured'),
0);
new Filter($limit, 'allday', n2_('All day
event'), 0);
new Filter($limit, 'recurring', n2_('Recurring
events'), 0);
new MenuItems($limit, 'itemid', n2_('Menu item (item
ID)'), 0);
$date = $filterGroup->createRow('date-row');
new Text($date, 'rseventsprodate', n2_('Date
format'), n2_('m-d-Y'));
new Text($date, 'rseventsprotime', n2_('Time
format'), 'G:i');
new Textarea($date, 'rseventstranslatedate',
n2_('Translate date and time'),
'January->January||February->February||March->March',
array(
'width' => 300,
'height' => 100
));
new Text($date, 'rseventsoffset', 'Date variable
offset', '', array(
'tipLabel' => n2_('Offset value'),
'tipDescription' => n2_('Timezone offset in
hours. For example: +2 or -7. If you leave it empty, Joomla\'s System
-> Global Configuration -> Server -> Server Time Zone setting will
be used.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1920-joomla-rsevents-pro-generator'
));
new Text($date, 'rseventsfilteroffset', 'Date filter
offset', '', array(
'tipLabel' => n2_('Offset value'),
'tipDescription' => n2_('Timezone offset in
hours. For example: +2 or -7. If you leave it empty, Joomla\'s System
-> Global Configuration -> Server -> Server Time Zone setting will
be used.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1920-joomla-rsevents-pro-generator'
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'rseventsproorder',
'start|*|desc', array(
'options' => array(
'' => n2_('None'),
'start' => n2_('Start date'),
'end' => n2_('End date'),
'created' => n2_('Creation date'),
'name' => n2_('Title'),
'hits' => n2_('Hits'),
'id' => 'ID'
)
));
}
private function translate($from, $translate) {
if (!empty($translate) && !empty($from)) {
foreach ($translate as $key => $value) {
$from = str_replace($key, $value, $from);
}
}
return $from;
}
private function formatDate($datetime, $format = 'Y-m-d',
$strtotime = true) {
if ($datetime != '0000-00-00 00:00:00') {
if ($strtotime) {
$datetime = strtotime($datetime);
}
return date($format, $datetime);
} else {
return '';
}
}
protected function _getData($count, $startIndex) {
require_once(JPATH_SITE .
'/components/com_rseventspro/helpers/rseventspro.php');
require_once(JPATH_SITE .
'/components/com_rseventspro/helpers/route.php');
$categories = array_map('intval', explode('||',
$this->data->get('sourcecategories', '')));
$groups = array_map('intval', explode('||',
$this->data->get('sourcegroups', '')));
$tags = array_map('intval', explode('||',
$this->data->get('sourcetags', '')));
$locations = array_map('intval', explode('||',
$this->data->get('sourcelocations', '')));
$where = array('re.published <> 0');
if (!in_array('0', $categories)) {
$where[] = "re.id IN (SELECT ide FROM
#__rseventspro_taxonomy WHERE id IN (" . implode(', ',
$categories) . ") AND type = 'category')";
}
if (!in_array('0', $groups)) {
$where[] = "re.id IN (SELECT ide FROM
#__rseventspro_taxonomy WHERE id IN (" . implode(', ',
$groups) . ") AND type = 'groups')";
}
if (!in_array('0', $tags)) {
$where[] = "re.id IN (SELECT ide FROM
#__rseventspro_taxonomy WHERE id IN (" . implode(', ',
$tags) . ") AND type = 'tag')";
}
if (!in_array('0', $locations)) {
$where[] = "re.location IN (" . implode(',
', $locations) . ")";
}
if (method_exists('rseventsproHelper',
'showdate')) {
$today = rseventsproHelper::showdate("now",
'Y-m-d H:i:s');
} else {
$today = date('Y-m-d H:i:s', time());
}
$config = JFactory::getConfig();
$timezone = new DateTimeZone($config->get('offset'));
$offset = $timezone->getOffset(new DateTime);
if ($this->data->get('rseventsfilteroffset',
'') !== '') {
$offset =
intval($this->data->get('rseventsfilteroffset', 0)) * 3600;
}
switch ($this->data->get('started', '0'))
{
case 1:
$where[] = "DATE_ADD(re.start, INTERVAL " .
$offset . " SECOND) < '" . $today . "'";
break;
case -1:
$where[] = "DATE_ADD(re.start, INTERVAL " .
$offset . " SECOND) >= '" . $today . "'";
break;
}
switch ($this->data->get('ended', '-1'))
{
case 1:
$where[] = "((DATE_ADD(re.end, INTERVAL " .
$offset . " SECOND) < '" . $today . "' AND
re.allday = 0) OR (DATE_ADD(re.start , INTERVAL " . $offset . "
SECOND)< '" . $today . "' AND re.allday = 1))";
break;
case -1:
$where[] = "((DATE_ADD(re.end, INTERVAL " .
$offset . " SECOND) >= '" . $today . "' AND
re.allday = 0) OR (DATE_ADD(re.start, INTERVAL " . $offset . "
SECOND) >= '" . $today . "' AND re.allday =
1))";
break;
}
switch ($this->data->get('allday', '0'))
{
case 1:
$where[] = "re.allday = 1";
break;
case -1:
$where[] = "re.allday = 0";
break;
}
switch ($this->data->get('recurring',
'0')) {
case 1:
$where[] = "re.recurring = 1";
break;
case -1:
$where[] = "re.recurring = 0";
break;
}
switch ($this->data->get('featured',
'0')) {
case 1:
$where[] = "re.featured = 1";
break;
case -1:
$where[] = "re.featured = 0";
break;
}
$query = 'SELECT
re.start, re.end, re.id, re.name, re.description, re.created,
re.URL, re.email, re.phone, re.metaname, re.metakeywords,
re.metadescription, re.hits, re.icon,
rl.name as loc_name, rl.url as loc_url, rl.address, rl.description
AS loc_description, rl.coordinates
FROM #__rseventspro_events AS re
LEFT JOIN #__rseventspro_locations AS rl ON re.location = rl.id
WHERE ' . implode(' AND ', $where) . ' ';
$order =
Common::parse($this->data->get('rseventsproorder',
'start|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY re.' . $order[0] . ' '
. $order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
$data = array();
$dateFormat = $this->data->get('rseventsprodate',
'm-d-Y');
$timeFormat = $this->data->get('rseventsprotime',
'G:i');
$translateDate =
$this->data->get('rseventstranslatedate', '');
$translateValue = explode('||', $translateDate);
$translate = array();
if ($translateDate !=
'January->January||February->February||March->March'
&& !empty($translateValue)) {
foreach ($translateValue as $tv) {
$translateArray = explode('->', $tv);
if (!empty($translateArray) &&
count($translateArray) == 2) {
$translate[$translateArray[0]] = $translateArray[1];
}
}
}
if ($this->data->get('rseventsoffset',
'') !== '') {
$offset =
intval($this->data->get('rseventsoffset', 0)) * 3600;
}
$itemID = $this->data->get('itemid',
'0');
$config = rseventsproHelper::getConfig();
foreach ($result as $res) {
$r = array(
'title' => $res['name'],
'description' => $res['description']
);
if (isset($res['icon'])) {
$res['icon'] =
'components/com_rseventspro/assets/images/events/' .
$res['icon'];
} else {
$res['icon'] = '';
}
$r['image'] = $r['thumbnail'] =
ImageFallback::fallback(array(
@$res['icon']
), array(
@$res['description']
));
$r['icon_small_width'] =
rseventsproHelper::thumb($res['id'],
$config->icon_small_width);
$r['icon_big_width'] =
rseventsproHelper::thumb($res['id'], $config->icon_big_width);
if (isset($r['icon_small_width'])) {
$r['thumbnail'] =
$r['icon_small_width'];
} else {
$r['thumbnail'] = $r['image'];
}
if ($res['start'] != '0000-00-00 00:00:00')
{
$res['start'] =
$this->formatDate(strtotime($res['start']) + $offset,
'Y-m-d H:i:s', false);
}
if ($res['end'] != '0000-00-00 00:00:00') {
$res['end'] =
$this->formatDate(strtotime($res['end']) + $offset,
'Y-m-d H:i:s', false);
}
$res['created'] =
$this->formatDate(strtotime($res['created']) + $offset,
'Y-m-d H:i:s', false);
if (method_exists('rseventsproHelper',
'showdate')) {
$r += array(
'start_date' =>
$this->translate(rseventsproHelper::showdate($res['start'],
$dateFormat), $translate),
'start_time' =>
$this->translate(rseventsproHelper::showdate($res['start'],
$timeFormat), $translate),
'end_date' =>
$this->translate(rseventsproHelper::showdate($res['end'],
$dateFormat), $translate),
'end_time' =>
$this->translate(rseventsproHelper::showdate($res['end'],
$timeFormat), $translate)
);
} else {
$r += array(
'start_date' =>
$this->translate($this->formatDate($res['start'],
$dateFormat), $translate),
'start_time' =>
$this->translate($this->formatDate($res['start'],
$timeFormat), $translate),
'end_date' =>
$this->translate($this->formatDate($res['end'],
$dateFormat), $translate),
'end_time' =>
$this->translate($this->formatDate($res['end'],
$timeFormat), $translate)
);
}
if (empty($itemID)) {
$itemID = rseventsproHelper::itemid($res['id']);
}
$r += array(
'url' =>
rseventsproHelper::route('index.php?option=com_rseventspro&layout=show&id='
. rseventsproHelper::sef($res['id'], $res['name']),
true, $itemID),
'created' =>
$res['created'],
'website' =>
$res['URL'],
'email' =>
$res['email'],
'phone' =>
$res['phone'],
'metaname' =>
$res['metaname'],
'metakeywords' =>
$res['metakeywords'],
'metadescription' =>
$res['metadescription'],
'hits' =>
$res['hits'],
'id' =>
$res['id'],
'location_name' =>
$res['loc_name'],
'location_url' =>
$res['loc_url'],
'location_address' =>
$res['address'],
'location_description' =>
$res['loc_description']
);
$coordinates = explode(',',
$res['coordinates']);
if (count($coordinates) == 2) {
$r += array(
'location_coordinates_lat' =>
$coordinates[0],
'location_coordinates_long' =>
$coordinates[1]
);
}
$data[] = $r;
}
return $data;
}
}PK5C�[���^yy=Generator/Joomla/Virtuemart/Elements/VirtuemartCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Virtuemart\Elements;
use JHTML;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
use VmConfig;
class VirtuemartCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
require_once(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_virtuemart' .
DIRECTORY_SEPARATOR . 'helpers' . DIRECTORY_SEPARATOR .
'config.php');
VmConfig::loadConfig();
$query = 'SELECT a.virtuemart_category_id AS id,
b.category_parent_id AS parent_id, b.category_parent_id AS parent, c.
category_name AS title ' . 'FROM #__virtuemart_categories AS a
' . 'LEFT JOIN #__virtuemart_category_categories AS b ON
a.virtuemart_category_id = b.category_child_id ' . 'LEFT JOIN
#__virtuemart_categories_' . VMLANG . ' AS c ON
a.virtuemart_category_id = c.virtuemart_category_id ' . 'WHERE
a.published = 1 ' . 'ORDER BY a.ordering';
$menuItems = Database::queryAll($query, false, "object");
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
if (!empty($v->title)) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] :
array();
array_push($list, $v);
$children[$pt] = $list;
}
}
}
$this->options['0'] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 0, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
}
}
PK5C�[vJCC@Generator/Joomla/Virtuemart/Elements/VirtuemartManufacturers.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Virtuemart\Elements;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Element\Select;
use VmConfig;
class VirtuemartManufacturers extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
require_once(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_virtuemart' .
DIRECTORY_SEPARATOR . 'helpers' . DIRECTORY_SEPARATOR .
'config.php');
VmConfig::loadConfig();
$query = 'SELECT virtuemart_manufacturer_id AS id, mf_name AS
name FROM #__virtuemart_manufacturers_' . VMLANG . ' ORDER BY
id';
$manufacturers = Database::queryAll($query, false,
"object");
$this->options['0'] = n2_('All');
if (count($manufacturers)) {
foreach ($manufacturers AS $manufacturer) {
$this->options[$manufacturer->id] =
$manufacturer->name;
}
}
}
}
PK5C�[�wz__8Generator/Joomla/Virtuemart/GeneratorGroupVirtuemart.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Virtuemart;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Virtuemart\Sources\VirtuemartProducts;
class GeneratorGroupVirtuemart extends AbstractGeneratorGroup {
protected $name = 'virtuemart';
protected $url =
'https://extensions.joomla.org/extension/virtuemart/';
public function getLabel() {
return 'VirtueMart';
}
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'VirtueMart');
}
public function isInstalled() {
return Filesystem::existsFile(JPATH_ADMINISTRATOR .
DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR .
'com_virtuemart' . DIRECTORY_SEPARATOR . 'helpers' .
DIRECTORY_SEPARATOR . 'config.php');
}
protected function loadSources() {
new VirtuemartProducts($this, 'products',
n2_('Products'));
}
}
GeneratorFactory::addGenerator(new GeneratorGroupVirtuemart);
PK5C�[y����=�=:Generator/Joomla/Virtuemart/Sources/VirtuemartProducts.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Generator\Joomla\Virtuemart\Sources;
use CurrencyDisplay;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Virtuemart\Elements\VirtuemartCategories;
use
Nextend\SmartSlider3Pro\Generator\Joomla\Virtuemart\Elements\VirtuemartManufacturers;
use VirtueMartModelProduct;
use VmConfig;
class VirtuemartProducts extends AbstractGenerator {
protected $layout = 'product', $media_product_path,
$media_product_path_resized, $resized_extensions = array(), $extensions =
array(
'.jpg',
'.jpeg',
'.png',
'.svg',
'.gif',
'.webp',
'.JPG',
'.JPEG',
'.PNG',
'.SVG',
'.GIF',
'.WEBP'
);
public function getDescription() {
return sprintf(n2_('Creates slides from %1$s content.'),
'VirtueMart');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new VirtuemartCategories($source, 'virtuemartcategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new VirtuemartManufacturers($source,
'virtuemartmanufacturers', n2_('Manufacturer'), 0,
array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'virtuemartfeatured',
n2_('Featured'), 0);
new Filter($limit, 'virtuemartinstock', n2_('In
stock'), 0);
new Text($limit, 'virtuemartlanguage',
n2_('Language'), 'en_gb');
new Text($limit, 'fallbacklanguage', n2_('Fallback
language'), '');
new OnOff($limit, 'virtuemartparentonly', n2_('Show
parent products only'), 0);
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'virtuemartproductsorder',
'prod.created_on|*|desc', array(
'options' => array(
'' =>
n2_('None'),
'prod_ext.product_name' => n2_('Product
name'),
'cat.category_name' =>
n2_('Category'),
'prod.product_special' =>
'Special',
'cat_x.ordering' =>
n2_('Ordering'),
'prod.hits' =>
n2_('Hits'),
'prod.created_on' => n2_('Creation
time'),
'prod.modified_on' =>
n2_('Modification time'),
'rand()' =>
n2_('Random')
)
));
}
protected function _getData($count, $startIndex) {
require_once(JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .
'components' . DIRECTORY_SEPARATOR . 'com_virtuemart' .
DIRECTORY_SEPARATOR . 'helpers' . DIRECTORY_SEPARATOR .
'config.php');
VmConfig::loadConfig();
$language = $this->data->get('virtuemartlanguage',
'en_gb');
if (!$language) $language = VMLANG;
$fallbackLanguage =
$this->data->get('fallbacklanguage', '');
$categories = array_map('intval',
explode('||',
$this->data->get('virtuemartcategories', '')));
$manufacturers = array_map('intval',
explode('||',
$this->data->get('virtuemartmanufacturers',
'')));
$query = 'SELECT ';
$query .= 'prod.virtuemart_product_id AS id, ';
$query .= 'prod.product_sku AS sku, ';
$query .= 'prod_ext.product_name AS name, ';
$query .= 'prod_ext.product_s_desc AS short_description,
';
$query .= 'prod_ext.product_desc AS description, ';
$query .= 'prod_ext.slug AS slug, ';
$query .= 'cat.virtuemart_category_id AS category_id, ';
$query .= 'cat.category_name AS category_name, ';
$query .= 'cat.category_description AS category_description,
';
$query .= 'cat.slug AS category_slug, ';
$query .= 'man.virtuemart_manufacturer_id AS manufacturer_id,
';
$query .= 'man.mf_name AS manufacturer_name, ';
$query .= 'man.mf_email AS manufacturer_email, ';
$query .= 'man.mf_desc AS manufacturer_description, ';
$query .= 'man.mf_url AS manufacturer_url, ';
$query .= 'man.slug AS manufacturer_slug, ';
if (!empty($fallbackLanguage)) {
$query .= 'prod_ext_fb.product_name AS title_fb, ';
$query .= 'prod_ext_fb.product_s_desc AS
short_description_fb, ';
$query .= 'prod_ext_fb.product_desc AS description_fb,
';
$query .= 'prod_ext_fb.slug AS slug_fb, ';
$query .= 'cat_fb.virtuemart_category_id AS
category_id_fb, ';
$query .= 'cat_fb.category_name AS category_name_fb,
';
$query .= 'cat_fb.category_description AS
category_description_fb, ';
$query .= 'cat_fb.slug AS category_slug_fb, ';
$query .= 'man_fb.virtuemart_manufacturer_id AS
manufacturer_id_fb, ';
$query .= 'man_fb.mf_name AS manufacturer_name_fb, ';
$query .= 'man_fb.mf_email AS manufacturer_email_fb,
';
$query .= 'man_fb.mf_desc AS manufacturer_description_fb,
';
$query .= 'man_fb.mf_url AS manufacturer_url_fb, ';
$query .= 'man_fb.slug AS manufacturer_slug_fb, ';
}
$query .= 'med.file_url AS image, ';
$query .= 'med.file_url_thumb AS thumbnail ';
$query .= 'FROM #__virtuemart_products AS prod ';
$query .= 'LEFT JOIN #__virtuemart_products_' . $language
. ' AS prod_ext ON prod.virtuemart_product_id =
prod_ext.virtuemart_product_id ';
$query .= 'LEFT JOIN #__virtuemart_product_categories AS cat_x
ON cat_x.virtuemart_product_id = prod.virtuemart_product_id ';
$query .= 'LEFT JOIN #__virtuemart_categories_' .
$language . ' AS cat ON cat_x.virtuemart_category_id =
cat.virtuemart_category_id ';
$query .= 'LEFT JOIN #__virtuemart_product_manufacturers AS
man_x ON man_x.virtuemart_product_id = prod.virtuemart_product_id ';
$query .= 'LEFT JOIN #__virtuemart_manufacturers_' .
$language . ' AS man ON man_x.virtuemart_manufacturer_id =
man.virtuemart_manufacturer_id ';
$query .= 'LEFT JOIN #__virtuemart_product_medias AS med_x ON
med_x.virtuemart_product_id = prod.virtuemart_product_id ';
$query .= 'LEFT JOIN #__virtuemart_medias AS med ON
med_x.virtuemart_media_id = med.virtuemart_media_id ';
if (!empty($fallbackLanguage)) {
$query .= 'LEFT JOIN #__virtuemart_products_' .
$fallbackLanguage . ' AS prod_ext_fb ON prod.virtuemart_product_id =
prod_ext_fb.virtuemart_product_id ';
$query .= 'LEFT JOIN #__virtuemart_categories_' .
$fallbackLanguage . ' AS cat_fb ON cat_x.virtuemart_category_id =
cat_fb.virtuemart_category_id ';
$query .= 'LEFT JOIN #__virtuemart_manufacturers_' .
$fallbackLanguage . ' AS man_fb ON man_x.virtuemart_manufacturer_id =
man_fb.virtuemart_manufacturer_id ';
}
$where = array(
' prod.published = 1 ',
' med.file_is_downloadable = 0 ',
' med.file_is_forSale = 0 '
);
if (!in_array(0, $categories) && count($categories) > 0)
{
$where[] = 'cat_x.virtuemart_category_id IN (' .
implode(',', $categories) . ') ';
}
if (!in_array(0, $manufacturers) && count($manufacturers)
> 0) {
$where[] = 'man.virtuemart_manufacturer_id IN (' .
implode(',', $manufacturers) . ') ';
}
switch ($this->data->get('virtuemartfeatured', 0))
{
case 1:
$where[] = ' prod.product_special = 1 ';
break;
case -1:
$where[] = ' prod.product_special = 0 ';
break;
}
switch ($this->data->get('virtuemartinstock', 0)) {
case 1:
$where[] = ' prod.product_in_stock > 0 ';
break;
case -1:
$where[] = ' prod.product_in_stock = 0 ';
break;
}
if ($this->data->get('virtuemartparentonly', 0)) {
$where[] = ' prod.virtuemart_product_id IN (SELECT
product_parent_id FROM #__virtuemart_products) ';
}
$query .= 'WHERE ' . implode(' AND ', $where) .
' GROUP BY prod.virtuemart_product_id ';
$order =
Common::parse($this->data->get('virtuemartproductsorder',
'prod.created_on|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$result = Database::queryAll($query);
require_once(JPATH_ADMINISTRATOR . DS . 'components' . DS
. 'com_virtuemart' . DS . 'helpers' . DS .
'currencydisplay.php');
require_once(JPATH_ADMINISTRATOR . DS . 'components' . DS
. 'com_virtuemart' . DS . 'models' . DS .
'product.php');
$currency = CurrencyDisplay::getInstance();
$data = array();
$ids = array();
$this->media_product_path =
VmConfig::get('media_product_path');
$this->media_product_path_resized = $this->media_product_path
. 'resized/';
$thumbnail_width = str_replace('px', '',
VmConfig::get('img_width'));
$thumbnail_height = str_replace('px', '',
VmConfig::get('img_height'));
foreach ($this->extensions AS $extension) {
$this->resized_extensions[] = '_' .
$thumbnail_width . 'x' . $thumbnail_height . $extension;
}
for ($i = 0; $i < count($result); $i++) {
$productModel = new VirtueMartModelProduct();
$p =
$productModel->getProduct($result[$i]['id'], TRUE, TRUE, TRUE,
1, 0);
$ids[] = $result[$i]['id'];
$url =
'index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='
. $result[$i]['id'];
if
(!empty($p->categoryItem[0]['virtuemart_category_id'])
&& $p->categoryItem[0]['virtuemart_category_id'] != 0)
{
$url .= '&virtuemart_category_id=' .
$p->categoryItem[0]['virtuemart_category_id'];
}
$r = array(
'title' =>
$result[$i]['name'],
'url' => $url,
'description' =>
$result[$i]['description']
);
$r['image'] = ImageFallback::fallback(array(
$result[$i]['image'] ==
'images/stories/virtuemart/product/cart_logo.jpg' ? ''
: $result[$i]['image']
), array(
$result[$i]['description'],
$result[$i]['short_description']
));
$r['thumbnail'] = ImageFallback::fallback(array(
$result[$i]['thumbnail'],
$this->thumbnail($result[$i]['image']),
$r['image']
));
$r += array(
'price' =>
$currency->createPriceDiv('costPrice', '',
$p->prices, true),
'short_description' =>
$result[$i]['short_description'],
'category_name' =>
$result[$i]['category_name'],
'category_description' =>
$result[$i]['category_description'],
'category_url' =>
!empty($result[$i]['category_id']) ?
'index.php?option=com_virtuemart&view=category&virtuemart_category_id='
. $result[$i]['category_id'] : '',
'manufacturer_name' =>
$result[$i]['manufacturer_name'],
'manufacturer_description' =>
$result[$i]['manufacturer_description'],
'manufacturer_email' =>
$result[$i]['manufacturer_email'],
'manufacturer_url' =>
$result[$i]['manufacturer_url'],
'base_price' =>
$currency->createPriceDiv('basePrice', '',
$p->prices, true),
'base_price_variant' =>
$currency->createPriceDiv('basePriceVariant', '',
$p->prices, true),
'base_price_with_tax' =>
$currency->createPriceDiv('basePriceWithTax', '',
$p->prices, true),
'discounted_price_without_tax' =>
$currency->createPriceDiv('discountedPriceWithoutTax',
'', $p->prices, true),
'price_before_tax' =>
$currency->createPriceDiv('priceBeforeTax', '',
$p->prices, true),
'sales_price' =>
$currency->createPriceDiv('salesPrice', '',
$p->prices, true),
'tax_amount' =>
$currency->createPriceDiv('taxAmount', '',
$p->prices, true),
'sales_price_with_discount' =>
$currency->createPriceDiv('salesPriceWithDiscount',
'', $p->prices, true),
'sales_price_temp' =>
$currency->createPriceDiv('salesPriceTemp', '',
$p->prices, true),
'unit_price' =>
$currency->createPriceDiv('unitPrice', '',
$p->prices, true),
'price_without_tax' =>
$currency->createPriceDiv('priceWithoutTax', '',
$p->prices, true),
'discount_amount' =>
$currency->createPriceDiv('discountAmount', '',
$p->prices, true),
'sku' =>
$result[$i]['sku'],
'id' =>
$result[$i]['id'],
'category_id' =>
$result[$i]['category_id'],
'manufacturer_id' =>
$result[$i]['manufacturer_id']
);
if (!empty($fallbackLanguage)) {
foreach ($r AS $key => $value) {
if ($value === '' || $value === null) {
if (!empty($result[$i][$key . '_fb'])) {
$r[$key] = $result[$i][$key . '_fb'];
}
}
}
}
$data[] = $r;
}
if (!empty($ids)) {
$query = 'SELECT vm.file_url, vm.file_url_thumb,
vpm.virtuemart_product_id AS id
FROM #__virtuemart_medias AS vm
LEFT JOIN #__virtuemart_product_medias AS vpm
ON vm.virtuemart_media_id = vpm.virtuemart_media_id
WHERE vm.virtuemart_media_id IN
(SELECT virtuemart_media_id FROM
#__virtuemart_product_medias WHERE virtuemart_product_id IN (' .
implode(',', $ids) . '))';
$images = Database::queryAll($query);
for ($i = 0; $i < count($data); $i++) {
$k = 1;
for ($j = 0; $j < count($images); $j++) {
if ($data[$i]['id'] ==
$images[$j]['id']) {
$data[$i]['image_' . $k] =
ImageFallback::fallback(array($images[$j]['file_url']));
$data[$i]['thumbnail_' . $k] =
ImageFallback::fallback(array(
$images[$j]['file_url_thumb'],
$this->thumbnail($images[$j]['file_url']),
$images[$j]['file_url']
));
$k++;
}
}
}
}
return $data;
}
private function thumbnail($image) {
return str_replace($this->media_product_path,
$this->media_product_path_resized, str_replace($this->extensions,
$this->resized_extensions, $image));
}
}
PK5C�[� ���(LayerAnimation/LayerAnimationStorage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\LayerAnimation;
use Nextend\Framework\Pattern\SingletonTrait;
class LayerAnimationStorage {
use SingletonTrait;
protected $data = array(
'in' => array(),
'loop' => array(),
'out' => array()
);
protected function init() {
$this->data['in'] = array(
'fade' => array(
'icon' => 'ssi_24--fade',
'label' => n2_('Fade'),
'a' => $this->inFade()
),
'move' => array(
'icon' => 'ssi_24--move',
'label' => n2_('Move'),
'a' => $this->inMove()
),
'reveal' => array(
'icon' => 'ssi_24--reveal',
'label' => n2_('Reveal'),
'a' => $this->inReveal()
),
'scale' => array(
'icon' => 'ssi_24--scale',
'label' => n2_('Scale'),
'a' => $this->inScale()
),
'flip' => array(
'icon' => 'ssi_24--flip',
'label' => n2_('Flip'),
'a' => $this->inFlip()
),
'rotate' => array(
'icon' => 'ssi_24--rotate',
'label' => n2_('Rotate'),
'a' => $this->inRotate()
),
'bounce' => array(
'icon' => 'ssi_24--bounce',
'label' => n2_('Bounce'),
'a' => $this->inBounce()
),
'special' => array(
'icon' => 'ssi_24--special',
'label' => n2_('Special'),
'a' => $this->inSpecial()
)
);
$this->data['loop'] = array(
'special' => array(
'icon' => 'ssi_24--special',
'label' => n2_('Special'),
'a' => $this->loopSpecial()
)
);
$this->data['out'] = array(
'fade' => array(
'icon' => 'ssi_24--fade',
'label' => n2_('Fade'),
'a' => $this->outFade()
),
);
}
/**
* @return string
*/
public function getData() {
return json_encode($this->data);
}
private function inFade() {
return array(
array(
'type' => 'basic',
'name' => n2_('Fade'),
'keyFrames' => array(
array(
'opacity' => 0
)
)
),
array(
'type' => 'basic',
'name' => n2_('Blur'),
'keyFrames' => array(
array(
'n2blur' => 10,
'opacity' => 0
)
)
),
array(
'type' => 'basic',
'name' => n2_('Left fade'),
'keyFrames' => array(
array(
'opacity' => 0,
'x' => 400
)
)
),
array(
'type' => 'basic',
'name' => n2_('Right fade'),
'keyFrames' => array(
array(
'opacity' => 0,
'x' => -400
)
)
),
array(
'type' => 'basic',
'name' => n2_('Top fade'),
'keyFrames' => array(
array(
'opacity' => 0,
'y' => 400
)
)
),
array(
'type' => 'basic',
'name' => n2_('Bottom fade'),
'keyFrames' => array(
array(
'opacity' => 0,
'y' => -400
)
)
),
array(
'type' => 'basic',
'name' => n2_('Flash'),
'keyFrames' => array(
array(
'ease' =>
'easeOutCubic',
'duration' => 0.25,
'opacity' => 1
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.25,
'opacity' => 0
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.25,
'opacity' => 1
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.25,
'opacity' => 0
)
)
),
);
}
private function inMove() {
return array(
array(
'type' => 'basic',
'name' => n2_('Left'),
'keyFrames' => array(
array(
'x' => 400
)
)
),
array(
'type' => 'basic',
'name' => n2_('Right'),
'keyFrames' => array(
array(
'x' => -400
)
)
),
array(
'type' => 'basic',
'name' => n2_('Top'),
'keyFrames' => array(
array(
'y' => 400
)
)
),
array(
'type' => 'basic',
'name' => n2_('Bottom'),
'keyFrames' => array(
array(
'y' => -400
)
)
)
);
}
private function inReveal() {
return array(
array(
'type' => 'reveal',
'name' => n2_('Left to Right'),
'data' => array(
'from' => 'left',
'to' => 'right'
)
),
array(
'type' => 'reveal',
'name' => n2_('Top to Bottom'),
'data' => array(
'from' => 'top',
'to' => 'bottom'
)
),
array(
'type' => 'reveal',
'name' => n2_('Skew Left to Right'),
'data' => array(
'from' => 'skew-left',
'to' => 'skew-right'
)
),
array(
'type' => 'reveal',
'name' => n2_('Curtains'),
'data' => array(
'from' => 'curtains-horizontal',
'to' => 'curtains-horizontal'
)
),
array(
'type' => 'reveal',
'name' => n2_('Rotate'),
'data' => array(
'from' => 'rotate-top-left',
'to' => 'rotate-top-left-'
)
),
array(
'type' => 'reveal',
'name' => n2_('Circle'),
'data' => array(
'from' => 'circle-left',
'to' => 'circle-right'
)
)
);
}
private function inScale() {
return array(
array(
'type' => 'basic',
'name' => n2_('Downscale'),
'keyFrames' => array(
array(
'scaleX' => 2,
'scaleY' => 2,
'opacity' => 0
)
)
),
array(
'type' => 'basic',
'name' => n2_('Upscale'),
'keyFrames' => array(
array(
'scaleX' => 0,
'scaleY' => 0
)
)
),
array(
'type' => 'basic',
'name' => n2_('Downscale back
out'),
'keyFrames' => array(
array(
'ease' => 'easeOutBack',
'opacity' => 0,
'scaleX' => 1.2,
'scaleY' => 1.2
)
)
),
array(
'type' => 'basic',
'name' => n2_('Upscale back
out'),
'keyFrames' => array(
array(
'ease' => 'easeOutBack',
'opacity' => 0,
'scaleX' => 0.8,
'scaleY' => 0.8
)
)
),
array(
'type' => 'basic',
'name' => n2_('Pulse'),
'keyFrames' => array(
array(
'ease' =>
'easeOutCubic',
'duration' => 0.5
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.5,
'scaleX' => 1.05,
'scaleY' => 1.05
)
)
),
);
}
private function inFlip() {
return array(
array(
'type' => 'basic',
'name' => n2_('Flip
left'),
'transformOrigin' => '0|*|50|*|0',
'keyFrames' => array(
array(
'opacity' => 0,
'rotationY' => -90
)
)
),
array(
'type' => 'basic',
'name' => n2_('Flip
right'),
'transformOrigin' => '100|*|50|*|0',
'keyFrames' => array(
array(
'opacity' => 0,
'rotationY' => 90
)
)
),
array(
'type' => 'basic',
'name' => n2_('Flip
down'),
'transformOrigin' => '50|*|0|*|0',
'keyFrames' => array(
array(
'opacity' => 0,
'rotationX' => 90
)
)
),
array(
'type' => 'basic',
'name' => n2_('Flip up'),
'transformOrigin' => '50|*|100|*|0',
'keyFrames' => array(
array(
'opacity' => 0,
'rotationX' => -90
)
)
),
array(
'type' => 'basic',
'name' => n2_('Flip in X'),
'keyFrames' => array(
array(
'duration' => 0.4,
'opacity' => 0,
'rotationY' => -90
),
array(
'duration' => 0.2,
'opacity' => 0.5,
'rotationY' => 20
),
array(
'duration' => 0.2,
'opacity' => 1,
'rotationY' => -10
),
array(
'duration' => 0.2,
'rotationY' => 5
)
)
),
array(
'type' => 'basic',
'name' => n2_('Flip in Y'),
'keyFrames' => array(
array(
'duration' => 0.4,
'opacity' => 0,
'rotationX' => -90
),
array(
'duration' => 0.2,
'opacity' => 0.5,
'rotationX' => 20
),
array(
'duration' => 0.2,
'opacity' => 1,
'rotationX' => -10
),
array(
'duration' => 0.2,
'rotationX' => 5
)
)
),
array(
'type' => 'basic',
'name' => n2_('Flap'),
'keyFrames' => array(
array(
'duration' => 0.5,
'opacity' => 0,
'rotationX' => 90
),
array(
'duration' => 0.5,
'opacity' => 1,
'rotationX' => -50
)
)
)
);
}
private function inRotate() {
return array(
array(
'type' => 'basic',
'name' => n2_('Rotate top
left'),
'transformOrigin' => '0|*|0|*|0',
'keyFrames' => array(
array(
'duration' => 1,
'opacity' => 0,
'rotationZ' => 90
)
)
),
array(
'type' => 'basic',
'name' => n2_('Rotate top
right'),
'transformOrigin' => '100|*|0|*|0',
'keyFrames' => array(
array(
'duration' => 1,
'opacity' => 0,
'rotationZ' => -90
)
)
),
array(
'type' => 'basic',
'name' => n2_('Roll in'),
'keyFrames' => array(
array(
'duration' => 1,
'x' => 500,
'rotationZ' => 360
)
)
),
array(
'type' => 'basic',
'name' => n2_('Rotate top left
back out'),
'transformOrigin' => '0|*|0|*|0',
'keyFrames' => array(
array(
'ease' =>
'easeOutBack',
'rotationZ' => 180
)
)
),
array(
'type' => 'basic',
'name' => n2_('Rotate all
axis'),
'transformOrigin' => '0|*|0|*|0',
'keyFrames' => array(
array(
'opacity' => 0,
'rotationX' => 90,
'rotationY' => 20,
'rotationZ' => 20
)
)
)
);
}
private function inBounce() {
return array(
array(
'type' => 'basic',
'name' => n2_('Bounce'),
'keyFrames' => array(
array(
'ease' =>
'easeOutCubic',
'duration' => 0.18
),
array(
'ease' => 'easeInQuint',
'duration' => 0.18,
'y' => 30
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.15
),
array(
'ease' => 'easeInQuint',
'duration' => 0.15,
'y' => 15
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.12
),
array(
'ease' => 'easeInQuint',
'duration' => 0.12,
'y' => 8
)
)
),
array(
'type' => 'basic',
'name' => n2_('Bounce in'),
'keyFrames' => array(
array(
'ease' =>
'easeOutCubic',
'duration' => 0.2,
'opacity' => 0,
'scaleX' => 0.3,
'scaleY' => 0.3
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.2,
'opacity' => .33,
'scaleX' => 1.1,
'scaleY' => 1.1
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.2,
'opacity' => .66,
'scaleX' => .9,
'scaleY' => .9
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.2,
'opacity' => 1,
'scaleX' => 1.03,
'scaleY' => 1.03
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.2,
'opacity' => 1,
'scaleX' => .97,
'scaleY' => .97
)
)
),
array(
'type' => 'basic',
'name' => n2_('Bounce in
left'),
'keyFrames' => array(
array(
'duration' => 0.6,
'opacity' => 0,
'x' => 3000
),
array(
'duration' => 0.15,
'opacity' => 1,
'x' => -25
),
array(
'duration' => 0.15,
'x' => 10
),
array(
'duration' => 0.15,
'x' => -5
)
)
),
array(
'type' => 'basic',
'name' => n2_('Bounce in
right'),
'keyFrames' => array(
array(
'duration' => 0.6,
'opacity' => 0,
'x' => -3000
),
array(
'duration' => 0.15,
'opacity' => 1,
'x' => 25
),
array(
'duration' => 0.15,
'x' => -10
),
array(
'duration' => 0.15,
'x' => 5
)
)
),
array(
'type' => 'basic',
'name' => n2_('Bounce in
down'),
'keyFrames' => array(
array(
'duration' => 0.6,
'opacity' => 0,
'y' => 3000
),
array(
'duration' => 0.15,
'opacity' => 1,
'y' => -25
),
array(
'duration' => 0.15,
'y' => 10
),
array(
'duration' => 0.15,
'y' => -5
)
)
),
array(
'type' => 'basic',
'name' => n2_('Bounce in up'),
'keyFrames' => array(
array(
'duration' => 0.6,
'opacity' => 0,
'y' => -3000
),
array(
'duration' => 0.15,
'opacity' => 1,
'y' => 25
),
array(
'duration' => 0.15,
'y' => -10
),
array(
'duration' => 0.15,
'y' => 5
)
)
)
);
}
private function inSpecial() {
return array(
array(
'type' => 'basic',
'name' => n2_('Rubber band'),
'keyFrames' => array(
array(
'ease' =>
'easeOutCubic',
'duration' => 0.3
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'scaleX' => 1.25,
'scaleY' => 0.75
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'scaleX' => 0.75,
'scaleY' => 1.25
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.15,
'scaleX' => 1.15,
'scaleY' => 0.85
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'scaleX' => 0.95,
'scaleY' => 1.05
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.25,
'scaleX' => 1.05,
'scaleY' => 0.95
)
)
),
array(
'type' => 'basic',
'name' => n2_('Shake'),
'keyFrames' => array(
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => 10
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => -10
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => 10
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => -10
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => 10
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => -10
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => 10
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => -10
),
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1,
'x' => 10
)
)
),
array(
'type' => 'basic',
'name' => n2_('Swing'),
'transformOrigin' => '50|*|0|*|0',
'keyFrames' => array(
array(
'ease' =>
'easeOutCubic',
'duration' => 0.2
),
array(
'duration' => 0.2,
'rotationZ' => -15
),
array(
'duration' => 0.2,
'rotationZ' => 10
),
array(
'duration' => 0.2,
'rotationZ' => -5
),
array(
'duration' => 0.2,
'rotationZ' => 5
)
)
),
array(
'type' => 'basic',
'name' => n2_('Wooble'),
'keyFrames' => array(
array(
'ease' =>
'easeOutCubic',
'duration' => 0.1
),
array(
'duration' => 0.1,
'scaleX' => 0.9,
'scaleY' => 0.9,
'rotationZ' => 3
),
array(
'duration' => 0.1,
'scaleX' => 0.9,
'scaleY' => 0.9,
'rotationZ' => 3
),
array(
'duration' => 0.1,
'scaleX' => 1.1,
'scaleY' => 1.1,
'rotationZ' => -3
),
array(
'duration' => 0.1,
'scaleX' => 1.1,
'scaleY' => 1.1,
'rotationZ' => 3,
'x' => -10
),
array(
'duration' => 0.1,
'scaleX' => 1.1,
'scaleY' => 1.1,
'rotationZ' => -3,
'x' => 10
),
array(
'duration' => 0.1,
'scaleX' => 1.1,
'scaleY' => 1.1,
'rotationZ' => 3,
'x' => -10
),
array(
'duration' => 0.1,
'scaleX' => 1.1,
'scaleY' => 1.1,
'rotationZ' => -3,
'x' => 10
),
array(
'duration' => 0.1,
'scaleX' => 1.1,
'scaleY' => 1.1,
'rotationZ' => 3
),
array(
'duration' => 0.1,
'scaleX' => 1.1,
'scaleY' => 1.1,
'rotationZ' => -3
)
)
)
);
}
private function loopSpecial() {
return array(
array(
'type' => 'basic',
'name' => n2_('Pulse'),
'keyFrames' => array(
array(
'duration' => .5,
'scaleX' => 1.05,
'scaleY' => 1.05
)
)
),
array(
'type' => 'basic',
'name' => n2_('Shrink'),
'keyFrames' => array(
array(
'duration' => .5,
'scaleX' => .8,
'scaleY' => .8
)
)
),
array(
'type' => 'basic',
'name' => n2_x('Slide',
'Animation'),
'keyFrames' => array(
array(
'duration' => .5,
'x' => 200
)
)
),
array(
'type' => 'basic',
'name' => n2_('Roll'),
'keyFrames' => array(
array(
'ease' => 'linear',
'duration' => 1,
'rotationZ' => 360
)
)
),
array(
'type' => 'basic',
'name' => n2_('Grow rotate'),
'keyFrames' => array(
array(
'duration' => 0.5,
'rotationZ' => 10,
'scaleX' => 1.15,
'scaleY' => 1.15
)
)
),
array(
'type' => 'basic',
'name' => n2_('Skew'),
'keyFrames' => array(
array(
'duration' => 0.5,
'skewX' => -15
)
)
),
array(
'type' => 'basic',
'name' => n2_('Swing'),
'transformOrigin' => '50|*|0|*|0',
'keyFrames' => array(
array(
'duration' => 0.5,
'rotationZ' => 10
),
array(
'duration' => 0.5,
'rotationZ' => -10
)
)
),
array(
'type' => 'basic',
'name' =>
n2_('Pendulum'),
'transformOrigin' =>
'50|*|-300|*|0',
'keyFrames' => array(
array(
'duration' => 0.5,
'rotationZ' => 10
),
array(
'duration' => 0.5,
'rotationZ' => -10
)
)
),
array(
'type' => 'basic',
'name' => n2_('Pendulum
3D'),
'transformOrigin' =>
'50|*|-80|*|20',
'keyFrames' => array(
array(
'duration' => 2,
'x' => 30,
'rotationX' => 8,
'rotationY' => 10
),
array(
'duration' => 2,
'x' => -30,
'rotationX' => 8,
'rotationY' => -10
)
)
),
array(
'type' => 'basic',
'name' => n2_('Vertical
pendulum 3D'),
'transformOrigin' =>
'-80|*|50|*|20',
'keyFrames' => array(
array(
'duration' => 2,
'y' => 30,
'rotationX' => -10
),
array(
'duration' => 2,
'y' => -30,
'rotationX' => 10
)
)
),
array(
'type' => 'basic',
'name' => n2_('Shake'),
'keyFrames' => array(
array(
'duration' => .05,
'x' => 10
),
array(
'duration' => .05,
'x' => -10
),
array(
'duration' => .05,
'x' => 10,
'rotationZ' => 3
),
array(
'duration' => .05,
'y' => 10,
'rotationZ' => -3
),
array(
'duration' => .05,
'x' => 10,
'rotationZ' => -2
),
array(
'duration' => .05,
'x' => 10,
'y' => -5,
'rotationZ' => 3
)
)
)
);
}
private function outFade() {
return array(
array(
'type' => 'basic',
'name' => n2_('Fade'),
'keyFrames' => array(
array(
'opacity' => 0
)
)
),
array(
'type' => 'basic',
'name' => n2_('Blur'),
'keyFrames' => array(
array(
'n2blur' => 10,
'opacity' => 0
)
)
),
array(
'type' => 'reveal',
'name' => n2_('Reveal'),
'data' => array(
'from' => 'left',
'to' => 'right'
)
)
);
}
}PK5C�[�u��dPostBackgroundAnimation/Block/PostBackgroundAnimationManager/BlockPostBackgroundAnimationManager.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\PostBackgroundAnimation\Block\PostBackgroundAnimationManager;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Visual\AbstractBlockVisual;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonApply;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonCancel;
use
Nextend\SmartSlider3Pro\PostBackgroundAnimation\ModelPostBackgroundAnimation;
class BlockPostBackgroundAnimationManager extends AbstractBlockVisual {
/** @var ModelPostBackgroundAnimation */
protected $model;
/**
* @return ModelPostBackgroundAnimation
*/
public function getModel() {
return $this->model;
}
public function display() {
$this->model = new ModelPostBackgroundAnimation($this);
$this->renderTemplatePart('Index');
}
public function displayTopBar() {
$buttonCancel = new BlockButtonCancel($this);
$buttonCancel->addClass('n2_fullscreen_editor__cancel');
$buttonCancel->display();
$buttonApply = new BlockButtonApply($this);
$buttonApply->addClass('n2_fullscreen_editor__save');
$buttonApply->display();
}
public function displayContent() {
$model = $this->getModel();
$sets = $model->getSets();
Js::addFirstCode("
new _N2.PostBgAnimationManager({
setsIdentifier: '" . $model->getType() .
"set',
sets: " . json_encode($sets) . ",
visuals: {},
ajaxUrl: '" .
$this->createAjaxUrl(array('postbackgroundanimation/index')) .
"'
});
");
$model->renderForm();
}
}PK5C�[r�7rrFPostBackgroundAnimation/Block/PostBackgroundAnimationManager/Index.phpnu�[���<?php
namespace
Nextend\SmartSlider3Pro\PostBackgroundAnimation\Block\PostBackgroundAnimationManager;
/**
* @var BlockPostBackgroundAnimationManager $this
*/
?>
<div id="n2-lightbox-postbackgroundanimation"
class="n2_fullscreen_editor">
<div class="n2_fullscreen_editor__overlay"></div>
<div class="n2_fullscreen_editor__window">
<div class="n2_fullscreen_editor__nav_bar">
<div
class="n2_fullscreen_editor__nav_bar_label">
<?php n2_e('Ken Burns effect'); ?>
</div>
<div
class="n2_fullscreen_editor__nav_bar_actions">
<?php $this->displayTopBar(); ?>
</div>
</div>
<div class="n2_fullscreen_editor__content">
<div class="n2_fullscreen_editor__content_sidebar
n2_container_scrollable">
<?php
$this->getModel()
->renderSetsForm();
?>
</div>
<div class="n2_fullscreen_editor__content_content
n2_container_scrollable">
<?php $this->displayContent(); ?>
</div>
</div>
</div>
</div>PK5C�[�8PostBackgroundAnimation/ModelPostBackgroundAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\PostBackgroundAnimation;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Fieldset\FieldsetVisualSet;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Visual\ModelVisual;
class ModelPostBackgroundAnimation extends ModelVisual {
protected $type = 'postbackgroundanimation';
protected function init() {
PostBackgroundAnimationStorage::getInstance();
$this->storage =
StorageSectionManager::getStorage('smartslider');
}
protected function getPath() {
return dirname(__FILE__);
}
public function renderSetsForm() {
$form = new Form($this, $this->type . 'set');
$form->addClass('n2_fullscreen_editor__content_sidebar_top_bar');
$form->setDark();
$setsTab = new FieldsetVisualSet($form->getContainer(),
'postbackgroundanimation-sets', n2_('Animation type'));
new Select($setsTab, 'sets', false);
echo $form->render();
}
public function renderForm() {
$form = new Form($this, 'n2-post-background');
$table = new ContainerTable($form->getContainer(),
'post-background-preview', n2_('Preview'));
$table->setFieldsetPositionEnd();
new NumberAutoComplete($table->getFieldsetLabel(),
'transformorigin-x', false, '50', array(
'style' => 'width:22px;',
'values' => array(
0,
50,
100
),
'unit' => '%',
'sublabel' => 'X'
));
new NumberAutoComplete($table->getFieldsetLabel(),
'transformorigin-y', false, '50', array(
'style' => 'width:22px;',
'values' => array(
0,
50,
100
),
'unit' => '%',
'sublabel' => 'Y'
));
$form->render();
}
}PK5C�[dfF:PostBackgroundAnimation/PostBackgroundAnimationManager.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\PostBackgroundAnimation;
use Nextend\Framework\Pattern\VisualManagerTrait;
use
Nextend\SmartSlider3Pro\PostBackgroundAnimation\Block\PostBackgroundAnimationManager\BlockPostBackgroundAnimationManager;
class PostBackgroundAnimationManager {
use VisualManagerTrait;
public function display() {
$postBackgroundAnimationManagerBlock = new
BlockPostBackgroundAnimationManager($this->MVCHelper);
$postBackgroundAnimationManagerBlock->display();
}
}PK5C�[�87M3
3
:PostBackgroundAnimation/PostBackgroundAnimationStorage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\PostBackgroundAnimation;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Plugin;
class PostBackgroundAnimationStorage {
use SingletonTrait;
private $sets = array();
private $animation = array();
private $animationBySet = array();
private $animationById = array();
protected function init() {
Plugin::addAction('smartsliderpostbackgroundanimationset', array(
$this,
'animationSet'
));
Plugin::addAction('smartsliderpostbackgroundanimation',
array(
$this,
'animations'
));
Plugin::addAction('postbackgroundanimation', array(
$this,
'animation'
));
}
private function load() {
static $loaded;
if (!$loaded) {
Plugin::doAction('postBackgroundAnimationStorage',
array(
&$this->sets,
&$this->animation
));
for ($i = 0; $i < count($this->animation); $i++) {
if
(!isset($this->animationBySet[$this->animation[$i]['referencekey']]))
{
$this->animationBySet[$this->animation[$i]['referencekey']]
= array();
}
$this->animationBySet[$this->animation[$i]['referencekey']][]
= &$this->animation[$i];
$this->animationById[$this->animation[$i]['id']]
= &$this->animation[$i];
}
$loaded = true;
}
}
public function animationSet($referenceKey, &$sets) {
$this->load();
for ($i = count($this->sets) - 1; $i >= 0; $i--) {
$this->sets[$i]['system'] = 1;
$this->sets[$i]['editable'] = 0;
array_unshift($sets, $this->sets[$i]);
}
}
public function animations($referenceKey, &$animation) {
$this->load();
if (isset($this->animationBySet[$referenceKey])) {
$_animation = &$this->animationBySet[$referenceKey];
for ($i = count($_animation) - 1; $i >= 0; $i--) {
$_animation[$i]['system'] = 1;
$_animation[$i]['editable'] = 0;
array_unshift($animation, $_animation[$i]);
}
}
}
public function animation($id, &$animation) {
$this->load();
if (isset($this->animationById[$id])) {
$this->animationById[$id]['system'] = 1;
$this->animationById[$id]['editable'] = 0;
$animation =
$this->animationById[$id];
}
}
}PK5C�[��N&N&7Renderable/Item/AnimatedHeading/ItemAnimatedHeading.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\AnimatedHeading;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemAnimatedHeading extends AbstractItem {
protected $ordering = 2;
protected $fonts = array(
'font' => array(
'defaultName' =>
'item-animated-heading-font',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{},{}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' =>
'item-animated-heading-style',
'value' =>
'{"data":[{},{"padding":"0|*|0|*|0|*|0|*|px"},{}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'animatedHeading';
}
public function getTitle() {
return n2_('Animated heading');
}
public function getIcon() {
return 'ssi_32 ssi_32--animatedheading';
}
public function getGroup() {
return n2_('Special');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemAnimatedHeadingFrontend($this, $id, $itemData,
$layer);
}
public function getValues() {
return parent::getValues() + array(
'type' => 'slide',
'color' => 'ffffffff',
'loop' => 0,
'delay' => 0,
'speed' => 100,
'show-duration' => 1500,
'animate-width' => 1,
'priority' => 'div',
'before-text' => 'We are Passionate
About',
'animated-text' => "Amazing Food\nGreat
Hospitality",
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'after-text' => '',
'title' => '',
'class' => ''
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/animatedHeading.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('heading',
$slide->fill($data->get('heading', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('style'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('style',
$import->fixSection($data->get('style')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-animated-heading-font', false,
$this->fonts['font']['value'], array(
'mode' => 'hover'
));
new Style($row1, 'item-animated-heading-style', false,
$this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-animated-heading-text', n2_('General'));
new Text($settings, 'before-text', n2_('Before
text'), '', array(
'style' => 'width: 302px;'
));
new Textarea($settings, 'animated-text',
n2_('Animated text'), '', array(
'height' => 70,
'width' => 314
));
new Text($settings, 'after-text', n2_('After
text'), '', array(
'style' => 'width: 302px;'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-animated-heading-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'style' => 'width:236px;',
'relatedFields' => array(
'item_animatedHeadinghref-target',
'item_animatedHeadinghref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
$animation = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-animated-heading-animation', n2_('Animation'));
new Select($animation, 'type', n2_('Type'),
'', array(
'options' => array(
'fade' => n2_('Fade'),
'rotating' => n2_('Rotating'),
'drop-in' => n2_('Drop-in'),
'slide' => n2_x('Slide',
'Animation'),
'slide-down' => n2_('Slide down'),
'typewriter1' => n2_('Typewriter'),
'chars' => n2_('Chars'),
'chars2' => n2_('Chars 2')
),
'relatedValueFields' => array(
array(
'values' => array(
'fade',
'rotating',
'drop-in',
'slide',
'slide-down',
'chars',
'chars2'
),
'field' => array(
'item_animatedHeadinganimate-width'
)
),
array(
'values' => array(
'typewriter1',
),
'field' => array(
'item_animatedHeadingcolor'
)
)
)
));
new OnOff($animation, 'animate-width', n2_('Auto
width'), 1);
new Color($animation, 'color', n2_('Cursor
color'), '', array(
'alpha' => true
));
new OnOff($animation, 'loop', n2_x('Loop',
'Effect'), 1);
new Number($animation, 'delay', n2_('Delay'),
0, array(
'unit' => 'ms',
'wide' => 5,
'min' => 0
));
new NumberSlider($animation, 'speed',
n2_('Speed'), 100, array(
'style' => 'width:35px;',
'unit' => '%',
'min' => 10,
'max' => 400,
'step' => 1,
'sliderMax' => 150
));
new Number($animation, 'show-duration', n2_('Show
duration'), 1500, array(
'unit' => 'ms',
'wide' => 5,
'min' => 0
));
$dev = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-animated-heading-developer', n2_('Advanced'));
new Select($dev, 'priority', 'Tag',
'div', array(
'options' => array(
'div' => 'div',
'1' => 'H1',
'2' => 'H2',
'3' => 'H3',
'4' => 'H4',
'5' => 'H5',
'6' => 'H6'
)
));
new HiddenFont($settings, 'font', false, '',
array(
'mode' => 'highlight'
));
new HiddenStyle($settings, 'style', false, '',
array(
'mode' => 'highlight'
));
new Text($dev, 'class', n2_('CSS Class'),
'', array(
'style' => 'width:226px;',
'tipLabel' => n2_('CSS Class'),
'tipDescription' => n2_('Class on the
selected tag element.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1812-layer-style#advanced'
));
}
}PK5C�[X��?Renderable/Item/AnimatedHeading/ItemAnimatedHeadingFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\AnimatedHeading;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemAnimatedHeadingFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$heading = array();
$beforeText =
$owner->fill($this->data->get('before-text',
''));
if (!empty($beforeText)) {
$heading[] = Html::tag('ss-text', array(
'class' =>
'n2-ss-animated-heading-before'
), $beforeText) . ' ';
}
$animatedText = preg_split('/\r\n|\r|\n/',
$owner->fill($this->data->get('animated-text',
'')));
if (!empty($animatedText)) {
$attributes = array(
'class' => 'n2-highlighted
n2-ss-animated-heading-i'
);
$type = $this->data->get('type',
'slide');
if ($type != 'slide') {
$attributes['data-animation-type'] = $type;
}
$color = $this->data->get('color',
'ffffffff');
if ($color != 'ffffffff') {
$attributes['data-color'] =
Color::colorToRGBA($color);
}
$animateWidth =
$this->data->get('animate-width', '1');
if ($animateWidth != 1) {
$attributes['data-animate-width'] =
$animateWidth;
}
$delay = $this->data->get('delay', 0);
if ($delay > 0) {
$attributes['data-delay'] = $delay;
}
$showDuration = max(0,
$this->data->get('show-duration', 1500));
if ($showDuration != 1500) {
$attributes['data-show-duration'] =
$showDuration;
}
$speed = max(0, $this->data->get('speed',
100));
if ($speed != 100) {
$attributes['data-speed'] = $speed;
}
if ($this->data->get('loop', 0)) {
$attributes['data-loop'] = 1;
}
$animatedInner = '';
foreach ($animatedText as $text) {
$text = trim($text);
if (!empty($text)) {
$animatedInner .= Html::tag('div', array(
'class' =>
'n2-ss-animated-heading-i-text'
), $text);
}
}
$animatedInner = Html::tag('div', array(
'class' =>
'n2-ss-animated-heading-i2'
), $animatedInner);
$href = $this->data->get('href', '');
if (!empty($href) && $href != '#') {
$heading[] = $this->getLink($animatedInner,
$attributes);
} else {
$heading[] = Html::tag('ss-text', $attributes,
$animatedInner);
}
}
$afterText =
$owner->fill($this->data->get('after-text',
''));
if (!empty($afterText)) {
$heading[] = ' ' . Html::tag('ss-text',
array(
'class' =>
'n2-ss-animated-heading-after'
), $afterText);
}
$font =
$owner->addFont($this->data->get('font'),
'highlight');
$style =
$owner->addStyle($this->data->get('style'),
'highlight');
return
$this->heading($this->data->get('priority',
'div'), array(
"id" => $this->id,
"class" => 'n2-ss-animated-heading-wrapper
' . $font . ' ' . $style . ' n2-ss-item-content
n2-ss-text n2-ow-all'
), implode('', $heading));
}
private function heading($type, $attributes, $content) {
if ($type > 0) {
return Html::tag("h{$type}", $attributes, $content);
}
return Html::tag("div", $attributes, $content);
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/animatedHeading.n2less", array(
"sliderid" => $owner->getElementID()
));
if (!$owner->isScriptAdded('animated-heading')) {
if ($this->isEditor) {
$owner->addScript('this.sliderElement.querySelectorAll(\'.n2-ss-currently-edited-slide
.n2-ss-animated-heading-i\').forEach((function(el){new
_N2.AnimatedHeadingItemAdmin(el, this)}).bind(this));',
'animated-heading');
} else {
$owner->addScript("this.sliderElement.querySelectorAll('.n2-ss-animated-heading-i').forEach((function(el){new
_N2.FrontendItemAnimatedHeading(el, this)}).bind(this));",
'animated-heading');
}
}
}
}PK5C�[�)�!Renderable/Item/Area/ItemArea.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Area;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Gradient;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemArea extends AbstractItem {
protected $ordering = 100;
protected $layerProperties = array(
"desktopportraitwidth" => 150,
"desktopportraitheight" => 150
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'area';
}
public function getTitle() {
return n2_('Area');
}
public function getIcon() {
return 'ssi_32 ssi_32--area';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemAreaFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'width' => '',
'height' => '',
'color' => '000000ff',
'gradient' => 'off',
'color2' => '000000ff',
'css' => '',
'borderWidth' => '0|*|0|*|0|*|0',
'borderStyle' => 'solid',
'borderColor' => 'ffffff1f',
'borderRadius' => 0,
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
$borderWidthV1 = $data->get('borderWidth', 0);
if (is_numeric($borderWidthV1)) {
$data->set('borderWidth', $borderWidthV1 .
'|*|' . $borderWidthV1 . '|*|' . $borderWidthV1 .
'|*|' . $borderWidthV1 . '');
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function renderFields($container) {
$color = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-area', n2_('Color'));
new Color($color, 'color', n2_('Background
color'), '00000000', array(
'alpha' => true
));
new Gradient($color, 'gradient',
n2_('Gradient'), 'off', array(
'relatedFields' => array(
'item_areacolor2'
)
));
new Color($color, 'color2', n2_('Color end'),
'ffffff00', array(
'alpha' => true
));
$border = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-area-border', n2_('Border'));
$borderWidth = new MarginPadding($border, 'borderWidth',
n2_('Border'), '0|*|0|*|0|*|0', array(
'unit' => 'px',
'relatedFields' => array(
'item_areaborderStyle',
'item_areaborderColor',
)
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($borderWidth, 'borderWidth-' .
$i, false, '', array(
'values' => array(
0,
1,
2,
3,
5
),
'min' => 0,
'wide' => 3
));
}
new Select($border, 'borderStyle',
n2_('Style'), 'solid', array(
'options' => array(
'none' => n2_('None'),
'solid' => n2_('Solid'),
'dashed' => n2_('Dashed'),
'dotted' => n2_('Dotted'),
)
));
new Color($border, 'borderColor', n2_('Color'),
'00000000', array(
'alpha' => true
));
new NumberAutoComplete($border, 'borderRadius',
n2_('Border radius'), 0, array(
'values' => array(
0,
3,
5,
10,
99
),
'wide' => 3,
'unit' => 'px'
));
$size = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-area-size', n2_('Size'));
new Number($size, 'width', n2_('Width'),
'', array(
'wide' => 4,
'unit' => 'px',
'tipLabel' => n2_('Width'),
'tipDescription' => sprintf(n2_('Fix width
for the %1$s.'), $this->getTitle())
));
new Number($size, 'height', n2_('Height'),
'', array(
'wide' => 4,
'unit' => 'px',
'tipLabel' => n2_('Height'),
'tipDescription' => sprintf(n2_('Fix height
for the %1$s.'), $this->getTitle())
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-area-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'relatedFields' => array(
'item_areahref-target',
'item_areahref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
$developer = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-area-developer', n2_('Advanced'));
new Textarea($developer, 'css', 'CSS',
'', array(
'width' => 314,
'tipLabel' => 'CSS',
'tipDescription' => n2_('Write custom CSS
codes here without selectors.')
));
}
}PK5C�[�lm��)Renderable/Item/Area/ItemAreaFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Area;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemAreaFrontend extends AbstractItemFrontend {
public function render() {
if ($this->hasLink()) {
return $this->getLink($this->getHtml(false), array(
'style' => 'display: block;
width:100%;height:100%;',
'class' => 'n2-ss-item-content
n2-ow'
));
}
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml($isContent = true) {
$style = '';
$color = $this->data->get('color');
$gradient = $this->data->get('gradient',
'off');
if ($gradient != 'off') {
$colorEnd = $this->data->get('color2');
switch ($gradient) {
case 'horizontal':
$style .= 'background:linear-gradient(to right,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorEnd) . ' 100%);';
break;
case 'vertical':
$style .= 'background:linear-gradient(to bottom,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorEnd) . ' 100%);';
break;
case 'diagonal1':
$style .= 'background:linear-gradient(45deg,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorEnd) . ' 100%);';
break;
case 'diagonal2':
$style .= 'background:linear-gradient(135deg,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorEnd) . ' 100%);';
break;
}
} else {
if (strlen($color) == 8 && substr($color, 6, 2) !=
'00') {
$style = 'background-color: #' . substr($color,
0, 6) . ';';
$style .= "background-color: " .
Color::colorToRGBA($color) . ";";
}
}
$_width = intval($this->data->get('width'));
if ($_width > 0) {
$style .= 'width:' . $_width . 'px;';
}
$height = '100%';
$_height = intval($this->data->get('height'));
if ($_height > 0) {
$height = $_height . 'px';
}
$style .= 'height:' . $height . ';';
$borderWidths = array();
list($borderWidths[0], $borderWidths[1], $borderWidths[2],
$borderWidths[3]) =
(array)Common::parse($this->data->getIfEmpty('borderWidth',
'0|*|0|*|0|*|0'));
$hasBorder = false;
for ($i = 0; $i < 4; $i++) {
$borderWidths[$i] = max(0, intval($borderWidths[$i]));
if ($borderWidths[$i] > 0) {
$hasBorder = true;
}
}
if ($hasBorder) {
$borderRgba =
Color::colorToRGBA($this->data->get('borderColor'));
$style .= 'border-width:' . implode('px
', explode('|*|',
$this->data->get('borderWidth'))) . 'px;';
$style .= 'border-style: ' .
$this->data->get('borderStyle') . ';';
$style .= 'border-color: ' . $borderRgba .
';';
$style .= 'box-sizing: border-box;';
}
$borderRadius = max(0,
intval($this->data->get('borderRadius')));
if ($borderRadius > 0) {
$style .= 'border-radius:' . $borderRadius .
'px;';
}
return Html::tag('div', array(
'class' => ($isContent ? 'n2-ss-item-content
' : '') . 'n2-ow',
'style' => $style .
$this->data->get('css')
));
}
public function needHeight() {
return true;
}
}PK5C�[T!�bb#Renderable/Item/Audio/ItemAudio.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Audio;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Video;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemAudio extends AbstractItem {
protected $ordering = 21;
protected $layerProperties = array(
"desktopportraitwidth" => 300
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'audio';
}
public function getTitle() {
return n2_('Audio');
}
public function getIcon() {
return 'ssi_32 ssi_32--audio';
}
public function getGroup() {
return n2_x('Media', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemAudioFrontend($this, $id, $itemData, $layer);
}
/**
* @return array
*/
public function getValues() {
return parent::getValues() + array(
'audio_mp3' => '',
'volume' => 1,
'autoplay' => 0,
'loop' => 0,
'reset' => 0,
'color' => '000000B2',
'color2' => 'ffffff',
'videoplay' => '',
'videopause' => '',
'videoend' => '',
'fullwidth' => 1,
'show' => 1,
'show-progress' => 1,
'show-time' => 1,
'show-volume' => 1
);
}
/**
* @return string
*/
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('audio_mp3',
$slide->fill($data->get('audio_mp3', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('audio_mp3'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('audio_mp3',
$import->fixImage($data->get('audio_mp3')));
return $data;
}
public function prepareSample($data) {
$data->set('audio_mp3',
ResourceTranslator::toUrl($data->get('audio_mp3')));
return $data;
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/audio.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-audio', n2_('General'));
new Video($settings, 'audio_mp3', n2_('MP3
audio'), '', array(
'width' => 220
));
new Color($settings, 'color', n2_('Main
color'), '', array(
'alpha' => true
));
new Color($settings, 'color2', n2_('Secondary
color'));
$audioSettings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-audio-settings', n2_('Audio settings'));
new Warning($audioSettings, 'autoplay-notice',
sprintf(n2_('Audio autoplaying has a lot of limitations made by
browsers. You can read about them %1$shere%2$s.'), '<a
href="https://smartslider.helpscoutdocs.com/article/1919-video-autoplay-handling"
target="_blank">', '</a>'));
new OnOff($audioSettings, 'autoplay',
n2_('Autoplay'), 0, array(
'relatedFieldsOn' => array(
'item_audioautoplay-notice'
)
));
new OnOff($audioSettings, 'loop', n2_x('Loop',
'Video/Audio play'), 0);
new Select($audioSettings, 'volume',
n2_('Volume'), 1, array(
'options' => array(
'0' => n2_('Mute'),
'0.25' => '25%',
'0.5' => '50%',
'0.75' => '75%',
'1' => '100%'
)
));
new OnOff($audioSettings, 'reset', n2_('Restart on
slide change'), 0, array(
'tipLabel' => n2_('Restart on slide
change'),
'tipDescription' => n2_('Starts the audio
from the beginning when the slide is viewed again.')
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-audio-display', n2_('Display'));
new OnOff($display, 'fullwidth', n2_('Full
width'), 0);
new OnOff($display, 'show', n2_('Controls'),
0);
new OnOff($display, 'show-progress',
n2_('Progress'), 0);
new OnOff($display, 'show-time', n2_('Time'),
0);
new OnOff($display, 'show-volume',
n2_('Volume'), 0);
}
}PK5C�[Xe,�+Renderable/Item/Audio/ItemAudioFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Audio;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemAudioFrontend extends AbstractItemFrontend {
public function render() {
$owner = $this->layer->getOwner();
$owner->addScript('new _N2.FrontendItemAudio(this,
"' . $this->id . '", ' .
$this->data->toJSON() . ');');
return $this->getHTML();
}
public function renderAdminTemplate() {
return $this->getHTML();
}
public function getHTML() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$attributes = array(
'class' => 'n2-ss-item-audio-bar n2-ow
n2-ss-item-content n2-ow-all',
'id' => $this->id
);
$controls = array();
if ($this->data->get('show')) {
$attributes['data-state'] = 'paused';
$attributes['data-volume'] = '1';
$attributes['style'] =
'background-color:' .
Color::colorToRGBA($this->data->get('color')) .
';';
if (!$this->data->get('fullwidth')) {
$attributes['style'] .=
'display:inline-flex;vertical-align:top;';
}
$controls[] = '<div
class="n2-ss-item-audio-play"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32
32"><path fill="{color2}" d="M20 15.99c0
.41-.21.772-.52.967l-6.867 4.87c-.003
0-.006.002-.01.004l-.003.004c-.158.1-.342.156-.54.156-.585
0-1.06-.504-1.06-1.125v-9.752c0-.622.475-1.126 1.06-1.126.198 0
.382.058.54.157l.004.002.01.006 6.865
4.868c.31.196.52.556.52.97z"></path></svg></div>';
$controls[] = '<div
class="n2-ss-item-audio-pause"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32
32"><path fill="{color2}" d="M17
22V10h4v12h-4zm-6-12h4v12h-4V10z"></path></svg></div>';
if ($this->data->get('show-progress')) {
$controls[] = '<div
class="n2-ss-item-audio-progress-container"><div
class="n2-ss-item-audio-progress"
style="background:{bar};"><div
style="background:{color2};"
class="n2-ss-item-audio-progress-playhead"></div></div></div>';
}
if ($this->data->get('show-time')) {
$controls[] = '<div
class="n2-ss-item-audio-time"
style="color:{color2};">00:00 / 00:00</div>';
}
if ($this->data->get('show-volume')) {
$controls[] = '<div
class="n2-ss-item-audio-unmute"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32
32"><path fill="{color2}" d="M15
22h-1l-4-4H9c-.45 0-1-.527-1-1v-3c0-.474.55-1
1-1h1l4-4h1v13z"/></svg></div>';
$controls[] = '<div
class="n2-ss-item-audio-mute"><svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32
32"><path fill="{color2}" d="M15
22h-1l-4-4H9c-.45 0-1-.527-1-1v-3c0-.474.55-1
1-1h1l4-4h1v13zm3.147-1.954l-.06.002c-.215
0-.423-.09-.577-.25l-.11-.116c-.286-.3-.32-.776-.078-1.117.612-.865.935-1.892.935-2.968
0-1.158-.367-2.244-1.06-3.14-.266-.342-.24-.837.055-1.148l.11-.115c.162-.172.38-.265.618-.25.23.012.446.126.592.313.963
1.236 1.472 2.737 1.472 4.34 0 1.49-.45 2.912-1.3
4.106-.143.2-.36.324-.597.342zm3.38
2.65c-.15.183-.363.293-.59.303H20.9c-.215
0-.423-.09-.577-.25l-.107-.114c-.3-.314-.32-.817-.048-1.158 1.32-1.644
2.045-3.733 2.045-5.88
0-2.236-.778-4.387-2.19-6.058-.285-.34-.27-.853.034-1.174l.107-.112c.16-.168.365-.26.603-.252.225.006.438.11.587.287C23.06
10.303 24 12.9 24 15.596c0 2.595-.878 5.116-2.474
7.1z"></path></svg></div>';
$controls[] = '<div
class="n2-ss-item-audio-volume-container"><div
class="n2-ss-item-audio-volume"
style="background:{bar};"><div
style="background:{color2};"
class="n2-ss-item-audio-volumehead"></div></div></div>';
}
} else if ($owner->isAdmin()) {
$controls[] = 'Audio';
$attributes['style'] = 'color:#' .
$this->data->get('color2') . ';';
}
return Html::tag('div', $attributes,
$this->getAudioHTML($owner) . str_replace(array(
'{bar}',
'{color2}'
), array(
Color::colorToRGBA($this->data->get('color2') .
'33'),
'#' . $this->data->get('color2')
), implode('', $controls)));
}
/**
* @param AbstractRenderableOwner $slide
*
* @return string
*/
private function getAudioHTML($slide) {
$attributes = array();
if ($this->data->get("volume", 1) == 0) {
$attributes['muted'] = true;
}
return Html::tag("audio", $attributes,
$this->setContent($slide));
}
/**
* @param AbstractRenderableOwner $slide
*
* @return string
*/
private function setContent($slide) {
$videoContent = "";
if ($this->data->get("audio_mp3", false)) {
$audioUrl =
ResourceTranslator::toUrl($slide->fill($this->data->get("audio_mp3")));
$type = "audio/mpeg";
if (strpos($audioUrl, '.m4a')) {
$type = "audio/mp4";
}
$videoContent .= Html::tag("source", array(
"src" => $audioUrl,
"type" => $type
), '', false);
}
return $videoContent;
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/audio.n2less", array(
"sliderid" => $owner->getElementID()
));
}
}PK5C�[� �&�&'Renderable/Item/Caption/ItemCaption.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Caption;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemCaption extends AbstractItem {
protected $ordering = 4;
protected $layerProperties = array(
"desktopportraitleft" => 0,
"desktopportraittop" => 0,
"desktopportraitwidth" => 200
);
protected $fonts = array(
'fonttitle' => array(
'defaultName' =>
'item-caption-font-title',
'value' =>
'{"data":[{"color":"ffffffff","size":"14||px","align":"inherit"},{"extra":""},{"extra":""}]}'
),
'font' => array(
'defaultName' => 'item-caption-font',
'value' =>
'{"data":[{"color":"ffffffff","size":"14||px","align":"inherit"},{"extra":""},{"extra":""}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'caption';
}
public function getTitle() {
return n2_('Caption');
}
public function getIcon() {
return 'ssi_32 ssi_32--imagecaption';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemCaptionFrontend($this, $id, $itemData, $layer);
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-caption-font-title',
n2_('Title'),
$this->fonts['fonttitle']['value'], array(
'mode' => 'paragraph'
));
new Font($row1, 'item-caption-font',
n2_('Description'),
$this->fonts['font']['value'], array(
'mode' => 'paragraph'
));
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/caption.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'animation' =>
'Simple|*|left|*|0',
'image' =>
'$ss3-frontend$/images/placeholder/image.png',
'alt' => '',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'verticalalign' => 'center',
'content' => n2_('Caption'),
'description' => '',
'color' => '00000080',
'image-optimize' => 1
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('image',
$slide->fill($data->get('image', '')));
$data->set('alt',
$slide->fill($data->get('alt', '')));
$data->set('content',
$slide->fill($data->get('content', '')));
$data->set('description',
$slide->fill($data->get('description', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
$export->addVisual($data->get('font'));
$export->addVisual($data->get('fonttitle'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('image',
$import->fixImage($data->get('image')));
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('fonttitle',
$import->fixSection($data->get('fonttitle')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function prepareSample($data) {
$data->set('image',
ResourceTranslator::toUrl($data->get('image')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-caption', n2_('General'));
new FieldImage($settings, 'image',
n2_('Image'), '', array(
'relatedAlt' => 'item_captionalt',
'width' => 220
));
new Text($settings, 'content', n2_('Title'),
'', array(
'style' => 'width:302px;'
));
new HiddenFont($settings, 'fonttitle',
n2_('Font') . ' - ' . n2_('Title'),
'', array(
'mode' => 'paragraph'
));
new Textarea($settings, 'description',
n2_('Description'), '', array(
'width' => 314
));
new HiddenFont($settings, 'font', n2_('Font') .
' - ' . n2_('Description'), '', array(
'mode' => 'paragraph'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-caption-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'relatedFields' => array(
'item_captionhref-target',
'item_captionhref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
$animationFieldset = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-caption-animation', n2_('Animation'));
$animation = new MixedField($animationFieldset,
'animation', false, 'Simple|*|left|*|0');
new Select($animation, 'animation-1',
n2_('Animation'), '', array(
'options' => array(
'Full' => n2_('Full'),
'Simple' => n2_('Simple'),
'Fade' => n2_('Fade')
),
'relatedValueFields' => array(
array(
'values' => array(
'Full',
'Simple'
),
'field' => array(
'animationitem_captionanimation-2'
)
),
array(
'values' => array(
'Full',
'Fade'
),
'field' => array(
'item_captionverticalalign'
)
)
)
));
new Select($animation, 'animation-2',
n2_('Direction'), '', array(
'options' => array(
'top' => n2_('Top'),
'right' => n2_('Right'),
'bottom' => n2_('Bottom'),
'left' => n2_('Left')
)
));
new OnOff($animation, 'animation-3',
n2_('Scale'), 0, array(
'tipLabel' => n2_('Scale'),
'tipDescription' => n2_('Scales up the image
on hover')
));
$overlay = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-caption-overlay', n2_('Display'));
new Color($overlay, 'color', n2_('Overlay
background'), '00000080', array(
'alpha' => true
));
new Select($overlay, 'verticalalign', n2_('Vertical
align'), '', array(
'options' => array(
'flex-start' => n2_('Top'),
'center' => n2_('Center'),
'flex-end' => n2_('Bottom')
),
'tipLabel' => n2_('Vertical
align'),
'tipDescription' => n2_('Positions the text
inside the overlay.')
));
$seo = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-caption-seo', n2_('SEO'));
new Text($seo, 'alt', 'SEO - ' . n2_('Alt
tag'), '', array(
'style' => 'width:302px;'
));
$optimize = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-caption-optimize', n2_('Optimize'));
new OnOff($optimize, 'image-optimize', n2_('Optimize
image'), 1, array(
'tipLabel' => n2_('Optimize
image'),
'tipDescription' => n2_('You can turn off the
Layer image optimization for this image, to resize it for tablet and
mobile.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1839-caption-layer#optimize'
));
}
}PK5C�[E|����/Renderable/Item/Caption/ItemCaptionFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Caption;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemCaptionFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
list($mode, $direction, $scale) =
Common::parse($this->data->get('animation',
'Simple|*|left|*|0'));
switch ($direction) {
case 'top':
$axis = 'yP';
$ratio = -1;
break;
case 'right':
$axis = 'xP';
$ratio = 1;
break;
case 'bottom':
$axis = 'yP';
$ratio = 1;
break;
case 'left':
$axis = 'xP';
$ratio = -1;
break;
}
$owner->addScript('new _N2.FrontendItemCaption(this,
"' . $this->id . '", "' . $mode .
'",' . json_encode($axis) . ',' .
json_encode($ratio) . ', ' . intval($scale) . ');');
$image = $owner->fill($this->data->get('image',
''));
$imageAttributes = array(
'alt' =>
htmlspecialchars($owner->fill($this->data->get('alt',
'')))
);
$html = $owner->renderImage($this, $image, $imageAttributes);
$rgba =
Color::colorToRGBA($this->data->get('color',
'00000080'));
$html .= Html::openTag("div", array(
"class" => "n2-ss-item-caption-content",
"style" => "background: {$rgba};" .
'justify-content:' .
$this->data->get('verticalalign', 'center') .
';'
));
$title =
$owner->fill($this->data->get('content', ''));
if ($title != '') {
$fontTitle =
$owner->addFont($this->data->get('fonttitle'),
'paragraph');
$html .= Html::tag("div",
array("class" => 'n2-div-h4 ' . $fontTitle),
$title);
}
$description =
$owner->fill($this->data->get('description',
''));
if ($description != '') {
$font =
$owner->addFont($this->data->get('font'),
'paragraph');
$html .= Html::tag("p", array("class" =>
$font), $description);
}
$html .= Html::closeTag("div");
$linkAttributes = array();
if ($this->isEditor) {
$linkAttributes['onclick'] = 'return
false;';
}
return Html::tag("div", array(
"id" => $this->id,
"class" => "n2-ss-item-caption
n2-ss-item-content n2-ow-all n2-ss-item-caption-" . $mode,
"data-direction" => $direction
), $this->getLink($html, $linkAttributes));
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/caption.n2less", array(
"sliderid" => $owner->getElementID()
));
}
}PK5C�[�sT�
3Renderable/Item/CircleCounter/ItemCircleCounter.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\CircleCounter;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemCircleCounter extends AbstractItem {
protected $ordering = 11;
protected $fonts = array(
'font' => array(
'defaultName' =>
'item-circlecounter-font',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"40||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1","bold":0,"italic":0,"underline":0,"align":"center","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
),
'fontlabel' => array(
'defaultName' =>
'item-circlecounter-fontlabel',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"2","bold":0,"italic":0,"underline":0,"align":"center","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'circlecounter';
}
public function getTitle() {
return n2_('Circle counter');
}
public function getIcon() {
return 'ssi_32 ssi_32--circlecounter';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemCircleCounterFrontend($this, $id, $itemData,
$layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/circlecounter.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'value' => 50,
'startvalue' => 0,
'total' => 100,
'size' => 200,
'strokewidth' => 10,
'color' => '00000033',
'color2' => '64c133ff',
'pre' => '',
'post' => '%',
'label' => '',
'labelplacement' => 'after',
'animationduration' => 1000,
'animationdelay' => 0
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('label',
$slide->fill($data->get('label', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('fontlabel'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('fontlabel',
$import->fixSection($data->get('fontlabel')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-circlecounter-font',
n2_('Counter'),
$this->fonts['font']['value'], array(
'mode' => 'simple'
));
new Font($row1, 'item-circlecounter-fontlabel',
n2_('Label'),
$this->fonts['fontlabel']['value'], array(
'mode' => 'simple'
));
}
public function renderFields($container) {
$counter = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-circlecounter', n2_('Counter'));
new Number($counter, 'value', n2_('Value'),
'', array(
'wide' => 5
));
new Number($counter, 'startvalue', n2_('Start
from'), '', array(
'wide' => 5
));
new Number($counter, 'total', n2_('Total'),
'', array(
'wide' => 5
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-circlecounter-display', n2_('Display'));
new Color($display, 'color', n2_('Color'),
'', array(
'alpha' => true
));
new Color($display, 'color2', n2_('Active
color'), '', array(
'alpha' => true
));
new NumberSlider($display, 'size', n2_('Size'),
'', array(
'min' => 20,
'max' => 1000,
'sliderMax' => 500,
'step' => 10,
'unit' => 'px',
'wide' => 4
));
new NumberSlider($display, 'strokewidth',
n2_('Stroke width'), '', array(
'min' => 1,
'max' => 300,
'sliderMax' => 100,
'step' => 1,
'unit' => 'px',
'wide' => 3
));
$labels = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-circlecounter-labels', n2_('Labels'));
new Text($labels, 'label', n2_('Label'),
'', array(
'style' => 'width:150px;'
));
new Select($labels, 'labelplacement',
n2_('Placement'), '', array(
'options' => array(
'before' => n2_('Before'),
'innerbefore' => n2_('Inner
before'),
'innerafter' => n2_('Inner after'),
'after' => n2_('After')
)
));
new Text($labels, 'pre', n2_('Pre'),
'', array(
'style' => 'width:40px;'
));
new Text($labels, 'post', n2_('Post'),
'', array(
'style' => 'width:40px;'
));
$animation = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-circlecounter-animation', n2_('Animation'));
new Number($animation, 'animationduration',
n2_('Animation duration'), 1, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new Number($animation, 'animationdelay',
n2_('Delay'), 0, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new HiddenFont($counter, 'font', n2_('Font') .
' - ' . n2_('Counter'), '', array(
'mode' => 'simple'
));
new HiddenFont($counter, 'fontlabel',
n2_('Font') . ' - ' . n2_('Label'),
'', array(
'mode' => 'simple'
));
}
}PK5C�[�ZtL��;Renderable/Item/CircleCounter/ItemCircleCounterFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\CircleCounter;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemCircleCounterFrontend extends AbstractItemFrontend {
public function isAuto() {
return true;
}
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$value = intval($this->data->get('value'));
$min = min(0, $value);
$strokeWidth =
intval($this->data->get('strokewidth'));
$size =
max(intval($this->data->get('size')), $strokeWidth + 1);
$startValue =
max(intval($this->data->get('startvalue')), $min);
$total =
max(max(intval($this->data->get('total')), $startValue),
$value);
$duration = max(0,
intval($this->data->get('animationduration')));
$center = $size / 2;
$r = ($size - $strokeWidth) / 2;
$c = pi() * $r * 2;
if ($total != $min) {
$toPercent = (min($value, $total) - $min) / ($total - $min);
if ($duration == 0) {
// We do not have animation
$fromPercent = $toPercent;
} else {
$fromPercent = (min($startValue, $total) - $min) / ($total
- $min);
}
} else {
$duration = 0;
$fromPercent = $toPercent = 0;
}
$pct = (1 - $fromPercent) * $c;
$labelHTML = '';
$label =
$owner->fill($this->data->get('label'));
$placement = '';
if (!empty($label)) {
$fontLabel =
$owner->addFont($this->data->get('fontlabel'),
'simple');
$labelHTML = Html::tag('div', array(
'class' => $fontLabel
), $label);
$placement =
$this->data->get('labelplacement');
}
$html = '';
if ($placement == 'before') {
$html .= $labelHTML;
}
$font =
$owner->addFont($this->data->get('font'),
'simple');
$pre = $this->data->get('pre');
$post = $this->data->get('post');
$countingDivHTML = Html::tag('div', array(
'class' =>
'n2-ss-item-circlecounter-counting-div n2-ow ' . $font
), $pre . round($min + $fromPercent * ($total - $min)) . $post);
$html .= Html::openTag('div', array(
'id' => $this->id,
'class' => 'n2-ow
n2-ss-item-circlecounter-svg-container',
'style' => 'width:' . $size .
'px;'
));
$color = $this->data->get('color');
$color2 = $this->data->get('color2');
$html .= '<svg class="svg" viewBox="0 0
' . $size . ' ' . $size . '"
version="1.1" style="width:' . $size .
'px;height:' . $size . 'px;"
preserveAspectRatio="xMinYMin meet">';
$html .= '<circle class="fl-bar-bg"
r="' . $r . '" cx="' . $center . '"
cy="' . $center . '" stroke="#' .
substr($color, 0, 6) . '" stroke-opacity="' .
Color::hex2alpha($color) / 127 . '" stroke-width="' .
$strokeWidth . '" stroke-dashoffset="0"
stroke-dasharray="' . $c . '"
fill="transparent"></circle>';
$html .= '<circle class="fl-bar" r="'
. $r . '" cx="' . $center . '"
cy="' . $center . '" stroke="#' .
substr($color2, 0, 6) . '" stroke-opacity="' .
Color::hex2alpha($color2) / 127 . '" stroke-width="' .
$strokeWidth . '" stroke-dasharray="' . $c .
'" stroke-dashoffset="' . $pct . '"
transform="rotate(-90 ' . $center . ' ' . $center .
')" fill="transparent"></circle>';
$html .= '</svg>';
$html .= Html::openTag('div', array(
'class' => 'n2-ow
n2-ss-item-circlecounter-svg-overlay'
));
if ($placement == 'innerbefore') {
$html .= $labelHTML;
}
$html .= $countingDivHTML;
if ($placement == 'innerafter') {
$html .= $labelHTML;
}
$html .= '</div>';
$html .= '</div>';
if ($placement == 'after') {
$html .= $labelHTML;
}
$jsData = array(
'name' => 'circlecounter',
'pre' => $pre,
'post' => $post,
'fromPercent' => $fromPercent,
'toPercent' => $toPercent,
'duration' => $duration,
'delay' =>
$this->data->get('animationdelay'),
'min' => $min,
'total' => $total,
'c' => $c,
'counting' =>
'.n2-ss-item-circlecounter-counting-div',
'displayMode' => 'circle',
'display' => 'circle + circle'
);
if ($this->isEditor && $owner->underEdit) {
$owner->addScript('new _N2.CounterItemAdmin(this,
"' . $this->id . '", ' . json_encode($jsData) .
');');
} else {
$owner->addScript('new _N2.FrontendItemCounter(this,
"' . $this->id . '", ' . json_encode($jsData) .
');');
}
return Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ow'
), $html);
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/circlecounter.n2less", array(
"sliderid" => $owner->getElementID()
));
}
}PK5C�[�����'Renderable/Item/Counter/ItemCounter.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Counter;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemCounter extends AbstractItem {
protected $ordering = 11;
protected $fonts = array(
'font' => array(
'defaultName' => 'item-counter-font',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"40||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
),
'fontlabel' => array(
'defaultName' =>
'item-counter-fontlabel',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"2","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'counter';
}
public function getTitle() {
return n2_('Counter');
}
public function getIcon() {
return 'ssi_32 ssi_32--counter';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemCounterFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'value' => 50,
'startvalue' => 0,
'pre' => '',
'post' => '%',
'label' => '',
'labelplacement' => 'after',
'animationduration' => 1000,
'animationdelay' => 0
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('label',
$slide->fill($data->get('label', '')));
$data->set('value',
$slide->fill($data->get('value', '')));
$data->set('startvalue',
$slide->fill($data->get('startvalue', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('fontlabel'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('fontlabel',
$import->fixSection($data->get('fontlabel')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-counter-font',
n2_('Counter'),
$this->fonts['font']['value'], array(
'mode' => 'simple'
));
new Font($row1, 'item-counter-fontlabel',
n2_('Label'),
$this->fonts['fontlabel']['value'], array(
'mode' => 'simple'
));
}
public function renderFields($container) {
$counter = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-counter', n2_('Counter'));
new Number($counter, 'value', n2_('Value'),
'', array(
'wide' => 5
));
new Number($counter, 'startvalue', n2_('Start
from'), '', array(
'wide' => 5
));
$labels = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-counter-labels', n2_('Labels'));
new Text($labels, 'pre', n2_('Pre'),
'', array(
'style' => 'width:50px;'
));
new Text($labels, 'post', n2_('Post'),
'', array(
'style' => 'width:50px;'
));
new Text($labels, 'label', n2_('Label'),
'', array(
'style' => 'width:150px;'
));
new Select($labels, 'labelplacement',
n2_('Placement'), '', array(
'options' => array(
'before' => n2_('Before'),
'after' => n2_('After')
)
));
$animation = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-counter-animation', n2_('Animation'));
new Number($animation, 'animationduration',
n2_('Animation duration'), 1, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new Number($animation, 'animationdelay',
n2_('Delay'), 0, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new HiddenFont($counter, 'font', n2_('Font') .
' - ' . n2_('Counter'), '', array(
'mode' => 'simple'
));
new HiddenFont($counter, 'fontlabel',
n2_('Font') . ' - ' . n2_('Label'),
'', array(
'mode' => 'simple'
));
}
}PK5C�[Zn��/Renderable/Item/Counter/ItemCounterFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Counter;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemCounterFrontend extends AbstractItemFrontend {
public function isAuto() {
return true;
}
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$value =
intval($owner->fill($this->data->get('value')));
$min = min(0, $value);
$startvalue =
max(intval($owner->fill($this->data->get('startvalue'))),
$min);
$total = max($startvalue, $value);
$duration = max(0,
intval($this->data->get('animationduration')));
if ($total != $min) {
$toPercent = (min($value, $total) - $min) / ($total - $min);
if ($duration == 0) {
// We do not have animation
$fromPercent = $toPercent;
} else {
$fromPercent = (min($startvalue, $total) - $min) / ($total
- $min);
}
} else {
$duration = 0;
$fromPercent = $toPercent = 0;
}
$label =
$owner->fill($this->data->get('label'));
$placement = '';
if (!empty($label)) {
$fontLabel =
$owner->addFont($this->data->get('fontlabel'),
'simple');
$labelHTML = Html::tag('div', array(
'class' => $fontLabel
), $label);
$placement =
$this->data->get('labelplacement');
}
$html = '';
if ($placement == 'before') {
$html .= $labelHTML;
}
$font =
$owner->addFont($this->data->get('font'),
'simple');
$pre = $this->data->get('pre');
$post = $this->data->get('post');
$countingDivHTML = Html::tag('div', array(
'class' => 'n2-ss-item-counter-counting-div
n2-ow ' . $font
), $pre . round($min + $fromPercent * ($total - $min)) . $post);
$html .= Html::tag('div', array(
'id' => $this->id,
'class' => 'n2-ow'
), $countingDivHTML);
if ($placement == 'after') {
$html .= $labelHTML;
}
$jsData = array(
'name' => 'counter',
'pre' => $pre,
'post' => $post,
'fromPercent' => $fromPercent,
'toPercent' => $toPercent,
'duration' => $duration,
'delay' =>
$this->data->get('animationdelay'),
'min' => $min,
'total' => $total,
'counting' =>
'.n2-ss-item-counter-counting-div',
'displayMode' => false
);
if ($this->isEditor && $owner->underEdit) {
$owner->addScript('new _N2.CounterItemAdmin(this,
"' . $this->id . '", ' . json_encode($jsData) .
');');
} else {
$owner->addScript('new _N2.FrontendItemCounter(this,
"' . $this->id . '", ' . json_encode($jsData) .
');');
}
return Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ow'
), $html);
}
}PK5C�[��O��-�-=Renderable/Item/HighlightedHeading/ItemHighlightedHeading.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\HighlightedHeading;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemHighlightedHeading extends AbstractItem {
protected $ordering = 3;
protected $fonts = array(
'font' => array(
'defaultName' =>
'item-highlighted-heading-font',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{},{}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' =>
'item-highlighted-heading-style',
'value' =>
'{"data":[{},{"padding":"0|*|0|*|0|*|0|*|px"},{"padding":"0|*|0|*|0|*|0|*|px"}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'highlightedHeading';
}
public function getTitle() {
return n2_('Highlighted heading');
}
public function getIcon() {
return 'ssi_32 ssi_32--highlightheading';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemHighlightedHeadingFrontend($this, $id, $itemData,
$layer);
}
public function getValues() {
return parent::getValues() + array(
'type' => 'circle1',
'color' => '5CBA3CFF',
'width' => 10,
'front' => 0,
'before-text' => 'This page
is',
'highlighted-text' => 'Amazing',
'after-text' => '',
'animate' => 1,
'delay' => 0,
'duration' => 1500,
'loop' => 0,
'loop-delay' => 2000,
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'priority' => 'div',
'class' => ''
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/highlightedHeading.n2less", array(
"sliderid" => $renderable->elementId
));
$renderable->addScript('_N2.ItemHighlightedHeading.svg=' .
json_encode($this->getTypes()) . ';');
}
private function getTypes() {
static $types = null;
if ($types === null) {
$types = array();
$extension = 'svg';
$folder = self::getAssetsPath() . '/svg/';
$files = Filesystem::files($folder);
for ($i = 0; $i < count($files); $i++) {
$pathInfo = pathinfo($files[$i]);
if (isset($pathInfo['extension']) &&
$pathInfo['extension'] == $extension) {
$types[$pathInfo['filename']] =
file_get_contents($folder . $files[$i]);
}
}
}
return $types;
}
private function getTypeOptions() {
return array(
'' => n2_('None'),
'circle1' => n2_('Circle 1'),
'circle2' => n2_('Circle 2'),
'circle3' => n2_('Circle 3'),
'curly1' => n2_('Curly 1'),
'curly2' => n2_('Curly 2'),
'highlight1' => n2_('Highlight
1'),
'highlight2' => n2_('Highlight
2'),
'highlight3' => n2_('Highlight
3'),
'line_through1' => n2_('Line Through
1'),
'line_through2' => n2_('Line Through
2'),
'line_through3' => n2_('Line Through
3'),
'rectangle1' => n2_('Rectangle
1'),
'rectangle2' => n2_('Rectangle
2'),
'underline1' => n2_('Underline
1'),
'underline2' => n2_('Underline
2'),
'underline3' => n2_('Underline
3'),
'underline_double1' => n2_('Underline double
1'),
'underline_double2' => n2_('Underline double
2'),
'zigzag1' => n2_('ZigZag 1'),
'zigzag2' => n2_('ZigZag 2'),
'zigzag3' => n2_('ZigZag 3'),
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('heading',
$slide->fill($data->get('heading', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('style'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('style',
$import->fixSection($data->get('style')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-highlighted-heading-font', false,
$this->fonts['font']['value'], array(
'mode' => 'hover'
));
new Style($row1, 'item-highlighted-heading-style', false,
$this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function renderFields($container) {
$text = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-highlighted-heading-text', n2_('General'));
new Text($text, 'before-text', n2_('Before
text'), '', array(
'style' => 'width: 302px;'
));
new Text($text, 'highlighted-text', n2_('Highlighted
text'), '', array(
'style' => 'width: 302px;'
));
new Text($text, 'after-text', n2_('After
text'), '', array(
'style' => 'width: 302px;'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-highlightheading-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'style' => 'width:236px;',
'relatedFields' => array(
'item_highlightedHeadinghref-target',
'item_highlightedHeadinghref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-highlighted-heading', n2_('Highlight'));
new Select($settings, 'type', n2_('Type'),
'', array(
'options' => $this->getTypeOptions(),
'relatedFields' => array(
'item_highlightedHeadingcolor',
'item_highlightedHeadingwidth',
'item_highlightedHeadingfront',
'fieldset-layer-window-item-highlightheading-animation'
)
));
new Color($settings, 'color', n2_('Color'),
'', array(
'alpha' => true
));
new NumberSlider($settings, 'width',
n2_('Width'), '', array(
'max' => 100,
'min' => 1,
'unit' => 'px',
'wide' => 3
));
new OnOff($settings, 'front', n2_('Bring
front'), 0, array(
'tipLabel' => n2_('Bring front'),
'tipDescription' => n2_('Puts the shape on
top of the text.')
));
$animation = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-highlightheading-animation', n2_('Animation'));
new OnOff($animation, 'animate',
n2_('Animate'), 1, array(
'relatedFieldsOn' => array(
'item_highlightedHeadingdelay',
'item_highlightedHeadingduration',
'item_highlightedHeadingloop-group'
)
));
new Number($animation, 'delay', n2_('Delay'),
0, array(
'unit' => 'ms',
'wide' => 5
));
new Number($animation, 'duration',
n2_('Duration'), 1500, array(
'unit' => 'ms',
'wide' => 5,
'post' => 'break'
));
$groupingLoop = new Grouping($animation, 'loop-group');
new OnOff($groupingLoop, 'loop', n2_x('Loop',
'Effect'), 1, array(
'relatedFieldsOn' => array(
'item_highlightedHeadingloop-delay'
)
));
new Number($groupingLoop, 'loop-delay', n2_('Loop
delay'), 0, array(
'unit' => 'ms',
'wide' => 5
));
$dev = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-highlightheading-dev', n2_('Advanced'));
new Select($dev, 'priority', 'Tag',
'div', array(
'options' => array(
'div' => 'div',
'1' => 'H1',
'2' => 'H2',
'3' => 'H3',
'4' => 'H4',
'5' => 'H5',
'6' => 'H6'
)
));
new HiddenFont($settings, 'font', n2_('Font') .
' - ' . n2_('Heading'), '', array(
'mode' => 'highlight'
));
new HiddenStyle($settings, 'style',
n2_('Style') . ' - ' . n2_('Heading'),
'', array(
'mode' => 'highlight'
));
new Text($dev, 'class', n2_('CSS Class'),
'', array(
'style' => 'width:226px;',
'tipLabel' => n2_('CSS Class'),
'tipDescription' => n2_('Class on the
selected tag element.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1812-layer-style#advanced'
));
}
}PK5C�[eE�ppERenderable/Item/HighlightedHeading/ItemHighlightedHeadingFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\HighlightedHeading;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemHighlightedHeadingFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$heading = array();
$beforeText =
$owner->fill($this->data->get('before-text',
''));
if (!empty($beforeText)) {
$heading[] = Html::tag('div', array(
'class' =>
'n2-ss-highlighted-heading-before'
), $beforeText);
}
$highlightedText =
$owner->fill($this->data->get('highlighted-text',
''));
if (!empty($highlightedText)) {
$svg = '';
$highlightType = $this->data->get('type',
'');
if (!empty($highlightType)) {
$svgPath = self::getAssetsPath() . '/svg/' .
$highlightType . '.svg';
if (Filesystem::fileexists($svgPath)) {
$svg = Filesystem::readFile($svgPath);
$highlightColor =
$this->data->get('color', '');
$css = array(
'stroke:#' . substr($highlightColor, 0,
6) . ';',
'stroke-opacity:' .
Color::hex2opacity($highlightColor) . ';',
'stroke-width:' .
$this->data->get('width', 10) . 'px;'
);
$owner->addCSS('div #' .
$owner->getElementID() . ' #' . $this->id . ' svg
path{' . implode('', $css) . '}');
}
}
$attributes = array(
'class' => 'n2-highlighted
n2-ss-highlighted-heading-highlighted n2-ow',
'data-highlight' => $highlightType
);
if ($this->data->get('animate', 1)) {
$attributes['data-animate'] = 1;
}
$delay = $this->data->get('delay', 0);
if ($delay > 0) {
$attributes['data-delay'] = $delay;
}
$duration = $this->data->get('duration', 1500);
if ($duration != 1500) {
$attributes['data-duration'] = $duration;
}
if ($this->data->get('loop', 0)) {
$attributes['data-loop'] = 1;
}
$loopDelay = $this->data->get('loop-delay', 0);
if ($loopDelay >= 0) {
$attributes['data-loop-delay'] = $loopDelay;
}
if ($this->data->get('front', 0)) {
$attributes['data-front'] = 1;
}
$highlightedInner = Html::tag('div', array(
'class' =>
'n2-ss-highlighted-heading-highlighted-text'
), $highlightedText) . $svg;
$href = $this->data->get('href', '');
if (!empty($href) && $href != '#') {
$heading[] = $this->getLink($highlightedInner,
$attributes);
} else {
$heading[] = Html::tag('div', $attributes,
$highlightedInner);
}
}
$afterText =
$owner->fill($this->data->get('after-text',
''));
if (!empty($afterText)) {
$heading[] = Html::tag('div', array(
'class' =>
'n2-ss-highlighted-heading-after'
), $afterText);
}
$font =
$owner->addFont($this->data->get('font'),
'highlight');
$style =
$owner->addStyle($this->data->get('style'),
'highlight');
return
$this->heading($this->data->get('priority',
'div'), array(
"id" => $this->id,
"class" => 'n2-ss-highlighted-heading-wrapper
' . $font . ' ' . $style . ' n2-ss-item-content
n2-ss-text n2-ow'
), implode('', $heading));
}
private function heading($type, $attributes, $content) {
if ($type > 0) {
return Html::tag("h{$type}", $attributes, $content);
}
return Html::tag("div", $attributes, $content);
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/highlightedHeading.n2less", array(
"sliderid" => $owner->getElementID()
));
if (!$owner->isScriptAdded('highlighted-heading')) {
if ($this->isEditor) {
$owner->addScript('this.sliderElement.querySelectorAll(\'.n2-ss-currently-edited-slide
.n2-ss-highlighted-heading-highlighted\').forEach((function(el){new
_N2.HighlightedHeadingItemAdmin(el, this)}).bind(this));',
'highlighted-heading');
} else {
$owner->addScript('this.sliderElement.querySelectorAll(\'.n2-ss-highlighted-heading-highlighted\').forEach((function(el){new
_N2.FrontendItemHighlightedHeading(el, this)}).bind(this));',
'highlighted-heading');
}
}
}
}PK5C�[���#��!Renderable/Item/Html/ItemHtml.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Html;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\Radio\TextAlign;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemHtml extends AbstractItem {
protected $ordering = 102;
protected $layerProperties = array("desktopportraitwidth"
=> 200);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'html';
}
public function getTitle() {
return n2_('HTML');
}
public function getIcon() {
return 'ssi_32 ssi_32--html';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemHtmlFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'html' => '<div>Empty
element</div>',
'css' => ".selector{\n\n}",
'textalign' => 'inherit'
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('html',
$slide->fill($data->get('html', '')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-html',
n2_('General'));
new Warning($settings, 'item-html-notice',
n2_('Please note that <b>we do not support</b> the HTML
layer and the 3rd party codes loaded by it. We only suggest using this
layer if you are a developer. <br>Also, make sure your HTML code is
valid! Invalid HTML codes can mess up the entire slide and the only way
resolving this problem is deleting the slide.'));
new Textarea($settings, 'html', 'HTML',
'', array(
'height' => 130,
'width' => 314
));
new TextAlign($settings, 'textalign', n2_('Text
align'), 'inherit');
new Textarea($settings, 'css', 'CSS',
'', array(
'height' => 130,
'width' => 314
));
}
}PK5C�[c_c���)Renderable/Item/Html/ItemHtmlFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Html;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
use tidy;
class ItemHtmlFrontend extends AbstractItemFrontend {
private $scripts = array();
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$css = '';
if ($cssCode = $this->data->get('css',
'')) {
$css = Html::style($cssCode);
}
return Html::tag("div", array(),
$this->closeTags('<div style="text-align:' .
$this->data->get("textalign") . ';">' .
$owner->fill($this->data->get("html")) .
'</div>') . $css);
}
private function closeTags($html) {
$html = Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ow'
), $html);
if (class_exists('tidy', false)) {
$tidy_config = array(
'show-body-only' => true,
'wrap' => 0,
'new-blocklevel-tags' =>
'menu,mytag,article,header,footer,section,nav,svg,path,g,a',
'new-inline-tags' =>
'video,audio,canvas,ruby,rt,rp',
'doctype' => '<!DOCTYPE
HTML>',
'preserve-entities' => true,
'drop-empty-elements' => false,
'drop-empty-paras' => false
);
$tidy = new tidy();
$html =
preg_replace_callback('/<script.*?>.*?<\/script>/ism',
array(
$this,
'matchScript'
), $html);
return $tidy->repairString($html, $tidy_config,
'UTF8') . implode('', $this->scripts);
}
return $html;
}
public function matchScript($matches) {
$this->scripts[] = $matches[0];
return '';
}
}PK5C�[����00)Renderable/Item/HtmlList/ItemHtmlList.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\HtmlList;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemHtmlList extends AbstractItem {
protected $ordering = 6;
protected $layerProperties = array(
"desktopportraitleft" => 0,
"desktopportraittop" => 0,
"desktopportraitwidth" => 400,
"desktopportraitalign" => "left",
"desktopportraitvalign" => "top"
);
protected $fonts = array(
'font' => array(
'defaultName' => 'item-list-font',
'value' =>
'{"data":[{"color":"ffffffff","size":"14||px","align":"left"},{"color":"1890d7ff"},{"extra":""}]}'
)
);
protected $styles = array(
'liststyle' => array(
'defaultName' => 'item-list-liststyle',
'value' =>
'{"data":[{"extra":"margin-top:0;\nmargin-bottom:0;"},
{"extra":""}]}'
),
'itemstyle' => array(
'defaultName' => 'item-list-itemstyle',
'value' =>
'{"name":"List","data":[{"padding":"10|*|20|*|10|*|20|*|px","extra":"margin:0;"},{"extra":""}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'list';
}
public function getTitle() {
return n2_('List');
}
public function getIcon() {
return 'ssi_32 ssi_32--list';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemHtmlListFrontend($this, $id, $itemData, $layer);
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-list-font', n2_('List'),
$this->fonts['font']['value'], array(
'mode' => 'list'
));
new Style($row1, 'item-list-liststyle',
n2_('List'),
$this->styles['liststyle']['value'], array(
'mode' => 'heading'
));
new Style($row1, 'item-list-itemstyle',
n2_('Item'),
$this->styles['itemstyle']['value'], array(
'mode' => 'heading'
));
}
public function getValues() {
return parent::getValues() + array(
'content' => n2_("Item 1\nItem 2\nItem
3"),
'type' => 'disc'
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('content',
$slide->fill($data->get('content', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('liststyle'));
$export->addVisual($data->get('itemstyle'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('liststyle',
$import->fixSection($data->get('liststyle')));
$data->set('itemstyle',
$import->fixSection($data->get('itemstyle')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-list',
n2_('General'));
new Textarea($settings, 'content',
n2_('Items'), '', array(
'width' => 314,
'height' => 120
));
new Select($settings, 'type', n2_('List type'),
'', array(
'options' => array(
'none' =>
n2_x('None', 'List layer type'),
'disc' =>
n2_x('Disc', 'List layer type'),
'square' =>
n2_x('Square', 'List layer type'),
'circle' =>
n2_x('Circle', 'List layer type'),
'decimal' =>
n2_x('Decimal', 'List layer type'),
'armenian' =>
n2_x('Armenian', 'List layer type'),
'cjk-ideographic' =>
n2_x('Cjk-ideographic', 'List layer type'),
'decimal-leading-zero' =>
n2_x('Decimal-leading-zero', 'List layer type'),
'georgian' =>
n2_x('Georgian', 'List layer type'),
'hebrew' =>
n2_x('Hebrew', 'List layer type'),
'hiragana' =>
n2_x('Hiragana', 'List layer type'),
'hiragana-iroha' =>
n2_x('Hiragana-iroha', 'List layer type'),
'katakana' =>
n2_x('Katakana', 'List layer type'),
'katakana-iroha' =>
n2_x('Katakana-iroha', 'List layer type'),
'lower-alpha' =>
n2_x('Lower-alpha', 'List layer type'),
'lower-greek' =>
n2_x('Lower-greek', 'List layer type'),
'lower-latin' =>
n2_x('Lower-latin', 'List layer type'),
'lower-roman' =>
n2_x('Lower-roman', 'List layer type'),
'upper-alpha' =>
n2_x('Upper-alpha', 'List layer type'),
'upper-latin' =>
n2_x('Upper-latin', 'List layer type'),
'upper-roman' =>
n2_x('Upper-roman', 'List layer type')
)
));
new HiddenFont($settings, 'font', false, '',
array(
'mode' => 'list',
));
new HiddenStyle($settings, 'liststyle',
n2_('Style') . ' - ' . n2_('List'),
'', array(
'mode' => 'heading'
));
new HiddenStyle($settings, 'itemstyle',
n2_('Style') . ' - ' . n2_('Item'),
'', array(
'mode' => 'heading'
));
}
}PK5C�[G����1Renderable/Item/HtmlList/ItemHtmlListFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\HtmlList;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemHtmlListFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHTML() {
$owner = $this->layer->getOwner();
$font =
$owner->addFont($this->data->get('font'),
'list');
$listStyle =
$owner->addStyle($this->data->get('liststyle'),
'heading');
$itemStyle =
$owner->addStyle($this->data->get('itemstyle'),
'heading');
$html = '';
$lis = explode("\n",
$owner->fill($this->data->get('content',
'')));
foreach ($lis AS $li) {
$html .= '<li class="' . $itemStyle . '
n2-ow" style="list-style-type:inherit;">' . $li .
'</li>';
}
return Html::tag('ol', array(
'class' => $font . '' . $listStyle .
' n2-ss-item-content n2-ow',
'style' => "list-style-type:" .
$this->data->get('type')
), $html);
}
}PK5C�[������!Renderable/Item/Icon/ItemIcon.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Icon;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\Icon;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemIcon extends AbstractItem {
protected $ordering = 5;
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'icon2';
}
public function getTitle() {
return n2_('Icon');
}
public function getIcon() {
return 'ssi_32 ssi_32--icon';
}
public function createFrontend($id, $itemData, $layer) {
return new ItemIconFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'icon' => 'fa:smile-o',
'color' => 'ffffffff',
'colorhover' => 'ffffff00',
'size' => 100,
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'href-aria-label' => '',
'style' => ''
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('icon',
$slide->fill($data->get('icon', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('style'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('style',
$import->fixSection($data->get('style')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-icon2-icon', n2_('General'));
new Icon($settings, 'icon', n2_('Icon'));
new Color($settings, 'color', n2_('Color'),
'00000080', array(
'alpha' => true
));
new Color($settings, 'colorhover', n2_('Hover
color'), '00000000', array(
'alpha' => true
));
new NumberSlider($settings, 'size',
n2_('Size'), 24, array(
'min' => 4,
'max' => 10000,
'sliderMax' => 200,
'step' => 4,
'wide' => 3,
'unit' => 'px'
));
new HiddenStyle($settings, 'style', false, '',
array(
'mode' => 'box'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-icon2-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'style' => 'width:236px;',
'relatedFields' => array(
'item_icon2href-target',
'item_icon2href-rel',
'item_icon2href-aria-label'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
new Text($link, 'href-aria-label', n2_('Aria
label'), '', array(
'tipLabel' => n2_('Aria label'),
'tipDescription' => sprintf(n2_('Enter an
%1$s aria-label attribute %2$s that describes the link.'), '<a
href="https://www.w3.org/TR/WCAG20-TECHS/ARIA14.html"
target="_blank">', '</a>')
));
}
}PK5C�[������)Renderable/Item/Icon/ItemIconFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Icon;
use Nextend\Framework\Icon\Icon;
use Nextend\Framework\Parser\Color;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemIconFrontend extends AbstractItemFrontend {
public function isAuto() {
return true;
}
public function render() {
if ($this->hasLink()) {
$attributes = array(
'style' => 'display:inline-block;',
'class' => 'n2-ss-item-content
n2-ow'
);
$ariaLabel =
$this->data->get('href-aria-label', '');
if (!empty($ariaLabel)) {
$attributes['aria-label'] = $ariaLabel;
}
return $this->getLink($this->getHtml(false),
$attributes);
}
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml($isContent = true) {
$owner = $this->layer->getOwner();
$iconData = Icon::render($this->data->get('icon'));
if (!$iconData) {
return '';
}
$styleClass =
$owner->addStyle($this->data->get('style'),
'heading');
$selector = 'div#' . $owner->getElementID() . '
.' . $this->id;
$color =
Color::colorToRGBA($this->data->get('color',
'00000080'));
$style = $selector . '{color:' . $color .
'}';
if (substr($this->data->get('colorhover',
'00000000'), 6, 2) != '00') {
$colorHover =
Color::colorToRGBA($this->data->get('colorhover',
'00000000'));
$style .= $selector . ':HOVER,' . $selector .
':FOCUS,' . $selector . ':VISITED{color:' . $colorHover
. '}';
}
$owner->addCSS($style);
return '<span class="n2i ' . $styleClass . '
' . $this->id . ' ' . $iconData['class'] .
($isContent ? ' n2-ss-item-content' : '') .
'" style="font-size:' .
($this->data->get('size') / 16 * 100) .
'%;">' . $iconData['ligature'] .
'</span>';
}
}PK5C�[F�;��%Renderable/Item/Iframe/ItemIframe.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Iframe;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemIframe extends AbstractItem {
protected $ordering = 100;
protected $layerProperties = array(
"desktopportraitwidth" => 300,
"desktopportraitheight" => 300
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'iframe';
}
public function getTitle() {
return n2_('iframe');
}
public function getIcon() {
return 'ssi_32 ssi_32--iframe';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemIframeFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'url' =>
'https://smartslider3.com/',
'size' => '100%|*|100%',
'scroll' => 'yes'
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('url',
$slide->fill($data->get('url', '')));
return $data;
}
public function renderFields($container) {
$general = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-iframe', n2_('General'));
new Warning($general, '', n2_('Please note, that
<b>we do not support</b> customized coding! The iframe layer
often needs code customizations what you have to do yourself, so we only
suggest using this layer if you are a developer!'));
new Text($general, 'url', n2_('iframe url'),
'', array(
'style' => 'width:302px;'
));
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-iframe-settings', n2_('Display'));
new Select($settings, 'scroll', n2_('Scroll'),
'auto', array(
'options' => array(
'yes' => n2_('Yes'),
'no' => n2_('No'),
'auto' => n2_('Auto')
),
'tipLabel' => n2_('Scroll'),
'tipDescription' => n2_('You can disable the
scroll on the iframe content.')
));
$size = new MixedField($settings, 'size', false,
'100%|*|100%');
new Text($size, 'size-1', n2_('Width'),
'', array(
'style' => 'width:40px;'
));
new Text($size, 'size-2', n2_('Height'),
'', array(
'style' => 'width:40px;'
));
$advanced = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-iframe-advanced', n2_('Advanced'));
new Text($advanced, 'title', n2_('iframe
title'), '', array(
'style' => 'width:302px;'
));
}
}PK5C�[�����-Renderable/Item/Iframe/ItemIframeFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Iframe;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemIframeFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$size =
(array)Common::parse($this->data->get('size',
''));
if (!isset($size[0])) $size[0] = '100%';
if (!isset($size[1])) $size[1] = '100%';
$attributes = array(
"encode" => false,
"frameborder" => 0,
"class" => "n2-ow
intrinsic-ignore",
"width" => $size[0],
"height" => $size[1],
"scrolling" =>
$this->data->get("scroll"),
"sandbox" => 'allow-modals allow-forms
allow-popups allow-scripts allow-same-origin'
);
$title = $this->data->get('title', '');
if (!empty($title)) {
$attributes['title'] = $title;
}
$attributes[$owner->isLazyLoadingEnabled() ?
'data-lazysrc' : 'src'] =
$owner->fill($this->data->get("url"));
return Html::tag('div', array('class' =>
'n2-ss-item-iframe-wrapper n2-ss-item-content n2-ow'),
Html::tag("iframe", $attributes, ""));
}
public function needHeight() {
return true;
}
}PK5C�[�s�!!+Renderable/Item/ImageArea/ItemImageArea.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ImageArea;
use Nextend\Framework\Form\Element\LayerWindowFocus;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\HiddenText;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemImageArea extends AbstractItem {
protected $ordering = 6;
protected $layerProperties = array(
"desktopportraitwidth" => 150,
"desktopportraitheight" => 150
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'imagearea';
}
public function getTitle() {
return n2_('Image area');
}
public function getIcon() {
return 'ssi_32 ssi_32--imagearea';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemImageAreaFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'image' =>
'$ss3-frontend$/images/placeholder/image.png',
'alt' => '',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'fillmode' => 'cover',
'positionx' => 50,
'positiony' => 50
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('image',
$slide->fill($data->get('image', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
$data->set('alt',
$slide->fill($data->get('alt', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('image',
$import->fixImage($data->get('image')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function prepareSample($data) {
$data->set('image',
ResourceTranslator::toUrl($data->get('image')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-imagearea', n2_('General'));
$fieldImage = new FieldImage($settings, 'image',
n2_('Image'), '', array(
'relatedAlt' => 'item_imageareaalt',
'width' => 220,
'relatedFields' => array(
'item_imageareaitem-imagearea-focus'
)
));
$fieldFocusX = new HiddenText($settings, 'positionx',
50);
$fieldFocusY = new HiddenText($settings, 'positiony',
50);
$focusField = new LayerWindowFocus($settings,
'item-imagearea-focus', n2_('Focus'), array(
'tipLabel' => n2_('Focus'),
'tipDescription' => n2_('You can set the
starting position of a background image. This makes sure that the selected
part will always remain visible, so you should pick the most important
part.')
));
$focusField->setFields($fieldImage, $fieldFocusX, $fieldFocusY);
new Select($settings, 'fillmode', n2_('Fill
mode'), 'cover', array(
'options' => array(
'cover' => n2_('Fill'),
'contain' => n2_('Fit')
)
));
new Text($settings, 'alt', 'SEO - ' .
n2_('Alt tag'), '', array(
'style' => 'width:133px;'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-imagearea-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'relatedFields' => array(
'item_imageareahref-target',
'item_imageareahref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
}
}PK5C�[5?;>>3Renderable/Item/ImageArea/ItemImageAreaFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ImageArea;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemImageAreaFrontend extends AbstractItemFrontend {
public function render() {
if ($this->hasLink()) {
return $this->getLink($this->getHtml(false), array(
'style' => 'display: block;
width:100%;height:100%;',
'class' => 'n2-ss-item-content
n2-ow'
));
}
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml($isContent = true) {
$owner = $this->layer->getOwner();
$image = $this->data->get('image', '');
if (empty($image)) {
return '';
}
$image = $owner->fill($image);
$imageUrl = ResourceTranslator::toUrl($image);
$owner->addImage($imageUrl);
$imageAttributes = array(
"alt" =>
htmlspecialchars($owner->fill($this->data->get('alt',
''))),
'class' => ($isContent ? 'n2-ss-item-content
' : '') . ' n2-ss-item-image-area',
'style' => 'object-fit:' .
$this->data->get('fillmode', 'cover') .
';object-position:' .
$this->data->get('positionx', 50) . '% ' .
$this->data->get('positiony', 50) . '%;'
);
return $owner->renderImage($this, $image, $imageAttributes,
array(
'class' => 'n2-ow-all'
));
}
public function needHeight() {
return true;
}
}PK5C�[g��044)Renderable/Item/ImageBox/ItemImageBox.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ImageBox;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\Icon;
use Nextend\Framework\Form\Element\IconTab;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\RichTextarea;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Form\Element\Radio\InnerAlign;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemImageBox extends AbstractItem {
protected $ordering = 1;
protected $layerProperties = array("desktopportraitwidth"
=> "300");
protected $fonts = array(
'fonttitle' => array(
'defaultName' =>
'item-imagebox-fonttitle',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"32||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'
),
'fontdescription' => array(
'defaultName' =>
'item-imagebox-fontdescription',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"2","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""},{"extra":""}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-imagebox-style',
'value' => ''
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'imagebox';
}
public function getTitle() {
return n2_('Image box');
}
public function getIcon() {
return 'ssi_32 ssi_32--imagebox';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemImageBoxFrontend($this, $id, $itemData, $layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/imagebox.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'layout' => 'top',
'padding' =>
'10|*|10|*|10|*|10',
'inneralign' => 'center',
'verticalalign' => 'flex-start',
'image' =>
'$ss3-frontend$/images/placeholder/image.png',
'imagewidth' => 100,
'alt' => '',
'icon' => '',
'iconsize' => 64,
'iconcolor' => 'ffffffff',
'heading' => n2_('Heading'),
'headingpriority' => 'div',
'description' => 'Lorem ipsum dolor
sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua.',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'fullwidth' => 0,
'image-optimize' => 1
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('heading',
$slide->fill($data->get('heading', '')));
$data->set('description',
$slide->fill($data->get('description', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
$data->set('image',
$slide->fill($data->get('image', '')));
$data->set('alt',
$slide->fill($data->get('alt', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
$export->addVisual($data->get('fonttitle'));
$export->addVisual($data->get('fontdescription'));
$export->addVisual($data->get('style'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('image',
$import->fixImage($data->get('image')));
$data->set('fonttitle',
$import->fixSection($data->get('fonttitle')));
$data->set('fontdescription',
$import->fixSection($data->get('fontdescription')));
$data->set('style',
$import->fixSection($data->get('style')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function prepareSample($data) {
$data->set('image',
ResourceTranslator::toUrl($data->get('image')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-imagebox-fonttitle',
n2_('Title'),
$this->fonts['fonttitle']['value'], array(
'mode' => 'hover'
));
new Font($row1, 'item-imagebox-fontdescription',
n2_('Description'),
$this->fonts['fontdescription']['value'], array(
'mode' => 'paragraph'
));
new Style($row1, 'item-imagebox-style', n2_('Image
box'), $this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function renderFields($container) {
$imageSettings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'image-settings', n2_('General'));
new IconTab($imageSettings, 'imagetype',
n2_('Type'), 'image', array(
'options' => array(
'image' => 'ssi_16 ssi_16--image',
'icon' => 'ssi_16 ssi_16--star'
),
'relatedValueFields' => array(
array(
'values' => array(
'image'
),
'field' => array(
'item_imageboximage',
'item_imageboximagewidth',
'item_imageboxalt'
)
),
array(
'values' => array(
'icon'
),
'field' => array(
'item_imageboxicon',
'item_imageboxiconsize',
'item_imageboxiconcolor',
)
)
),
'tooltips' => array(
'image' => n2_('Image'),
'icon' => n2_('Icon'),
)
));
new FieldImage($imageSettings, 'image',
n2_('Image'), '', array(
'relatedAlt' => 'item_imageboxalt',
'width' => 140
));
new NumberSlider($imageSettings, 'imagewidth',
n2_('Width'), '', array(
'max' => 100,
'unit' => '%',
'wide' => 3
));
new Text($imageSettings, 'alt', 'SEO - ' .
n2_('Alt tag'), '', array(
'style' => 'width:218px;'
));
new Icon($imageSettings, 'icon', n2_('Icon'),
'', array(
'hasClear' => true
));
new NumberSlider($imageSettings, 'iconsize',
n2_('Size'), 100, array(
'min' => 8,
'max' => 400,
'sliderMax' => 200,
'step' => 4,
'wide' => 3,
'unit' => 'px'
));
new Color($imageSettings, 'iconcolor',
n2_('Color'), '', array(
'alpha' => true
));
new OnOff($imageSettings, 'fullwidth', n2_('Full
width'), 1);
$text = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'text-settings', n2_('Text'));
new Text($text, 'heading', n2_('Heading'),
n2_('Heading'), array(
'style' => 'width:226px;'
));
new Select($text, 'headingpriority',
n2_('Tag'), 'div', array(
'options' => array(
'div' => 'div',
'1' => 'H1',
'2' => 'H2',
'3' => 'H3',
'4' => 'H4',
'5' => 'H5',
'6' => 'H6'
)
));
new HiddenFont($text, 'fonttitle',
n2_('Heading'), '', array(
'mode' => 'hover'
));
new RichTextarea($text, 'description',
n2_('Description'), '', array(
'fieldStyle' => 'height: 120px; width:
314px;resize: vertical;'
));
new HiddenFont($text, 'fontdescription',
n2_('Description'), '', array(
'mode' => 'paragraph'
));
new HiddenStyle($text, 'style', false, '',
array(
'mode' => 'box'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-imagebox-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'relatedFields' => array(
'item_imageboxhref-target',
'item_imageboxhref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-imagebox', n2_('Display'));
new Select($settings, 'layout', n2_('Layout'),
'', array(
'options' => array(
'top' => n2_('Top'),
'left' => n2_('Left'),
'right' => n2_('Right'),
'bottom' => n2_('Bottom')
),
'relatedValueFields' => array(
array(
'values' => array(
'left',
'right'
),
'field' => array(
'item_imageboxverticalalign'
)
)
)
));
$padding = new MarginPadding($settings, 'padding',
n2_('Padding'), '10|*|10|*|10|*|10', array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($padding, 'padding-' . $i,
false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'wide' => 3
));
}
new InnerAlign($settings, 'inneralign', n2_('Inner
align'));
new Select($settings, 'verticalalign', n2_('Vertical
align'), '', array(
'options' => array(
'flex-start' => n2_('Top'),
'center' => n2_('Center'),
'flex-end' => n2_('Bottom')
),
'tipLabel' => n2_('Vertical
align'),
'tipDescription' => n2_('Positions the text
inside the layer. Only works with left and right layout.')
));
$optimize = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-caption-optimize', n2_('Optimize'));
new OnOff($optimize, 'image-optimize', n2_('Optimize
image'), 1, array(
'tipLabel' => n2_('Optimize
image'),
'tipDescription' => n2_('You can turn off the
Layer image optimization for this image, to resize it for tablet and
mobile.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1839-caption-layer#optimize'
));
}
}PK5C�[�W
��1Renderable/Item/ImageBox/ItemImageBoxFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ImageBox;
use Nextend\Framework\Icon\Icon;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Component\AbstractComponent;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemImageBoxFrontend extends AbstractItemFrontend {
public function isAuto() {
return !$this->data->get('fullwidth', 1);
}
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$style =
$owner->addStyle($this->data->get('style'),
'heading');
$layout = $this->data->get('layout');
$attr = array(
'class' =>
'n2-ss-item-imagebox-container n2-ss-item-content n2-ow-all ' .
$style,
'data-layout' => $layout,
'style' =>
AbstractComponent::innerAlignToStyle($this->data->get('inneralign'))
);
if ($layout == 'left' || $layout == 'right') {
$attr['style'] .= 'align-items:' .
$this->data->get('verticalalign') . ';';
}
$html = Html::openTag('div', $attr);
// START IMAGE SECTION
$imageHTML = '';
$imageContainerStyle = '';
$imageInnerStyle = '';
$icon = $this->data->get('icon');
$image = $this->data->get('image');
$imageType =
$this->data->get('imagetype', 'icon');
if (!empty($icon) && $imageType == 'icon') {
$iconData = Icon::render($icon);
$imageHTML .= Html::tag('i', array(
'class' => 'n2i ' .
$iconData['class'],
'style' => 'color: ' .
Color::colorToRGBA($this->data->get('iconcolor')) .
';font-size:' . ($this->data->get('iconsize') /
16 * 100) . '%'
), $iconData['ligature']);
} else if (!empty($image)) {
if ($layout == 'top' || $layout ==
'bottom') {
$imageInnerStyle .= 'max-width:' .
$this->data->get('imagewidth') . '%;';
} else {
$imageContainerStyle .= 'max-width:' .
$this->data->get('imagewidth') . '%;';
}
$image =
$owner->fill($this->data->get('image'));
$imageAttributes = array(
'alt' =>
$owner->fill($this->data->get('alt')),
'style' => $imageInnerStyle,
'class' => ''
);
$imageHTML = $owner->renderImage($this, $image,
$imageAttributes);
}
if (!empty($imageHTML)) {
$html .= Html::tag('div', array(
'class' =>
'n2-ss-item-imagebox-image',
'style' => $imageContainerStyle
), $this->getLink($imageHTML));
}
// END IMAGE SECTION
// START CONTENT SECTION
$html .= Html::openTag('div', array(
'class' =>
'n2-ss-item-imagebox-content',
'style' => 'padding:' . implode('px
', explode('|*|',
$this->data->get('padding'))) . 'px'
));
$heading = $this->data->get('heading');
if (!empty($heading)) {
$font =
$owner->addFont($this->data->get('fonttitle'),
'hover');
$priority =
$this->data->get('headingpriority');
$html .= $this->getLink(Html::tag($priority > 0 ?
'h' . $priority : $priority, array('class' =>
$font), $owner->fill($heading)));
}
$description = $this->data->get('description');
if (!empty($description)) {
$font =
$owner->addFont($this->data->get('fontdescription'),
'paragraph');
$html .= Html::tag('div', array('class'
=> $font), $owner->fill($description));
}
$html .= '</div>';
// END CONTENT SECTION
$html .= '</div>';
return $html;
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/imagebox.n2less", array(
"sliderid" => $owner->getElementID()
));
}
}PK5C�[�ƽ�!!#Renderable/Item/Input/ItemInput.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Input;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemInput extends AbstractItem {
protected $ordering = 100;
protected $fonts = array(
'inputfont' => array(
'defaultName' => 'item-input-font',
'value' =>
'{"data":[{"color":"000000ff","size":"15||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat,Arial","lineheight":"44px","bold":0,"italic":0,"underline":0,"align":"left","letterspacing":"normal","wordspacing":"normal","texttransform":"none","extra":"height:44px;"},{},{}]}'
),
'buttonfont' => array(
'defaultName' =>
'item-input-button-font',
'value' =>
'{"data":[{"color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat,Arial","lineheight":"44px","bold":0,"italic":0,"underline":0,"align":"left","letterspacing":"normal","wordspacing":"normal","texttransform":"none","extra":""},{},{}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' =>
'item-input-container-style',
'value' => ''
),
'inputstyle' => array(
'defaultName' => 'item-input-style',
'value' =>
'{"data":[{"backgroundcolor":"ffffffff","padding":"0|*|20|*|0|*|20|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""},{}]}'
),
'buttonstyle' => array(
'defaultName' =>
'item-input-button-style',
'value' =>
'{"data":[{"backgroundcolor":"04bc8fff","padding":"0|*|35|*|0|*|35|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""},{}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'input';
}
public function getTitle() {
return n2_('Input');
}
public function getIcon() {
return 'ssi_32 ssi_32--input';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemInputFrontend($this, $id, $itemData, $layer);
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Style($row1, 'item-input-container-style',
n2_('Container'),
$this->styles['style']['value'], array(
'mode' => 'heading'
));
new Font($row1, 'item-input-font',
n2_('Input'),
$this->fonts['inputfont']['value'], array(
'mode' => 'input'
));
new Style($row1, 'item-input-style',
n2_('Input'),
$this->styles['inputstyle']['value'], array(
'mode' => 'heading'
));
new Font($row1, 'item-input-button-font',
n2_('Button'),
$this->fonts['buttonfont']['value'], array(
'mode' => 'hover'
));
new Style($row1, 'item-input-button-style',
n2_('Button'),
$this->styles['buttonstyle']['value'], array(
'mode' => 'button'
));
}
public function getValues() {
return parent::getValues() + array(
'placeholder' => n2_('What are you
looking for?'),
'action' =>
'https://www.google.com/search',
'method' => 'GET',
'target' => '_self',
'parameters' =>
'ie=utf-8&oe=utf-8',
'name' => 'q',
'buttonlabel' => n2_('Search'),
'submit' => '',
'class' => '',
'onsubmit' => '',
'onkeyup' => ''
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('parameters',
$slide->fill($data->get('parameters')));
$data->set('buttonlabel',
$slide->fill($data->get('buttonlabel')));
$data->set('action',
$slide->fill($data->get('action')));
$data->set('name',
$slide->fill($data->get('name')));
$data->set('placeholder',
$slide->fill($data->get('placeholder')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('style'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('style',
$import->fixSection($data->get('style')));
return $data;
}
public function renderFields($container) {
$text = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-input', n2_('Text'));
new Warning($text, 'item-input-notice', n2_('We only
suggest using this layer if you are a developer, since the Input layer
requires deep understanding how HTML form works.'));
new Text($text, 'placeholder', n2_('Placeholder
text'), n2_('What are you looking for?'), array(
'style' => 'width:170px;'
));
new Text($text, 'buttonlabel', n2_('Label'),
n2_('Button'), array(
'style' => 'width:96px;'
));
$developer = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-input-developer', n2_('Form'));
new Text($developer, 'name', n2_('Input name'),
'q', array(
'style' => 'width:80px;'
));
new Select($developer, 'method', n2_('Method'),
'GET', array(
'options' => array(
'GET' => 'GET',
'POST' => 'POST'
)
));
new LinkTarget($developer, 'target', n2_('Target
window'));
new Text($developer, 'action', n2_('Form
action'), 'https://www.google.com/search', array(
'style' => 'width:302px;'
));
new Textarea($developer, 'parameters',
n2_('Parameters'), 'ie=utf-8&oe=utf-8', array(
'width' => 314
));
new Select($developer, 'submit', n2_('Slide action
to submit'), '', array(
'options' => array(
'' => n2_('Off'),
'click' => n2_('Click'),
'mouseenter' => n2_('Mouse enter'),
'mouseleave' => n2_('Mouse leave')
)
));
$js = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-input-js', n2_('JavaScript'));
new Text($js, 'onsubmit', 'OnSubmit',
'', array(
'style' => 'width:133px;'
));
new Text($js, 'onkeyup', 'OnKeyUp',
'', array(
'style' => 'width:133px;'
));
$html = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-input-html', n2_('Advanced'));
new Text($html, 'class', n2_('CSS Class'),
'', array(
'style' => 'width:302px;',
'tipLabel' => n2_('CSS Class'),
'tipDescription' => sprintf(n2_('Class on the
%s element.'), '<form>'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1812-layer-style#advanced'
));
new HiddenFont($text, 'inputfont',
n2_('Input'), '', array(
'mode' => 'paragraph'
));
new HiddenStyle($text, 'inputstyle',
n2_('Input'), '', array(
'mode' => 'heading'
));
new HiddenStyle($text, 'style',
n2_('Container'), '', array(
'mode' => 'heading'
));
new HiddenFont($text, 'buttonfont',
n2_('Button'), '', array(
'mode' => 'hover'
));
new HiddenStyle($text, 'buttonstyle',
n2_('Button'), '', array(
'mode' => 'heading'
));
}
}PK6C�[������+Renderable/Item/Input/ItemInputFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Input;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemInputFrontend extends AbstractItemFrontend {
public function render() {
$owner = $this->layer->getOwner();
$style =
$owner->addStyle($this->data->get('style'),
'heading');
$inputFont =
$owner->addFont($this->data->get('inputfont'),
'paragraph');
$inputStyle =
$owner->addStyle($this->data->get('inputstyle'),
'heading');
$slideSubmitAction = $this->data->get('submit');
if (!empty($slideSubmitAction)) {
$owner->addScript('_N2.$("#' . $this->id .
'").closest(".n2-ss-slide").on("' .
$this->data->get('submit') . '",
function(e){_N2.$("#' . $this->id .
'").trigger("submit")})');
}
$parameters = explode('&',
$owner->fill($this->data->get('parameters')));
$parametersHTML = '';
foreach ($parameters AS $parameter) {
$parameter = explode('=', $parameter);
if (count($parameter) == 2) {
$parametersHTML .= Html::tag('input', array(
'type' => 'hidden',
'name' => $parameter[0],
'value' => $parameter[1],
'class' => 'n2-ow'
), false, false);
}
}
$button = '';
$buttonLabel =
$owner->fill($this->data->get('buttonlabel'));
if (!empty($buttonLabel)) {
$buttonFont =
$owner->addFont($this->data->get('buttonfont'),
'hover');
$buttonStyle =
$owner->addStyle($this->data->get('buttonstyle'),
'heading');
$button = Html::tag('input', array(
'encode' => false,
'style' => 'white-space:nowrap;',
'type' => 'submit',
'value' => $buttonLabel,
'class' => 'n2-form-button ' .
$buttonFont . ' ' . $buttonStyle . ' n2-ow'
), false, false);
}
return Html::tag('form', array(
'class' => 'n2-ss-item-input-form ' .
$style . ' n2-ss-item-content n2-ow ' .
$owner->fill($this->data->get('class', '')),
'id' => $this->id,
'action' =>
$owner->fill($this->data->get('action')),
'method' =>
$this->data->get('method'),
'target' =>
$this->data->get('target'),
'onsubmit' =>
$this->data->get('onsubmit')
), Html::tag('input', array(
'encode' => false,
'name' =>
$owner->fill($this->data->get('name', '')),
'type' => 'text',
'placeholder' =>
strip_tags($owner->fill($this->data->get('placeholder',
''))),
'class' => 'n2-input n2-ow ' .
$inputFont . $inputStyle,
'style' => 'display: block; width:
100%;white-space:nowrap;',
'onkeyup' =>
$this->data->get('onkeyup')
), false, false) . $parametersHTML . $button);
}
public function renderAdminTemplate() {
$owner = $this->layer->getOwner();
$style =
$owner->addStyle($this->data->get('style'),
'heading');
$inputFont =
$owner->addFont($this->data->get('inputfont'),
'paragraph');
$inputStyle =
$owner->addStyle($this->data->get('inputstyle'),
'heading');
$button = '';
$buttonLabel =
$owner->fill($this->data->get('buttonlabel'));
if (!empty($buttonLabel)) {
$buttonFont =
$owner->addFont($this->data->get('buttonfont'),
'hover');
$buttonStyle =
$owner->addStyle($this->data->get('buttonstyle'),
'heading');
$button = Html::tag('div', array(
'style' => 'white-space:nowrap;',
'class' => 'n2-form-button ' .
$buttonFont . ' ' . $buttonStyle . ' n2-ow'
), $buttonLabel);
}
return Html::tag('div', array(
'class' => 'n2-ss-item-input-form ' .
$style . ' ' . $this->data->get('class',
'') . ' n2-ow'
), "<div class='n2-input n2-ow " . $inputFont .
" " . $inputStyle . "'
style='white-space:nowrap;'>" .
strip_tags($owner->fill($this->data->get('placeholder',
''))) . "</div>" . $button);
}
}PK6C�[ɠ�� Renderable/Item/ItemLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Renderable\Item\ItemFactory;
use
Nextend\SmartSlider3Pro\Renderable\Item\AnimatedHeading\ItemAnimatedHeading;
use Nextend\SmartSlider3Pro\Renderable\Item\Area\ItemArea;
use Nextend\SmartSlider3Pro\Renderable\Item\Audio\ItemAudio;
use Nextend\SmartSlider3Pro\Renderable\Item\Caption\ItemCaption;
use
Nextend\SmartSlider3Pro\Renderable\Item\CircleCounter\ItemCircleCounter;
use Nextend\SmartSlider3Pro\Renderable\Item\Counter\ItemCounter;
use
Nextend\SmartSlider3Pro\Renderable\Item\HighlightedHeading\ItemHighlightedHeading;
use Nextend\SmartSlider3Pro\Renderable\Item\Html\ItemHtml;
use Nextend\SmartSlider3Pro\Renderable\Item\HtmlList\ItemHtmlList;
use Nextend\SmartSlider3Pro\Renderable\Item\Icon\ItemIcon;
use Nextend\SmartSlider3Pro\Renderable\Item\Iframe\ItemIframe;
use Nextend\SmartSlider3Pro\Renderable\Item\ImageArea\ItemImageArea;
use Nextend\SmartSlider3Pro\Renderable\Item\ImageBox\ItemImageBox;
use Nextend\SmartSlider3Pro\Renderable\Item\Input\ItemInput;
use Nextend\SmartSlider3Pro\Renderable\Item\ProgressBar\ItemProgressBar;
use Nextend\SmartSlider3Pro\Renderable\Item\Transition\ItemTransition;
use Nextend\SmartSlider3Pro\Renderable\Item\Video\ItemVideo;
use
Nextend\SmartSlider3Pro\Renderable\Joomla\Item\JoomlaModule\ItemJoomlaModule;
class ItemLoader {
public function __construct() {
Plugin::addAction('PluggableFactoryRenderableItem',
array(
$this,
'renderableItems'
));
}
/**
* @param ItemFactory $factory
*/
public function renderableItems($factory) {
new ItemAnimatedHeading($factory);
new ItemArea($factory);
new ItemAudio($factory);
new ItemCaption($factory);
new ItemCircleCounter($factory);
new ItemCounter($factory);
new ItemHighlightedHeading($factory);
new ItemHtml($factory);
new ItemIcon($factory);
new ItemIframe($factory);
new ItemImageArea($factory);
new ItemImageBox($factory);
new ItemInput($factory);
new ItemHtmlList($factory);
new ItemProgressBar($factory);
new ItemTransition($factory);
new ItemVideo($factory);
new ItemJoomlaModule($factory);
}
}PK6C�[�T4!ss/Renderable/Item/ProgressBar/ItemProgressBar.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ProgressBar;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemProgressBar extends AbstractItem {
protected $ordering = 10;
protected $layerProperties = array(
"desktopportraitwidth" => 300
);
protected $fonts = array(
'font' => array(
'defaultName' =>
'item-progressbar-font',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"right","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
),
'fontlabel' => array(
'defaultName' =>
'item-progressbar-fontlabel',
'value' =>
'{"data":[{"extra":"","color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"left","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'progressbar';
}
public function getTitle() {
return n2_('Progress bar');
}
public function getIcon() {
return 'ssi_32 ssi_32--progressbar';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemProgressBarFrontend($this, $id, $itemData, $layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/progressbar.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'value' => 50,
'startvalue' => 0,
'total' => 100,
'color' => '00000080',
'color2' => '64c133ff',
'pre' => '',
'post' => '%',
'label' => 'Progress',
'labelplacement' => 'before',
'animationduration' => 1000,
'animationdelay' => 0
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('label',
$slide->fill($data->get('label', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('fontlabel'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('fontlabel',
$import->fixSection($data->get('fontlabel')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-progressbar-font',
n2_('Progress bar'),
$this->fonts['font']['value'], array(
'mode' => 'simple'
));
new Font($row1, 'item-progressbar-fontlabel',
n2_('Label'),
$this->fonts['fontlabel']['value'], array(
'mode' => 'simple'
));
}
public function renderFields($container) {
$counter = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-progressbar-counter', n2_('Counter'));
new Number($counter, 'value', n2_('Value'),
'', array(
'wide' => 5
));
new Number($counter, 'startvalue', n2_('Start
from'), '', array(
'wide' => 5
));
new Number($counter, 'total', n2_('Total'),
'', array(
'wide' => 5
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-progressbar-display', n2_('Display'));
new Color($display, 'color', n2_('Color'),
'', array(
'alpha' => true
));
new Color($display, 'color2', n2_('Active
color'), '', array(
'alpha' => true
));
$labels = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-progressbar-labels', n2_('Labels'));
new Text($labels, 'label', n2_('Label'),
'', array(
'style' => 'width:150px;'
));
new Select($labels, 'labelplacement',
n2_('Placement'), '', array(
'options' => array(
'before' => n2_('Before'),
'over' => n2_('Over'),
'after' => n2_('After')
)
));
new Text($labels, 'pre', n2_('Pre'),
'', array(
'style' => 'width:40px;'
));
new Text($labels, 'post', n2_('Post'),
'', array(
'style' => 'width:40px;'
));
$animation = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-progressbar-animation', n2_('Animation'));
new Number($animation, 'animationduration',
n2_('Animation duration'), 1, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new Number($animation, 'animationdelay',
n2_('Delay'), 0, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new HiddenFont($counter, 'font', n2_('Font') .
' - ' . n2_('Counter'), '', array(
'mode' => 'simple'
));
new HiddenFont($counter, 'fontlabel',
n2_('Font') . ' - ' . n2_('Label'),
'', array(
'mode' => 'simple'
));
}
}PK6C�[>�3��7Renderable/Item/ProgressBar/ItemProgressBarFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ProgressBar;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemProgressBarFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$value = intval($this->data->get('value'));
$min = min(0, $value);
$startvalue =
max(intval($this->data->get('startvalue')), $min);
$total =
max(max(intval($this->data->get('total')), $startvalue),
$value);
$duration = max(0,
intval($this->data->get('animationduration')));
if ($total != $min) {
$toPercent = (min($value, $total) - $min) / ($total - $min);
if ($duration == 0) {
// We do not have animation
$fromPercent = $toPercent;
} else {
$fromPercent = (min($startvalue, $total) - $min) / ($total
- $min);
}
} else {
$duration = 0;
$fromPercent = $toPercent = 0;
}
$labelHTML = '';
$label =
$owner->fill($this->data->get('label'));
$placement = '';
if (!empty($label)) {
$fontLabel =
$owner->addFont($this->data->get('fontlabel'),
'simple');
$labelHTML = Html::tag('div', array(
'class' => 'n2-ss-item-progressbar-label
n2-ow ' . $fontLabel
), $label);
$placement =
$this->data->get('labelplacement');
}
$html = '';
if ($placement == 'before') {
$html .= $labelHTML;
}
$html .= Html::openTag('div', array(
'id' => $this->id,
'class' => 'n2-ow
n2-ss-item-progressbar',
'style' => 'background-color: ' .
Color::colorToRGBA($this->data->get('color')) .
';'
));
$html .= Html::openTag('div', array(
'class' => 'n2-ow
n2-ss-item-progressbar-inner',
'style' => 'width:' . $fromPercent * 100
. '%;background-color: ' .
Color::colorToRGBA($this->data->get('color2')) .
';'
));
if ($placement == 'over') {
$html .= $labelHTML;
}
$font =
$owner->addFont($this->data->get('font'),
'simple');
$pre = $this->data->get('pre');
$post = $this->data->get('post');
$html .= Html::tag('div', array(
'class' => 'n2-ss-item-progressbar-counting
n2-ow ' . $font
), $pre . round($min + $fromPercent * ($total - $min)) . $post);
$html .= '</div>';
$html .= '</div>';
if ($placement == 'after') {
$html .= $labelHTML;
}
$jsData = array(
'name' => 'progressbar',
'pre' => $pre,
'post' => $post,
'fromPercent' => $fromPercent,
'toPercent' => $toPercent,
'duration' => $duration,
'delay' =>
$this->data->get('animationdelay'),
'min' => $min,
'total' => $total,
'counting' =>
'.n2-ss-item-progressbar-counting',
'display' =>
'.n2-ss-item-progressbar-inner',
'displayMode' => 'width'
);
if ($this->isEditor && $owner->underEdit) {
$owner->addScript('new _N2.CounterItemAdmin(this,
"' . $this->id . '", ' . json_encode($jsData) .
');');
} else {
$owner->addScript('new _N2.FrontendItemCounter(this,
"' . $this->id . '", ' . json_encode($jsData) .
');');
}
return Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ow'
), $html);
}
/**
* @param $owner AbstractRenderableOwner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/progressbar.n2less", array(
"sliderid" => $owner->getElementID()
));
}
}PK6C�[c�AMM-Renderable/Item/Transition/ItemTransition.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Transition;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemTransition extends AbstractItem {
protected $ordering = 5;
protected $layerProperties = array("desktopportraitwidth"
=> 200);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'transition';
}
public function getTitle() {
return n2_('Transition');
}
public function getIcon() {
return 'ssi_32 ssi_32--transition';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemTransitionFrontend($this, $id, $itemData, $layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/transition.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'animation' => 'Fade',
'image' =>
'$ss3-frontend$/images/placeholder/image.png',
'image2' =>
'$ss3-frontend$/images/placeholder/video.png',
'alt' => '',
'alt2' => '',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'image-optimize' => 1
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('image',
$slide->fill($data->get('image', '')));
$data->set('image2',
$slide->fill($data->get('image2', '')));
$data->set('alt',
$slide->fill($data->get('alt', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
$export->addImage($data->get('image2'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('image',
$import->fixImage($data->get('image', '')));
$data->set('image2',
$import->fixImage($data->get('image2', '')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function prepareSample($data) {
$data->set('image',
ResourceTranslator::toUrl($data->get('image')));
$data->set('image2',
ResourceTranslator::toUrl($data->get('image2')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-transition', n2_('General'));
new FieldImage($settings, 'image', n2_('Front
image'), '', array(
'relatedAlt' => 'item_transitionalt',
'width' => 220
));
new FieldImage($settings, 'image2', n2_('Back
image'), '', array(
'relatedAlt' => 'item_transitionalt2',
'width' => 220
));
new Select($settings, 'animation',
n2_('Animation'), '', array(
'options' => array(
'Fade' => n2_('Fade'),
'VerticalFlip' => n2_('Vertical
flip'),
'HorizontalFlip' => n2_('Horizontal
flip')
)
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-transition-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'relatedFields' => array(
'item_transitionhref-target',
'item_transitionhref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
$seo = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-transition-seo', n2_('SEO'));
new Text($seo, 'alt', n2_('Front image alt
tag'), '', array(
'style' => 'width:133px;'
));
new Text($seo, 'alt2', n2_('Back image alt
tag'), '', array(
'style' => 'width:133px;'
));
$optimize = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-transition-optimize', n2_('Optimize'));
new OnOff($optimize, 'image-optimize', n2_('Optimize
image'), 1, array(
'tipLabel' => n2_('Optimize
image'),
'tipDescription' => n2_('You can turn off the
Layer image optimization for this image, to resize it for tablet and
mobile.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1839-caption-layer#optimize'
));
}
}PK6C�[��� 5Renderable/Item/Transition/ItemTransitionFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Transition;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemTransitionFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$image = $this->data->get('image', '');
$image2 = $this->data->get('image2', '');
if (empty($image) && empty($image2)) {
return '';
}
$owner = $this->layer->getOwner();
$image = $owner->fill($image);
$image2 = $owner->fill($image2);
if (empty($image) && empty($image2)) {
return '';
}
$this->loadResources($owner);
$owner->addScript('new _N2.FrontendItemTransition(this,
"' . $this->id . '", "' .
$this->data->get('animation', 'Fade') .
'");');
$html = Html::openTag("div", array(
"class" => "n2-ss-item-transition-inner"
));
$imageAttributes = array(
'alt' =>
htmlspecialchars($owner->fill($this->data->get('alt',
''))),
'class' =>
'n2-ss-item-transition-image1'
);
$html .= $owner->renderImage($this, $image, $imageAttributes);
$imageAttributes2 = array(
'alt' =>
htmlspecialchars($owner->fill($this->data->get('alt2',
''))),
'class' =>
'n2-ss-item-transition-image2'
);
$html .= $owner->renderImage($this, $image2, $imageAttributes2);
$html .= Html::closeTag('div');
$linkAttributes = array();
if ($this->isEditor) {
$linkAttributes['onclick'] = 'return
false;';
}
return Html::tag("div", array(
"id" => $this->id,
"class" => "n2-ss-item-transition
n2-ss-item-content n2-ow-all"
), $this->getLink($html, $linkAttributes));
}
/**
* @param $owner AbstractRenderableOwner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/transition.n2less", array(
"sliderid" => $owner->getElementID()
));
}
}PK6C�[�Jk�!�!#Renderable/Item/Video/ItemVideo.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Video;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Video;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemVideo extends AbstractItem {
protected $ordering = 20;
protected $layerProperties = array(
"desktopportraitwidth" => 300,
"desktopportraitheight" => 'auto'
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'video';
}
public function getTitle() {
return n2_('Video');
}
public function getIcon() {
return 'ssi_32 ssi_32--video';
}
public function getGroup() {
return n2_x('Media', 'Layer group');
}
/**
* @param Data $data
*/
public function upgradeData($data) {
if (!$data->has('aspect-ratio')) {
$data->set('aspect-ratio', 'fill');
}
}
public function createFrontend($id, $itemData, $layer) {
return new ItemVideoFrontend($this, $id, $itemData, $layer);
}
/**
* @return array
*/
public function getValues() {
return parent::getValues() + array(
'autoplay' => 0,
'video_mp4' => '',
'aspect-ratio' => '16:9',
'scroll-pause' =>
'partly-visible',
'showcontrols' => 1,
'volume' => 1,
'loop' => 0,
'reset' => 0,
'videoplay' => '',
'videopause' => '',
'videoend' => '',
'ended' => '',
'playbutton' => 1,
'playbuttonwidth' => 48,
'playbuttonheight' => 48,
'playbuttonimage' => '',
'poster' => ''
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('poster',
$slide->fill($data->get('poster', '')));
$data->set('video_mp4',
$slide->fill($data->get('video_mp4', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('poster'));
$export->addImage($data->get('video_mp4'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('poster',
$import->fixImage($data->get('poster')));
$data->set('video_mp4',
$import->fixImage($data->get('video_mp4')));
return $data;
}
public function prepareSample($data) {
$data->set('poster',
ResourceTranslator::toUrl($data->get('poster')));
$data->set('video_mp4',
ResourceTranslator::toUrl($data->get('video_mp4')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-video', n2_('General'));
new Video($settings, 'video_mp4', n2_('MP4
video'), '', array(
'width' => 220
));
new FieldImage($settings, 'poster', n2_('Cover
image'), '', array(
'width' => 220
));
new Select($settings, 'aspect-ratio', n2_('Aspect
ratio'), '16:9', array(
'options' => array(
'16:9' => '16:9',
'16:10' => '16:10',
'4:3' => '4:3',
'custom' => n2_('Custom'),
'fill' => n2_('Fill layer height')
),
'relatedValueFields' => array(
array(
'values' => array(
'custom'
),
'field' => array(
'item_videoaspect-ratio-width',
'item_videoaspect-ratio-height'
)
),
array(
'values' => array(
'fill'
),
'field' => array(
'item_videoaspect-ratio-notice'
)
)
)
));
new Text\Number($settings, 'aspect-ratio-width',
n2_('Width'), '16', array(
'wide' => 4,
'min' => 1
));
new Text\Number($settings, 'aspect-ratio-height',
n2_('Height'), '9', array(
'wide' => 4,
'min' => 1
));
new Notice($settings, 'aspect-ratio-notice',
n2_('Fill layer height'), n2_('Set on Style tab.'));
$misc = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-video-misc', n2_('Video settings'));
new Warning($misc, 'slide-background-notice',
sprintf(n2_('Video autoplaying has a lot of limitations made by
browsers. %1$sLearn about them.%2$s'), '<a
href="https://smartslider.helpscoutdocs.com/article/1919-video-autoplay-handling"
target="_blank">', '</a>'));
new OnOff($misc, 'autoplay', n2_('Autoplay'),
0, array(
'relatedFieldsOn' => array(
'item_videoautoplay-notice'
)
));
new Select($misc, 'ended', n2_('When ended'),
'', array(
'options' => array(
'' => n2_('Do nothing'),
'next' => 'Go to next slide'
)
));
new OnOff($misc, 'loop', n2_x('Loop',
'Video/Audio play'), 0, array(
'relatedFieldsOff' => array(
'item_videoended'
)
));
new Select($misc, 'volume', n2_('Volume'), 1,
array(
'options' => array(
'0' => n2_('Mute'),
'0.25' => '25%',
'0.5' => '50%',
'0.75' => '75%',
'1' => '100%'
)
));
new OnOff($misc, 'reset', n2_('Restart on slide
change'), 0, array(
'tipLabel' => n2_('Restart on slide
change'),
'tipDescription' => n2_('Starts the video
from the beginning when the slide is viewed again.')
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-video-display', n2_('Display'));
new Select($display, 'fill-mode', n2_('Fill
mode'), 'cover', array(
'options' => array(
'cover' => n2_('Fill'),
'contain' => n2_('Fit')
)
));
new OnOff($display, 'showcontrols',
n2_('Controls'), 0);
$load = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-video-dev', n2_('Loading'));
new Select($load, 'preload', n2_('Preload'),
'metadata', array(
'options' => array(
'auto' => 'Auto',
'metadata' => 'metadata',
'none' => n2_('None')
)
));
new Select($load, 'scroll-pause', n2_('Pause on
scroll'), 'partly-visible', array(
'options' => array(
'' => n2_('Never'),
'partly-visible' => n2_('When partly
visible'),
'not-visible' => n2_('When not
visible'),
),
'tipLabel' => n2_('Pause on
scroll'),
'tipDescription' => n2_('You can pause the
video when the visitor scrolls away from the slider')
));
$playButton = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-video-playbutton', n2_('Play button'));
new OnOff($playButton, 'playbutton', n2_('Play
button'), 1, array(
'relatedFieldsOn' => array(
'item_videoplaybuttonwidth',
'item_videoplaybuttonheight',
'item_videoplaybuttonimage',
)
));
new Text\Number($playButton, 'playbuttonwidth',
n2_('Width'), 48, array(
'unit' => 'px',
'wide' => 4
));
new Text\Number($playButton, 'playbuttonheight',
n2_('Height'), 48, array(
'unit' => 'px',
'wide' => 4
));
new FieldImage($playButton, 'playbuttonimage',
n2_('Image'), '', array(
'width' => 220
));
}
}PK6C�[���x``+Renderable/Item/Video/ItemVideoFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Video;
use Nextend\Framework\Data\Data;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Image\Image;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemVideoFrontend extends AbstractItemFrontend {
public function render() {
$owner = $this->layer->getOwner();
$aspectRatio = $this->data->get('aspect-ratio',
'16:9');
$hasImage = 0;
$poster =
$owner->fill($this->data->get('poster'));
$coverImage = '';
if (!empty($poster)) {
$coverImage = $owner->renderImage($this, $poster, array(
'class' => 'n2_ss_video_cover',
'alt' => n2_('Play')
), array(
'class' => 'n2-ow-all'
));
$hasImage = 1;
$playImage = '';
if ($this->data->get('playbutton', 1) == 1) {
$playWidth =
intval($this->data->get('playbuttonwidth',
'48'));
$playHeight =
intval($this->data->get('playbuttonheight',
'48'));
if ($playWidth > 0 && $playHeight > 0) {
$attributes = Html::addExcludeLazyLoadAttributes(array(
'style' => '',
'class' =>
'n2_ss_video_play_btn'
));
if ($playWidth != 48) {
$attributes['style'] .=
'width:' . $playWidth . 'px;';
}
if ($playHeight != 48) {
$attributes['style'] .=
'height:' . $playHeight . 'px;';
}
$playButtonImage =
$this->data->get('playbuttonimage', '');
if (!empty($playButtonImage)) {
$image =
$this->data->get('playbuttonimage', '');
FastImageSize::initAttributes($image, $attributes);
$src = ResourceTranslator::toUrl($image);
} else {
$image =
'$ss3-frontend$/images/play.svg';
FastImageSize::initAttributes($image, $attributes);
$src = Image::SVGToBase64($image);
}
$playImage = Html::image($src, 'Play',
$attributes);
}
}
$coverImage = Html::tag('div', array(
'class' =>
'n2_ss_video_player__cover',
'data-force-pointer' => ''
), $coverImage . $playImage);
}
$owner->addScript('new _N2.FrontendItemVideo(this,
"' . $this->id . '", ' .
$this->data->toJSON() . ', ' . $hasImage . ');');
$style = '';
if ($aspectRatio == 'custom') {
$style = 'style="padding-top:' .
($this->data->get('aspect-ratio-height', '9') /
$this->data->get('aspect-ratio-width', '16') *
100) . '%"';
}
return Html::tag("div", array(
'class' => 'n2_ss_video_player
n2-ss-item-content n2-ss-item-video-container n2-ow-all',
'data-aspect-ratio' => $aspectRatio
), '<div class="n2_ss_video_player__placeholder"
' . $style . '></div>' .
Html::tag("video", $this->setOptions($this->data,
$this->id), $this->setContent($owner, $this->data)) .
$coverImage);
}
public function renderAdminTemplate() {
$aspectRatio = $this->data->get('aspect-ratio',
'16:9');
$style = '';
if ($aspectRatio == 'custom') {
$style = 'style="padding-top:' .
($this->data->get('aspect-ratio-height', '9') /
$this->data->get('aspect-ratio-width', '16') *
100) . '%"';
}
$playButtonImage =
$this->data->get('playbuttonimage', '');
if (!empty($playButtonImage)) {
$playButtonImage = ResourceTranslator::toUrl($playButtonImage);
} else {
$playButtonImage =
Image::SVGToBase64('$ss3-frontend$/images/play.svg');
}
$playButtonStyle = '';
$playButtonWidth =
intval($this->data->get('playbuttonwidth',
'48'));
$playButtonHeight =
intval($this->data->get('playbuttonheight',
'48'));
if ($playButtonWidth > 0) {
$playButtonStyle .= 'width:' . $playButtonWidth .
'px;';
}
if ($playButtonHeight > 0) {
$playButtonStyle .= 'height:' . $playButtonHeight .
'px;';
}
$playButton = Html::image($playButtonImage, n2_('Play'),
Html::addExcludeLazyLoadAttributes(array(
'class' => 'n2_ss_video_play_btn',
'style' => $playButtonStyle
)));
return Html::tag('div', array(
'class' => 'n2_ss_video_player
n2-ss-item-content n2-ss-item-video-container n2-ow-all',
'data-aspect-ratio' => $aspectRatio,
"style" => 'background:
URL(' .
ResourceTranslator::toUrl($this->data->getIfEmpty('poster',
'$ss3-frontend$/images/placeholder/video.png')) . ')
no-repeat 50% 50%; background-size: cover;'
), '<div class="n2_ss_video_player__placeholder"
' . $style . '></div>' .
($this->data->get('playbutton', 1) ? '<div
class="n2_ss_video_player__cover">' . $playButton .
'</div>' : ''));
}
/**
* @param $data Data
* @param $id
*
* @return array
*/
private function setOptions($data, $id) {
$videoOptions = array(
'style' => '',
'class' => 'n2-ow
intrinsic-ignore',
'encode' => false,
'controlsList' => 'nodownload'
);
$videoOptions["data-volume"] =
$data->get("volume", 1);
if ($videoOptions["data-volume"] == 0) {
$videoOptions['muted'] = 'muted';
}
if ($data->get('autoplay')) {
$videoOptions['playsinline'] = 1;
$videoOptions['webkit-playsinline'] = 1;
}
$videoOptions["id"] = $id;
if ($data->get("showcontrols")) {
$videoOptions["controls"] = "yes";
} else {
$videoOptions["style"] .=
"pointer-events:none;";
}
$fillMode = $data->get("fill-mode",
'cover');
$videoOptions["style"] .= "object-fit:" .
$fillMode . ";";
$videoOptions["preload"] =
$data->get("preload", "auto");
return $videoOptions;
}
/**
* @param $owner AbstractRenderableOwner
* @param $data Data
*
* @return string
*/
private function setContent($owner, $data) {
$videoContent = "";
if ($data->get("video_mp4", false)) {
$videoContent .= Html::tag("source", array(
"src" =>
ResourceTranslator::toUrl($owner->fill($data->get("video_mp4"))),
"type" => "video/mp4"
), '', false);
}
return $videoContent;
}
}PK6C�[E���A A 8Renderable/Joomla/Item/JoomlaModule/ItemJoomlaModule.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Joomla\Item\JoomlaModule;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemJoomlaModule extends AbstractItem {
protected $ordering = 101;
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'joomlamodule';
}
public function getTitle() {
return n2_('Joomla module');
}
public function getIcon() {
return 'ssi_32 ssi_32--joomla';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemJoomlaModuleFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'positiontype' => 'loadposition',
'positionvalue' => ''
);
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-joomlamodule', n2_('General'));
new Warning($settings, '', n2_('Please note, that
<b>we do not support</b> the Joomla module layer!<br>The
loaded module often needs code customizations what you have to do yourself,
so we only suggest using this layer if you are a developer!'));
new Select($settings, 'positiontype',
n2_('Type'), 'loadposition', array(
'options' => array(
'loadposition' => 'Loadposition - Content
plugin',
'loadmoduleid' => 'Loadmoduleid - Content
plugin',
'module' => 'Module - Modules
Anywhere',
'modulepos' => 'Modulepos - Modules
Anywhere'
)
));
new Text($settings, 'positionvalue',
n2_('Value'), '', array(
'style' => 'width:302px;',
'tipLabel' => n2_('Position name or
module ID'),
'tipDescription' => n2_('The position name of
your module (for Loadposition and Modulepos) or the module\'s ID
(Module).'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1853-joomla-module-layer'
));
}
}PK6C�[��g��@Renderable/Joomla/Item/JoomlaModule/ItemJoomlaModuleFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Renderable\Joomla\Item\JoomlaModule;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemJoomlaModuleFrontend extends AbstractItemFrontend {
public function render() {
return '<div class="n2-ss-item-content
n2-ow">{' . $this->data->get('positiontype',
'') . ' ' .
$this->data->get('positionvalue', '') .
'}</div>';
}
public function renderAdminTemplate() {
return $this->render();
}
}PK6C�[��J���9Slider/ResponsiveType/FullPage/ResponsiveTypeFullPage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\ResponsiveType\FullPage;
use Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveType;
class ResponsiveTypeFullPage extends AbstractResponsiveType {
public function getName() {
return 'fullpage';
}
public function createFrontend($responsive) {
return new ResponsiveTypeFullPageFrontend($this, $responsive);
}
public function createAdmin() {
return new ResponsiveTypeFullPageAdmin($this);
}
}PK6C�[�.1>Slider/ResponsiveType/FullPage/ResponsiveTypeFullPageAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\ResponsiveType\FullPage;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeAdmin;
class ResponsiveTypeFullPageAdmin extends AbstractResponsiveTypeAdmin {
protected $ordering = 3;
public function getLabel() {
return n2_('Full page');
}
public function getIcon() {
return 'ssi_64 ssi_64--stretch';
}
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'responsive-fullpage-1');
new OnOff($row1, 'responsiveForceFull', n2_('Force
full width'), 1, array(
'tipLabel' => n2_('Force full
width'),
'tipDescription' => n2_('The slider tries to
fill the full width of the browser.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1777-fullpage-layout#force-full-width'
));
new Select($row1, 'responsiveForceFullOverflowX',
n2_('Overflow-X'), 'body', array(
'options' => array(
'body' => 'body',
'html' => 'html',
'none' => n2_('None')
),
'tipLabel' => n2_('Overflow-X'),
'tipDescription' => n2_('Prevents the
vertical scrollbar from appear during certain slide background
animations.')
));
new Text($row1, 'responsiveForceFullHorizontalSelector',
n2_('Adjust slider width to'), 'body', array(
'tipLabel' => n2_('Adjust slider width
to'),
'tipDescription' => n2_('You can make the
slider fill up a selected parent element instead of the full browser
width.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1777-fullpage-layout#adjust-slider-width-to'
));
new OnOff($row1, 'responsiveConstrainRatio',
n2_('Constrain ratio'), 0, array(
'tipLabel' => n2_('Constrain
ratio'),
'tipDescription' => n2_('The slide scales
horizontally and vertically with the same amount.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1777-fullpage-layout#constrain-ratio'
));
$row2 = new FieldsetRow($container,
'responsive-fullpage-2');
new Select($row2, 'sliderHeightBasedOn', n2_('Height
based on'), 'real', array(
'options' => array(
'real' => 'Real height',
'100vh' => 'CSS 100vh'
),
'tipLabel' => n2_('Height based
on'),
'tipDescription' => n2_('The real height
makes your slider have the height of the browser without the URL bar, while
the CSS 100vh makes it exactly as big as the browser height.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1777-fullpage-layout#height-based-on'
));
$form = $container->getForm();
if (!$form->has('responsive-focus') &&
$form->has('responsiveHeightOffset')) {
$old = $form->get('responsiveHeightOffset');
$oldDefault = '';
if ($old !== $oldDefault) {
$form->set('responsive-focus', 1);
$form->set('responsive-focus-top', $old);
}
}
new Number($row2, 'responsiveDecreaseSliderHeight',
n2_('Decrease height'), 0, array(
'unit' => 'px',
'wide' => 4,
'tipLabel' => n2_('Decrease
height'),
'tipDescription' => n2_('You can make your
slider smaller than the full height of the browser by a given pixel, for
example, to fit below your menu without causing scrollbar.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1777-fullpage-layout#decrease-height-by-selectors'
));
new Select($row2, 'responsive-focus', n2_('Decrease
height by selectors'), 0, array(
'options' => array(
0 => n2_('Use global focus selectors'),
1 => n2_('Use local selectors')
),
'relatedFields' => array(
'sliderresponsive-focus-top',
'sliderresponsive-focus-bottom'
),
'tipLabel' => n2_('Decrease height by
selectors'),
'tipDescription' => n2_('You can make your
slider smaller than the full height of the browser, for example, to fit
below your menu without causing scrollbar.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1777-fullpage-layout#decrease-height-by-selectors'
));
new Text($row2, 'responsive-focus-top',
n2_('Top') . ' - ' . n2_('CSS selector (sum of
heights)'), '', array(
'style' => 'width:400px;'
));
new Text($row2, 'responsive-focus-bottom',
n2_('Bottom') . ' - ' . n2_('CSS selector (sum of
heights)'), '', array(
'style' => 'width:400px;'
));
}
}PK6C�[�_}ASlider/ResponsiveType/FullPage/ResponsiveTypeFullPageFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\ResponsiveType\FullPage;
use
Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeFrontend;
class ResponsiveTypeFullPageFrontend extends AbstractResponsiveTypeFrontend
{
public function parse($params, $responsive, $features) {
$features->align->align = 'normal';
$responsive->forceFull =
intval($params->get('responsiveForceFull', 1));
$responsive->forceFullOverflowX =
$params->get('responsiveForceFullOverflowX',
'body');
$responsive->forceFullHorizontalSelector =
$params->get('responsiveForceFullHorizontalSelector',
'body');
$responsive->sliderHeightBasedOn =
$params->get('sliderHeightBasedOn', 'real');
$responsive->responsiveDecreaseSliderHeight =
intval($params->get('responsiveDecreaseSliderHeight', 0));
if (intval($params->get('responsiveConstrainRatio',
0))) {
$this->responsive->slider->sliderType->addClass('n2-ss-full-page--constrain-ratio');
}
}
}PK6C�[�a^�==Slider/ResponsiveTypeLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Slider\ResponsiveType\ResponsiveTypeFactory;
use
Nextend\SmartSlider3Pro\Slider\ResponsiveType\FullPage\ResponsiveTypeFullPage;
class ResponsiveTypeLoader {
public function __construct() {
Plugin::addAction('PluggableFactorySliderResponsiveType',
array(
$this,
'sliderResponsiveTypes'
));
}
public function sliderResponsiveTypes() {
ResponsiveTypeFactory::addType(new ResponsiveTypeFullPage());
}
}PK6C�[5���MM1Slider/SliderType/Carousel/SliderTypeCarousel.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Carousel;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderType;
class SliderTypeCarousel extends AbstractSliderType {
public function getName() {
return 'carousel';
}
public function createFrontend($slider) {
return new SliderTypeCarouselFrontend($slider);
}
public function createCss($slider) {
return new SliderTypeCarouselCss($slider);
}
public function createAdmin() {
return new SliderTypeCarouselAdmin($this);
}
public function export($export, $slider) {
$export->addImage($slider['params']->get('background',
''));
}
public function import($import, $slider) {
$slider['params']->set('background',
$import->fixImage($slider['params']->get('background',
'')));
}
}PK6C�[�;$��/�/6Slider/SliderType/Carousel/SliderTypeCarouselAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Carousel;
use Nextend\Framework\Form\Container\ContainerRowGroup;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Easing;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\Framework\Form\Insert\InsertAfter;
use Nextend\Framework\Form\Insert\InsertBefore;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeAdmin;
class SliderTypeCarouselAdmin extends AbstractSliderTypeAdmin {
protected $ordering = 3;
public function getLabel() {
return n2_('Carousel');
}
public function getLabelFull() {
return n2_x('Carousel slider', 'Slider type');
}
public function getIcon() {
return 'ssi_64 ssi_64--carousel';
}
public function prepareForm($form) {
$tableSlideSize = new ContainerTable(new
InsertAfter($form->getElement('/size/size')),
'slider-type-carousel-settings-size', n2_('Slide
size'));
$rowSettings = new FieldsetRow($tableSlideSize,
'slider-type-carousel-settings-size-1');
new NumberAutoComplete($rowSettings, 'slide-width',
n2_('Slide width'), 600, array(
'values' => array(
400,
600,
800,
1000
),
'unit' => 'px',
'wide' => 5
));
new NumberAutoComplete($rowSettings, 'slide-height',
n2_('Slide height'), 400, array(
'values' => array(
300,
400,
600,
800,
1000
),
'unit' => 'px',
'wide' => 5
));
new NumberAutoComplete($rowSettings,
'maximum-pane-width', n2_('Max pane width'), 3000,
array(
'tipLabel' => n2_('Max pane
width'),
'tipDescription' => n2_('You can use this
option to limit how many slides can show up next to each other.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1786-carousel-slider-type#max-pane-width',
'values' => array(
300,
600,
980,
3000
),
'unit' => 'px',
'wide' => 5
));
new NumberAutoComplete($rowSettings, 'minimum-slide-gap',
n2_('Minimum slide distance'), 10, array(
'tipLabel' => n2_('Minimum slide
distance'),
'tipDescription' => n2_('The minimum space
between two slides.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1786-carousel-slider-type#minimum-slide-distance',
'values' => array(
10,
50,
100,
200
),
'unit' => 'px',
'wide' => 3
));
$spaceGroup = new ContainerRowGroup(new
InsertAfter($form->getElement('/general/design/design-1')),
'slider-type-carousel-space', n2_('Side spacing'));
$rowSpaceDesktop =
$spaceGroup->createRow('slider-type-carousel-space-desktop');
new OnOff($rowSpaceDesktop,
'side-spacing-desktop-enable', n2_('Desktop'), 0,
array(
'relatedFieldsOn' => array(
'sliderside-spacing-desktop'
),
'tipLabel' => n2_('Desktop side
spacing'),
'tipDescription' => n2_('You can create a
fix distance between the slider and the slides where your controls are
which appear on this device. This way your controls won\'t cover the
slide content.')
));
$sideSpacingDesktop = new MarginPadding($rowSpaceDesktop,
'side-spacing-desktop', n2_('Side spacing'),
'0|*|0|*|0|*|0', array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($sideSpacingDesktop,
'side-spacing-desktop-' . $i, false, '', array(
'values' => array(
0,
20,
40,
80
),
'wide' => 3
));
}
new OnOff($rowSpaceDesktop, 'side-spacing-tablet-enable',
n2_('Tablet'), 0, array(
'relatedFieldsOn' => array(
'sliderside-spacing-tablet'
),
'tipLabel' => n2_('Tablet side
spacing'),
'tipDescription' => n2_('You can create a
fix distance between the slider and the slides where your controls are
which appear on this device. This way your controls won\'t cover the
slide content.')
));
$sideSpacingTablet = new MarginPadding($rowSpaceDesktop,
'side-spacing-tablet', n2_('Side spacing'),
'0|*|0|*|0|*|0', array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($sideSpacingTablet,
'side-spacing-tablet-' . $i, false, '', array(
'values' => array(
0,
20,
40,
80
),
'wide' => 3
));
}
new OnOff($rowSpaceDesktop, 'side-spacing-mobile-enable',
n2_('Mobile'), 0, array(
'relatedFieldsOn' => array(
'sliderside-spacing-mobile'
),
'tipLabel' => n2_('Mobile side
spacing'),
'tipDescription' => n2_('You can create a
fix distance between the slider and the slides where your controls are
which appear on this device. This way your controls won\'t cover the
slide content.')
));
$sideSpacingMobile = new MarginPadding($rowSpaceDesktop,
'side-spacing-mobile', n2_('Side spacing'),
'0|*|0|*|0|*|0', array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($sideSpacingMobile,
'side-spacing-mobile-' . $i, false, '', array(
'values' => array(
0,
20,
40,
80
),
'wide' => 3
));
}
$rowGroupSlides = new ContainerRowGroup(new
InsertAfter($form->getElement('/slides/slides-design/slides-design-1')),
'slider-type-carousel-group-slides', false);
$rowSlideBackground = new FieldsetRow($rowGroupSlides,
'slider-type-carousel-background-slide');
new Color($rowSlideBackground, 'slide-background-color',
n2_('Slide background color'), 'ffffffff', array(
'alpha' => true
));
$rowDesignSlide = new FieldsetRow($rowGroupSlides,
'slider-type-carousel-design-slide');
new Number($rowDesignSlide, 'slide-border-width',
n2_('Slide border width'), 0, array(
'unit' => 'px',
'wide' => 3,
'relatedFields' =>
array('sliderslide-border-color')
));
new Color($rowDesignSlide, 'slide-border-color',
n2_('Slide border color'), '3E3E3Eff', array(
'alpha' => true
));
new Number($rowDesignSlide, 'slide-border-radius',
n2_('Slide border radius'), 0, array(
'wide' => 3,
'unit' => 'px'
));
$rowDesignSlider = new FieldsetRow(new
InsertAfter($form->getElement('/general/design/design-1')),
'slider-type-carousel-design-slider');
new Number($rowDesignSlider, 'border-width',
n2_('Slider border width'), 0, array(
'unit' => 'px',
'wide' => 3,
'relatedFields' =>
array('sliderborder-color')
));
new Color($rowDesignSlider, 'border-color',
n2_('Slider border color'), '3E3E3Eff', array(
'alpha' => true
));
new Number($rowDesignSlider, 'border-radius',
n2_('Slider border radius'), 0, array(
'unit' => 'px',
'wide' => 3
));
$tableMainAnimation = new ContainerTable(new
InsertBefore($form->getElement('/animations/effects')),
'slider-type-carousel-animation', n2_('Main
animation'));
$rowAnimation1 = new FieldsetRow($tableMainAnimation,
'slider-type-carousel-animation-1');
$notice = n2_('The Single Switch setting can only move the
slides horizontally!') . '<br>';
new Select($rowAnimation1, 'animation', n2_('Main
animation'), 'horizontal', array(
'options' => array(
'no' => n2_('No'),
'horizontal' => n2_('Horizontal'),
'fade' => n2_('Fade')
),
'relatedValueFields' => array(
array(
'values' => array(
'horizontal',
'fade'
),
'field' => array(
'slideranimation-duration',
'slideranimation-easing'
)
),
array(
'values' => array(
'horizontal'
),
'field' => array(
'slidergrouping-single-switch'
)
)
)
));
new NumberAutoComplete($rowAnimation1,
'animation-duration', n2_('Duration'), 800, array(
'values' => array(
800,
1500,
2000
),
'unit' => 'ms',
'wide' => 5
));
new Easing($rowAnimation1, 'animation-easing',
n2_('Easing'), 'easeOutQuad');
$rowAnimation2 = new FieldsetRow($tableMainAnimation,
'slider-type-carousel-animation-2');
new OnOff($rowAnimation2, 'carousel',
n2_x('Carousel', 'Feature'), 1, array(
'tipLabel' => n2_x('Carousel',
'Feature'),
'tipDescription' => n2_('This option will
create a complete round from your slides if you have enough slides. If you
don\'t have enough slides, you could consider duplicating all the
slides or just add more slides until you will get a carousel round.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1786-carousel-slider-type#carousel',
'relatedFieldsOn' => array(
'slidercontrolsBlockCarouselInteraction'
)
));
$groupingSingleSwitch = new Grouping($rowAnimation2,
'grouping-single-switch');
new OnOff($groupingSingleSwitch, 'single-switch',
n2_('Single switch'), 0, array(
'tipLabel' => n2_('Single
switch'),
'tipDescription' => n2_('It switches one
slide instead of moving all the visible slides.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1786-carousel-slider-type#single-switch',
'relatedFieldsOn' => array(
'sliderslider-side-spacing'
)
));
new Radio($groupingSingleSwitch, 'slider-side-spacing',
n2_('Justify slides'), 1, array(
'options' => array(
'0' => n2_('Space between'),
'1' => n2_('Space around'),
'2' => n2_('Center')
)
));
/**
* Removing slider settings which are unnecessary for Carousel
slider type.
*/
$form->getElement('/animations/layer-parallax')
->remove();
$form->getElement('/controls/widget-bar')
->remove();
$form->getElement('/controls/widget-fullscreen')
->remove();
$form->getElement('/size/size/size-2')
->remove();
$form->getElement('/optimize/optimize-slide/optimize-slide-loading-mode/imageloadNeighborSlides')
->remove();
$form->getElement('/size/responsive-mode/responsive-mode-row-1/responsive-mode')
->removeOption('fullpage');
}
}PK6C�[_�
@��4Slider/SliderType/Carousel/SliderTypeCarouselCss.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Carousel;
use Nextend\Framework\Parser\Color;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeCss;
class SliderTypeCarouselCss extends AbstractSliderTypeCss {
public function __construct($slider) {
parent::__construct($slider);
if ($this->slider->params->get('animation') ===
'horizontal' &&
$this->slider->params->get('single-switch', 0)) {
$this->constructCarouselSingle();
} else {
$this->constructCarouselMulti();
}
}
private function constructCarouselMulti() {
$params = $this->slider->params;
$width = intval($this->context['width']);
$height = intval($this->context['height']);
$backgroundColor =
$params->get('background-color');
$rgba =
Color::hex2rgba($backgroundColor);
$this->context['backgroundrgba'] = 'RGBA(' .
$rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] .
',' . round($rgba[3] / 127, 2) . ')';
$this->context['backgroundSize'] =
$params->getIfEmpty('background-size', 'inherit');
$this->context['backgroundAttachment'] =
$params->get('background-fixed') ? 'fixed' :
'scroll';
$backgroundColor =
$params->get('slide-background-color');
$rgba =
Color::hex2rgba($backgroundColor);
$this->context['slideBackgroundrgba'] =
'RGBA(' . $rgba[0] . ',' . $rgba[1] . ',' .
$rgba[2] . ',' . round($rgba[3] / 127, 2) . ')';
$this->context['slideBorderRadius'] =
$params->get('slide-border-radius') . 'px';
$borderWidth = max(0,
$params->get('border-width', 0));
$backgroundColor =
$params->get('border-color');
$this->context['borderRadius'] =
$params->get('border-radius') . 'px';
$this->context['border'] = $borderWidth .
'px';
$rgba = Color::hex2rgba($backgroundColor);
$this->context['borderrgba'] = 'RGBA(' .
$rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] .
',' . round($rgba[3] / 127, 2) . ')';
$width = $width - $borderWidth * 2;
$height = $height - $borderWidth * 2;
$this->context['inner1height'] = $height .
'px';
$slideBorderWidth = max(0,
$params->get('slide-border-width', 0));
$this->context['slideborderwidth'] = $slideBorderWidth
. 'px';
$rgba =
Color::hex2rgba($params->get('slide-border-color'));
if (!empty($rgba)) {
$this->context['slidebordercolor'] =
'RGBA(' . $rgba[0] . ',' . $rgba[1] . ',' .
$rgba[2] . ',' . round($rgba[3] / 127, 2) . ')';
}
$slideWidth = min($width, max(50,
intval($params->get('slide-width'))));
$slideHeight = max(50,
intval($params->get('slide-height')));
$this->context['slideouterwidth'] = $slideWidth .
'px';
$this->context['slideouterheight'] = $slideHeight .
'px';
$this->context['canvaswidth'] = min($width, max(50,
intval($params->get('slide-width')))) - 2 * $slideBorderWidth
. 'px';
$this->context['canvasheight'] = min($height, max(50,
intval($params->get('slide-height')))) - 2 * $slideBorderWidth
. 'px';
$this->initSizes();
$this->slider->addLess(SliderTypeCarousel::getAssetsPath() .
'/Multi/style.n2less', $this->context);
$this->base = array(
'sliderWidth' => $width,
'sliderHeight' => $height,
'slideOuterWidth' => $slideWidth,
'slideOuterHeight' => $slideHeight,
'slideWidth' => $slideWidth,
'slideHeight' => $slideHeight
);
}
private function constructCarouselSingle() {
$params = $this->slider->params;
$width = intval($this->context['width']);
$height = intval($this->context['height']);
$backgroundColor =
$params->get('background-color');
$rgba =
Color::hex2rgba($backgroundColor);
$this->context['backgroundrgba'] = 'RGBA(' .
$rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] .
',' . round($rgba[3] / 127, 2) . ')';
$this->context['backgroundSize'] =
$params->getIfEmpty('background-size', 'inherit');
$this->context['backgroundAttachment'] =
$params->get('background-fixed') ? 'fixed' :
'scroll';
$backgroundColor =
$params->get('slide-background-color');
$rgba =
Color::hex2rgba($backgroundColor);
$this->context['slideBackgroundrgba'] =
'RGBA(' . $rgba[0] . ',' . $rgba[1] . ',' .
$rgba[2] . ',' . round($rgba[3] / 127, 2) . ')';
$this->context['slideBorderRadius'] =
$params->get('slide-border-radius') . 'px';
$borderWidth = max(0,
$params->get('border-width', 0));
$backgroundColor =
$params->get('border-color');
$this->context['borderRadius'] =
$params->get('border-radius') . 'px';
$this->context['border'] = $borderWidth .
'px';
$rgba = Color::hex2rgba($backgroundColor);
$this->context['borderrgba'] = 'RGBA(' .
$rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] .
',' . round($rgba[3] / 127, 2) . ')';
$width = $width - $borderWidth * 2;
$height = $height - $borderWidth * 2;
$this->context['inner1height'] = $height .
'px';
$slideBorderWidth = max(0,
$params->get('slide-border-width', 0));
$this->context['slideborderwidth'] = $slideBorderWidth
. 'px';
$rgba =
Color::hex2rgba($params->get('slide-border-color'));
if (!empty($rgba)) {
$this->context['slidebordercolor'] =
'RGBA(' . $rgba[0] . ',' . $rgba[1] . ',' .
$rgba[2] . ',' . round($rgba[3] / 127, 2) . ')';
}
$slideWidth = min($width, max(50,
intval($params->get('slide-width'))));
$slideHeight = max(50,
intval($params->get('slide-height')));
$this->context['slideouterwidth'] = $slideWidth .
'px';
$this->context['slideouterheight'] = $slideHeight .
'px';
$this->context['canvaswidth'] = min($width, max(50,
intval($params->get('slide-width')))) - 2 * $slideBorderWidth
. 'px';
$this->context['canvasheight'] = min($height, max(50,
intval($params->get('slide-height')))) - 2 * $slideBorderWidth
. 'px';
$this->initSizes();
$this->slider->addLess(SliderTypeCarousel::getAssetsPath() .
'/Single/style.n2less', $this->context);
$this->base = array(
'sliderWidth' => $width,
'sliderHeight' => $height,
'slideOuterWidth' => $slideWidth,
'slideOuterHeight' => $slideHeight,
'slideWidth' => $slideWidth,
'slideHeight' => $slideHeight
);
}
}PK6C�[an�Q2Q29Slider/SliderType/Carousel/SliderTypeCarouselFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Carousel;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeFrontend;
class SliderTypeCarouselFrontend extends AbstractSliderTypeFrontend {
public function getDefaults() {
return array(
'single-switch' => 0,
'slide-width' => 600,
'slide-height' => 400,
'maximum-pane-width' => 3000,
'minimum-slide-gap' => 10,
'background-color' => 'dee3e6ff',
'background' => '',
'background-size' => 'cover',
'background-fixed' => 0,
'animation' =>
'horizontal',
'animation-duration' => 800,
'animation-easing' =>
'easeOutQuad',
'carousel' => 1,
'border-width' => 0,
'border-color' => '3E3E3Eff',
'border-radius' => 0,
'slide-background-color' => 'ffffff',
'slide-border-radius' => 0
);
}
protected function getSliderClasses() {
return parent::getSliderClasses() . '
n2-ss-slider-carousel-animation-' .
$this->slider->params->get('animation',
'horizontal');
}
protected function renderType($css) {
if ($this->slider->params->get('animation') ===
'horizontal' &&
$this->slider->params->get('single-switch', 0)) {
$this->renderTypeSingle($css);
} else {
$this->renderTypeMulti($css);
}
}
protected function renderTypeMulti($css) {
$params = $this->slider->params;
Js::addStaticGroup(SliderTypeCarousel::getAssetsPath() .
'/dist/ss-carousel.min.js', 'ss-carousel');
$this->jsDependency[] = 'ss-carousel';
$sliderCSS = $params->get('slider-css');
$this->initSliderBackground('.n2-ss-slider-2');
$this->initParticleJS();
echo $this->openSliderElement();
ob_start();
?>
<div class="n2-ss-slider-1 n2_ss__touch_element
n2-ow">
<div class="n2-ss-slider-2 n2-ow"
style="<?php echo Sanitize::esc_attr($sliderCSS); ?>">
<?php
echo $this->getBackgroundVideo($params);
?>
<div class="n2-ss-slider-3 n2-ow">
<?php
$this->displaySizeSVGs($css, true);
echo $this->slider->staticHtml;
?>
<div class="n2-ss-slider-pane n2-ow">
<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 <?php
echo $css->base['slideWidth'] ?> <?php echo
$css->base['slideHeight'] ?>" class="n2-ow
n2-ss-preserve-size n2-ss-slide-limiter"></svg>
<?php
foreach ($this->slider->getSlides() as $i
=> $slide) {
$slide->finalize();
echo Html::tag('div',
Html::mergeAttributes($slide->attributes, $slide->linkAttributes,
array(
'class' => 'n2-ss-slide
' . $slide->classes . ' n2-ow',
'style' => $slide->style .
$params->get('slide-css')
)), $slide->background .
$slide->getHTML());
}
?>
</div>
</div>
<?php
$this->renderShapeDividers();
?>
</div>
</div>
<?php
echo $this->widgets->wrapSlider(ob_get_clean());
echo $this->closeSliderElement();
$this->javaScriptProperties['mainanimation'] = array(
'type' =>
$params->get('animation'),
'duration' =>
intval($params->get('animation-duration')),
'ease' =>
$params->get('animation-easing')
);
$this->slider->addDeviceCSS('all', 'div#'
. $this->slider->elementId . ' .n2-ss-slider-3{max-width:'
. intval($params->get('maximum-pane-width')) .
'px;}');
$this->javaScriptProperties['carousel']
= intval($params->get('carousel'));
$this->javaScriptProperties['maxPaneWidth']
= intval($params->get('maximum-pane-width'));
$this->javaScriptProperties['responsive']['minimumSlideGap']
= intval($params->get('minimum-slide-gap'));
$sideSpacing = array();
if ($params->get('side-spacing-desktop-enable', 0)) {
$sideSpacing['desktop'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-desktop'))), 4, 0);
} else {
$sideSpacing['desktop'] = array(
0,
0,
0,
0
);
}
if ($params->get('side-spacing-tablet-enable', 0)) {
$sideSpacing['tablet'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-tablet'))), 4, 0);
} else {
$sideSpacing['tablet'] =
$sideSpacing['desktop'];
}
if ($params->get('side-spacing-mobile-enable', 0)) {
$sideSpacing['mobile'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-mobile'))), 4, 0);
} else {
$sideSpacing['mobile'] =
$sideSpacing['tablet'];
}
$desktop = implode('px ',
$sideSpacing['desktop']) . 'px';
$this->slider->addDeviceCSS('all', 'div#'
. $this->slider->elementId . ' .n2-ss-slider-3{padding:' .
$desktop . '}');
$tablet = implode('px ',
$sideSpacing['tablet']) . 'px';
if ($tablet !== $desktop) {
$this->slider->addDeviceCSS('tabletportrait',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $tablet . '}');
$this->slider->addDeviceCSS('tabletlandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $tablet . '}');
}
$mobile = implode('px ',
$sideSpacing['mobile']) . 'px';
if ($mobile !== $desktop) {
$this->slider->addDeviceCSS('mobileportrait',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $mobile . '}');
$this->slider->addDeviceCSS('mobilelandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $mobile . '}');
}
$this->javaScriptProperties['responsive']['border']
= max(0, intval($params->get('border-width', 0)));
$this->javaScriptProperties['parallax']['enabled'] =
0;
$this->style .= $css->getCSS();
}
protected function renderTypeSingle($css) {
$params = $this->slider->params;
Js::addStaticGroup(SliderTypeCarousel::getAssetsPath() .
'/dist/ss-carousel-single.min.js',
'ss-carousel-single');
$this->jsDependency[] = 'ss-carousel-single';
$sliderCSS = $params->get('slider-css');
$this->initSliderBackground('.n2-ss-slider-2');
$this->initParticleJS();
echo $this->openSliderElement();
ob_start();
?>
<div class="n2-ss-slider-1 n2_ss__touch_element
n2-ow">
<div class="n2-ss-slider-2 n2-ow"
style="<?php echo Sanitize::esc_attr($sliderCSS); ?>">
<?php
echo $this->getBackgroundVideo($params);
?>
<div class="n2-ss-slider-3 n2-ow">
<?php
$this->displaySizeSVGs($css, true);
echo $this->slider->staticHtml;
?>
<div class="n2-ss-slider-pane-single
n2-ow">
<div class="n2-ss-slider-pipeline
n2-ow" style="--slide-width:<?php echo
$css->base['slideWidth']; ?>px;">
<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 <?php
echo $css->base['slideWidth'] ?> <?php echo
$css->base['slideHeight'] ?>" class="n2-ow
n2-ss-preserve-size n2-ss-slide-limiter"></svg>
<?php
foreach ($this->slider->getSlides() as $i
=> $slide) {
$slide->finalize();
echo Html::tag('div',
Html::mergeAttributes($slide->attributes, $slide->linkAttributes,
array(
'class' =>
'n2-ss-slide ' . $slide->classes . ' n2-ow',
'style' =>
$slide->style . $params->get('slide-css')
)), $slide->background .
$slide->getHTML());
}
?></div>
</div>
</div>
<?php
$this->renderShapeDividers();
?>
</div>
</div>
<?php
echo $this->widgets->wrapSlider(ob_get_clean());
echo $this->closeSliderElement();
$this->javaScriptProperties['mainanimation'] = array(
'duration' =>
intval($params->get('animation-duration')),
'ease' =>
$params->get('animation-easing')
);
$this->slider->addDeviceCSS('all', 'div#'
. $this->slider->elementId . ' .n2-ss-slider-3{max-width:'
. intval($params->get('maximum-pane-width')) .
'px;}');
$this->javaScriptProperties['carousel']
= intval($params->get('carousel'));
$this->javaScriptProperties['maxPaneWidth']
= intval($params->get('maximum-pane-width'));
$this->javaScriptProperties['responsive']['minimumSlideGap']
= intval($params->get('minimum-slide-gap'));
$this->javaScriptProperties['responsive']['justifySlides']
= intval($params->get('slider-side-spacing', 1));
$sideSpacing = array();
if ($params->get('side-spacing-desktop-enable', 0)) {
$sideSpacing['desktop'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-desktop'))), 4, 0);
} else {
$sideSpacing['desktop'] = array(
0,
0,
0,
0
);
}
if ($params->get('side-spacing-tablet-enable', 0)) {
$sideSpacing['tablet'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-tablet'))), 4, 0);
} else {
$sideSpacing['tablet'] =
$sideSpacing['desktop'];
}
if ($params->get('side-spacing-mobile-enable', 0)) {
$sideSpacing['mobile'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-mobile'))), 4, 0);
} else {
$sideSpacing['mobile'] =
$sideSpacing['tablet'];
}
$desktop = implode('px ',
$sideSpacing['desktop']) . 'px';
$this->slider->addDeviceCSS('all', 'div#'
. $this->slider->elementId . ' .n2-ss-slider-3{padding:' .
$desktop . '}');
$tablet = implode('px ',
$sideSpacing['tablet']) . 'px';
if ($tablet !== $desktop) {
$this->slider->addDeviceCSS('tabletportrait',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $tablet . '}');
$this->slider->addDeviceCSS('tabletlandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $tablet . '}');
}
$mobile = implode('px ',
$sideSpacing['mobile']) . 'px';
if ($mobile !== $desktop) {
$this->slider->addDeviceCSS('mobileportrait',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $mobile . '}');
$this->slider->addDeviceCSS('mobilelandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $mobile . '}');
}
$this->style .= $css->getCSS();
}
public function getScript() {
if ($this->slider->params->get('animation') ===
'horizontal' &&
$this->slider->params->get('single-switch', 0)) {
return "_N2.r(" .
json_encode(array_unique($this->jsDependency)) . ",function(){new
_N2.SmartSliderCarouselSingle('{$this->slider->elementId}',
" . $this->encodeJavaScriptProperties() . ");});";
} else {
return "_N2.r(" .
json_encode(array_unique($this->jsDependency)) . ",function(){new
_N2.SmartSliderCarousel('{$this->slider->elementId}',
" . $this->encodeJavaScriptProperties() . ");});";
}
}
/**
* @param $params Data
*/
public function limitParams($params) {
$limitParams = array(
'widget-bar-enabled' => 0,
'widget-fullscreen-enabled' => 0,
'responsiveLimitSlideWidth' => 0,
'imageloadNeighborSlides' => 0
);
if ($params->get('responsive-mode') ===
'fullpage') {
$limitParams['responsive-mode'] = 'auto';
}
$params->loadArray($limitParams);
}
}PK8C�[���+Slider/SliderType/Group/SliderTypeGroup.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Group;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderType;
class SliderTypeGroup extends AbstractSliderType {
public function getName() {
return 'group';
}
public function createFrontend($slider) {
return new SliderTypeGroupFrontend($slider);
}
public function createCss($slider) {
return new SliderTypeGroupCss($slider);
}
public function createAdmin() {
return false;
}
}PK8C�[)aԹ.Slider/SliderType/Group/SliderTypeGroupCss.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Group;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeCss;
class SliderTypeGroupCss extends AbstractSliderTypeCss {
public function render() {
}
protected function renderType(&$context) {
}
}PK8C�[Ʈ���3Slider/SliderType/Group/SliderTypeGroupFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Group;
use Nextend\Framework\Platform\Platform;
use Nextend\SmartSlider3\Application\Model\ModelSlidersXRef;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeFrontend;
use Nextend\SmartSlider3\SliderManager\SliderManager;
class SliderTypeGroupFrontend extends AbstractSliderTypeFrontend {
private $earlier = 2145916800;
public function render($css) {
ob_start();
$this->renderType($css);
return ob_get_clean();
}
protected function renderType($css) {
$isAdmin = Platform::isAdmin();
$xref = new ModelSlidersXRef($this->slider);
$rows =
$xref->getSliders($this->slider->data->get('id'),
'published');
foreach ($rows as $row) {
$slider = new SliderManager($this->slider,
$row['slider_id'], $isAdmin);
$sliderHTML = $slider->render();
echo $sliderHTML;
if (!empty($sliderHTML)) {
$this->earlier =
min($slider->slider->getNextCacheRefresh(), $this->earlier);
}
}
}
public function getNextCacheRefresh() {
return $this->earlier;
}
}PK8C�[Z
�MM1Slider/SliderType/Showcase/SliderTypeShowcase.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Showcase;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderType;
class SliderTypeShowcase extends AbstractSliderType {
public function getName() {
return 'showcase';
}
public function createFrontend($slider) {
return new SliderTypeShowcaseFrontend($slider);
}
public function createCss($slider) {
return new SliderTypeShowcaseCss($slider);
}
public function createAdmin() {
return new SliderTypeShowcaseAdmin($this);
}
public function export($export, $slider) {
$export->addImage($slider['params']->get('background',
''));
}
public function import($import, $slider) {
$slider['params']->set('background',
$import->fixImage($slider['params']->get('background',
'')));
}
}PK8C�[��Wll6Slider/SliderType/Showcase/SliderTypeShowcaseAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Showcase;
use Nextend\Framework\Form\Container\ContainerRowGroup;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio;
use Nextend\Framework\Form\Element\Select\Easing;
use Nextend\Framework\Form\Element\Select\Skin;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\Framework\Form\Insert\InsertAfter;
use Nextend\Framework\Form\Insert\InsertBefore;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeAdmin;
class SliderTypeShowcaseAdmin extends AbstractSliderTypeAdmin {
protected $ordering = 4;
public function getLabel() {
return n2_('Showcase');
}
public function getLabelFull() {
return n2_x('Showcase slider', 'Slider type');
}
public function getIcon() {
return 'ssi_64 ssi_64--showcase';
}
public function prepareForm($form) {
$tableSlideSize = new ContainerTable(new
InsertAfter($form->getElement('/size/size')),
'slider-type-showcase-settings-size', n2_('Slide
size'));
$rowSettingsSlide = new FieldsetRow($tableSlideSize,
'slider-type-showcase-settings-slide-size');
new NumberAutoComplete($rowSettingsSlide, 'slide-width',
n2_('Slide width'), 600, array(
'values' => array(
400,
600,
800,
1000
),
'unit' => 'px',
'wide' => 5
));
new NumberAutoComplete($rowSettingsSlide, 'slide-height',
n2_('Slide height'), 400, array(
'values' => array(
300,
400,
600,
800,
1000
),
'unit' => 'px',
'wide' => 5,
'post' => 'break'
));
new NumberAutoComplete($rowSettingsSlide,
'slide-distance', n2_('Slide distance'), 60, array(
'values' => array(
0,
60,
150
),
'unit' => 'px',
'wide' => 3,
'tipLabel' => n2_('Slide
distance'),
'tipDescription' => n2_('Fix space between
the slides.')
));
$rowGroupSlides = new ContainerRowGroup(new
InsertAfter($form->getElement('/slides/slides-design/slides-design-1')),
'slider-type-showcase-group-slides', false);
$rowSettingsSlideDisplay = new FieldsetRow($rowGroupSlides,
'slider-type-showcase-settings-slide-display');
new Number($rowSettingsSlideDisplay,
'slide-border-width', n2_('Slide border width'), 0,
array(
'unit' => 'px',
'wide' => 3,
'relatedFields' =>
array('sliderslide-border-color')
));
new Color($rowSettingsSlideDisplay, 'slide-border-color',
n2_('Slide border color'), '3E3E3Eff', array(
'alpha' => true
));
new Number($rowSettingsSlideDisplay,
'slide-border-radius', n2_('Slide border radius'), 0,
array(
'unit' => 'px',
'wide' => 3,
'post' => 'break'
));
$rowGroupGeneral = new ContainerRowGroup(new
InsertAfter($form->getElement('/general/design/design-1')),
'slider-type-showcase-group-general', false);
$rowSettingsSlider = new FieldsetRow($rowGroupGeneral,
'slider-type-showcase-settings-slider');
new Number($rowSettingsSlider, 'border-width',
n2_('Slider border width'), 0, array(
'unit' => 'px',
'wide' => 3,
'relatedFields' =>
array('sliderborder-color')
));
new Color($rowSettingsSlider, 'border-color',
n2_('Slider border color'), '3E3E3Eff', array(
'alpha' => true
));
new Number($rowSettingsSlider, 'border-radius',
n2_('Slider border radius'), 0, array(
'unit' => 'px',
'wide' => 3,
'post' => 'break'
));
$spaceGroup = new ContainerRowGroup(new
InsertAfter($rowGroupGeneral), 'slider-type-carousel-space',
n2_('Side spacing'));
$rowSpaceDesktop =
$spaceGroup->createRow('slider-type-carousel-space-desktop');
new OnOff($rowSpaceDesktop,
'side-spacing-desktop-enable', n2_('Desktop'), 1,
array(
'relatedFieldsOn' => array(
'sliderside-spacing-desktop'
),
'tipLabel' => n2_('Desktop side
spacing'),
'tipDescription' => n2_('You can create a
fix distance between the slider and the slides where your controls are
which appear on this device. This way your controls won\'t cover the
slide content.')
));
$sideSpacingDesktop = new MarginPadding($rowSpaceDesktop,
'side-spacing-desktop', n2_('Side spacing'),
'0|*|20|*|0|*|20', array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($sideSpacingDesktop,
'side-spacing-desktop-' . $i, false, '', array(
'values' => array(
0,
20,
40,
80
),
'wide' => 3
));
}
new OnOff($rowSpaceDesktop, 'side-spacing-tablet-enable',
n2_('Tablet'), 0, array(
'relatedFieldsOn' => array(
'sliderside-spacing-tablet'
),
'tipLabel' => n2_('Tablet side
spacing'),
'tipDescription' => n2_('You can create a
fix distance between the slider and the slides where your controls are
which appear on this device. This way your controls won\'t cover the
slide content.')
));
$sideSpacingTablet = new MarginPadding($rowSpaceDesktop,
'side-spacing-tablet', n2_('Side spacing'),
'0|*|0|*|0|*|0', array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($sideSpacingTablet,
'side-spacing-tablet-' . $i, false, '', array(
'values' => array(
0,
20,
40,
80
),
'wide' => 3
));
}
new OnOff($rowSpaceDesktop, 'side-spacing-mobile-enable',
n2_('Mobile'), 0, array(
'relatedFieldsOn' => array(
'sliderside-spacing-mobile'
),
'tipLabel' => n2_('Mobile side
spacing'),
'tipDescription' => n2_('You can create a
fix distance between the slider and the slides where your controls are
which appear on this device. This way your controls won\'t cover the
slide content.')
));
$sideSpacingMobile = new MarginPadding($rowSpaceDesktop,
'side-spacing-mobile', n2_('Side spacing'),
'0|*|0|*|0|*|0', array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($sideSpacingMobile,
'side-spacing-mobile-' . $i, false, '', array(
'values' => array(
0,
20,
40,
80
),
'wide' => 3
));
}
$rowSlideCSS = new FieldsetRow($rowGroupSlides,
'slider-type-showcase-settings-slidecss');
new Skin($rowSlideCSS, 'slide-preset', n2_('Slide
CSS Preset'), '', array(
'post' => 'break',
'options' => array(
'shadow' => array(
'label' => n2_('Light
shadow'),
'settings' => array(
'slide-css' => 'box-shadow: 1px 0
5px RGBA(0, 0, 0, 0.2), -1px 0 5px RGBA(0, 0, 0, 0.2);'
)
)
)
));
new Textarea($rowSlideCSS, 'slide-css', 'Slide
CSS', '', array(
'width' => 500,
'height' => 26,
'resize' => 'both'
));
$rowSliderCSS = new FieldsetRow($rowGroupGeneral,
'slider-type-showcase-settings-slidercss');
new Skin($rowSliderCSS, 'slider-preset', n2_('Slider
CSS Preset'), '', array(
'post' => 'break',
'options' => array(
'shadow' => array(
'label' => n2_('Light
shadow'),
'settings' => array(
'slider-css' => 'box-shadow: 1px
0 5px RGBA(0, 0, 0, 0.2), -1px 0 5px RGBA(0, 0, 0, 0.2);'
)
),
'shadow2' => array(
'label' => n2_('Dark
shadow'),
'settings' => array(
'slider-css' => 'box-shadow: 0
2px 4px 1px rgba(0, 0, 0, 0.6);'
)
),
'photo' => array(
'label' => n2_('Photo'),
'settings' => array(
'slider-css' => 'box-shadow:
1px 0 5px RGBA(0, 0, 0, 0.2), -1px 0 5px RGBA(0, 0, 0, 0.2);',
'border-width' => '8',
'border-color' => 'FFFFFFFF'
)
),
'roundedphoto' => array(
'label' => n2_('Photo
rounded'),
'settings' => array(
'slider-css' => 'box-shadow:
1px 0 5px RGBA(0, 0, 0, 0.2), -1px 0 5px RGBA(0, 0, 0, 0.2);',
'border-width' => '5',
'border-color' =>
'FFFFFFFF',
'border-radius' => '12'
)
)
)
));
new Textarea($rowSliderCSS, 'slider-css', 'Slider
CSS', '', array(
'height' => 26,
'resize' => 'both'
));
$tableShowcaseAnimation = new ContainerTable(new
InsertBefore($form->getElement('/animations/effects')),
'slider-type-showcase-animation', n2_('Showcase
animation'));
$rowAnimation1 = new FieldsetRow($tableShowcaseAnimation,
'slider-type-showcase-animation-1');
new Skin($rowAnimation1, 'animation-preset',
n2_('Preset'), '', array(
'fixed' => true,
'options' => array(
'none' => array(
'label' => n2_('Default'),
'settings' => array(
'slide-distance' => 60,
'perspective' => 1000,
'opacity' =>
'0|*|100|*|100|*|100',
'scale' =>
'0|*|100|*|100|*|100',
'translate-x' =>
'0|*|0|*|0|*|0',
'translate-y' =>
'0|*|0|*|0|*|0',
'translate-z' =>
'0|*|0|*|0|*|0',
'rotate-x' =>
'0|*|0|*|0|*|0',
'rotate-y' =>
'0|*|0|*|0|*|0',
'rotate-z' =>
'0|*|0|*|0|*|0'
)
),
'horizontal' => array(
'label' => n2_('Horizontal
showcase'),
'settings' => array(
'animation-direction' =>
'horizontal',
'slide-distance' => 60,
'perspective' => 1000,
'opacity' =>
'0|*|100|*|100|*|100',
'scale' =>
'0|*|100|*|100|*|100',
'translate-x' =>
'0|*|0|*|0|*|0',
'translate-y' =>
'0|*|0|*|0|*|0',
'translate-z' =>
'0|*|0|*|0|*|0',
'rotate-x' =>
'0|*|0|*|0|*|0',
'rotate-y' =>
'0|*|0|*|0|*|0',
'rotate-z' =>
'0|*|0|*|0|*|0'
)
),
'vertical' => array(
'label' => n2_('Vertical
showcase'),
'settings' => array(
'animation-direction' =>
'vertical',
'slide-distance' => 60,
'perspective' => 1000,
'opacity' =>
'0|*|100|*|100|*|100',
'scale' =>
'0|*|100|*|100|*|100',
'translate-x' =>
'0|*|0|*|0|*|0',
'translate-y' =>
'0|*|0|*|0|*|0',
'translate-z' =>
'0|*|0|*|0|*|0',
'rotate-x' =>
'0|*|0|*|0|*|0',
'rotate-y' =>
'0|*|0|*|0|*|0',
'rotate-z' =>
'0|*|0|*|0|*|0'
)
),
'horizontalcoverflow' => array(
'label' => n2_('Horizontal cover
flow'),
'settings' => array(
'animation-direction' =>
'horizontal',
'slide-distance' => 10,
'perspective' => 2000,
'opacity' =>
'0|*|100|*|100|*|100',
'scale' =>
'1|*|70|*|100|*|70',
'translate-x' =>
'0|*|0|*|0|*|0',
'translate-y' =>
'0|*|0|*|0|*|0',
'translate-z' =>
'0|*|0|*|0|*|0',
'rotate-x' =>
'0|*|0|*|0|*|0',
'rotate-y' =>
'1|*|45|*|0|*|-45',
'rotate-z' =>
'0|*|0|*|0|*|0'
)
),
'verticalcoverflow' => array(
'label' => n2_('Vertical cover
flow'),
'settings' => array(
'animation-direction' =>
'vertical',
'slide-distance' => 10,
'perspective' => 2000,
'opacity' =>
'0|*|100|*|100|*|100',
'scale' =>
'1|*|70|*|100|*|70',
'translate-x' =>
'0|*|0|*|0|*|0',
'translate-y' =>
'0|*|0|*|0|*|0',
'translate-z' =>
'0|*|0|*|0|*|0',
'rotate-x' =>
'1|*|-45|*|0|*|45',
'rotate-y' =>
'0|*|0|*|0|*|0',
'rotate-z' =>
'0|*|0|*|0|*|0'
)
)
)
));
$rowAnimation2 = new FieldsetRow($tableShowcaseAnimation,
'slider-type-showcase-animation-2');
new NumberAutoComplete($rowAnimation2,
'animation-duration', n2_('Duration'), 800, array(
'wide' => 5,
'min' => 200,
'values' => array(
1000,
1500,
2000
),
'unit' => 'ms'
));
new Easing($rowAnimation2, 'animation-easing',
n2_('Easing'), 'easeOutQuad');
new Radio($rowAnimation2, 'animation-direction',
n2_('Direction'), 'horizontal', array(
'options' => array(
'horizontal' => n2_('Horizontal'),
'vertical' => n2_('Vertical')
)
));
$rowAnimationTransform = new FieldsetRow($tableShowcaseAnimation,
'slider-type-showcase-animation-opacity');
$opacity = new MixedField($rowAnimationTransform,
'opacity', false, '0|*|100|*|100|*|100');
new OnOff($opacity, 'opacity-1',
n2_('Opacity'), 0, array(
'relatedFieldsOn' => array(
'opacityslideropacity-2',
'opacityslideropacity-3',
'opacityslideropacity-4'
)
));
new NumberAutoComplete($opacity, 'opacity-2',
n2_('Before'), '', array(
'wide' => 3,
'min' => 0,
'max' => 100,
'values' => array(
0,
70,
100
),
'unit' => '%'
));
new NumberAutoComplete($opacity, 'opacity-3',
n2_('Active'), '', array(
'wide' => 3,
'min' => 0,
'max' => 100,
'values' => array(
0,
70,
100
),
'unit' => '%'
));
new NumberAutoComplete($opacity, 'opacity-4',
n2_('After'), '', array(
'wide' => 3,
'min' => 0,
'max' => 100,
'values' => array(
0,
70,
100
),
'unit' => '%'
));
$scale = new MixedField($rowAnimationTransform, 'scale',
false, '0|*|100|*|100|*|100');
new OnOff($scale, 'scale-1', n2_('Scale'), 0,
array(
'relatedFieldsOn' => array(
'scalesliderscale-2',
'scalesliderscale-3',
'scalesliderscale-4'
)
));
new NumberAutoComplete($scale, 'scale-2',
n2_('Before'), '', array(
'wide' => 3,
'min' => 0,
'values' => array(
0,
50,
80,
90,
100
),
'unit' => '%'
));
new NumberAutoComplete($scale, 'scale-3',
n2_('Active'), '', array(
'wide' => 3,
'min' => 0,
'values' => array(
0,
50,
80,
90,
100
),
'unit' => '%'
));
new NumberAutoComplete($scale, 'scale-4',
n2_('After'), '', array(
'wide' => 3,
'min' => 0,
'values' => array(
0,
50,
80,
90,
100
),
'unit' => '%'
));
$rowAnimationPosition = new FieldsetRow($tableShowcaseAnimation,
'slider-type-showcase-animation-x');
$translateX = new MixedField($rowAnimationPosition,
'translate-x', false, '0|*|0|*|0|*|0');
new OnOff($translateX, 'translate-x-1', 'X', 0,
array(
'relatedFieldsOn' => array(
'translate-xslidertranslate-x-2',
'translate-xslidertranslate-x-3',
'translate-xslidertranslate-x-4'
)
));
new NumberAutoComplete($translateX, 'translate-x-2',
n2_('Before'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
new NumberAutoComplete($translateX, 'translate-x-3',
n2_('Active'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
new NumberAutoComplete($translateX, 'translate-x-4',
n2_('After'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
$translateY = new MixedField($rowAnimationPosition,
'translate-y', false, '0|*|0|*|0|*|0');
new OnOff($translateY, 'translate-y-1', 'Y', 0,
array(
'relatedFieldsOn' => array(
'translate-yslidertranslate-y-2',
'translate-yslidertranslate-y-3',
'translate-yslidertranslate-y-4'
)
));
new NumberAutoComplete($translateY, 'translate-y-2',
n2_('Before'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
new NumberAutoComplete($translateY, 'translate-y-3',
n2_('Active'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
new NumberAutoComplete($translateY, 'translate-y-4',
n2_('After'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
$translateZ = new MixedField($rowAnimationPosition,
'translate-z', false, '0|*|0|*|0|*|0');
new OnOff($translateZ, 'translate-z-1', 'Z', 0,
array(
'relatedFieldsOn' => array(
'translate-zslidertranslate-z-2',
'translate-zslidertranslate-z-3',
'translate-zslidertranslate-z-4'
)
));
new NumberAutoComplete($translateZ, 'translate-z-2',
n2_('Before'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
new NumberAutoComplete($translateZ, 'translate-z-3',
n2_('Active'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
new NumberAutoComplete($translateZ, 'translate-z-4',
n2_('After'), '', array(
'wide' => 4,
'values' => array(
-100,
0,
100
),
'unit' => 'px'
));
$rowAnimationRotate = new FieldsetRow($tableShowcaseAnimation,
'slider-type-showcase-animation-rotate-x');
$rotateX = new MixedField($rowAnimationRotate,
'rotate-x', false, '0|*|0|*|0|*|0');
new OnOff($rotateX, 'rotate-x-1', n2_('Rotate')
. ' X', 0, array(
'relatedFieldsOn' => array(
'rotate-xsliderrotate-x-2',
'rotate-xsliderrotate-x-3',
'rotate-xsliderrotate-x-4'
)
));
new NumberAutoComplete($rotateX, 'rotate-x-2',
n2_('Before'), '', array(
'wide' => 4,
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
new NumberAutoComplete($rotateX, 'rotate-x-3',
n2_('Active'), '', array(
'wide' => 4,
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
new NumberAutoComplete($rotateX, 'rotate-x-4',
n2_('After'), '', array(
'style' => 'width:30px;',
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
$rotateY = new MixedField($rowAnimationRotate,
'rotate-y', false, '0|*|0|*|0|*|0');
new OnOff($rotateY, 'rotate-y-1', n2_('Rotate')
. ' Y', 0, array(
'relatedFieldsOn' => array(
'rotate-ysliderrotate-y-2',
'rotate-ysliderrotate-y-3',
'rotate-ysliderrotate-y-4'
)
));
new NumberAutoComplete($rotateY, 'rotate-y-2',
n2_('Before'), '', array(
'style' => 'width:30px;',
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
new NumberAutoComplete($rotateY, 'rotate-y-3',
n2_('Active'), '', array(
'style' => 'width:30px;',
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
new NumberAutoComplete($rotateY, 'rotate-y-4',
n2_('After'), '', array(
'style' => 'width:30px;',
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
$rotateZ = new MixedField($rowAnimationRotate,
'rotate-z', false, '0|*|0|*|0|*|0');
new OnOff($rotateZ, 'rotate-z-1', n2_('Rotate')
. ' Z', 0, array(
'relatedFieldsOn' => array(
'rotate-zsliderrotate-z-2',
'rotate-zsliderrotate-z-3',
'rotate-zsliderrotate-z-4'
)
));
new NumberAutoComplete($rotateZ, 'rotate-z-2',
n2_('Before'), '', array(
'style' => 'width:30px;',
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
new NumberAutoComplete($rotateZ, 'rotate-z-3',
n2_('Active'), '', array(
'style' => 'width:30px;',
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
new NumberAutoComplete($rotateZ, 'rotate-z-4',
n2_('After'), '', array(
'style' => 'width:30px;',
'values' => array(
-60,
-30,
0,
60,
30
),
'unit' => '°'
));
$rowSettingsBehavior = new FieldsetRow($tableShowcaseAnimation,
'slider-type-showcase-settings-behavior');
new OnOff($rowSettingsBehavior, 'carousel',
n2_x('Carousel', 'Feature'), 1, array(
'tipLabel' => n2_x('Carousel',
'Feature'),
'tipDescription' => n2_('This option will
create a complete round from your slides if you have enough slides. If you
don\'t have enough slides, you could consider duplicating all the
slides or just add more slides until you will get a carousel round.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1799-showcase-slider-type#carousel',
'relatedFieldsOn' => array(
'slidercontrolsBlockCarouselInteraction'
)
));
new OnOff($rowSettingsBehavior, 'slide-overlay',
n2_('Switch with next/previous slides'), 1, array(
'tipLabel' => n2_('Switch with
next/previous slides'),
'tipDescription' => n2_('Clicking on any
slide that\'s not in the middle will make the slider switch to that
slide. With this option you can disable this behavior, for example, to
allow clicking on buttons on the visible slides.'),
));
/**
* Removing slider settings which are unnecessary for Showcase
slider type.
*/
$form->getElement('/controls/widget-fullscreen')
->remove();
$form->getElement('/size/responsive-mode/responsive-mode-row-1/responsive-mode')
->removeOption('fullpage');
$form->getElement('/size/size/size-2')
->remove();
$form->getElement('/optimize/optimize-slide/optimize-slide-loading-mode/imageloadNeighborSlides')
->remove();
}
}PK8C�[�s���4Slider/SliderType/Showcase/SliderTypeShowcaseCss.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Showcase;
use Nextend\Framework\Parser\Color;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeCss;
class SliderTypeShowcaseCss extends AbstractSliderTypeCss {
public function __construct($slider) {
parent::__construct($slider);
$params = $this->slider->params;
switch ($params->get('animation-direction')) {
case 'vertical':
$this->context['distanceh'] = 0;
$this->context['distancev'] =
intval($params->get('slide-distance')) . 'px';
break;
default:
$this->context['distancev'] = 0;
$this->context['distanceh'] =
intval($params->get('slide-distance')) . 'px';
}
$this->context['perspective'] =
intval($params->get('perspective')) . 'px';
$width = intval($this->context['width']);
$height = intval($this->context['height']);
$this->context['sliderwidth'] = $width .
'px';
$this->context['backgroundSize'] =
$params->getIfEmpty('background-size', 'inherit');
$this->context['backgroundAttachment'] =
$params->get('background-fixed') ? 'fixed' :
'scroll';
$borderWidth =
$params->getIfEmpty('border-width', 0);
$borderColor =
$params->get('border-color');
$this->context['borderRadius'] =
$params->get('border-radius') . 'px';
$this->context['border'] = $borderWidth .
'px';
$rgba = Color::hex2rgba($borderColor);
$this->context['borderrgba'] = 'RGBA(' .
$rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] .
',' . round($rgba[3] / 127, 2) . ')';
$width = $width - $borderWidth * 2;
$height = $height - $borderWidth * 2;
$this->context['slideBorderRadius'] =
$params->get('slide-border-radius') . 'px';
$slideBorderWidth = max(0,
$params->get('slide-border-width', 0));
$this->context['slideborderwidth'] = $slideBorderWidth
. 'px';
$rgba =
Color::hex2rgba($params->get('slide-border-color'));
if ($rgba) {
$this->context['slidebordercolor'] =
'RGBA(' . $rgba[0] . ',' . $rgba[1] . ',' .
$rgba[2] . ',' . round($rgba[3] / 127, 2) . ')';
}
$slideWidth = min($width, max(50,
intval($params->get('slide-width'))));
$slideHeight = min($height, max(50,
intval($params->get('slide-height'))));
$this->context['slideouterwidth'] = $slideWidth .
'px';
$this->context['slideouterheight'] = $slideHeight .
'px';
$this->context['verticalmargin'] = round(($height -
$slideHeight) / 2) . 'px';
$this->context['horizontalmargin'] = round(($width -
$slideWidth) / 2) . 'px';
$this->context['canvaswidth'] = $slideWidth - 2 *
$slideBorderWidth . 'px';
$this->context['canvasheight'] = $slideHeight - 2 *
$slideBorderWidth . 'px';
$this->initSizes();
$this->slider->addLess(SliderTypeShowcase::getAssetsPath() .
'/style.n2less', $this->context);
$this->base = array(
'sliderWidth' => $width,
'sliderHeight' => $height,
'slideWidth' => $slideWidth,
'slideHeight' => $slideHeight
);
}
}PK8C�[&��[#[#9Slider/SliderType/Showcase/SliderTypeShowcaseFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider\SliderType\Showcase;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeFrontend;
class SliderTypeShowcaseFrontend extends AbstractSliderTypeFrontend {
private $direction = 'horizontal';
public function getDefaults() {
return array(
'slide-width' => 600,
'slide-height' => 400,
'background' => '',
'background-size' => 'cover',
'background-fixed' => 0,
'border-width' => 0,
'border-color' => '3E3E3Eff',
'border-radius' => 0,
'slider-css' => '',
'slide-css' => '',
'animation-duration' => 800,
'animation-easing' => 'easeOutQuad',
'animation-direction' => 'horizontal',
'slide-distance' => 60,
'perspective' => 1000,
'carousel' => 1,
'carousel-slides' => 3,
'opacity' =>
'0|*|100|*|100|*|100',
'scale' =>
'0|*|100|*|100|*|100',
'translate-x' =>
'0|*|0|*|0|*|0',
'translate-y' =>
'0|*|0|*|0|*|0',
'translate-z' =>
'0|*|0|*|0|*|0',
'rotate-x' =>
'0|*|0|*|0|*|0',
'rotate-y' =>
'0|*|0|*|0|*|0',
'rotate-z' => '0|*|0|*|0|*|0'
);
}
protected function renderType($css) {
$params = $this->slider->params;
Js::addStaticGroup(SliderTypeShowcase::getAssetsPath() .
'/dist/ss-showcase.min.js', 'ss-showcase');
$this->jsDependency[] = 'ss-showcase';
$sliderCSS = $params->get('slider-css');
$this->initSliderBackground('.n2-ss-slider-2');
$this->initParticleJS();
echo $this->openSliderElement();
ob_start();
$overlay = $params->get('slide-overlay', 1);
?>
<div class="n2-ss-slider-1 n2_ss__touch_element
n2-ow">
<div class="n2-ss-slider-2 n2-ow"
style="<?php echo Sanitize::esc_attr($sliderCSS); ?>">
<?php
echo $this->getBackgroundVideo($params);
?>
<div class="n2-ss-slider-3 n2-ow">
<?php
$this->displaySizeSVGs($css, true);
echo $this->slider->staticHtml;
?>
<div class="n2-ss-showcase-slides
n2-ow">
<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 <?php
echo $css->base['slideWidth'] ?> <?php echo
$css->base['slideHeight'] ?>" class="n2-ow
n2-ss-preserve-size n2-ss-slide-limiter"></svg>
<?php
foreach ($this->slider->getSlides() as $i
=> $slide) {
$slide->finalize();
echo Html::tag('div',
Html::mergeAttributes($slide->attributes, array(
'class' => 'n2-ss-slide
' . $slide->classes . ' n2-ow',
'style' => $slide->style .
$params->get('slide-css')
)), $slide->background .
Html::tag('div', array('class' =>
'n2-ss-slide-inner') + $slide->linkAttributes,
$slide->getHTML()) . ($overlay ? Html::tag('div',
array('class' => 'n2-ss-showcase-overlay n2-ow')) :
''));
}
?></div>
</div>
<?php
$this->renderShapeDividers();
?>
</div>
</div>
<?php
echo $this->widgets->wrapSlider(ob_get_clean());
echo $this->closeSliderElement();
$this->javaScriptProperties['carousel'] =
intval($params->get('carousel'));
$this->javaScriptProperties['carouselSideSlides'] =
intval((max(intval($params->get('carousel-slides')), 1) - 1) /
2);
$this->javaScriptProperties['showcase'] = array(
'duration' =>
intval($params->get('animation-duration')),
'ease' =>
$params->get('animation-easing')
);
$sideSpacing = array();
if ($params->get('side-spacing-desktop-enable', 0)) {
$sideSpacing['desktop'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-desktop'))), 4, 0);
} else {
$sideSpacing['desktop'] = array(
0,
0,
0,
0
);
}
if ($params->get('side-spacing-tablet-enable', 0)) {
$sideSpacing['tablet'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-tablet'))), 4, 0);
} else {
$sideSpacing['tablet'] =
$sideSpacing['desktop'];
}
if ($params->get('side-spacing-mobile-enable', 0)) {
$sideSpacing['mobile'] =
array_pad(array_map('intval', explode('|*|',
$params->get('side-spacing-mobile'))), 4, 0);
} else {
$sideSpacing['mobile'] =
$sideSpacing['tablet'];
}
$desktop = implode('px ',
$sideSpacing['desktop']) . 'px';
$this->slider->addDeviceCSS('all', 'div#'
. $this->slider->elementId . ' .n2-ss-slider-3{padding:' .
$desktop . '}');
$tablet = implode('px ',
$sideSpacing['tablet']) . 'px';
if ($tablet !== $desktop) {
$this->slider->addDeviceCSS('tabletportrait',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $tablet . '}');
$this->slider->addDeviceCSS('tabletlandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $tablet . '}');
}
$mobile = implode('px ',
$sideSpacing['mobile']) . 'px';
if ($mobile !== $desktop) {
$this->slider->addDeviceCSS('mobileportrait',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $mobile . '}');
$this->slider->addDeviceCSS('mobilelandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slider-3{padding:' . $mobile . '}');
}
$this->initAnimationProperties();
$this->style .= $css->getCSS();
}
public function getScript() {
return "_N2.r(" .
json_encode(array_unique($this->jsDependency)) . ",function(){new
_N2.SmartSliderShowcase('{$this->slider->elementId}',
" . $this->encodeJavaScriptProperties() . ");});";
}
protected function getSliderClasses() {
switch
($this->slider->params->get('animation-direction',
'horizontal')) {
case 'vertical':
$this->direction = 'vertical';
return parent::getSliderClasses() . '
n2-ss-showcase-vertical';
break;
default:
$this->direction = 'horizontal';
return parent::getSliderClasses() . '
n2-ss-showcase-horizontal';
}
}
private function initAnimationProperties() {
$params = $this->slider->params;
$slideDistance =
intval($params->get('slide-distance'));
$this->javaScriptProperties['showcase'] += array(
'direction' => $this->direction,
'distance' => $slideDistance,
'animate' => array(
'opacity' =>
self::animationPropertyState($params, 'opacity', 100),
'scale' =>
self::animationPropertyState($params, 'scale', 100),
'x' =>
self::animationPropertyState($params, 'translate-x'),
'y' =>
self::animationPropertyState($params, 'translate-y'),
'z' =>
self::animationPropertyState($params, 'translate-z'),
'rotationX' =>
self::animationPropertyState($params, 'rotate-x'),
'rotationY' =>
self::animationPropertyState($params, 'rotate-y'),
'rotationZ' =>
self::animationPropertyState($params, 'rotate-z'),
),
'overlay' =>
$params->get('slide-overlay', 1)
);
}
private static function animationPropertyState($params, $prop,
$normalize = 1) {
$propValue = Common::parse($params->get($prop));
if ($propValue[0] != 1) {
return null;
}
return array(
'before' => intval($propValue[1]) / $normalize,
'active' => intval($propValue[2]) / $normalize,
'after' => intval($propValue[3]) / $normalize
);
}
/**
* @param $params Data
*/
public function limitParams($params) {
$limitParams = array(
'widget-fullscreen-enabled' => 0,
'responsiveLimitSlideWidth' => 0,
'imageloadNeighborSlides' => 0
);
if ($params->get('responsive-mode') ===
'fullpage') {
$limitParams['responsive-mode'] = 'auto';
}
$params->loadArray($limitParams);
}
}PK8C�[�q�2Slider/SliderTypeLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Slider;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
use Nextend\SmartSlider3Pro\Slider\SliderType\Carousel\SliderTypeCarousel;
use Nextend\SmartSlider3Pro\Slider\SliderType\Group\SliderTypeGroup;
use Nextend\SmartSlider3Pro\Slider\SliderType\Showcase\SliderTypeShowcase;
class SliderTypeLoader {
public function __construct() {
Plugin::addAction('PluggableFactorySliderType', array(
$this,
'sliderTypes'
));
}
public function sliderTypes() {
SliderTypeFactory::addType(new SliderTypeGroup());
SliderTypeFactory::addType(new SliderTypeShowcase());
SliderTypeFactory::addType(new SliderTypeCarousel());
}
}PK8C�[ʲ�TSmartSlider3Pro.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3Pro\Application\PluggedApplicationSmartSlider3Pro;
use Nextend\SmartSlider3Pro\Generator\GeneratorLoader;
use Nextend\SmartSlider3Pro\Renderable\Item\ItemLoader;
use Nextend\SmartSlider3Pro\Slider\ResponsiveTypeLoader;
use Nextend\SmartSlider3Pro\Slider\SliderTypeLoader;
use Nextend\SmartSlider3Pro\Widget\WidgetLoader;
class SmartSlider3Pro {
use SingletonTrait;
protected function init() {
Plugin::addAction('PluggableApplication\Nextend\SmartSlider3\Application\ApplicationSmartSlider3',
array(
$this,
'plugSmartSlider3Pro'
));
new SliderTypeLoader();
new ResponsiveTypeLoader();
new WidgetLoader();
new GeneratorLoader();
new ItemLoader();
}
/**
* @param ApplicationSmartSlider3 $application
*/
public function plugSmartSlider3Pro($application) {
new PluggedApplicationSmartSlider3Pro($application);
}
}PK8C�[!iuX��:SplitText/Block/SplitTextManager/BlockSplitTextManager.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\SplitText\Block\SplitTextManager;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Visual\AbstractBlockVisual;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonCancel;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3Pro\SplitText\ModelSplitText;
use Nextend\SmartSlider3Pro\SplitText\SplitTextRenderer;
class BlockSplitTextManager extends AbstractBlockVisual {
/** @var ModelSplitText */
protected $model;
/**
* @return ModelSplitText
*/
public function getModel() {
return $this->model;
}
public function display() {
$this->model = new ModelSplitText($this);
$this->renderTemplatePart('Index');
}
public function displayTopBar() {
$buttonCancel = new BlockButtonCancel($this);
$buttonCancel->addClass('n2_fullscreen_editor__cancel');
$buttonCancel->display();
$buttonApply = new BlockButtonSave($this);
$buttonApply->setLabel(n2_('Apply'));
$buttonApply->addClass('n2_fullscreen_editor__save');
$buttonApply->display();
}
public function displaySidebar() {
$this->renderTemplatePart('Sidebar');
}
public function displayContent() {
$model = $this->getModel();
$sets = $model->getSets();
SplitTextRenderer::$sets[] = $sets[0]['id'];
$animations = array();
foreach (array_unique(SplitTextRenderer::$sets) AS $setId) {
$animations[$setId] = $model->getVisuals($setId);
}
Js::addFirstCode("
new _N2.NextendSplitTextAnimationManager({
fixedSet: 1000,
sets: " . json_encode($sets) . ",
visuals: " . json_encode($animations) . ",
ajaxUrl: '" .
$this->createAjaxUrl(array('splittextanimation/index')) .
"'
});
");
$model->renderForm();
}
}PK8C�[�����*SplitText/Block/SplitTextManager/Index.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\SplitText\Block\SplitTextManager;
/**
* @var BlockSplitTextManager $this
*/
?>
<div id="n2-lightbox-splittextanimation"
class="n2_fullscreen_editor">
<div class="n2_fullscreen_editor__overlay"></div>
<div class="n2_fullscreen_editor__window">
<div class="n2_fullscreen_editor__nav_bar">
<div
class="n2_fullscreen_editor__nav_bar_label">
<?php n2_e('Text animation'); ?>
</div>
<div
class="n2_fullscreen_editor__nav_bar_actions">
<?php $this->displayTopBar(); ?>
</div>
</div>
<div class="n2_fullscreen_editor__content">
<div class="n2_fullscreen_editor__content_sidebar
n2_container_scrollable">
<?php $this->displaySidebar(); ?>
</div>
<div class="n2_fullscreen_editor__content_content
n2_container_scrollable">
<?php $this->displayContent(); ?>
</div>
</div>
</div>
</div>PK8C�['Լ��,SplitText/Block/SplitTextManager/Sidebar.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\SplitText\Block\SplitTextManager;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
/**
* @var BlockSplitTextManager $this
*/
?>
<div class="n2_fullscreen_editor__save_as_new_container">
<?php
$saveAsNew = new BlockButtonSave($this);
$saveAsNew->addClass('n2_fullscreen_editor__save_as_new');
$saveAsNew->setLabel(n2_('Save as new animation'));
$saveAsNew->display();
?>
</div>
PK8C�[T����SplitText/ModelSplitText.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\SplitText;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\Radio;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Easing;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Fieldset\FieldsetVisualSet;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Visual\ModelVisual;
class ModelSplitText extends ModelVisual {
protected $type = 'splittextanimation';
protected function init() {
SplitTextStorage::getInstance();
$this->storage =
StorageSectionManager::getStorage('smartslider');
}
public function renderSetsForm() {
$form = new Form($this, $this->type . 'set');
$form->addClass('n2_fullscreen_editor__content_sidebar_top_bar');
$form->setDark();
$setsTab = new FieldsetVisualSet($form->getContainer(),
'splittextanimation-sets', n2_('Sets'));
new Select($setsTab, 'sets', false, '');
echo $form->render();
}
public function renderForm() {
$form = new Form($this, 'n2-splittextanimation-editor');
$table = new ContainerTable($form->getContainer(),
'splittextanimation-table', n2_('Text animation
settings'));
$table->setFieldsetPositionEnd();
$firstRow = $table->createRow('firstrow');
new Radio($firstRow, 'mode', n2_('Mode'),
'chars', array(
'options' => array(
'chars' => n2_('Chars'),
'words' => n2_('Words')
)
));
new Select($firstRow, 'sort', n2_('Sort'),
'normal', array(
'options' => array(
'normal' => n2_('Normal'),
'reversed' => n2_('Reversed'),
'random' => n2_('Random'),
'side' => n2_('Side'),
'sideShifted' => n2_('Side
shifted'),
'center' => n2_('Center'),
'centerShifted' => n2_('Center
shifted')
)
));
new NumberAutoComplete($firstRow, 'duration',
n2_('Duration'), 800, array(
'style' => 'width:40px;',
'min' => 0,
'values' => array(
500,
800,
1000,
1500,
2000
),
'unit' => 'ms'
));
new NumberAutoComplete($firstRow, 'stagger',
n2_('Stagger'), 50, array(
'style' => 'width:40px;',
'values' => array(
25,
50,
100,
200,
400
),
'unit' => 'ms'
));
new Easing($firstRow, 'easing', n2_('Easing'),
'easeOutCubic');
$transformOrigin = new MixedField($firstRow,
'transformorigin', n2_('Transform origin'),
'50|*|50|*|0');
new NumberAutoComplete($transformOrigin,
'transformorigin-1', false, '', array(
'sublabel' => 'X',
'values' => array(
0,
50,
100
),
'unit' => '%',
'wide' => 4
));
new NumberAutoComplete($transformOrigin,
'transformorigin-2', false, '', array(
'sublabel' => 'Y',
'values' => array(
0,
50,
100
),
'unit' => '%',
'wide' => 4
));
new Number($transformOrigin, 'transformorigin-3', false,
'', array(
'sublabel' => 'Z',
'unit' => 'px',
'wide' => 4
));
$secondRow = $table->createRow('thirdrow');
new NumberSlider($secondRow, 'opacity',
n2_('Opacity'), 100, array(
'style' => 'width:22px;',
'min' => 0,
'max' => 100,
'unit' => '%'
));
new NumberAutoComplete($secondRow, 'scale',
n2_('Scale'), 100, array(
'style' => 'width:40px;',
'min' => 0,
'max' => 9999,
'values' => array(
0,
50,
100,
150,
1000
),
'unit' => '%'
));
$offset = new MixedField($secondRow, 'offset',
n2_('Offset'), '0|*|0');
new NumberAutoComplete($offset, 'offset-1', false,
'', array(
'style' => 'width:40px;',
'sublabel' => 'X',
'values' => array(
-400,
-200,
-100,
0,
100,
200,
400
),
'unit' => 'px'
));
new NumberAutoComplete($offset, 'offset-2', false,
'', array(
'style' => 'width:40px;',
'sublabel' => 'Y',
'values' => array(
-400,
-200,
-100,
0,
100,
200,
400
),
'unit' => 'px'
));
$rotate = new MixedField($secondRow, 'rotate',
n2_('Rotate'), '0|*|0|*|0');
new NumberAutoComplete($rotate, 'rotate-1', false,
'', array(
'style' => 'width:40px;',
'sublabel' => 'X',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
new NumberAutoComplete($rotate, 'rotate-2', false,
'', array(
'style' => 'width:40px;',
'sublabel' => 'Y',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
new NumberAutoComplete($rotate, 'rotate-3', false,
'', array(
'style' => 'width:40px;',
'sublabel' => 'Z',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
$previewTable = new ContainerTable($form->getContainer(),
'splittextanimation-preview', n2_('Preview'));
$previewTable->setFieldsetPositionEnd();
new Color($previewTable->getFieldsetLabel(),
'preview-background', false, 'ced3d5');
$form->render();
}
}PK8C�[+!en��SplitText/SplitTextManager.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\SplitText;
use Nextend\Framework\Pattern\VisualManagerTrait;
use
Nextend\SmartSlider3Pro\SplitText\Block\SplitTextManager\BlockSplitTextManager;
class SplitTextManager {
use VisualManagerTrait;
public function display() {
$postBackgroundAnimationManagerBlock = new
BlockSplitTextManager($this->MVCHelper);
$postBackgroundAnimationManagerBlock->display();
}
}PK8C�[�uP�p'p'SplitText/SplitTextRenderer.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\SplitText;
use Nextend\Framework\Asset\Css\Css;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Model\Section;
use Nextend\Framework\Settings;
class SplitTextRenderer {
public static $pre = '';
public static $sets = array();
public static $animations = array();
/**
* @var Animation
*/
public static $animation;
public static $mode;
public static function preLoad($animationId) {
if (intval($animationId) > 0) {
$animation = Section::getById($animationId,
'animation');
if ($animation) {
self::$sets[] = $animation['referencekey'];
}
}
}
public static function render($animation, $mode, $group, $pre =
'') {
$cssData = self::_render($animation, $mode, $pre);
if ($cssData) {
Css::addCode($cssData[1], $group);
return $cssData[0];
}
return '';
}
public static function _render($animation, $mode, $pre = '')
{
self::$pre = $pre;
if (intval($animation) > 0) {
// Linked
$animation = Section::getById($animation,
'animation');
if ($animation) {
if (is_string($animation['value'])) {
$decoded = $animation['value'];
if ($decoded[0] != '{') {
$decoded = Base64::decode($decoded);
}
$value = json_decode($decoded, true);
} else {
$value = $animation['value'];
}
$selector = 'n2-animation-' .
$animation['id'] . '-' . $mode;
self::$sets[] = $animation['referencekey'];
if (!isset(self::$animations[$animation['id']]))
{
self::$animations[$animation['id']] = array(
$mode
);
} else if (!in_array($mode,
self::$animations[$animation['id']])) {
self::$animations[$animation['id']][] =
$mode;
}
return array(
$selector . ' ',
self::renderStyle($mode, $pre, $selector,
$value['data'])
);
}
} else if ($animation != '') {
$decoded = $animation;
if ($decoded[0] != '{') {
$decoded = Base64::decode($decoded);
} else {
$animation = Base64::encode($decoded);
}
$value = json_decode($decoded, true);
if ($value) {
$selector = 'n2-animation-' . md5($animation) .
'-' . $mode;
return array(
$selector . ' ',
self::renderStyle($mode, $pre, $selector,
$value['data'])
);
}
}
return false;
}
private static function renderStyle($mode, $pre, $selector, $tabs) {
$search = array(
'@pre',
'@selector'
);
$replace = array(
$pre,
'.' . $selector
);
$tabs[0] = array_merge(array(
'backgroundcolor' => 'ffffff00',
'opacity' => 100,
'padding' =>
'0|*|0|*|0|*|0|*|px',
'boxshadow' =>
'0|*|0|*|0|*|0|*|000000ff',
'border' =>
'0|*|solid|*|000000ff',
'borderradius' => '0',
'extra' => '',
), $tabs[0]);
foreach ($tabs AS $k => $tab) {
$search[] = '@tab' . $k;
$replace[] = self::$animation->animation($tab);
}
$template = '';
foreach (self::$mode[$mode]['selectors'] AS $s =>
$animation) {
if (!in_array($animation, $search) ||
!empty($replace[array_search($animation, $search)])) {
$template .= $s . "{" . $animation .
"}";
}
}
return str_replace($search, $replace, $template);
}
}
$frontendAccessibility =
intval(Settings::get('frontend-accessibility', 1));
SplitTextRenderer::$mode = array(
'0' => array(
'id' => '0',
'label' => n2_('Single'),
'tabs' => array(
n2_('Text')
),
'renderOptions' => array(
'combined' => false
),
'preview' => '<div
class="{styleClassName}">Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum.</div>',
'selectors' => array(
'@pre@selector' => '@tab'
)
),
'simple' => array(
'id' => 'simple',
'label' => n2_('Simple'),
'tabs' => array(
n2_('Normal')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div
class="{styleClassName}" style="width: 200px;
height:100px;"></div>',
'selectors' => array(
'@pre@selector' => '@tab0'
)
),
'box' => array(
'id' => 'box',
'label' => n2_('Box'),
'tabs' => array(
n2_('Normal'),
n2_('Hover')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div
class="{styleClassName}" style="width: 200px;
height:100px;"></div>',
'selectors' => array(
'@pre@selector' => '@tab0',
'@pre@selector:HOVER' => '@tab1'
)
),
'button' => array(
'id' => 'button',
'label' => n2_('Button'),
'tabs' => array(
n2_('Normal'),
n2_('Hover')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div><a
style="display:inline-block; margin:20px;"
class="{styleClassName}" href="#" onclick="return
false;">Button</a></div>',
'selectors' => $frontendAccessibility ? array(
'@pre@selector'
=> '@tab0',
'@pre@selector:Hover, @pre@selector:ACTIVE,
@pre@selector:FOCUS' => '@tab1'
) : array(
'@pre@selector, @pre@selector:FOCUS' =>
'@tab0',
'@pre@selector:Hover, @pre@selector:ACTIVE' =>
'@tab1'
)
),
'heading' => array(
'id' => 'heading',
'label' => n2_('Heading'),
'tabs' => array(
n2_('Normal'),
n2_('Hover')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div
class="{styleClassName}">Heading</div>',
'selectors' => $frontendAccessibility ? array(
'@pre@selector'
=> '@tab0',
'@pre@selector:Hover, @pre@selector:ACTIVE,
@pre@selector:FOCUS' => '@tab1'
) : array(
'@pre@selector, @pre@selector:FOCUS' =>
'@tab0',
'@pre@selector:Hover, @pre@selector:ACTIVE' =>
'@tab1'
)
),
'heading-active' => array(
'id' => 'heading-active',
'label' => n2_('Heading active'),
'tabs' => array(
n2_('Normal'),
n2_('Active')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div
class="{styleClassName}">Heading</div>',
'selectors' => array(
'@pre@selector' => '@tab0',
'@pre@selector.n2-active' => '@tab1'
)
),
'dot' => array(
'id' => 'dot',
'label' => n2_('Dot'),
'tabs' => array(
n2_('Normal'),
n2_('Active')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div><div
class="{styleClassName}" style="display: inline-block;
margin: 3px;"></div><div class="{styleClassName}
n2-active" style="display: inline-block; margin:
3px;"></div><div class="{styleClassName}"
style="display: inline-block; margin:
3px;"></div></div>',
'selectors' => array(
'@pre@selector' =>
'@tab0',
'@pre@selector.n2-active, @pre@selector:HOVER' =>
'@tab1'
)
),
'highlight' => array(
'id' => 'highlight',
'label' => n2_('Highlight'),
'tabs' => array(
n2_('Normal'),
n2_('Highlight'),
n2_('Hover')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div
class="{fontClassName}">' . n2_('Button') .
'</div>',
'selectors' => $frontendAccessibility ? array(
'@pre@selector'
=>
'@tab0',
'@pre@selector .n2-highlighted'
=>
'@tab1',
'@pre@selector .n2-highlighted:HOVER, @pre@selector
.n2-highlighted:ACTIVE, @pre@selector .n2-highlighted:FOCUS' =>
'@tab2'
) : array(
'@pre@selector'
=> '@tab0',
'@pre@selector .n2-highlighted, @pre@selector
.n2-highlighted:FOCUS' => '@tab1',
'@pre@selector .n2-highlighted:HOVER, @pre@selector
.n2-highlighted:ACTIVE' => '@tab2'
)
),
);PK8C�[�%BR
SplitText/SplitTextStorage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\SplitText;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Plugin;
class SplitTextStorage {
use SingletonTrait;
private $sets = array();
private $animation = array();
private $animationBySet = array();
private $animationById = array();
protected function init() {
Plugin::addAction('smartslidersplittextanimationset',
array(
$this,
'animationSet'
));
Plugin::addAction('smartslidersplittextanimation', array(
$this,
'animations'
));
Plugin::addAction('splittextanimation', array(
$this,
'animation'
));
}
private function load() {
static $loaded;
if (!$loaded) {
Plugin::doAction('splitTextAnimationStorage', array(
&$this->sets,
&$this->animation
));
for ($i = 0; $i < count($this->animation); $i++) {
if
(!isset($this->animationBySet[$this->animation[$i]['referencekey']]))
{
$this->animationBySet[$this->animation[$i]['referencekey']]
= array();
}
$this->animationBySet[$this->animation[$i]['referencekey']][]
= &$this->animation[$i];
$this->animationById[$this->animation[$i]['id']]
= &$this->animation[$i];
}
$loaded = true;
}
}
public function animationSet($referenceKey, &$sets) {
$this->load();
for ($i = count($this->sets) - 1; $i >= 0; $i--) {
$this->sets[$i]['system'] = 1;
$this->sets[$i]['editable'] = 0;
array_unshift($sets, $this->sets[$i]);
}
}
public function animations($referenceKey, &$animation) {
$this->load();
if (isset($this->animationBySet[$referenceKey])) {
$_animation = &$this->animationBySet[$referenceKey];
for ($i = count($_animation) - 1; $i >= 0; $i--) {
$_animation[$i]['system'] = 1;
$_animation[$i]['editable'] = 0;
array_unshift($animation, $_animation[$i]);
}
}
}
public function animation($id, &$animation) {
$this->load();
if (isset($this->animationById[$id])) {
$this->animationById[$id]['system'] = 1;
$this->animationById[$id]['editable'] = 0;
$animation =
$this->animationById[$id];
}
}
}PK8C�[tX�RR$Widget/Arrow/ArrowGrow/ArrowGrow.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowGrow;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Widget\Arrow\AbstractWidgetArrow;
class ArrowGrow extends AbstractWidgetArrow {
protected $defaults = array(
'widget-arrow-previous-position-mode' =>
'simple',
'widget-arrow-previous-position-area' => 6,
'widget-arrow-previous-position-offset' => 15,
'widget-arrow-next-position-mode' =>
'simple',
'widget-arrow-next-position-area' => 7,
'widget-arrow-next-position-offset' => 15,
'widget-arrow-style' =>
'{"data":[{"backgroundcolor":"00000080","padding":"3|*|3|*|3|*|3|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"50","extra":""},{"backgroundcolor":"1D81F9FF"}]}',
'widget-arrow-font' =>
'{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{}]}',
'widget-arrow-previous-color' =>
'ffffffcc',
'widget-arrow-previous' =>
'$ss$/plugins/widgetarrow/grow/grow/previous/simple-horizontal.svg',
'widget-arrow-mirror' => 1,
'widget-arrow-next-color' =>
'ffffffcc',
'widget-arrow-next' =>
'$ss$/plugins/widgetarrow/grow/grow/next/simple-horizontal.svg'
);
public function renderFields($container) {
$rowIcon = new FieldsetRow($container,
'widget-arrow-grow-row-icon');
new ImageListFromFolder($rowIcon,
'widget-arrow-previous', n2_x('Previous', 'Arrow
direction'), '', array(
'folder' => self::getAssetsPath() .
'/previous/'
));
new Color($rowIcon, 'widget-arrow-previous-color',
n2_('Color'), '', array(
'alpha' => true
));
new OnOff($rowIcon, 'widget-arrow-mirror',
n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-next',
'sliderwidget-arrow-next-color'
)
));
new ImageListFromFolder($rowIcon, 'widget-arrow-next',
n2_x('Next', 'Arrow direction'), '', array(
'folder' => self::getAssetsPath() .
'/next/'
));
new Color($rowIcon, 'widget-arrow-next-color',
n2_('Color'), '', array(
'alpha' => true
));
$row3 = new FieldsetRow($container,
'widget-arrow-grow-row-3');
new Style($row3, 'widget-arrow-style',
n2_('Arrow'), '', array(
'mode' => 'button',
'preview' =>
'SmartSliderAdminWidgetArrowGrow'
));
new Font($row3, 'widget-arrow-font',
n2_('Text'), '', array(
'mode' => 'link',
'preview' =>
'SmartSliderAdminWidgetArrowGrow',
'style' => 'sliderwidget-arrow-style'
));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'style'));
$export->addVisual($params->get($this->key .
'font'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key . 'style',
'')));
$params->set($this->key . 'font',
$import->fixSection($params->get($this->key . 'font',
'')));
}
}PK8C�[��9a��,Widget/Arrow/ArrowGrow/ArrowGrowFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowGrow;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class ArrowGrowFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key .
'previous-position-', array(
$this,
'renderPrevious'
));
$this->addToPlacement($this->key .
'next-position-', array(
$this,
'renderNext'
));
}
public function renderPrevious($attributes = array()) {
$this->render();
if ($this->previousArguments) {
array_unshift($this->previousArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->previousArguments);
}
return '';
}
public function renderNext($attributes = array()) {
$this->render();
if ($this->nextArguments) {
array_unshift($this->nextArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->nextArguments);
}
return '';
}
private function render() {
if ($this->rendered) return;
$this->rendered = true;
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if ($slider->getSlidesCount() <= 1) {
return '';
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-arrow-grow.min.js', 'w-arrow-grow');
$previousValue = basename($params->get($this->key .
'previous'));
if ($previousValue == -1) {
$previous = false;
} else {
$previous =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/previous/' . $previousValue);
}
$previousColor = $params->get($this->key .
'previous-color');
if ($params->get($this->key . 'mirror')) {
if ($previousValue == -1) {
$next = false;
} else {
$next =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/next/' . $previousValue);
}
$nextColor = $previousColor;
} else {
$nextValue = basename($params->get($this->key .
'next'));
if ($nextValue == -1) {
$next = false;
} else {
$next =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/next/' . $nextValue);
}
$nextColor = $params->get($this->key .
'next-color');
}
$fontClass = $slider->addFont($params->get($this->key .
'font'), 'hover');
$styleClass = $slider->addStyle($params->get($this->key .
'style'), 'heading');
if ($previous) {
$this->previousArguments = array(
$id,
'previous',
$previous,
$fontClass,
$styleClass,
$previousColor
);
}
if ($next) {
$this->nextArguments = array(
$id,
'next',
$next,
$fontClass,
$styleClass,
$nextColor
);
}
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetArrowGrow(this, ' . $params->get($this->key
. 'animation-delay') . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowGrow');
}
/**
* @param array $attributes
* @param $id
* @param $side
* @param $image
* @param $fontClass
* @param $styleClass
* @param $color
*
* @return string
*/
protected function getHTML($attributes, $id, $side, $image, $fontClass,
$styleClass, $color) {
$displayAttributes =
$this->getDisplayAttributes($this->params, $this->key);
$ext = pathinfo($image, PATHINFO_EXTENSION);
if ($ext == 'svg' &&
ResourceTranslator::isResource($image)) {
list($color, $opacity) = Color::colorToSVG($color);
$image = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity .
'"'
),
Filesystem::readFile(ResourceTranslator::toPath($image))));
} else {
$image = ResourceTranslator::toUrl($image);
}
$label = '';
switch ($side) {
case 'previous':
$label = n2_('Previous slide');
break;
case 'next':
$label = n2_('Next slide');
break;
}
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
'class' => $styleClass . 'nextend-arrow
n2-ow-all nextend-arrow-grow nextend-arrow-' . $side,
'role' => 'button',
'aria-label' => $label,
'tabindex' => '0'
)), Html::tag('div', array(
'class' => $fontClass . '
nextend-arrow-title'
), '') . Html::tag('div', array(
'class' => 'nextend-arrow-arrow',
'style' => 'background-image: URL('
. $image . ');'
), ''));
}
}PK8C�[��s�� � ,Widget/Arrow/ArrowImageBar/ArrowImageBar.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowImageBar;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Widget\Arrow\AbstractWidgetArrow;
class ArrowImageBar extends AbstractWidgetArrow {
protected $defaults = array(
'widget-arrow-previous-position-mode' =>
'simple',
'widget-arrow-previous-position-area' => 2,
'widget-arrow-previous-position-offset' => 0,
'widget-arrow-next-position-mode' =>
'simple',
'widget-arrow-next-position-area' => 4,
'widget-arrow-next-position-offset' => 0,
'widget-arrow-width' => 100,
'widget-arrow-previous-color' =>
'ffffffcc',
'widget-arrow-previous' =>
'$ss$/plugins/widgetarrow/imagebar/imagebar/previous/simple-horizontal.svg',
'widget-arrow-mirror' => 1,
'widget-arrow-next-color' =>
'ffffffcc',
'widget-arrow-next' =>
'$ss$/plugins/widgetarrow/imagebar/imagebar/next/simple-horizontal.svg'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-arrow-image-bar-row-1');
new Number($row1, 'widget-arrow-width',
n2_('Width'), 0, array(
'style' => 'width:40px;',
'unit' => 'px'
));
$rowIcon = new FieldsetRow($container,
'widget-arrow-image-bar-row-icon');
new ImageListFromFolder($rowIcon,
'widget-arrow-previous', n2_x('Previous', 'Arrow
direction'), '', array(
'folder' => self::getAssetsPath() .
'/previous/'
));
new Color($rowIcon, 'widget-arrow-previous-color',
n2_('Color'), '', array(
'alpha' => true
));
new OnOff($rowIcon, 'widget-arrow-mirror',
n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-next',
'sliderwidget-arrow-next-color'
)
));
new ImageListFromFolder($rowIcon, 'widget-arrow-next',
n2_x('Next', 'Arrow direction'), '', array(
'folder' => self::getAssetsPath() .
'/next/'
));
new Color($rowIcon, 'widget-arrow-next-color',
n2_('Color'), '', array(
'alpha' => true
));
}
}PK8C�[�w-`��4Widget/Arrow/ArrowImageBar/ArrowImageBarFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowImageBar;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class ArrowImageBarFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->slider->exposeSlideData['thumbnail'] = true;
$this->addToPlacement($this->key .
'previous-position-', array(
$this,
'renderPrevious'
));
$this->addToPlacement($this->key .
'next-position-', array(
$this,
'renderNext'
));
}
public function renderPrevious($attributes = array()) {
$this->render();
if ($this->previousArguments) {
array_unshift($this->previousArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->previousArguments);
}
return '';
}
public function renderNext($attributes = array()) {
$this->render();
if ($this->nextArguments) {
array_unshift($this->nextArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->nextArguments);
}
return '';
}
private function render() {
if ($this->rendered) return;
$this->rendered = true;
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if ($slider->getSlidesCount() <= 1) {
return;
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-arrow-imagebar.min.js', 'w-arrow-imagebar');
$previousValue = basename($params->get($this->key .
'previous'));
if ($previousValue == -1) {
$previous = false;
} else {
$previous =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/previous/' . $previousValue);
}
$previousColor = $params->get($this->key .
'previous-color');
if ($params->get($this->key . 'mirror')) {
if ($previousValue == -1) {
$next = false;
} else {
$next =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/next/' . $previousValue);
}
$nextColor = $previousColor;
} else {
$nextValue = basename($params->get($this->key .
'next'));
if ($nextValue == -1) {
$next = false;
} else {
$next =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/next/' . $nextValue);
}
$nextColor = $params->get($this->key .
'next-color');
}
if ($previous) {
$this->previousArguments = array(
$id,
'previous',
$previous,
$previousColor
);
}
if ($next) {
$this->nextArguments = array(
$id,
'next',
$next,
$nextColor
);
}
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetArrowImageBar(this);');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowImageBar');
}
/**
* @param array $attributes
* @param $id
* @param Data $params
* @param $side
*
* @return string
*/
private function getHTML($attributes, $id, $side, $image, $color) {
$displayAttributes =
$this->getDisplayAttributes($this->params, $this->key);
$ext = pathinfo($image, PATHINFO_EXTENSION);
if ($ext == 'svg' &&
ResourceTranslator::isResource($image)) {
list($color, $opacity) = Color::colorToSVG($color);
$image = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity .
'"'
),
Filesystem::readFile(ResourceTranslator::toPath($image))));
} else {
$image = ResourceTranslator::toUrl($image);
}
$style = 'width: ' .
intval($this->params->get($this->key . 'width')) .
'px';
$label = '';
switch ($side) {
case 'previous':
$label = n2_('Previous slide');
break;
case 'next':
$label = n2_('Next slide');
break;
}
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
'class' => 'nextend-arrow
nextend-arrow-imagebar n2-ow-all nextend-arrow-' . $side,
'style' => $style,
'role' => 'button',
'aria-label' => $label,
'tabindex' => '0'
)), Html::tag('div', array(
'class' => 'nextend-arrow-image'
), '') . Html::tag('div', array(
'class' => 'nextend-arrow-arrow',
'style' => 'background-image: URL('
. $image . ');'
), ''));
}
}PK8C�[������(Widget/Arrow/ArrowReveal/ArrowReveal.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowReveal;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Widget\Arrow\AbstractWidgetArrow;
class ArrowReveal extends AbstractWidgetArrow {
protected $defaults = array(
'widget-arrow-previous-position-mode' =>
'simple',
'widget-arrow-previous-position-area' => 6,
'widget-arrow-previous-position-offset' => 0,
'widget-arrow-next-position-mode' =>
'simple',
'widget-arrow-next-position-area' => 7,
'widget-arrow-next-position-offset' => 0,
'widget-arrow-font' =>
'',
'widget-arrow-background' =>
'00000080',
'widget-arrow-title-show' => 0,
'widget-arrow-title-font' =>
'{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{}]}',
'widget-arrow-title-background' =>
'000000cc',
'widget-arrow-animation' =>
'slide',
'widget-arrow-previous-color' =>
'ffffffcc',
'widget-arrow-previous' =>
'$ss$/plugins/widgetarrow/reveal/reveal/previous/simple-horizontal.svg',
'widget-arrow-mirror' => 1,
'widget-arrow-next-color' =>
'ffffffcc',
'widget-arrow-next' =>
'$ss$/plugins/widgetarrow/reveal/reveal/next/simple-horizontal.svg'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-arrow-reveal-row-1');
new Color($row1, 'widget-arrow-background',
n2_('Background'), '', array(
'alpha' => true
));
new Select($row1, 'widget-arrow-animation',
n2_('Animation'), '', array(
'options' => array(
'slide' => n2_x('Slide',
'Animation'),
'fade' => n2_('Fade'),
'turn' => n2_('Turn')
)
));
$rowPrevious = new FieldsetRow($container,
'widget-arrow-reveal-row-previous');
new ImageListFromFolder($rowPrevious,
'widget-arrow-previous', n2_x('Previous', 'Arrow
direction'), '', array(
'post' => 'break',
'folder' => self::getAssetsPath() .
'/previous/'
));
new Color($rowPrevious, 'widget-arrow-previous-color',
n2_('Color'), '', array(
'alpha' => true
));
new OnOff($rowPrevious, 'widget-arrow-mirror',
n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-next',
'sliderwidget-arrow-next-color'
)
));
new ImageListFromFolder($rowPrevious,
'widget-arrow-next', n2_x('Next', 'Arrow
direction'), '', array(
'post' => 'break',
'folder' => self::getAssetsPath() .
'/next/'
));
new Color($rowPrevious, 'widget-arrow-next-color',
n2_('Color'), '', array(
'alpha' => true
));
$rowTitle = new FieldsetRow($container,
'widget-arrow-reveal-row-title');
new OnOff($rowTitle, 'widget-arrow-title-show',
n2_('Slide title'), 0, array(
'relatedFieldsOn' => array(
'sliderwidget-arrow-title-font',
'sliderwidget-arrow-title-background'
)
));
new Font($rowTitle, 'widget-arrow-title-font',
n2_('Font'), '', array(
'mode' => 'link',
'preview' =>
'SmartSliderAdminWidgetArrowReveal'
));
new Color($rowTitle, 'widget-arrow-title-background',
n2_('Background color'), '', array(
'alpha' => true
));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'title-font'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'title-font',
$import->fixSection($params->get($this->key .
'title-font', '')));
}
}PK8C�[�џ���0Widget/Arrow/ArrowReveal/ArrowRevealFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowReveal;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class ArrowRevealFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->slider->exposeSlideData['thumbnail'] = true;
$this->addToPlacement($this->key .
'previous-position-', array(
$this,
'renderPrevious'
));
$this->addToPlacement($this->key .
'next-position-', array(
$this,
'renderNext'
));
}
public function renderPrevious($attributes = array()) {
$this->render();
if ($this->previousArguments) {
array_unshift($this->previousArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->previousArguments);
}
return '';
}
public function renderNext($attributes = array()) {
$this->render();
if ($this->nextArguments) {
array_unshift($this->nextArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->nextArguments);
}
return '';
}
private function render() {
if ($this->rendered) return;
$this->rendered = true;
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if ($slider->getSlidesCount() <= 1) {
return;
}
$RGBA = Color::colorToRGBA($params->get($this->key .
'background'));
$titleRGBA = Color::colorToRGBA($params->get($this->key .
'title-background'));
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId,
"arrowBackgroundRGBA" => $RGBA,
"titleBackgroundRGBA" => $titleRGBA
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-arrow-reveal.min.js', 'w-arrow-reveal');
$previousValue = basename($params->get($this->key .
'previous'));
if ($previousValue == -1) {
$previous = false;
} else {
$previous =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/previous/' . $previousValue);
}
$previousColor = $params->get($this->key .
'previous-color');
if ($params->get($this->key . 'mirror')) {
if ($previousValue == -1) {
$next = false;
} else {
$next =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/next/' . $previousValue);
}
$nextColor = $previousColor;
} else {
$nextValue = basename($params->get($this->key .
'next'));
if ($nextValue == -1) {
$next = false;
} else {
$next =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/next/' . $nextValue);
}
$nextColor = $params->get($this->key .
'next-color');
}
$fontClass = $slider->addFont($params->get($this->key .
'title-font'), 'simple');
$animation = $params->get($this->key .
'animation');
$animationClass = ' n2-ss-arrow-animation-' . $animation;
if ($previous) {
$this->previousArguments = array(
$id,
'previous',
$previous,
$fontClass,
$animationClass,
$previousColor
);
}
if ($next) {
$this->nextArguments = array(
$id,
'next',
$next,
$fontClass,
$animationClass,
$nextColor
);
}
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetArrowReveal(this,"' . $animation .
'");');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowReveal');
}
/**
* @param array $attributes
* @param $id
* @param $side
* @param $image
* @param $fontClass
* @param $animationClass
* @param $color
*
* @return string
*/
private function getHTML($attributes, $id, $side, $image, $fontClass,
$animationClass, $color) {
$displayAttributes =
$this->getDisplayAttributes($this->params, $this->key);
$ext = pathinfo($image, PATHINFO_EXTENSION);
if ($ext == 'svg' &&
ResourceTranslator::isResource($image)) {
list($color, $opacity) = Color::colorToSVG($color);
$image = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity .
'"'
),
Filesystem::readFile(ResourceTranslator::toPath($image))));
} else {
$image = ResourceTranslator::toUrl($image);
}
$label = '';
switch ($side) {
case 'previous':
$label = n2_('Previous slide');
break;
case 'next':
$label = n2_('Next slide');
break;
}
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
'class' => 'nextend-arrow n2-ow
nextend-arrow-reveal nextend-arrow-' . $side . $animationClass,
'role' => 'button',
'aria-label' => $label,
'tabindex' => '0'
)), Html::tag('div', array(
'class' => ' nextend-arrow-image
n2-ow'
), $this->params->get($this->key .
'title-show') ? Html::tag('div', array(
'class' => $fontClass . '
nextend-arrow-title n2-ow'
), '') : '') . Html::tag('div',
array(
'class' => 'nextend-arrow-arrow
n2-ow',
'style' => 'background-image: URL('
. $image . ');'
), ''));
}
}PK8C�[�(�L��$Widget/Arrow/ArrowText/ArrowText.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowText;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Arrow\AbstractWidgetArrow;
class ArrowText extends AbstractWidgetArrow {
protected $key = 'widget-arrow-';
protected $defaults = array(
'widget-arrow-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"8|*|10|*|8|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"04C018FF"}]}',
'widget-arrow-font' =>
'{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{}]}',
'widget-arrow-previous-position-mode' =>
'simple',
'widget-arrow-previous-position-area' => 6,
'widget-arrow-previous-position-offset' => 15,
'widget-arrow-next-position-mode' =>
'simple',
'widget-arrow-next-position-area' => 7,
'widget-arrow-next-position-offset' => 15
);
public function __construct($widgetGroup, $name, $defaults = array()) {
parent::__construct($widgetGroup, $name, array_merge(array(
'widget-arrow-previous-label' =>
n2_('Prev'),
'widget-arrow-next-label' =>
n2_('Next')
), $defaults));
}
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-arrow-text-row-1');
new Text($row1, 'widget-arrow-previous-label',
n2_('Previous label'));
new Text($row1, 'widget-arrow-next-label', n2_('Next
label'));
$row2 = new FieldsetRow($container,
'widget-arrow-text-row-2');
new Style($row2, 'widget-arrow-style',
n2_('Arrow'), '', array(
'mode' => 'button',
'font' => 'sliderwidget-arrow-font',
'preview' =>
'SmartSliderAdminWidgetArrowText'
));
new Font($row2, 'widget-arrow-font',
n2_('Text'), '', array(
'mode' => 'link',
'style' => 'sliderwidget-arrow-style',
'preview' =>
'SmartSliderAdminWidgetArrowText'
));
new WidgetPosition($row2,
'widget-arrow-previous-position', n2_('Previous
position'));
new WidgetPosition($row2, 'widget-arrow-next-position',
n2_('Next position'));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'font'));
$export->addVisual($params->get($this->key .
'style'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'font',
$import->fixSection($params->get($this->key . 'font',
'')));
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key . 'style',
'')));
}
}PK8C�[˫�D��,Widget/Arrow/ArrowText/ArrowTextFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowText;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class ArrowTextFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key .
'previous-position-', array(
$this,
'renderPrevious'
));
$this->addToPlacement($this->key .
'next-position-', array(
$this,
'renderNext'
));
}
public function renderPrevious($attributes = array()) {
$this->render();
if ($this->previousArguments) {
array_unshift($this->previousArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->previousArguments);
}
return '';
}
public function renderNext($attributes = array()) {
$this->render();
if ($this->nextArguments) {
array_unshift($this->nextArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->nextArguments);
}
return '';
}
private function render() {
if ($this->rendered) return;
$this->rendered = true;
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if ($slider->getSlidesCount() <= 1) {
return;
}
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-arrow-text.min.js', 'w-arrow-text');
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetArrowText(this);');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowText');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key);
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
$font = $slider->addFont($params->get($this->key .
'font'), 'hover');
$style = $slider->addStyle($params->get($this->key .
'style'), 'heading');
$this->previousArguments = array(
$id,
'previous',
$displayAttributes,
$font,
$style
);
$this->nextArguments = array(
$id,
'next',
$displayAttributes,
$font,
$style
);
}
private function getHtml($attributes, $id, $side, $displayAttributes,
$font, $styleClass) {
$label = '';
switch ($side) {
case 'previous':
$label = n2_('Previous slide');
break;
case 'next':
$label = n2_('Next slide');
break;
}
$html = Html::openTag("div",
Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
"class" => "nextend-arrow
nextend-arrow-{$side} n2-ow-all",
'tabindex' => '0',
'role' => 'button',
'aria-label' => $label
)));
$html .= Html::tag('div', array(
"class" => $styleClass . ' ' . $font .
' nextend-arrow-text',
"style" => 'display:inline-block'
), $this->params->get($this->key . $side .
'-label'));
$html .= Html::closeTag("div");
return $html;
}
}PK8C�[�
���
�
&Widget/Bar/BarVertical/BarVertical.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Bar\BarVertical;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Bar\AbstractWidgetBar;
class BarVertical extends AbstractWidgetBar {
protected $defaults = array(
'widget-bar-position-mode' => 'simple',
'widget-bar-position-area' => 6,
'widget-bar-position-offset' => 0,
'widget-bar-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"20|*|20|*|20|*|20|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""}]}',
'widget-bar-font-title' =>
'{"data":[{"color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000c7","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-bar-font-description' =>
'{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000c7","afont":"Montserrat","lineheight":"1.6","bold":0,"italic":0,"underline":0,"align":"left","extra":"margin-top:10px;"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-bar-width' => '200px',
'widget-bar-height' => '100%',
'widget-bar-animate' => 0
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-bar-vertical-row-1');
new WidgetPosition($row1, 'widget-bar-position',
n2_('Position'));
new OnOff($row1, 'widget-bar-animate',
n2_('Animate'));
new Style($row1, 'widget-bar-style',
n2_('Bar'), '', array(
'mode' => 'simple',
'font' =>
'sliderwidget-bar-font-title',
'font2' =>
'sliderwidget-bar-font-description',
'preview' =>
'SmartSliderAdminWidgetBarVertical'
));
new Font($row1, 'widget-bar-font-title',
n2_('Title'), '', array(
'mode' => 'simple',
'style' => 'sliderwidget-bar-style',
'preview' =>
'SmartSliderAdminWidgetBarVertical'
));
new Font($row1, 'widget-bar-font-description',
n2_('Description'), '', array(
'mode' => 'simple',
'style' => 'sliderwidget-bar-style',
'preview' =>
'SmartSliderAdminWidgetBarVertical'
));
$row2 = new FieldsetRow($container,
'widget-bar-vertical-row-2');
new Text($row2, 'widget-bar-width',
n2_('Width'));
new Text($row2, 'widget-bar-height',
n2_('Height'), '');
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'style'));
$export->addVisual($params->get($this->key .
'font-title'));
$export->addVisual($params->get($this->key .
'font-description'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key . 'style',
'')));
$params->set($this->key . 'font-title',
$import->fixSection($params->get($this->key .
'font-title', '')));
$params->set($this->key . 'font-description',
$import->fixSection($params->get($this->key .
'font-description', '')));
}
}PK8C�[��B�aa.Widget/Bar/BarVertical/BarVerticalFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Bar\BarVertical;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class BarVerticalFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->slider->exposeSlideData['description'] =
true;
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-bar-vertical.min.js', 'w-bar-vertical');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key, 1);
$styleClass = $slider->addStyle($params->get($this->key .
'style'), 'simple');
$fontTitle =
$slider->addFont($params->get($this->key .
'font-title'), 'simple');
$fontDescription =
$slider->addFont($params->get($this->key .
'font-description'), 'simple');
$style = 'text-align: ' . $params->get($this->key .
'align', 'left') . ';';
$width = $params->get($this->key . 'width');
if (is_numeric($width) || substr($width, -1) == '%' ||
substr($width, -2) == 'px') {
$style .= 'width:' . $width . ';';
if (substr($width, -1) == '%') {
$attributes['data-width-percent'] =
substr($width, 0, -1);
}
}
$height = $params->get($this->key . 'height');
if (is_numeric($height) || substr($height, -1) == '%' ||
substr($height, -2) == 'px') {
$style .= 'height:' . $height . ';';
if (substr($height, -1) == '%') {
$attributes['data-height-percent'] =
substr($height, 0, -1);
}
}
$parameters = array(
'area' =>
intval($params->get($this->key . 'position-area')),
'animate' =>
intval($params->get($this->key . 'animate')),
'fontTitle' => $fontTitle,
'fontDescription' => $fontDescription
);
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetBarVertical(this, ' . json_encode($parameters) .
');');
$slider->sliderType->addJSDependency('SmartSliderWidgetBarVertical');
return Html::tag("div",
Html::mergeAttributes($attributes, $displayAttributes, array(
"class" => "nextend-bar nextend-bar-vertical
n2-ss-widget-hidden n2-ow-all",
"style" => $style
)), Html::tag("div", array(
"class" => $styleClass
), Html::tag("div", array(), '')));
}
protected function translateArea($area) {
if ($area == 5) {
return 'left';
} else if ($area == 8) {
return 'right';
}
return parent::translateArea($area);
}
}PK8C�[��>l-Widget/Bullet/BulletNumbers/BulletNumbers.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Bullet\BulletNumbers;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBullet;
class BulletNumbers extends AbstractBullet {
protected $defaults = array(
'widget-bullet-position-mode' =>
'simple',
'widget-bullet-position-area' => 10,
'widget-bullet-position-offset' => 5,
'widget-bullet-action' =>
'click',
'widget-bullet-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"5|*|9|*|5|*|9|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":"min-width:
10px;\nmargin:
4px;"},{"backgroundcolor":"5F39C2FF","padding":"5|*|9|*|5|*|9|*|px"}]}',
'widget-bullet-font' =>
'{"data":[{"color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.2","bold":0,"italic":0,"underline":0,"align":"center","extra":""},{"color":"ffffffff"}]}',
'widget-bullet-bar' => '',
'widget-bullet-align' =>
'center',
'widget-bullet-orientation' =>
'auto',
'widget-bullet-bar-full-size' => 0,
'widget-bullet-overlay' => 0,
'widget-bullet-thumbnail-show-image' => 0,
'widget-bullet-thumbnail-width' => 60,
'widget-bullet-thumbnail-style' =>
'{"data":[{"backgroundcolor":"00000080","padding":"3|*|3|*|3|*|3|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":"margin:
5px;"}]}',
'widget-bullet-thumbnail-side' =>
'before'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-bullet-number-row-1');
new WidgetPosition($row1, 'widget-bullet-position',
n2_('Position'));
new Select($row1, 'widget-bullet-action',
n2_('Action'), '', array(
'options' => array(
'click' => n2_('Click'),
'mouseenter' => n2_('Hover')
)
));
$row2 = new FieldsetRow($container,
'widget-bullet-number-row-2');
new Style($row2, 'widget-bullet-style',
n2_('Dot'), '', array(
'mode' => 'dot',
'font' => 'sliderwidget-bullet-font',
'style2' => 'sliderwidget-bullet-bar',
'preview' =>
'SmartSliderAdminWidgetBulletNumbers'
));
new Font($row2, 'widget-bullet-font',
n2_('Text'), '', array(
'mode' => 'dot',
'style' =>
'sliderwidget-bullet-style',
'style2' => 'sliderwidget-bullet-bar',
'preview' =>
'SmartSliderAdminWidgetBulletNumbers'
));
new Style($row2, 'widget-bullet-bar',
n2_('Bar'), '', array(
'mode' => 'simple',
'font' => 'sliderwidget-bullet-font',
'style2' =>
'sliderwidget-bullet-style',
'preview' =>
'SmartSliderAdminWidgetBulletNumbers'
));
new OnOff($row2, 'widget-bullet-bar-full-size',
n2_('Bar full size'), '');
new Select($row2, 'widget-bullet-align',
n2_('Align'), '', array(
'options' => array(
'left' => n2_('Left'),
'center' => n2_('Center'),
'right' => n2_('Right')
)
));
new Select($row2, 'widget-bullet-orientation',
n2_('Orientation'), '', array(
'options' => array(
'auto' => n2_('Auto'),
'horizontal' => n2_('Horizontal'),
'vertical' => n2_('Vertical')
)
));
new OnOff($row2, 'widget-bullet-overlay',
n2_('Overlay'), '');
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'style'));
$export->addVisual($params->get($this->key .
'bar'));
$export->addVisual($params->get($this->key .
'font'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key .
'style')));
$params->set($this->key . 'bar',
$import->fixSection($params->get($this->key . 'bar')));
$params->set($this->key . 'font',
$import->fixSection($params->get($this->key . 'font')));
}
}PK8C�[<��
�
5Widget/Bullet/BulletNumbers/BulletNumbersFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Bullet\BulletNumbers;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBulletFrontend;
class BulletNumbersFrontend extends AbstractBulletFrontend {
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if ($slider->getSlidesCount() <= 1) {
return '';
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup($this->getCommonAssetsPath() .
'/dist/w-bullet.min.js', 'w-bullet');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key, 1);
$bulletStyle = $slider->addStyle($params->get($this->key .
'style'), 'dot');
$barStyle = $slider->addStyle($params->get($this->key .
'bar'), 'simple');
$bulletFont = $slider->addFont($params->get($this->key .
'font'), 'dot');
$orientation =
$this->getOrientationByPosition($params->get($this->key .
'position-mode'), $params->get($this->key .
'position-area'), $params->get($this->key .
'orientation'), 'horizontal');
$parameters = array(
'overlay' => ($params->get($this->key .
'position-mode') || $params->get($this->key .
'overlay')) ? 1 : 0,
'area' =>
intval($params->get($this->key . 'position-area')),
'dotClasses' => $bulletStyle . $bulletFont,
'mode' => 'numeric',
'action' => $params->get($this->key .
'action')
);
if ($params->get($this->key .
'thumbnail-show-image')) {
$parameters['thumbnail'] = 1;
$parameters['thumbnailWidth'] =
intval($params->get($this->key . 'thumbnail-width'));
$parameters['thumbnailHeight'] =
intval($params->get($this->key . 'thumbnail-height'));
$parameters['thumbnailStyle'] =
$slider->addStyle($params->get($this->key .
'thumbnail-style'), 'simple', '');
$side = $params->get($this->key
. 'thumbnail-side', 'before');
if ($side == 'before') {
if ($orientation == 'vertical') {
$position = 'left';
} else {
$position = 'top';
}
} else {
if ($orientation == 'vertical') {
$position = 'right';
} else {
$position = 'bottom';
}
}
$parameters['thumbnailPosition'] = $position;
}
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetBulletTransition(this, ' .
json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetBulletTransition');
$fullSize = intval($params->get($this->key .
'bar-full-size'));
return Html::tag("div",
Html::mergeAttributes($attributes, $displayAttributes, array(
"class" => 'n2-ss-control-bullet n2-ow-all
n2-ss-control-bullet-' . $orientation . ($fullSize ? '
n2-ss-control-bullet-fullsize' : '')
)), Html::tag("div", array(
"class" => $barStyle . " nextend-bullet-bar
n2-bar-justify-content-" . $params->get($this->key .
'align')
), '<div class="n2-bullet ' . $bulletStyle .
$bulletFont . '"
style="visibility:hidden;"> </div>'));
}
}PK8C�[y9���'Widget/Bullet/BulletText/BulletText.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Bullet\BulletText;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBullet;
class BulletText extends AbstractBullet {
protected $defaults = array(
'widget-bullet-position-mode' =>
'simple',
'widget-bullet-position-area' => 10,
'widget-bullet-position-offset' => 5,
'widget-bullet-action' =>
'click',
'widget-bullet-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"5|*|15|*|5|*|15|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"30","extra":"margin:
4px;"},{"backgroundcolor":"04C018FF"}]}',
'widget-bullet-font' =>
'{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{"color":"ffffffff"}]}',
'widget-bullet-bar' => '',
'widget-bullet-align' =>
'center',
'widget-bullet-orientation' =>
'auto',
'widget-bullet-bar-full-size' => 0,
'widget-bullet-overlay' => 0,
'widget-bullet-thumbnail-show-image' => 0,
'widget-bullet-thumbnail-width' => 60,
'widget-bullet-thumbnail-style' =>
'{"data":[{"backgroundcolor":"00000080","padding":"3|*|3|*|3|*|3|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":"margin:
5px;"}]}',
'widget-bullet-thumbnail-side' =>
'before'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-bullet-text-row-1');
new WidgetPosition($row1, 'widget-bullet-position',
n2_('Position'));
new Select($row1, 'widget-bullet-action',
n2_('Action'), '', array(
'options' => array(
'click' => n2_('Click'),
'mouseenter' => n2_('Hover')
)
));
$row2 = new FieldsetRow($container,
'widget-bullet-text-row-2');
new Style($row2, 'widget-bullet-style',
n2_('Dot'), '', array(
'mode' => 'dot',
'font' => 'sliderwidget-bullet-font',
'style2' => 'sliderwidget-bullet-bar',
'preview' =>
'SmartSliderAdminWidgetBulletText'
));
new Font($row2, 'widget-bullet-font',
n2_('Text'), '', array(
'mode' => 'dot',
'style' =>
'sliderwidget-bullet-style',
'style2' => 'sliderwidget-bullet-bar',
'preview' =>
'SmartSliderAdminWidgetBulletText'
));
new Style($row2, 'widget-bullet-bar',
n2_('Bar'), '', array(
'mode' => 'simple',
'font' => 'sliderwidget-bullet-font',
'style2' =>
'sliderwidget-bullet-style',
'preview' =>
'SmartSliderAdminWidgetBulletText'
));
new OnOff($row2, 'widget-bullet-bar-full-size',
n2_('Bar full size'), '');
new Select($row2, 'widget-bullet-align',
n2_('Align'), '', array(
'options' => array(
'left' => n2_('Left'),
'center' => n2_('Center'),
'right' => n2_('Right')
)
));
new Select($row2, 'widget-bullet-orientation',
n2_('Orientation'), '', array(
'options' => array(
'auto' => n2_('Auto'),
'horizontal' => n2_('Horizontal'),
'vertical' => n2_('Vertical')
)
));
new OnOff($row2, 'widget-bullet-overlay',
n2_('Overlay'), '');
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'style'));
$export->addVisual($params->get($this->key .
'bar'));
$export->addVisual($params->get($this->key .
'font'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key .
'style')));
$params->set($this->key . 'bar',
$import->fixSection($params->get($this->key . 'bar')));
$params->set($this->key . 'font',
$import->fixSection($params->get($this->key . 'font')));
}
}PK8C�[;���
�
/Widget/Bullet/BulletText/BulletTextFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Bullet\BulletText;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBulletFrontend;
class BulletTextFrontend extends AbstractBulletFrontend {
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if ($slider->getSlidesCount() <= 1) {
return '';
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup($this->getCommonAssetsPath() .
'/dist/w-bullet.min.js', 'w-bullet');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key, 1);
$bulletStyle = $slider->addStyle($params->get($this->key .
'style'), 'dot');
$barStyle = $slider->addStyle($params->get($this->key .
'bar'), 'simple');
$bulletFont = $slider->addFont($params->get($this->key .
'font'), 'dot');
$orientation =
$this->getOrientationByPosition($params->get($this->key .
'position-mode'), $params->get($this->key .
'position-area'), $params->get($this->key .
'orientation'), 'horizontal');
$parameters = array(
'overlay' => ($params->get($this->key .
'position-mode') != 'simple' ||
$params->get($this->key . 'overlay') || $orientation ==
'vertical') ? 1 : 0,
'area' =>
intval($params->get($this->key . 'position-area')),
'dotClasses' => $bulletStyle . $bulletFont,
'mode' => 'title',
'action' => $params->get($this->key .
'action')
);
if ($params->get($this->key .
'thumbnail-show-image')) {
$parameters['thumbnail'] = 1;
$parameters['thumbnailWidth'] =
intval($params->get($this->key . 'thumbnail-width'));
$parameters['thumbnailHeight'] =
intval($params->get($this->key . 'thumbnail-height'));
$parameters['thumbnailStyle'] =
$slider->addStyle($params->get($this->key .
'thumbnail-style'), 'simple', '');
$side = $params->get($this->key
. 'thumbnail-side');
if ($side == 'before') {
if ($orientation == 'vertical') {
$position = 'left';
} else {
$position = 'top';
}
} else {
if ($orientation == 'vertical') {
$position = 'right';
} else {
$position = 'bottom';
}
}
$parameters['thumbnailPosition'] = $position;
}
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetBulletTransition(this, ' .
json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetBulletTransition');
$fullSize = intval($params->get($this->key .
'bar-full-size'));
return Html::tag("div",
Html::mergeAttributes($attributes, $displayAttributes, array(
"class" => 'n2-ss-control-bullet n2-ow-all
n2-ss-control-bullet-' . $orientation . ($fullSize ? '
n2-ss-control-bullet-fullsize' : '')
)), Html::tag("div", array(
"class" => $barStyle . " nextend-bullet-bar
n2-bar-justify-content-" . $params->get($this->key .
'align')
), '<div class="n2-bullet ' . $bulletStyle .
$bulletFont . '"
style="visibility:hidden;"> </div>'));
}
}PK8C�[�L���5Widget/FullScreen/FullScreenImage/FullScreenImage.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\FullScreen\FullScreenImage;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\AbstractWidget;
class FullScreenImage extends AbstractWidget {
protected $key = 'widget-fullscreen-';
protected $defaults = array(
'widget-fullscreen-desktop-image-width' => 16,
'widget-fullscreen-tablet-image-width' => 16,
'widget-fullscreen-mobile-image-width' => 8,
'widget-fullscreen-tonormal-image' =>
'',
'widget-fullscreen-tonormal-color' =>
'ffffffcc',
'widget-fullscreen-tonormal' =>
'$ss$/plugins/widgetfullscreen/image/image/tonormal/full1.svg',
'widget-fullscreen-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"10|*|10|*|10|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"000000ab"}]}',
'widget-fullscreen-position-mode' =>
'simple',
'widget-fullscreen-position-area' => 4,
'widget-fullscreen-position-offset' => 15,
'widget-fullscreen-mirror' => 1,
'widget-fullscreen-tofull-image' =>
'',
'widget-fullscreen-tofull-color' =>
'ffffffcc',
'widget-fullscreen-tofull' =>
'$ss$/plugins/widgetfullscreen/image/image/tofull/full1.svg'
);
public function renderFields($container) {
$rowIcon = new FieldsetRow($container,
'widget-bullet-transition-row-icon');
$fieldToNormal = new ImageListFromFolder($rowIcon,
'widget-fullscreen-tonormal', n2_('To normal'),
'', array(
'folder' => self::getAssetsPath() .
'/tonormal/'
));
new FieldImage($fieldToNormal,
'widget-fullscreen-tonormal-image', n2_('Custom'),
'', array(
'relatedFieldsOff' => array(
'sliderwidget-fullscreen-tonormal-color'
)
));
new Color($rowIcon, 'widget-fullscreen-tonormal-color',
n2_('Color'), '', array(
'alpha' => true
));
new OnOff($rowIcon, 'widget-fullscreen-mirror',
n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-fullscreen-tofull',
'sliderwidget-fullscreen-tofull-color'
)
));
$fieldToFull = new ImageListFromFolder($rowIcon,
'widget-fullscreen-tofull', n2_('To fullscreen'),
'', array(
'folder' => self::getAssetsPath() .
'/tofull/'
));
new FieldImage($fieldToFull,
'widget-fullscreen-tofull-image', n2_('Custom'),
'', array(
'relatedFieldsOff' => array(
'sliderwidget-fullscreen-tofull-color-grouping'
)
));
$groupingPauseColor = new Grouping($rowIcon,
'widget-fullscreen-tofull-color-grouping');
new Color($groupingPauseColor,
'widget-fullscreen-tofull-color', n2_('Color'),
'', array(
'alpha' => true
));
$row3 = new FieldsetRow($container,
'widget-fullscreen-image-row-3');
new Style($row3, 'widget-fullscreen-style',
n2_('Fullscreen'), '', array(
'mode' => 'button',
'preview' =>
'SmartSliderAdminWidgetFullScreenImage'
));
new WidgetPosition($row3, 'widget-fullscreen-position',
n2_('Position'));
$row4 = new FieldsetRow($container,
'widget-fullscreen-image-row-4');
new Number($row4,
'widget-fullscreen-desktop-image-width', n2_('Image width -
Desktop'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Number($row4, 'widget-fullscreen-tablet-image-width',
n2_('Image width - Tablet'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Number($row4, 'widget-fullscreen-mobile-image-width',
n2_('Image width - Mobile'), '', array(
'wide' => 4,
'unit' => 'px'
));
}
public function prepareExport($export, $params) {
$export->addImage($params->get($this->key .
'tonormal-image', ''));
$export->addImage($params->get($this->key .
'tofull-image', ''));
$export->addVisual($params->get($this->key .
'style'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'tonormal-image',
$import->fixImage($params->get($this->key .
'tonormal-image', '')));
$params->set($this->key . 'tofull-image',
$import->fixImage($params->get($this->key .
'tofull-image', '')));
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key . 'style',
'')));
}
}PK8C�[�(�o=Widget/FullScreen/FullScreenImage/FullScreenImageFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\FullScreen\FullScreenImage;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Cast;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class FullScreenImageFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
$html = '';
$sizeAttributes = array();
$toNormalImage = $params->get($this->key .
'tonormal-image');
$toNormalValue = $params->get($this->key .
'tonormal');
$toNormalColor = $params->get($this->key .
'tonormal-color');
if (empty($toNormalImage)) {
if ($toNormalValue == -1) {
$toNormal = null;
} else {
$toNormal =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/tonormal/' . basename($toNormalValue));
}
} else {
$toNormal = $toNormalImage;
}
if ($params->get($this->key . 'mirror')) {
$toFullColor = $toNormalColor;
if (!empty($toNormalImage)) {
$toFull = $toNormalImage;
} else {
$toFull =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/tofull/' . basename($toNormalValue));
}
} else {
$toFull = $params->get($this->key .
'tofull-image');
$toFullColor = $params->get($this->key .
'tofull-color');
if (empty($toFull)) {
$toFullValue = $params->get($this->key .
'tofull');
if ($toFull == -1) {
$toFull = null;
} else {
$toFull =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/tofull/' . basename($toFullValue));
}
}
}
if ($toNormal && $toFull) {
$desktopWidth =
$params->get('widget-fullscreen-desktop-image-width');
$tabletWidth =
$params->get('widget-fullscreen-tablet-image-width');
$mobileWidth =
$params->get('widget-fullscreen-mobile-image-width');
$slider->addDeviceCSS('all', '#' . $id .
' .n2-full-screen-widget img{width: ' . $desktopWidth .
'px}');
if ($tabletWidth != $desktopWidth) {
$slider->addDeviceCSS('tabletportrait',
'div#' . $id . ' .n2-full-screen-widget img{width: ' .
$tabletWidth . 'px}');
$slider->addDeviceCSS('tabletlandscape',
'div#' . $id . ' .n2-full-screen-widget img{width: ' .
$tabletWidth . 'px}');
}
if ($mobileWidth != $desktopWidth) {
$slider->addDeviceCSS('mobileportrait',
'div#' . $id . ' .n2-full-screen-widget img{width: ' .
$mobileWidth . 'px}');
$slider->addDeviceCSS('mobilelandscape',
'div#' . $id . ' .n2-full-screen-widget img{width: ' .
$mobileWidth . 'px}');
}
FastImageSize::initAttributes($toNormal, $sizeAttributes);
$ext = pathinfo($toNormal, PATHINFO_EXTENSION);
if ($ext == 'svg' &&
ResourceTranslator::isResource($toNormal)) {
list($color, $opacity) = Color::colorToSVG($toNormalColor);
$toNormal = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color .
'"',
'opacity="' . $opacity .
'"'
),
Filesystem::readFile(ResourceTranslator::toPath($toNormal))));
} else {
$toNormal = ResourceTranslator::toUrl($toNormal);
}
$ext = pathinfo($toFull, PATHINFO_EXTENSION);
if ($ext == 'svg' &&
ResourceTranslator::isResource($toFull)) {
list($color, $opacity) = Color::colorToSVG($toFullColor);
$toFull = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color .
'"',
'opacity="' . $opacity .
'"'
),
Filesystem::readFile(ResourceTranslator::toPath($toFull))));
} else {
$toFull = ResourceTranslator::toUrl($toFull);
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-fullscreen.min.js', 'w-fullscreen');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key);
$styleClass =
$slider->addStyle($params->get($this->key . 'style'),
'heading');
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetFullScreenImage(this, ' .
Cast::floatToString($params->get($this->key .
'responsive-desktop')) . ', ' .
Cast::floatToString($params->get($this->key .
'responsive-tablet')) . ', ' .
Cast::floatToString($params->get($this->key .
'responsive-mobile')) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetFullScreenImage');
$html = Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'class' => $styleClass .
'n2-full-screen-widget n2-ow-all n2-full-screen-widget-image
nextend-fullscreen'
)), Html::image($toNormal, n2_('Exit full screen'),
$sizeAttributes + Html::addExcludeLazyLoadAttributes(array(
'class' =>
'n2-full-screen-widget-to-normal',
'role' => 'button',
'tabindex' => '0'
))) . Html::image($toFull, n2_('Enter Full
screen'), $sizeAttributes + Html::addExcludeLazyLoadAttributes(array(
'class' =>
'n2-full-screen-widget-to-full',
'role' => 'button',
'tabindex' => '0'
))));
}
return $html;
}
}PK8C�[�Ch�s
s
Widget/Group/FullScreen.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Group\AbstractWidgetGroup;
class FullScreen extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 9;
public function __construct() {
parent::__construct();
$this->makePluggable('SliderWidgetFullScreen');
}
public function getName() {
return 'fullscreen';
}
public function getLabel() {
return n2_('Fullscreen');
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
/**
* Used for field removal: /controls/widget-fullscreen
*/
$table = new ContainerTable($container,
'widget-fullscreen', n2_('Fullscreen'));
new OnOff($table->getFieldsetLabel(),
'widget-fullscreen-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-fullscreen'
)
));
$fullscreenWarning =
$table->createRow('widget-fullscreen-warning');
$warningText = sprintf(n2_('%1$s %2$s does not support
the full screen API %3$s so other elements of the page may overlap the
slider in Fullscreen mode. To avoid such problems, we suggest hiding the
Fullscreen control from mobile view!'), 'iPhone',
'<a
href="https://smartslider.helpscoutdocs.com/article/1859-fullscreen#safari"
target="_blank">', '</a>');
new Warning($fullscreenWarning,
'widget-fullscreen-warning-iphone', $warningText);
$row1 = $table->createRow('widget-fullscreen-1');
$url =
$form->createAjaxUrl(array("slider/renderwidgetfullscreen"));
new ControlTypePicker($row1, 'widgetfullscreen', $table,
$url, $this, 'image');
$row2 = $table->createRow('widget-fullscreen-2');
new OnOff($row2, 'widget-fullscreen-display-hover',
n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-fullscreen-display-',
$row2);
new Text($row2, 'widget-fullscreen-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1859-fullscreen#hide-on-slides'
));
}
}PK8C�[�[�ۊ�Widget/Group/Html.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Group\AbstractWidgetGroup;
class Html extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 10;
protected $showOnMobileDefault = 1;
public function __construct() {
parent::__construct();
$this->makePluggable('SliderWidgetHtml');
}
public function getName() {
return 'html';
}
public function getLabel() {
return 'HTML';
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
$table = new ContainerTable($container, 'widget-html',
'HTML');
new OnOff($table->getFieldsetLabel(),
'widget-html-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-html'
)
));
$row1 = $table->createRow('widget-html-1');
$url =
$form->createAjaxUrl(array("slider/renderwidgethtml"));
new ControlTypePicker($row1, 'widgethtml', $table, $url,
$this, 'html');
$row2 = $table->createRow('widget-html-2');
new OnOff($row2, 'widget-html-display-hover',
n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-html-display-',
$row2);
new Text($row2, 'widget-html-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1860-html#hide-on-slides'
));
}
}PK8C�[������Widget/Group/Indicator.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Group\AbstractWidgetGroup;
class Indicator extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 4;
public function __construct() {
parent::__construct();
$this->makePluggable('SliderWidgetIndicator');
}
public function getName() {
return 'indicator';
}
public function getLabel() {
return n2_('Indicator');
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
$table = new ContainerTable($container,
'widget-indicator', n2_('Indicator'));
new OnOff($table->getFieldsetLabel(),
'widget-indicator-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-indicator'
)
));
$row1 = $table->createRow('widget-indicator-1');
$url =
$form->createAjaxUrl(array("slider/renderwidgetindicator"));
new ControlTypePicker($row1, 'widgetindicator', $table,
$url, $this);
$row2 = $table->createRow('widget-indicator-2');
new OnOff($row2, 'widget-indicator-display-hover',
n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-indicator-display-',
$row2);
new Text($row2, 'widget-indicator-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1807-slider-settings-autoplay#hide-on-slides-35'
));
}
}PK8C�[_u�ZZ!Widget/Html/HtmlCode/HtmlCode.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Html\HtmlCode;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\AbstractWidget;
class HtmlCode extends AbstractWidget {
protected $key = 'widget-html-';
protected $defaults = array(
'widget-html-position-mode' => 'simple',
'widget-html-position-area' => 2,
'widget-html-code' => '',
);
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'widget-html-row-1');
new WidgetPosition($row1, 'widget-html-position',
n2_('Position'));
new Textarea($row1, 'widget-html-code', 'HTML',
'', array(
'height' => 300,
'width' => 600
));
}
}PK8C�[��6� )Widget/Html/HtmlCode/HtmlCodeFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Html\HtmlCode;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class HtmlCodeFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$params = $this->params;
$slider->features->addInitCallback("new
_N2.SmartSliderWidget(this, 'html',
'.n2-widget-html');");
$slider->sliderType->addJSDependency('SmartSliderWidget');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key, 1);
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
"class" => "n2-widget-html"
)), $params->get($this->key . 'code'));
}
}PK8C�[4��k��,Widget/Indicator/AbstractWidgetIndicator.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator;
use Nextend\SmartSlider3\Widget\AbstractWidget;
abstract class AbstractWidgetIndicator extends AbstractWidget {
protected $key = 'widget-indicator-';
}PK8C�[X�����.Widget/Indicator/IndicatorPie/IndicatorPie.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorPie;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3Pro\Widget\Indicator\AbstractWidgetIndicator;
class IndicatorPie extends AbstractWidgetIndicator {
protected $defaults = array(
'widget-indicator-position-mode' =>
'simple',
'widget-indicator-position-area' => 4,
'widget-indicator-position-offset' => 15,
'widget-indicator-size' => 25,
'widget-indicator-thickness' => 30,
'widget-indicator-track' =>
'000000ab',
'widget-indicator-bar' =>
'ffffffff'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-indicator-pie-1');
new WidgetPosition($row1, 'widget-indicator-position',
n2_('Position'));
new Number($row1, 'widget-indicator-size',
n2_('Size'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Number($row1, 'widget-indicator-thickness',
n2_('Line thickness'), '', array(
'wide' => 3,
'unit' => '%'
));
new Color($row1, 'widget-indicator-track',
n2_('Track color'), '', array(
'alpha' => true
));
new Color($row1, 'widget-indicator-bar', n2_('Bar
color'), '', array(
'alpha' => true
));
new Style($row1, 'widget-indicator-style',
n2_('Style'), '', array(
'mode' => 'button',
'preview' =>
'SmartSliderAdminWidgetIndicatorPie'
));
}
}PK8C�[<�!``6Widget/Indicator/IndicatorPie/IndicatorPieFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorPie;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class IndicatorPieFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if (!$params->get('autoplay', 0)) {
return '';
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-indicator-pie.min.js', 'w-indicator-pie');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key);
$track = Color::colorToSVG($params->get($this->key .
'track'));
$bar = Color::colorToSVG($params->get($this->key .
'bar'));
$parameters = array(
'backstroke' => $track[0],
'backstrokeopacity' => $track[1],
'frontstroke' => $bar[0],
'frontstrokeopacity' => $bar[1],
'size' =>
intval($params->get($this->key . 'size')),
'thickness' =>
$params->get($this->key . 'thickness') / 100
);
$styleClass = $slider->addStyle($params->get($this->key .
'style'), 'heading');
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetIndicatorPie(this, ' . json_encode($parameters) .
');');
$slider->sliderType->addJSDependency('SmartSliderWidgetIndicatorPie');
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'class' => $styleClass . " nextend-indicator
nextend-indicator-pie n2-ow-all"
)));
}
}PK8C�[si�4Widget/Indicator/IndicatorStripe/IndicatorStripe.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorStripe;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3Pro\Widget\Indicator\AbstractWidgetIndicator;
class IndicatorStripe extends AbstractWidgetIndicator {
protected $defaults = array(
'widget-indicator-position-mode' =>
'simple',
'widget-indicator-position-area' => 9,
'widget-indicator-width' => '100%',
'widget-indicator-height' => 6,
'widget-indicator-track' =>
'000000ab',
'widget-indicator-bar' =>
'1D81F9FF'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-indicator-stripe-1');
new WidgetPosition($row1, 'widget-indicator-position',
n2_('Position'));
new Text($row1, 'widget-indicator-width',
n2_('Width'), '', array(
'style' => 'width:30px;',
'unit' => 'px'
));
new Number($row1, 'widget-indicator-height',
n2_('Height'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Color($row1, 'widget-indicator-track',
n2_('Track color'), '', array(
'alpha' => true
));
new Color($row1, 'widget-indicator-bar', n2_('Bar
color'), '', array(
'alpha' => true
));
}
}PK8C�[��� <Widget/Indicator/IndicatorStripe/IndicatorStripeFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorStripe;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class IndicatorStripeFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if (!$params->get('autoplay', 0)) {
return '';
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-indicator-stripe.min.js',
'w-indicator-stripe');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key);
$trackRGBA = Color::colorToRGBA($params->get($this->key .
'track'));
$barRGBA = Color::colorToRGBA($params->get($this->key .
'bar'));
$style = '';
$width = $params->get($this->key . 'width');
if (is_numeric($width) || substr($width, -1) == '%' ||
substr($width, -2) == 'px') {
$style .= 'width:' . $width . ';';
}
$height = intval($params->get($this->key .
'height'));
$parameters = array(
'area' => intval($params->get($this->key .
'position-area'))
);
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetIndicatorStripe(this, ' .
json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetIndicatorStripe');
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'class' => "nextend-indicator
nextend-indicator-stripe n2-ow-all",
'style' => 'background-color:' .
$trackRGBA . ';' . $style
)), Html::tag('div', array(
'class' => "nextend-indicator-track",
'style' => 'height: ' . $height .
'px;background-color:' . $barRGBA . ';'
), ''));
}
}PK8C�[�D#*�+�+Widget/WidgetLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3Pro\Widget;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Widget\Arrow\ArrowImage\ArrowImage;
use Nextend\SmartSlider3\Widget\Autoplay\AutoplayImage\AutoplayImage;
use Nextend\SmartSlider3\Widget\Bullet\BulletTransition\BulletTransition;
use Nextend\SmartSlider3\Widget\Group\AbstractWidgetGroup;
use Nextend\SmartSlider3\Widget\Thumbnail\Basic\ThumbnailBasic;
use Nextend\SmartSlider3Pro\Widget\Arrow\ArrowGrow\ArrowGrow;
use Nextend\SmartSlider3Pro\Widget\Arrow\ArrowImageBar\ArrowImageBar;
use Nextend\SmartSlider3Pro\Widget\Arrow\ArrowReveal\ArrowReveal;
use Nextend\SmartSlider3Pro\Widget\Arrow\ArrowText\ArrowText;
use Nextend\SmartSlider3Pro\Widget\Bar\BarVertical\BarVertical;
use Nextend\SmartSlider3Pro\Widget\Bullet\BulletNumbers\BulletNumbers;
use Nextend\SmartSlider3Pro\Widget\Bullet\BulletText\BulletText;
use
Nextend\SmartSlider3Pro\Widget\FullScreen\FullScreenImage\FullScreenImage;
use Nextend\SmartSlider3Pro\Widget\Group\FullScreen;
use Nextend\SmartSlider3Pro\Widget\Group\Html;
use Nextend\SmartSlider3Pro\Widget\Group\Indicator;
use Nextend\SmartSlider3Pro\Widget\Html\HtmlCode\HtmlCode;
use Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorPie\IndicatorPie;
use
Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorStripe\IndicatorStripe;
class WidgetLoader {
public function __construct() {
Plugin::addAction('PluggableFactorySliderWidgetGroup',
array(
$this,
'sliderWidgetGroup'
));
Plugin::addAction('PluggableFactorySliderWidgetArrow',
array(
$this,
'sliderWidgetArrow'
));
Plugin::addAction('PluggableFactorySliderWidgetBullet',
array(
$this,
'sliderWidgetBullet'
));
Plugin::addAction('PluggableFactorySliderWidgetAutoplay',
array(
$this,
'sliderWidgetAutoplay'
));
Plugin::addAction('PluggableFactorySliderWidgetBar',
array(
$this,
'sliderWidgetBar'
));
Plugin::addAction('PluggableFactorySliderWidgetIndicator', array(
$this,
'sliderWidgetIndicator'
));
Plugin::addAction('PluggableFactorySliderWidgetHtml',
array(
$this,
'sliderWidgetHtml'
));
Plugin::addAction('PluggableFactorySliderWidgetFullScreen',
array(
$this,
'sliderWidgetFullScreen'
));
Plugin::addAction('PluggableFactorySliderWidgetThumbnail', array(
$this,
'sliderWidgetThumbnail'
));
}
public function sliderWidgetGroup() {
new FullScreen();
new Indicator();
new Html();
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetArrow($group) {
new ArrowImage($group, 'image');
new ArrowImage($group, 'imageBigRectangle', array(
'widget-arrow-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"20|*|20|*|20|*|20|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""},{"backgroundcolor":"5F39C2FF"}]}',
'widget-arrow-animation' =>
'horizontal',
'widget-arrow-previous-position-offset' => 0,
'widget-arrow-next-position-offset' => 0,
));
new ArrowImage($group, 'imageVertical', array(
'widget-arrow-previous' =>
'$ss$/plugins/widgetarrow/image/image/previous/simple-vertical.svg',
'widget-arrow-next' =>
'$ss$/plugins/widgetarrow/image/image/next/simple-vertical.svg',
'widget-arrow-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"10|*|10|*|10|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"04C018FF"}]}',
'widget-arrow-previous-position-area' => 3,
'widget-arrow-next-position-area' => 10,
));
new ArrowGrow($group, 'grow');
new ArrowImageBar($group, 'imagebar');
new ArrowReveal($group, 'reveal');
new ArrowText($group, 'text');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetAutoplay($group) {
new AutoplayImage($group, 'imageBlue', array(
'widget-autoplay-position-area' => 11,
'widget-autoplay-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"10|*|10|*|10|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"04C018FF"}]}'
));
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetHtml($group) {
new HtmlCode($group, 'html');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetFullScreen($group) {
new FullScreenImage($group, 'image');
new FullScreenImage($group, 'imageBlue', array(
'widget-fullscreen-tonormal' =>
'$ss$/plugins/widgetfullscreen/image/image/tonormal/full2.svg',
'widget-fullscreen-tofull' =>
'$ss$/plugins/widgetfullscreen/image/image/tofull/full2.svg',
'widget-fullscreen-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"10|*|10|*|10|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"04C018FF"}]}'
));
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetBullet($group) {
new BulletTransition($group, 'transitionBorder', array(
'widget-bullet-style' =>
'{"data":[{"backgroundcolor":"00000000","padding":"5|*|5|*|5|*|5|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"2|*|solid|*|000000c2","borderradius":"50","extra":"margin:
4px;"},{"backgroundcolor":"000000ba","border":"2|*|solid|*|ffffff00"}]}'
));
new BulletTransition($group, 'transitionRectangle',
array(
'widget-bullet-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"8|*|8|*|8|*|8|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":"margin:
4px;"},{"backgroundcolor":"04C018FF"}]}'
));
new BulletTransition($group, 'transitionBar', array(
'widget-bullet-style' =>
'{"data":[{"backgroundcolor":"00000000","padding":"5|*|5|*|5|*|5|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"2|*|solid|*|000000c2","borderradius":"50","extra":"margin:
4px
3px;"},{"backgroundcolor":"000000ba","border":"2|*|solid|*|ffffff00"}]}',
'widget-bullet-bar' =>
'{"data":[{"backgroundcolor":"ffffff80","padding":"2|*|5|*|2|*|5|*|px","boxshadow":"0|*|1|*|5|*|0|*|00000033","border":"0|*|solid|*|000000ff","borderradius":"50","extra":""}]}',
));
new BulletNumbers($group, 'numbers');
new BulletText($group, 'text');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetIndicator($group) {
new IndicatorPie($group, 'pie');
new IndicatorPie($group, 'pieFull', array(
'widget-indicator-thickness' => 100,
'widget-indicator-track' =>
'ffffff00',
'widget-indicator-bar' =>
'ffffff80',
));
new IndicatorStripe($group, 'stripe');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetBar($group) {
new BarVertical($group, 'vertical');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetThumbnail($group) {
new ThumbnailBasic($group, 'defaultHorizontal', array(
'widget-thumbnail-style-bar' =>
'{"data":[{"backgroundcolor":"242424ff","padding":"0|*|0|*|0|*|0|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""}]}',
'widget-thumbnail-style-slides' =>
'{"data":[{"backgroundcolor":"00000000","padding":"0|*|0|*|0|*|0|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|ffffff00","borderradius":"0","opacity":"40","extra":"transition:
all 0.4s;\nbackground-size:
cover;"},{"border":"0|*|solid|*|ffffffcc","opacity":"100","extra":""}]}',
'widget-thumbnail-title-style' =>
'{"data":[{"backgroundcolor":"00000000","padding":"3|*|10|*|3|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":"bottom:
0;\nleft: 0;"}]}',
'widget-thumbnail-title' => 1,
'widget-thumbnail-title-font' =>
'{"data":[{"color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ab","afont":"Montserrat","lineheight":"1.4","bold":0,"italic":0,"underline":0,"align":"left"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-thumbnail-description' => 1,
'widget-thumbnail-caption-placement' =>
'after'
));
new ThumbnailBasic($group, 'defaultHorizontalGallery',
array(
'widget-thumbnail-title' => 0,
'widget-thumbnail-group' => 2
));
new ThumbnailBasic($group, 'defaultVertical', array(
'widget-thumbnail-position-area' => 5,
'widget-thumbnail-title' => 1,
));
new ThumbnailBasic($group, 'defaultVerticalText', array(
'widget-thumbnail-position-area' => 5,
'widget-thumbnail-style-slides' =>
'{"data":[{"backgroundcolor":"00000000","padding":"0|*|0|*|0|*|0|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|ffffff00","borderradius":"0","opacity":"60","extra":"background-size:
cover;\nmargin: 10px
0;\n"},{"backgroundcolor":"00000000","opacity":"100","extra":"background-size:
cover;\nmargin: 10px 0;\n"}]}',
'widget-thumbnail-title-style' =>
'{"data":[{"backgroundcolor":"00000000","padding":"3|*|10|*|3|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":"bottom:
0;\nleft: 0;"}]}',
'widget-thumbnail-title' => 1,
'widget-thumbnail-title-font' =>
'{"data":[{"color":"ffffffe6","size":"14||px","tshadow":"0|*|0|*|0|*|000000ab","afont":"Montserrat","lineheight":"1.8","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-thumbnail-description' => 1,
'widget-thumbnail-description-font' =>
'{"data":[{"color":"ffffff7d","size":"12||px","tshadow":"0|*|0|*|0|*|000000ab","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-thumbnail-caption-size' => 200,
'widget-thumbnail-show-image' => 0,
'widget-thumbnail-width' => 100,
'widget-thumbnail-height' => 60,
'widget-thumbnail-caption-placement' =>
'after'
));
}
}PK��[�ߣzSS0Application/Frontend/Assets/dist/litebox.min.cssnu�[���.litebox-overlay,.litebox-overlay>*{box-sizing:border-box}.litebox-overlay{user-select:none;width:100%;height:100vh;min-width:280px;text-align:center;position:fixed;top:0;left:0;z-index:100000;opacity:0;align-items:center;justify-content:center;-webkit-touch-callout:none}@keyframes
liteboxLoader{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}.litebox-overlay
.litebox-text{width:100%;padding:15px;background:rgba(0,0,0,.5);color:#fff;font-size:12px;line-height:20px;position:absolute;bottom:0;z-index:2;opacity:0;transition:all
.2s ease-in-out}.litebox-overlay .litebox-text
*{color:#fff;font-size:12px;line-height:20px}.litebox-overlay
.litebox-text.active{opacity:1}.litebox-overlay
.litebox-close{width:36px;height:36px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAMAAADW3miqAAAABGdBTUEAALGPC/xhBQAAANVQTFRF////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAA////jF9lcQAAAEZ0Uk5TCjk7xdCKoIju7ezPxiPv9ms2WJiZ6ckW+AYbnvAl9RetqzLoCZ8nKJybt7YMDZoV6wfE0fTyOonqbFf5OMj6JBnzCPEdALak5UoAAAGASURBVDjLpZTndoJAEIVNL/ausRdU7ALSiyLc93+kIEUWhJPkZH7tmfPt7rQ7GfsXlvkztJarWr3VqmtVeZ0CGTSHm3G0kQCZbwqwlNSBaQ5UaQkoghmH8lmAmoeX5xSQNaLQeILcYzRaPofJmIQMEcNpPCdzCNEIoekzRkmpj8BOb5CAJzMJMhkIAZTXwSdXkYdu+BCN17RaU1h40IaDn3ux8OUdrO7ZO8zAbVxIxsq/18XFpawzPn3XCrILbSH5HuvoUg5zGfguCVsX0qDaBHW6MqfAo0JzoT12NkmRjL3D3oUUHGySIhn7ACUBOidDke+cv45J35GBX+OxjgmBEyXwYibTC0oQKebJhz9ixXTaMvM8/Xf/Aatwa0vfa4u9AJXW4E7QYNtIHZUH6L1w6Ji0oXsJx5dNHd9MVAjmD0JwJcXE4uKZmKSct1igQ4hz1gFY407mgu7IvFRuttvNcsmRuX4vc8d6dD9cGMVFL231VGoNUdfFRq2y/t8SS7NvNfRFXoyOLJ8AAAAASUVORK5CYII=)
no-repeat
center;position:absolute;top:20px;right:20px;cursor:pointer}.litebox-overlay
.litebox-nav{display:none;width:60px;height:60px;margin-top:-30px;opacity:.5;position:absolute;top:50%;z-index:9999999;transition:all
.2s ease-in-out}.litebox-overlay
.litebox-nav:hover{opacity:.8;cursor:pointer}.litebox-overlay
.litebox-prev{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAABGdBTUEAALGPC/xhBQAAAFdQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQsLCwICAgwMDAQEBAoKCg8PDwMDAwYGBg0NDQEBAQ////AAAAlQqbogAAABB0Uk5TkFBAsMAgMODQcKBggPAQADA5dHAAAAGjSURBVEjHpdfbYoMgDAbgWBUFJa6n2Srv/5xz1npYEwgsl5Wv0oPkD3RkKW0K6+ayhdGKXgXEa5lZ3FbWZBKM7YdcfIsBzFKSH3HjoTNvWIy5C1aONFaVE1SlKBzaMrH1FTdOXM1fHGE3veCTi6rTHqONwxZ3uHaRVW+4ddHVvnFp47EtF2xcQpkXLl1SlTP23/h2vg/craFDr32M4/ikNU5Yh+ykyWt6wnXQjuON/q0BBfab2TdkAvtFX88AwrZnFgAUydYVUCVbV0G6nfb9D8tgmaXxILM07hd8dgnYPRd9T8GDTDN/EpEugGluEp0D9zhveuCwBuVC+slpBZ1N1XY6Sfjzb9VX5gQEX49bdU93u+norcL6Qj2Q87nta80v/WCa9G+78WWR4crYaulV/lTQX9h0MLfYIr5TFWt/VvFYbcmgibXNPtBEtmhzSEMYlUpqPOawGP22WwKU69XusicKP7dBMjJridVcWA+H5kp5xoTWG8ls6x9QPEPG54TyORqhJr/3WqNorupKnR/ub3NdSoey1xucdDuXPpXcGhZL6gc2d1Xj827eZAAAAABJRU5ErkJggg==)
no-repeat center;left:20px}.litebox-overlay
.litebox-next{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAAABGdBTUEAALGPC/xhBQAAAFdQTFRFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQsLCwICAgwMDAQEBAoKCg8PDwMDAwYGBg0NDQEBAQ////AAAAlQqbogAAABB0Uk5TkFBAsMAgMODQcKBggPAQADA5dHAAAAGhSURBVEjHndfbloMgDAXQqIiCEqe3sVX+/ztHrfUyDQTIY3FXtKvkBDqypNLC2KWM0ErSVwHxWaZXt5fRWQjG9kuuvkUGOynJz7jx0IU3ToyFZatAGsvKBlQlKcxtmdj6hhsbXM1/HGF3veLcRlV+xGjisMEDrm1k1TtubXS1H1yaeGzKFWubUPqNS5tU5YLpGw+Py527NXRI29c4jk+vxgkrcmW2jFYTJn/j+ziyuu7AsevfAI2Q0Qs/AToDcKz0vAYQNlkLcJ89rK7A80JY7cOs9mJO+/GuhwRsLyvuE/Bjta+EbW92oLFItwKKZGsLUC46cNYqkC774qyV0JlUa6aThD7/bqydTkCge1zP26nbTUcv9ae88rZazm2yNT85Ozfpud1UDn3z2WrtVXQquPZsOlharIjvVGLrzzIeyz0ZNLG2OQaayBatT2kIo1JJjeccFqM/dk+A4Xqzh+yJgc+tkYzMKsQqV1jnQ3MlPWNC641kpvUPKJ4h43tC+R6NUJHvvVYYNFd1pSpO9zeFKkOHsvcX5KpdSuWl6xonDqk/MvBV4/BFKYgAAAAASUVORK5CYII=)
no-repeat center;right:20px}.litebox-overlay
.litebox-container{display:flex;position:absolute;top:10%;right:10%;bottom:10%;left:10%;overflow:hidden;align-items:center;justify-content:center}.litebox-overlay
.litebox-container.litebox-scroll{overflow-y:auto}.litebox-overlay
.litebox-container.litebox-iframe-holder{overflow:hidden;-webkit-overflow-scrolling:touch;overflow-y:scroll}.litebox-overlay
.litebox-container.litebox-iframe-holder
iframe{overflow-y:hidden!important;position:absolute;left:0;top:0}.litebox-overlay
img,.litebox-overlay
iframe{display:block;max-width:100%;max-height:100%;overflow-x:hidden}.litebox-overlay
iframe{width:100%;height:100%;position:relative;z-index:999999;min-width:100%;margin:0!important}.litebox-overlay
video{width:100%;height:100%;position:relative;z-index:999999}.litebox-overlay
.litebox-inline-html{width:100%;padding:20px;background:#fff;overflow-x:hidden;line-height:normal!important;position:absolute}.litebox-overlay
.litebox-error{width:100%;height:100%;color:#fff;text-align:center;line-height:inherit}.litebox-overlay
.litebox-error
span{background:rgba(0,0,0,.9);border-radius:3px;padding:20px;color:#fff;text-shadow:1px
1px 0 #000;line-height:normal}@media only screen and
(max-width:479px){.litebox-overlay
.litebox-close{display:none}}PK��[]�
�"�"/Application/Frontend/Assets/dist/litebox.min.jsnu�[���!function(i){var
t=i;t._N2=t._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
o,n,c,a=i.document,r=(a.documentElement,i.setTimeout),l=i.clearTimeout,s=t._N2,u=(i.requestAnimationFrame,a.createElement.bind(a)),f=function(){return
u("div")},h=Object.assign,b=function(i,t){return
i.getAttribute(t)},d=function(i,t,o){i.setAttribute(t,o)},v=function(i,t){for(var
o in
t)d(i,o,t[o])},p=function(i,t,o){i.forEach((function(i){d(i,t,o)}))},x=function(i,t){return
i.dataset[t]},m=function(i,t,o){i.dataset[t]=o},g=function(i,t,o){i.style.setProperty(t,o)},w=function(i){i&&i.parentNode&&i.parentNode.removeChild(i)},k=function(i,t){i.classList.add(t)},y=function(i,t){i.classList.remove(t)},L=function(i,t){return
i.dispatchEvent(t)},R=function(i,t,o){return
o=h({bubbles:!0,cancelable:!0},o),L(i,new
Event(t,o))},U=function(i,t,o){return L(i,new
CustomEvent(t,{bubbles:!1,cancelable:!1,detail:o}))},C=function(i,t,o,n){n=n||{},i.addEventListener(t,o,n)};c=function(){o=a.body},"complete"===a.readyState||"interactive"===a.readyState?c():a.addEventListener("DOMContentLoaded",c),s.d("litebox",(function(){var
i=!1;function c(){return
null!=navigator.userAgent.match(/iPhone/i)||null!=navigator.userAgent.match(/iPod/i)}var
L,A,E,j,O,B,P,G,S={blockrightclick:!1,revealSpeed:.4,background:"rgba(0,0,0,.8)",overlayClose:!0,escKey:!0,navKey:!0,autoplay:!1,callbackInit:function(){},callbackBeforeOpen:function(){},callbackAfterOpen:function(){},callbackBeforeClose:function(){},callbackAfterClose:function(){},callbackError:function(){},callbackPrev:function(){},callbackNext:function(){},errorMessage:"Error
loading content."};function
_(i,t){this.timeout=!1,this.element=i,this.options=h({},S,t),this._defaults=S,this._name="liteBox",this.init()}_.prototype={init:function(){var
t=function(e){if(n2ss.isClickAllowed(e)){var
t=e.target.closest('a:not([href="#"]),[onclick]:not([onclick=""])');e.currentTarget!==t&&e.currentTarget.contains(t)||(e.preventDefault(),!1===i&&(i=!0,this.openLitebox(),r((function(){i=!1}),300)))}}.bind(this);C(this.element,"click",t),C(this.element,"n2click",t),this.options.callbackInit.call(this)},openLitebox:function(){this._listeners=[],this.options.callbackBeforeOpen.call(this),this.buildLitebox();var
n=this.element;this.populateLitebox(n),this.options.overlayClose&&C(L,"click",function(e){!1===i&&(e.target===t||e.target===O||e.target===L||e.target.classList.contains("litebox-error"))&&this.closeLitebox()}.bind(this));var
r,l,s=x(this.element,"liteboxGroup");if(s){var
f=a.querySelectorAll('[data-litebox-group="'+s+'"]'),h=[];f.forEach((function(i){h.push(b(i,"href")||x(i,"href"))})),h.forEach((function(i){var
t=new Image;if(t.src=i,t.width>0){var
n=u("img");n.src=i,n.className="litebox-preload",n.style.display="none",o.appendChild(n)}})),r="display",l="block",[j,E].forEach((function(i){g(i,r,l)})),C(E,"click",function(){this.options.callbackPrev.call(this);var
i=Array.prototype.indexOf.call(f,n);(n=f[i-1])||(n=f[f.length-1]),this.populateLitebox(n)}.bind(this)),C(j,"click",function(){this.options.callbackNext.call(this);var
i=Array.prototype.indexOf.call(f,n);(n=f[i+1])||(n=f[0]),this.populateLitebox(n),this.startAutoplay()}.bind(this))}var
d,v,p,m;this._listeners.push((d=o,v="keydown",p=function(e){this.options.escKey&&27==e.keyCode&&(e.stopImmediatePropagation(),this.closeLitebox()),this.options.navKey&&37==e.keyCode&&(e.stopImmediatePropagation(),R(E,"click")),this.options.navKey&&39==e.keyCode&&(e.stopImmediatePropagation(),R(j,"click"))}.bind(this),m=m||{},d.addEventListener(v,p,m),d.removeEventListener.bind(d,v,p,m))),this.startAutoplay(),this.options.callbackAfterOpen.call(this),(null!=navigator.userAgent.match(/iPad/i)&&!c()||c())&&k(O,"litebox-iframe-holder")},startAutoplay:function(){this.timeout&&(l(this.timeout),this.timeout=null),this.options.autoplay&&(this.timeout=r((function(){R(j,"click")}),this.options.autoplay))},buildLitebox:function(){(L=f()).className="litebox-overlay",d(L,"aria-label","Lightbox"),L.style.display="flex",L.style.background=this.options.background,(G=f()).className="litebox-text",L.appendChild(G),(A=f()).className="litebox-error";var
t=u("span");t.innerHTML=this.options.errorMessage,A.appendChild(t),(E=f()).className="litebox-nav
litebox-prev",L.appendChild(E),(j=f()).className="litebox-nav
litebox-next",L.appendChild(j),(O=f()).className="litebox-container",L.appendChild(O),(B=u("ss3-loader")).display="grid";var
n=f();n.className="litebox-close",v(n,{"aria-label":"Close",tabindex:0,role:"button"}),C(n,"click",function(){!1===i&&this.closeLitebox()}.bind(this)),C(n,"keydown",(function(e){32!==e.charCode&&13!==e.charCode||(e.preventDefault(),R(e.target,"click"))})),L.appendChild(n),(a.fullscreenElement||a.webkitFullscreenElement||o).appendChild(L),s.J.to(s.MW.R(L,{opacity:0}),this.options.revealSpeed,{opacity:1}),this.options.blockrightclick&&C(L,"contextmenu",(function(e){e.preventDefault()}))},populateLitebox:function(i){var
o=b(i,"href")||x(i,"href");this.options.autoplay=x(i,"autoplay")||this.options.autoplay,L.appendChild(B);var
c=x(i,"title");if(c===n||""===c)y(G,"active"),G.innerHTML="";else{c="<b>"+c+"</b>";var
a=x(i,"description");a!==n&&""!==a&&(c+="
-
"+a),G.innerHTML=c,k(G,"active")}if(null!==o.match(/\.(jpeg|jpg|gif|png|bmp|webp|svg)/i)){var
l=u("img");l.src=o,l.className="litebox-content",l.onload=function(){w(B)}.bind(this),l.onerror=function(){this.liteboxError(),w(B)}.bind(this),this.transitionContent("image",l)}else
if(videoURL=o.match(/(youtube|youtu|vimeo|dailymotion|kickstarter)\.(com|be)\/((watch\?v=([-\w]+))|(video\/([-\w]+))|(projects\/([-\w]+)\/([-\w]+))|([-\w]+))/)){if(n2const.lightboxMobileNewTab&&n2const.isMobile){var
s=t.open(o,"_blank");return s&&s.focus(),w(B),void
this.closeLitebox()}var
f="";if("youtube"==videoURL[1]&&(f="https://www.youtube.com/embed/"+videoURL[5]+"?fs=1&wmode=opaque&autoplay=1;rel=0"),"youtu"==videoURL[1]&&(f="https://www.youtube.com/embed/"+videoURL[3]+"?fs=1&wmode=opaque&autoplay=1;rel=0"),"vimeo"==videoURL[1]&&(f="https://player.vimeo.com/video/"+videoURL[3]+"?autoplay=1"),"dailymotion"==videoURL[1]&&(f="https://www.dailymotion.com/embed/video/"+videoURL[7]),"kickstarter"==videoURL[1]&&(f="https://www.kickstarter.com/projects/"+videoURL[9]+"/"+videoURL[10]+"/widget/video.html"),f)(p=u("iframe")).className="litebox-content
intrinsic-ignore",p.style.background="#000",v(p,{frameborder:0,tabindex:0,allowfullscreen:"true",allow:"accelerometer;
autoplay; clipboard-write; encrypted-media; gyroscope;
picture-in-picture"}),this.transitionContent("embed",p),p.onload=function(){w(B),p.focus()},p.src=f}else{if("mp4"===o.split(".").pop()){var
h=u("video"),d=u("source");h.className="litebox-content
intrinsic-ignore",h.autoplay=!0,h.controls=!0,h.onloadstart=function(){w(B)},d.src=o,d.type="video/mp4",h.appendChild(d),this.transitionContent("video",h),h.focus()}else{var
p;(p=u("iframe")).src=o,p.className="litebox-content
intrinsic-ignore",v(p,{frameborder:0,tabindex:0,allowfullscreen:"true",allow:"accelerometer;
autoplay; clipboard-write; encrypted-media; gyroscope;
picture-in-picture"}),p.onload=function(){w(B),n2const.isIOS&&(g(p,"position","relative"),r((function(){g(p,"position","absolute")}),200)),p.focus(),p.contentWindow.focus()},this.transitionContent("iframe",p)}}},transitionContent:function(i,t){P&&w(P),P=t,O.appendChild(t),O.classList.toggle("litebox-scroll","inline"===i)},closeLitebox:function(){var
i;this.options.callbackBeforeClose.call(this),this.timeout&&(l(this.timeout),this.timeout=null),s.J.to(s.MW.R(L),this.options.revealSpeed,{opacity:0,onComplete:function(){w(L),a.querySelectorAll(".litebox-preload").forEach((function(i){w(i)}))}}),(i=this._listeners).forEach((function(i){i()})),i.splice(0,i.length),this.options.callbackAfterClose.call(this)},liteboxError:function(){this.options.callbackError.call(this),O.appendChild(A)}},t.n2LightboxSingle=function(i,t){i.forEach((function(i){i.n2LiteBox||(i.n2LiteBox=new
_(i,h({callbackBeforeOpen:function(){var
i=this.element.closest(".n2-ss-slider");i&&U(i,"mediaStarted",{id:"lightbox"})},callbackAfterClose:function(){var
i=this.element.closest(".n2-ss-slider");i&&U(i,"mediaEnded",{id:"lightbox"})}},t)))}))},t.n2Lightbox=function(i,t){var
n=i.querySelectorAll("a[data-n2-lightbox-urls],div[data-n2-lightbox-urls]");p(n,"data-force-pointer","zoom-in"),n.forEach((function(i){for(var
t=x(i,"liteboxGroup"),n=x(i,"n2LightboxUrls").split(","),c=x(i,"n2LightboxTitles").split("|||"),a=0;a<n.length;a++)if(""!==n[a]){var
r=u("a");r.href=n[a],m(r,"liteboxGroup",t),c[a]&&m(r,"title",c[a]),r.style.display="none",o.appendChild(r)}}));var
c=i.querySelectorAll("a[data-n2-lightbox],
div[data-n2-lightbox]");p(c,"data-force-pointer","zoom-in"),n2LightboxSingle(c,t)},s.r("windowLoad",(function(){n2Lightbox(o)})),C(t,"n2Rocket",(function(e){n2Lightbox(e.detail.sliderElement)}))}))}(window);PK��[�2��X�X0Application/Frontend/Assets/dist/particle.min.jsnu�[���!function(t){var
a=t;a._N2=a._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
i,n,s=t.document,r=(s.documentElement,t.setTimeout),o=t.clearTimeout,c=a._N2,h=(t.requestAnimationFrame,s.createElement.bind(s));Object.assign;n=function(){s.body},"complete"===s.readyState||"interactive"===s.readyState?n():s.addEventListener("DOMContentLoaded",n),c.d("particlesJS",(function(){var
t=function(t,o){this.pJS={canvas:{el:t,w:t.offsetWidth,h:t.offsetHeight},particles:{number:{value:400,density:{enable:!0,value_area:800}},color:{value:"#fff"},shape:{type:"circle",stroke:{width:0,color:"#ff0000"},polygon:{nb_sides:5},image:{src:"",width:100,height:100}},opacity:{value:1,random:!1,anim:{enable:!1,speed:2,opacity_min:0,sync:!1}},size:{value:20,random:!1,anim:{enable:!1,speed:20,size_min:0,sync:!1}},line_linked:{enable:!0,distance:100,color:"#fff",opacity:1,width:1},move:{enable:!0,speed:2,direction:"none",random:!1,straight:!1,out_mode:"out",bounce:!1,attract:{enable:!1,rotateX:3e3,rotateY:3e3}},array:[]},interactivity:{detect_on:"canvas",events:{onhover:{enable:!0,mode:"grab"},onclick:{enable:!0,mode:"push"},resize:!0},modes:{grab:{distance:100,line_linked:{opacity:1}},bubble:{distance:200,size:80,duration:.4},repulse:{distance:200,duration:.4},push:{particles_nb:4},remove:{particles_nb:2}},mouse:{}},retina_detect:!1,fn:{interact:{},modes:{},vendors:{}},tmp:{}};var
c=this.pJS;o&&Object.deepExtend(c,o),c.tmp.obj={size_value:c.particles.size.value,size_anim_speed:c.particles.size.anim.speed,move_speed:c.particles.move.speed,line_linked_distance:c.particles.line_linked.distance,line_linked_width:c.particles.line_linked.width,mode_grab_distance:c.interactivity.modes.grab.distance,mode_bubble_distance:c.interactivity.modes.bubble.distance,mode_bubble_size:c.interactivity.modes.bubble.size,mode_repulse_distance:c.interactivity.modes.repulse.distance},c.fn.retinaInit=function(){c.retina_detect&&n2const.devicePixelRatio>1?(c.canvas.pxratio=n2const.devicePixelRatio,c.tmp.retina=!0):(c.canvas.pxratio=1,c.tmp.retina=!1),c.canvas.w=c.canvas.el.offsetWidth*c.canvas.pxratio,c.canvas.h=c.canvas.el.offsetHeight*c.canvas.pxratio,c.particles.size.value=c.tmp.obj.size_value*c.canvas.pxratio,c.particles.size.anim.speed=c.tmp.obj.size_anim_speed*c.canvas.pxratio,c.particles.move.speed=c.tmp.obj.move_speed*c.canvas.pxratio,c.particles.line_linked.distance=c.tmp.obj.line_linked_distance*c.canvas.pxratio,c.interactivity.modes.grab.distance=c.tmp.obj.mode_grab_distance*c.canvas.pxratio,c.interactivity.modes.bubble.distance=c.tmp.obj.mode_bubble_distance*c.canvas.pxratio,c.particles.line_linked.width=c.tmp.obj.line_linked_width*c.canvas.pxratio,c.interactivity.modes.bubble.size=c.tmp.obj.mode_bubble_size*c.canvas.pxratio,c.interactivity.modes.repulse.distance=c.tmp.obj.mode_repulse_distance*c.canvas.pxratio},c.fn.canvasInit=function(){c.canvas.ctx=c.canvas.el.getContext("2d")},c.fn.canvasSize=function(){c.canvas.el.width=c.canvas.w,c.canvas.el.height=c.canvas.h,c&&c.interactivity.events.resize&&a.addEventListener("resize",(function(){c.canvas.w=c.canvas.el.offsetWidth,c.canvas.h=c.canvas.el.offsetHeight,c.tmp.retina&&(c.canvas.w*=c.canvas.pxratio,c.canvas.h*=c.canvas.pxratio),c.canvas.el.width=c.canvas.w,c.canvas.el.height=c.canvas.h,c.particles.move.enable||(c.fn.particlesEmpty(),c.fn.particlesCreate(),c.fn.particlesDraw(),c.fn.vendors.densityAutoParticles()),c.fn.vendors.densityAutoParticles()}))},c.fn.resize=function(){c.canvas.w=c.canvas.el.offsetWidth,c.canvas.h=c.canvas.el.offsetHeight,c.tmp.retina&&(c.canvas.w*=c.canvas.pxratio,c.canvas.h*=c.canvas.pxratio),c.canvas.el.width=c.canvas.w,c.canvas.el.height=c.canvas.h,c.particles.move.enable||(c.fn.particlesEmpty(),c.fn.particlesCreate(),c.fn.particlesDraw(),c.fn.vendors.densityAutoParticles()),c.fn.vendors.densityAutoParticles()},c.fn.canvasPaint=function(){c.canvas.ctx.fillRect(0,0,c.canvas.w,c.canvas.h)},c.fn.canvasClear=function(){c.canvas.ctx.clearRect(0,0,c.canvas.w,c.canvas.h)},c.fn.particle=function(t,a,s){if(this.radius=(c.particles.size.random?Math.random():1)*c.particles.size.value,c.particles.size.anim.enable&&(this.size_status=!1,this.vs=c.particles.size.anim.speed/100,c.particles.size.anim.sync||(this.vs=this.vs*Math.random())),this.x=s?s.x:Math.random()*c.canvas.w,this.y=s?s.y:Math.random()*c.canvas.h,this.x>c.canvas.w-2*this.radius?this.x=this.x-this.radius:this.x<2*this.radius&&(this.x=this.x+this.radius),this.y>c.canvas.h-2*this.radius?this.y=this.y-this.radius:this.y<2*this.radius&&(this.y=this.y+this.radius),c.particles.move.bounce&&c.fn.vendors.checkOverlap(this,s),this.color={},"object"==typeof
t.value)if(t.value instanceof Array){var
r=t.value[Math.floor(Math.random()*c.particles.color.value.length)];this.color.rgb=n(r)}else
t.value.r!=i&&t.value.g!=i&&t.value.b!=i&&(this.color.rgb={r:t.value.r,g:t.value.g,b:t.value.b}),t.value.h!=i&&t.value.s!=i&&t.value.l!=i&&(this.color.hsl={h:t.value.h,s:t.value.s,l:t.value.l});else"random"==t.value?this.color.rgb={r:Math.floor(256*Math.random())+0,g:Math.floor(256*Math.random())+0,b:Math.floor(256*Math.random())+0}:"string"==typeof
t.value&&(this.color=t,this.color.rgb=n(this.color.value));this.opacity=(c.particles.opacity.random?Math.random():1)*c.particles.opacity.value,c.particles.opacity.anim.enable&&(this.opacity_status=!1,this.vo=c.particles.opacity.anim.speed/100,c.particles.opacity.anim.sync||(this.vo=this.vo*Math.random()));var
o={};switch(c.particles.move.direction){case"top":o={x:0,y:-1};break;case"top-right":o={x:.5,y:-.5};break;case"right":o={x:1,y:-0};break;case"bottom-right":o={x:.5,y:.5};break;case"bottom":o={x:0,y:1};break;case"bottom-left":o={x:-.5,y:1};break;case"left":o={x:-1,y:0};break;case"top-left":o={x:-.5,y:-.5};break;default:o={x:0,y:0}}c.particles.move.straight?(this.vx=o.x,this.vy=o.y,c.particles.move.random&&(this.vx=this.vx*Math.random(),this.vy=this.vy*Math.random())):(this.vx=o.x+Math.random()-.5,this.vy=o.y+Math.random()-.5),this.vx_i=this.vx,this.vy_i=this.vy;var
h=c.particles.shape.type;if("object"==typeof h?h instanceof
Array&&(this.shape=h[Math.floor(Math.random()*h.length)]):this.shape=h,"image"==this.shape){var
f=c.particles.shape;this.img={src:f.image.src,ratio:f.image.width/f.image.height},this.img.ratio||(this.img.ratio=1),"svg"==c.tmp.img_type&&c.tmp.source_svg!=i&&(c.fn.vendors.createSvgImg(this),c.tmp.pushing&&(this.img.loaded=!1))}},c.fn.particle.prototype.draw=function(){var
t=this;if(t.radius_bubble!=i)var a=t.radius_bubble;else
a=t.radius;if(t.opacity_bubble!=i)var n=t.opacity_bubble;else
n=t.opacity;if(t.color.rgb)var
s="rgba("+t.color.rgb.r+","+t.color.rgb.g+","+t.color.rgb.b+","+n+")";else
s="hsla("+t.color.hsl.h+","+t.color.hsl.s+"%,"+t.color.hsl.l+"%,"+n+")";switch(c.canvas.ctx.fillStyle=s,c.canvas.ctx.beginPath(),t.shape){case"circle":c.canvas.ctx.arc(t.x,t.y,a,0,2*Math.PI,!1);break;case"edge":c.canvas.ctx.rect(t.x-a,t.y-a,2*a,2*a);break;case"triangle":c.fn.vendors.drawShape(c.canvas.ctx,t.x-a,t.y+a/1.66,2*a,3,2);break;case"polygon":c.fn.vendors.drawShape(c.canvas.ctx,t.x-a/(c.particles.shape.polygon.nb_sides/3.5),t.y-a/.76,2.66*a/(c.particles.shape.polygon.nb_sides/3),c.particles.shape.polygon.nb_sides,1);break;case"star":c.fn.vendors.drawShape(c.canvas.ctx,t.x-2*a/(c.particles.shape.polygon.nb_sides/4),t.y-a/1.52,2*a*2.66/(c.particles.shape.polygon.nb_sides/3),c.particles.shape.polygon.nb_sides,2);break;case"image":if("svg"==c.tmp.img_type)var
r=t.img.obj;else
r=c.tmp.img_obj;r&&c.canvas.ctx.drawImage(r,t.x-a,t.y-a,2*a,2*a/t.img.ratio)}c.canvas.ctx.closePath(),c.particles.shape.stroke.width>0&&(c.canvas.ctx.strokeStyle=c.particles.shape.stroke.color,c.canvas.ctx.lineWidth=c.particles.shape.stroke.width,c.canvas.ctx.stroke()),c.canvas.ctx.fill()},c.fn.particlesCreate=function(){for(var
t=0;t<c.particles.number.value;t++)c.particles.array.push(new
c.fn.particle(c.particles.color,c.particles.opacity.value))},c.fn.particlesUpdate=function(){for(var
t=0;t<c.particles.array.length;t++){var
a=c.particles.array[t];if(c.particles.move.enable){var
i=c.particles.move.speed/2;a.x+=a.vx*i,a.y+=a.vy*i}if(c.particles.opacity.anim.enable&&(1==a.opacity_status?(a.opacity>=c.particles.opacity.value&&(a.opacity_status=!1),a.opacity+=a.vo):(a.opacity<=c.particles.opacity.anim.opacity_min&&(a.opacity_status=!0),a.opacity-=a.vo),a.opacity<0&&(a.opacity=0)),c.particles.size.anim.enable&&(1==a.size_status?(a.radius>=c.particles.size.value&&(a.size_status=!1),a.radius+=a.vs):(a.radius<=c.particles.size.anim.size_min&&(a.size_status=!0),a.radius-=a.vs),a.radius<0&&(a.radius=0)),"bounce"==c.particles.move.out_mode)var
n={x_left:a.radius,x_right:c.canvas.w,y_top:a.radius,y_bottom:c.canvas.h};else
n={x_left:-a.radius,x_right:c.canvas.w+a.radius,y_top:-a.radius,y_bottom:c.canvas.h+a.radius};switch(a.x-a.radius>c.canvas.w?(a.x=n.x_left,a.y=Math.random()*c.canvas.h):a.x+a.radius<0&&(a.x=n.x_right,a.y=Math.random()*c.canvas.h),a.y-a.radius>c.canvas.h?(a.y=n.y_top,a.x=Math.random()*c.canvas.w):a.y+a.radius<0&&(a.y=n.y_bottom,a.x=Math.random()*c.canvas.w),c.particles.move.out_mode){case"bounce":(a.x+a.radius>c.canvas.w||a.x-a.radius<0)&&(a.vx=-a.vx),(a.y+a.radius>c.canvas.h||a.y-a.radius<0)&&(a.vy=-a.vy)}if(s("grab",c.interactivity.events.onhover.mode)&&c.fn.modes.grabParticle(a),(s("bubble",c.interactivity.events.onhover.mode)||s("bubble",c.interactivity.events.onclick.mode))&&c.fn.modes.bubbleParticle(a),(s("repulse",c.interactivity.events.onhover.mode)||s("repulse",c.interactivity.events.onclick.mode))&&c.fn.modes.repulseParticle(a),c.particles.line_linked.enable||c.particles.move.attract.enable)for(var
r=t+1;r<c.particles.array.length;r++){var
o=c.particles.array[r];c.particles.line_linked.enable&&c.fn.interact.linkParticles(a,o),c.particles.move.attract.enable&&c.fn.interact.attractParticles(a,o),c.particles.move.bounce&&c.fn.interact.bounceParticles(a,o)}}},c.fn.particlesDraw=function(){c.canvas.ctx.clearRect(0,0,c.canvas.w,c.canvas.h),c.fn.particlesUpdate();for(var
t=0;t<c.particles.array.length;t++){c.particles.array[t].draw()}},c.fn.particlesEmpty=function(){c.particles.array=[]},c.fn.particlesRefresh=function(){cancelRequestAnimFrame(c.fn.checkAnimFrame),cancelRequestAnimFrame(c.fn.drawAnimFrame),c.tmp.source_svg=i,c.tmp.img_obj=i,c.tmp.count_svg=0,c.fn.particlesEmpty(),c.fn.canvasClear(),c.fn.vendors.start()},c.fn.interact.linkParticles=function(t,a){var
i=t.x-a.x,n=t.y-a.y,s=Math.sqrt(i*i+n*n);if(s<=c.particles.line_linked.distance){var
r=c.particles.line_linked.opacity-s/(1/c.particles.line_linked.opacity)/c.particles.line_linked.distance;if(r>0){var
o=c.particles.line_linked.color_rgb_line;c.canvas.ctx.strokeStyle="rgba("+o.r+","+o.g+","+o.b+","+r+")",c.canvas.ctx.lineWidth=c.particles.line_linked.width,c.canvas.ctx.beginPath(),c.canvas.ctx.moveTo(t.x,t.y),c.canvas.ctx.lineTo(a.x,a.y),c.canvas.ctx.stroke(),c.canvas.ctx.closePath()}}},c.fn.interact.attractParticles=function(t,a){var
i=t.x-a.x,n=t.y-a.y;if(Math.sqrt(i*i+n*n)<=c.particles.line_linked.distance){var
s=i/(1e3*c.particles.move.attract.rotateX),r=n/(1e3*c.particles.move.attract.rotateY);t.vx-=s,t.vy-=r,a.vx+=s,a.vy+=r}},c.fn.interact.bounceParticles=function(t,a){var
i=t.x-a.x,n=t.y-a.y;Math.sqrt(i*i+n*n)<=t.radius+a.radius&&(t.vx=-t.vx,t.vy=-t.vy,a.vx=-a.vx,a.vy=-a.vy)},c.fn.modes.pushParticles=function(t,a){c.tmp.pushing=!0;for(var
i=0;i<t;i++)c.particles.array.push(new
c.fn.particle(c.particles.color,c.particles.opacity.value,{x:a?a.pos_x:Math.random()*c.canvas.w,y:a?a.pos_y:Math.random()*c.canvas.h})),i==t-1&&(c.particles.move.enable||c.fn.particlesDraw(),c.tmp.pushing=!1)},c.fn.modes.removeParticles=function(t){c.particles.array.splice(0,t),c.particles.move.enable||c.fn.particlesDraw()},c.fn.modes.bubbleParticle=function(t){if(c.interactivity.events.onhover.enable&&s("bubble",c.interactivity.events.onhover.mode)){var
a=t.x-c.interactivity.mouse.pos_x,n=t.y-c.interactivity.mouse.pos_y,r=1-(l=Math.sqrt(a*a+n*n))/c.interactivity.modes.bubble.distance;function
o(){t.opacity_bubble=t.opacity,t.radius_bubble=t.radius}if(l<=c.interactivity.modes.bubble.distance){if(r>=0&&"mousemove"==c.interactivity.status){if(c.interactivity.modes.bubble.size!=c.particles.size.value)if(c.interactivity.modes.bubble.size>c.particles.size.value){(f=t.radius+c.interactivity.modes.bubble.size*r)>=0&&(t.radius_bubble=f)}else{var
h=t.radius-c.interactivity.modes.bubble.size,f=t.radius-h*r;t.radius_bubble=f>0?f:0}var
u;if(c.interactivity.modes.bubble.opacity!=c.particles.opacity.value)if(c.interactivity.modes.bubble.opacity>c.particles.opacity.value)(u=c.interactivity.modes.bubble.opacity*r)>t.opacity&&u<=c.interactivity.modes.bubble.opacity&&(t.opacity_bubble=u);else(u=t.opacity-(c.particles.opacity.value-c.interactivity.modes.bubble.opacity)*r)<t.opacity&&u>=c.interactivity.modes.bubble.opacity&&(t.opacity_bubble=u)}}else
o();"mouseleave"==c.interactivity.status&&o()}else
if(c.interactivity.events.onclick.enable&&s("bubble",c.interactivity.events.onclick.mode)){if(c.tmp.bubble_clicking){a=t.x-c.interactivity.mouse.click_pos_x,n=t.y-c.interactivity.mouse.click_pos_y;var
l=Math.sqrt(a*a+n*n),v=((new
Date).getTime()-c.interactivity.mouse.click_time)/1e3;v>c.interactivity.modes.bubble.duration&&(c.tmp.bubble_duration_end=!0),v>2*c.interactivity.modes.bubble.duration&&(c.tmp.bubble_clicking=!1,c.tmp.bubble_duration_end=!1)}function
m(a,n,s,r,o){if(a!=n)if(c.tmp.bubble_duration_end)s!=i&&(f=a+(a-(r-v*(r-a)/c.interactivity.modes.bubble.duration)),"size"==o&&(t.radius_bubble=f),"opacity"==o&&(t.opacity_bubble=f));else
if(l<=c.interactivity.modes.bubble.distance){if(s!=i)var h=s;else
h=r;if(h!=a){var
f=r-v*(r-a)/c.interactivity.modes.bubble.duration;"size"==o&&(t.radius_bubble=f),"opacity"==o&&(t.opacity_bubble=f)}}else"size"==o&&(t.radius_bubble=i),"opacity"==o&&(t.opacity_bubble=i)}c.tmp.bubble_clicking&&(m(c.interactivity.modes.bubble.size,c.particles.size.value,t.radius_bubble,t.radius,"size"),m(c.interactivity.modes.bubble.opacity,c.particles.opacity.value,t.opacity_bubble,t.opacity,"opacity"))}},c.fn.modes.repulseParticle=function(t){if(c.interactivity.events.onhover.enable&&s("repulse",c.interactivity.events.onhover.mode)&&"mousemove"==c.interactivity.status){var
a=t.x-c.interactivity.mouse.pos_x,i=t.y-c.interactivity.mouse.pos_y,n=Math.sqrt(a*a+i*i),r={x:a/n,y:i/n},o=c.interactivity.modes.repulse.distance,h=(b=1/o*(-1*Math.pow(n/o,2)+1)*o*100,d=0,p=50,Math.min(Math.max(b,d),p)),f={x:t.x+r.x*h,y:t.y+r.y*h};"bounce"==c.particles.move.out_mode?(f.x-t.radius>0&&f.x+t.radius<c.canvas.w&&(t.x=f.x),f.y-t.radius>0&&f.y+t.radius<c.canvas.h&&(t.y=f.y)):(t.x=f.x,t.y=f.y)}else
if(c.interactivity.events.onclick.enable&&s("repulse",c.interactivity.events.onclick.mode))if(c.tmp.repulse_finish||(c.tmp.repulse_count++,c.tmp.repulse_count==c.particles.array.length&&(c.tmp.repulse_finish=!0)),c.tmp.repulse_clicking){o=Math.pow(c.interactivity.modes.repulse.distance/6,3);var
u=c.interactivity.mouse.click_pos_x-t.x,l=c.interactivity.mouse.click_pos_y-t.y,v=u*u+l*l,m=-o/v;v<=o&&function(){var
a=Math.atan2(l,u);if(t.vx=m*Math.cos(a),t.vy=m*Math.sin(a),"bounce"==c.particles.move.out_mode){var
i={x:t.x+t.vx,y:t.y+t.vy};(i.x+t.radius>c.canvas.w||i.x-t.radius<0)&&(t.vx=-t.vx),(i.y+t.radius>c.canvas.h||i.y-t.radius<0)&&(t.vy=-t.vy)}}()}else
0==c.tmp.repulse_clicking&&(t.vx=t.vx_i,t.vy=t.vy_i);var
b,d,p},c.fn.modes.grabParticle=function(t){if(c.interactivity.events.onhover.enable&&"mousemove"==c.interactivity.status){var
a=t.x-c.interactivity.mouse.pos_x,i=t.y-c.interactivity.mouse.pos_y,n=Math.sqrt(a*a+i*i);if(n<=c.interactivity.modes.grab.distance){var
s=c.interactivity.modes.grab.line_linked.opacity-n/(1/c.interactivity.modes.grab.line_linked.opacity)/c.interactivity.modes.grab.distance;if(s>0){var
r=c.particles.line_linked.color_rgb_line;c.canvas.ctx.strokeStyle="rgba("+r.r+","+r.g+","+r.b+","+s+")",c.canvas.ctx.lineWidth=c.particles.line_linked.width,c.canvas.ctx.beginPath(),c.canvas.ctx.moveTo(t.x,t.y),c.canvas.ctx.lineTo(c.interactivity.mouse.pos_x,c.interactivity.mouse.pos_y),c.canvas.ctx.stroke(),c.canvas.ctx.closePath()}}}},c.fn.vendors.eventsListeners=function(){var
t,i,n,s;"window"==c.interactivity.detect_on?c.interactivity.el=a:"parent"==c.interactivity.detect_on?c.interactivity.el=c.canvas.el.parentNode:"object"==typeof
c.interactivity.detect_on?c.interactivity.el=c.interactivity.detect_on:c.interactivity.el=c.canvas.el,(c.interactivity.events.onhover.enable||c.interactivity.events.onclick.enable)&&(t=c.interactivity.el,i="mousemove",n=function(e){if(c.interactivity.el==a)var
t=e.clientX,i=e.clientY;else{var
n=c.interactivity.el.getBoundingClientRect();t=e.clientX-n.left,i=e.clientY-n.top}c.interactivity.mouse.pos_x=t,c.interactivity.mouse.pos_y=i,c.tmp.retina&&(c.interactivity.mouse.pos_x*=c.canvas.pxratio,c.interactivity.mouse.pos_y*=c.canvas.pxratio),c.interactivity.status="mousemove"},s=s||{},t.addEventListener(i,n,s),c.interactivity.el.addEventListener("mouseleave",(function(e){c.interactivity.mouse.pos_x=null,c.interactivity.mouse.pos_y=null,c.interactivity.status="mouseleave"}))),c.interactivity.events.onclick.enable&&c.interactivity.el.addEventListener("click",(function(){if(c.interactivity.mouse.click_pos_x=c.interactivity.mouse.pos_x,c.interactivity.mouse.click_pos_y=c.interactivity.mouse.pos_y,c.interactivity.mouse.click_time=(new
Date).getTime(),c.interactivity.events.onclick.enable)switch(c.interactivity.events.onclick.mode){case"push":c.particles.move.enable||1==c.interactivity.modes.push.particles_nb?c.fn.modes.pushParticles(c.interactivity.modes.push.particles_nb,c.interactivity.mouse):c.interactivity.modes.push.particles_nb>1&&c.fn.modes.pushParticles(c.interactivity.modes.push.particles_nb);break;case"remove":c.fn.modes.removeParticles(c.interactivity.modes.remove.particles_nb);break;case"bubble":c.tmp.bubble_clicking=!0;break;case"repulse":c.tmp.repulse_clicking=!0,c.tmp.repulse_count=0,c.tmp.repulse_finish=!1,r((function(){c.tmp.repulse_clicking=!1}),1e3*c.interactivity.modes.repulse.duration)}}))},c.fn.vendors.densityAutoParticles=function(){if(c.particles.number.density.enable){var
t=c.canvas.el.width*c.canvas.el.height/1e3;c.tmp.retina&&(t/=2*c.canvas.pxratio);var
a=t*c.particles.number.value/c.particles.number.density.value_area,i=c.particles.array.length-a;i<0?c.fn.modes.pushParticles(Math.abs(i)):c.fn.modes.removeParticles(i)}},c.fn.vendors.checkOverlap=function(t,a){for(var
i=0;i<c.particles.array.length;i++){var
n=c.particles.array[i],s=t.x-n.x,r=t.y-n.y;Math.sqrt(s*s+r*r)<=t.radius+n.radius&&(t.x=a?a.x:Math.random()*c.canvas.w,t.y=a?a.y:Math.random()*c.canvas.h,c.fn.vendors.checkOverlap(t))}},c.fn.vendors.createSvgImg=function(t){var
i=c.tmp.source_svg.replace(/#([0-9A-F]{3,6})/gi,(function(a,i,n,s){if(t.color.rgb)var
r="rgba("+t.color.rgb.r+","+t.color.rgb.g+","+t.color.rgb.b+","+t.opacity+")";else
r="hsla("+t.color.hsl.h+","+t.color.hsl.s+"%,"+t.color.hsl.l+"%,"+t.opacity+")";return
r})),n=new
Blob([i],{type:"image/svg+xml;charset=utf-8"}),s=a.URL||a.webkitURL||a,r=s.createObjectURL(n),o=new
Image;o.addEventListener("load",(function(){t.img.obj=o,t.img.loaded=!0,s.revokeObjectURL(r),c.tmp.count_svg=(c.tmp.count_svg||0)+1})),o.src=r},c.fn.vendors.destroypJS=function(){cancelAnimationFrame(c.fn.drawAnimFrame),t.remove(),pJSDom=null},c.fn.vendors.drawShape=function(t,a,i,n,s,r){var
o=s*r,c=s/r,h=180*(c-2)/c,f=Math.PI-Math.PI*h/180;t.save(),t.beginPath(),t.translate(a,i),t.moveTo(0,0);for(var
u=0;u<o;u++)t.lineTo(n,0),t.translate(n,0),t.rotate(f);t.fill(),t.restore()},c.fn.vendors.exportImg=function(){a.open(c.canvas.el.toDataURL("image/png"),"_blank")},c.fn.vendors.loadImg=function(t){if(c.tmp.img_error=i,""!=c.particles.shape.image.src)if("svg"==t){var
a=new
XMLHttpRequest;a.open("GET",c.particles.shape.image.src),a.onreadystatechange=function(t){4==a.readyState&&(200==a.status?(c.tmp.source_svg=t.currentTarget.response,c.fn.vendors.checkBeforeDraw()):(console.log("Error
pJS - Image not found"),c.tmp.img_error=!0))},a.send()}else{var n=new
Image;n.addEventListener("load",(function(){c.tmp.img_obj=n,c.fn.vendors.checkBeforeDraw()})),n.src=c.particles.shape.image.src}else
console.log("Error pJS - No
image.src"),c.tmp.img_error=!0},c.fn.vendors.draw=function(){"image"==c.particles.shape.type?"svg"==c.tmp.img_type?c.tmp.count_svg>=c.particles.number.value?(c.fn.particlesDraw(),c.particles.move.enable?c.fn.drawAnimFrame=requestAnimFrame(c.fn.vendors.draw):cancelRequestAnimFrame(c.fn.drawAnimFrame)):c.tmp.img_error||(c.fn.drawAnimFrame=requestAnimFrame(c.fn.vendors.draw)):c.tmp.img_obj!=i?(c.fn.particlesDraw(),c.particles.move.enable?c.fn.drawAnimFrame=requestAnimFrame(c.fn.vendors.draw):cancelRequestAnimFrame(c.fn.drawAnimFrame)):c.tmp.img_error||(c.fn.drawAnimFrame=requestAnimFrame(c.fn.vendors.draw)):(c.fn.particlesDraw(),c.particles.move.enable?c.fn.drawAnimFrame=requestAnimFrame(c.fn.vendors.draw):cancelRequestAnimFrame(c.fn.drawAnimFrame))},c.fn.vendors.checkBeforeDraw=function(){"image"==c.particles.shape.type?"svg"==c.tmp.img_type&&c.tmp.source_svg==i?c.tmp.checkAnimFrame=requestAnimFrame(check):(cancelRequestAnimFrame(c.tmp.checkAnimFrame),c.tmp.img_error||(c.fn.vendors.init(),c.fn.vendors.draw())):(c.fn.vendors.init(),c.fn.vendors.draw())},c.fn.vendors.init=function(){c.fn.retinaInit(),c.fn.canvasInit(),c.fn.canvasSize(),c.fn.canvasPaint(),c.fn.particlesCreate(),c.fn.vendors.densityAutoParticles(),c.particles.line_linked.color_rgb_line=n(c.particles.line_linked.color)},c.fn.vendors.start=function(){s("image",c.particles.shape.type)?(c.tmp.img_type=c.particles.shape.image.src.substr(c.particles.shape.image.src.length-3),c.fn.vendors.loadImg(c.tmp.img_type)):c.fn.vendors.checkBeforeDraw()},c.fn.vendors.eventsListeners(),c.fn.vendors.start()};function
n(t){t=t.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,(function(t,a,i,n){return
a+a+i+i+n+n}));var
a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return
a?{r:parseInt(a[1],16),g:parseInt(a[2],16),b:parseInt(a[3],16)}:null}function
s(t,a){return a.indexOf(t)>-1}return
Object.deepExtend=function(t,a){for(var i in
a)a[i]&&a[i].constructor&&a[i].constructor===Object?(t[i]=t[i]||{},arguments.callee(t[i],a[i])):t[i]=a[i];return
t},a.requestAnimFrame=a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(t){a.setTimeout(t,1e3/60)},a.cancelRequestAnimFrame=a.cancelAnimationFrame||a.webkitCancelRequestAnimationFrame||a.mozCancelRequestAnimationFrame||a.oCancelRequestAnimationFrame||a.msCancelRequestAnimationFrame||o,function(a,i){if(a){var
n=h("canvas");return
n.className="n-particles-js-canvas-el",a.appendChild(n),new
t(n,i)}return!1}}))}(window);PK��[x�?c,,4Application/Frontend/Assets/dist/shapedivider.min.jsnu�[���this.stages.done("ResizeFirst",function(){var
i=document.documentElement,n=this.sliderElement.querySelectorAll(".n2-ss-shape-divider");n.length&&n.forEach(function(n){var
t=n.querySelector(".n2-ss-shape-divider-inner");if(+n.dataset.ssSdAnimate){var
s=n.querySelector("svg");this.visible((function(){var
i=s.querySelectorAll("*"),t=100/(n.dataset.ssSdSpeed||100),o={};s.dataset.yoyo&&(o={onComplete:function(){this.reverse()},onReverseComplete:function(){this.restart()}});for(var
r=0;r<i.length;r++)_N2.J.to(i[r],parseFloat(i[r].getAttribute("duration"))*t,Object.assign({attr:{d:i[r].getAttribute("to-d")},delay:0,ease:"easeOutCubic"},o,{delay:i[r].getAttribute("delay"),ease:i[r].getAttribute("ease")}))}))}var
o=n.dataset.ssSdScroll;if("shrink"===o||"grow"===o)if(IntersectionObserver){var
r,a,d=n.dataset.ssSdSide,h=function(n,s){var
o,a,d=(a=0,window.matchMedia&&/Android|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent||navigator.vendor||window.opera)?(o=n2const.isIOS?i.clientHeight:window.innerHeight,a=window.matchMedia("(orientation:
landscape)").matches?Math.min(screen.width,o):Math.min(screen.height,o)):a=window.n2Height||i.clientHeight,a),h=this.sliderElement.getBoundingClientRect().top+n;r=Math.max(0,Math.min(100,Math.abs(s-h/d*100))),t.style.transform="scaleY("+r/100+")"}.bind(this);"shrink"===o?(r=100,a=function(){h("bottom"===d?this.responsive.resizeContext.sliderHeight:0,0)}.bind(this)):"grow"===o&&(r=0,a=function(){h("bottom"===d?this.responsive.resizeContext.sliderHeight:0,100)}.bind(this)),new
IntersectionObserver((function(i){i[0].isIntersecting?(window.addEventListener("scroll",a),window.addEventListener("resize",a)):(window.removeEventListener("scroll",a),window.removeEventListener("resize",a)),a()})).observe(this.sliderElement)}else
t.style.transform="scaleY(1)"}.bind(this))}.bind(this));PK��[��Uh-h-LApplication/Frontend/Assets/icons/fontawesome/dist/fontawesome-webfont.woff2nu�[���wOF2-h
��-�?FFTM
`�r
��(��X6$�p�
��u[R rGa���*�
�'�=�:�&��=r�*
��]t�E�n�������1F��@���|��f�m�`�$ؑ�@d[BQ$([U<+(��@P�5�`���>�P;�(��1��l�hԨ��)��Yy��Ji�����|%ہ�^�G��3�n���ڕ�
�͐D��p\Yr
�L�P���t�)����6R�^"SL~�YR�CXR �4���F�y\[��7n��|s໌q�M��%K�.ۺ,����L�t�'���M,c��+b��ׇ�O�s�^�$���z.�mŠ�h&gb���v���'�6�:����s�m�b�1بm0"ǂ��*V����c�$,0ATPT�1��<�;���`�'�H?�sΩ:�ND����I�$�T�[��b4�����,�μ�」bl6��IL�i}ی&�4�m,'���#�ץ�Rw�bu��,K����v��m_-���\H����HH������?���m�9P���)9�J��$ƽ����8������~�;�r�n�=$��Nddn!'����;��8��'�N��!-Jʶ�.����X�=,��"`:��
{�����K!'��-FH�� �#$~�Z_����N5VU8Fȯ��%P�ݫ���Cp$Q�����r��ʽ��k�k��3ٷ�:R%��2{�ީ��h%�)8����
ILK�6v�#��,;Ц6��N�2�hv�����OO��t#��xT��Bf���q^#����?{�5b�I��%-WZ��b�A�^�1��n5���צNQ�Y'�������S��!t"
`b3�%���35��fv;����l�9�:jgf?gr��p�x�
�|� $
e��Z(�$w(ZrS��v+�Z���q�M������ݙm?&s[��t�S�Sj��9���?�|��
���>G�,bDշ^��^���:l�3��NA�`�5�26�L�pS� Aߧ/U�
�֘����'9\��Նt���!������l�
PMR���9n�
�`(�@�
Hy)M�dM�
�5�ԤH'ґ��mS<���q&k�)\�{;�1��m��8�{��X�1�-3ǚ��)�B(��,�%���������w�o~��t��HW8l��Z r��=e���1+�/Ɏ1W?ְr�89PL��>uo9
�1
tØ��uc�����@��]KR�bN���v������(�"��y뽻{c�����scz�&�p5���,j�n
�kN�!�.�n^��Uu@|�?v�>�����rUa�HR
����Ց��I
D��ˋQ��~p�
�܍;;�n���L$�t� : hFCY���TO�FNN~}�1"`�����a��(�?H
����\���u�0LԵ��'���͔PbnmO������Jl�?��s���0,8�x�B�B��F��_�RiZ����~e#j��w�hOc*&F6�Yq��{�}?��>�u��.�4�h%g�`�&��
��)��R5�H�}���ˤ�kܩ��'J��O�I����_��qOb'�HǟBYEM�6�v��5�NJ
�O�NFNx(1�:\�߫C�k�c�b8Q� d�[L(el+2u-��a֘d��5;�N$�"�H���SF�o�2i�"��\�h7I���<SCO���ȐH��Ew!.��!BSC�gĝ�c���s*էs�(5m�=q�ʊe���Y�$�\>fN8�q��x�#v
�6um� ���`�NM-J\�F��r�D��Z�0�#'ꥈn��GjL�چXʌ�A���gYs�*�Y���^ٵ�;"�$hb=�ϛ�0�vH<�Vv�c�_\Y���w;dB��N��3!$������I|P�
~&�d�.��-a�a ++��9�.mR��4�cy���#�U��FW�u�
� i/f~�4��l��XS�9�1E��3@���k��@'#���c���n�
���S_;�%��I��+��.�L�Cx�����ꆱw ��Vۂ������Exf~H`��0�!d��@Q{Oh1��H��Fë�zs�7�݉��Ɯtrv���k���heS3�ۇv�9�q|�O��K)�U\�A�%����o{l<��K����͎���i���H�G�I�z�=6�WWo0��|�%A�jdD)!
��pw���_���;���c�D#�ˁM���Nz���p�^�CDx��xj)�5O�9�
�`��EDX�x�
ݒGU��˯ę����ډ�.%
���Έ�~��=�Co�)
F�7���$Z��(�g��oB��
�Ɯ�@��&���e�{��厣�l��f�_�Rx�N[�]��8`-3�s����{Pj��Wuc9���[>�-�.D�Y����d������+^{���C��m����,��@N<������.��V��M��S�+�\D�+��R�|�6��'q\T�����9�D�X<$�p���"�酦��$�ҷ�,�p�s��T����b���NkI�_�`��
F��W��V��%��w�~���DԐ����*�xi��y[rZ���[S%�G��s`F<ㅣ���
��V�+��!+������؍�9y�k�fb�82�s�}l;[)e$��T���k����)�v���9����{�u�u�t��@E��>|C��<\4%�Rv���������@C�8\��~)#k|��.a�o����00G�q0%����hp���
L���"�+>���%�^Mˊ�N�s��q��=�����䦆�K4r�-*��%��h#�%;pP馔h�C=����
��&)�ba��KL�@����t�!�~2�S]rYl�Z6�3ўJ�o��O�V�;�h&gO5�RT�/}����{���AZ�&�S���t����ͯ�P��C���0��D,�pbpз�z)�
]�I�>Q\Bl�"��^3R>r�*��C>����xPU�z�}Y=�̕�}�ж��
�
6-`/"H
o�&�D�I0�E2Xa��-�{5���<
,}��``6����ji���im<UujY�Z�jB\@�g�3Ejfp����:����W�Ǯ���߳����p�ij3ao���1�da��
��ݫ����J�ײ?
j�q7��M���ff�Y�f��s�$�� ��H���l��������(%.�r��w?�m=~�y�cY�bg)<�W�
/Vx�k���$��B�r~����9�6�0�&��_vMY�%��ҝ{�E�6<������%�%�4���ߠO�@��N����"Z��OD{u3S��W�M��R��3s<���س
����\I0��.��-2ݭ��ㄭ;� �0��}N�/b���N{�I��|b_r�e��_pSi���>'�w�5��RF,ч�%SY����Wh�6L_i샣=���i1�3�YI7N�Cp�I��Ĕ��(�r���0��{j����r�K����Тo)l���3na�T1\��IE(�m����߃���D�l��e����$Å�wX���U��(@����M�a"n�,�*vG���̨x���>�G�S����g�̉"�Q�v�b0*z��PE�y�ɉ�?7�$����%��G����p�dY�&f�!��a6��|�)�;u7#�3�4�mJij�
o���O�p�ȁ�v8j��x(K�/Z�d���x�Ń�m7V�_\�f�L�7p�X�z�H7�-���,(1KHb�e��,r-��p�L����3=�T��2�t�2ټX�k:����Z�5��s�p��SsT����:.]��D"�@��-�E�̑!�A��2�ɶ-�F}�˒�2Bǃ��Q���)t�ç|�#4�|�\�㨀��`�fc,��#�g��1:�-����ty
�]�����2�Z~��.)�����nj�����%R�K����(y�`�8��C��֍���z���K-N����`^+����n���3��ϴ����T��3�tQ�أ�4<>:J0È%�ݑZab`��vͬ��a�T/Z��aޝ�ГIi �W1���_��>)���H"�����p���|7mF�^Z��~f�0J��^�I��3V�!���{�<e�/=�p`���q��8^����K8��O�9�w0��Z��|��v?�n� �3��f�!��߷�~��T�
������
Jӛ����5��p���V ��3�˫����.=����-}��[�g�R�5���n�B8���3.��8 Yg�#0�&���S�/.fg\
E�f�}��,k����g��$�?XY�*������1��p��E(����RS��Q��t��6,�Q�j\��</]N�s���;�'HX]�E�29��d�kY�
�j���R6���Q!����
V���
%"^�`�N3O�����[�v:�ʄ:��^ڜr�@���
�F�_���Nc�B���8p�\i����7��g�*���,�C����[�6�T�?����%�z��@jApBN5�"4T����"�}0uJ�Ȝ~3���{}uW����M�j�9�-�]����'lS�
/�R><�+�O����eB#�Bc���jL\��-�Zh�[�I<����q�v�~�k]�G���TD�?S����/�-��%ݒ����7��w�i|C�I��q�wc��W�x��
�/7�x��HO/���o]���G]�y�߃��#��7��b��$�t��R�$
���]�a7�F�Ѯ���,n!r��I|2���8�x�6�gS�h� ��R^^�D.�x�M�MS?漞'G�#�~�+�����v4�d!FyT�9�-�fVa7h�B��4�����,�2�Ɖ�&vTHMqp�4?R\�����Xa<��4�@Mi�H�D_�� �Eg��R�y�M���lT�ؠJݮ
��yc��"�HJ�,
6�u�/ڴ��������y��V���nJn۟H\P�R�Bd|�4�_�$k����.��w��I�pS��$��|}j���9������m�|�1�ߘ����n�93�9���5qS�|���xW�9�����B��VZ!����m�K/�Ln;i��u��$�*�t3�Ͷ��@}���B{�Y���ԑ�z�2J�u@�a�\M���R7o��dz����e��7�/$4]^���2k�h$�=%��1�I�B�
��H|�N.[�M\L���b����1Mg��:�NV._0�,�+�,��h�t7�l8�s~IV^
N�˼M���ؑj��ك-� oܮůQ�o[m��j�=r��m>�~z4$M��}z
�s�h""���u7�V{Rûݦ�O-��D9V�٥g�IʎK�Lg۶B�T��P�'�K��̦�
qW�֒�3e����p�&���ے��L�hp����N�aS��w��
&���;e(�,-7v�x�-��w$W��nX�U��������t8�����Y���?KM�ct�Y�p*Շ�����-���БfL�|�[nL��
}4�{5�頠�3�n���$$,+�DNԄ-H�V>��H����Os\���-�;�W6N��M��8��Fi���;���7k�2�6%֒�a],:!�ʲڽE,��{U��naw����Ng��.��I9r:j������<IE�1�`$`Lbrǒ��ם��]�x�9=Rv&*Q5�0z��y<���`M|�ԙ�dO�٥iZ���$���+#KH�F
�������� ������)- �:M$�yc��E�%Ai��2]���l嶨����8�I�y��ZGJ����\�2֙Xb�L���I�A-�GrR!�0���L+�Qh�S�Y����S�5�_�(�poF��T���#kN۾�l|r�n�d�H���yۊ����&ۆx�p�����[�8G���dt�����z찃٦ 8��B��KP"@2e�e��y�x��j����JKh�XŬB�}��6�â��`?�i�*�[9e+b�VL�aL͙����dBYp.�ψ
�n\4�糅Ƥ���d�<w��W"��?
�'�O%�a2N�9��,�ߟ���!���.�y�Z��%�4�U�^��u�φ�g�)M%��C��V����M!z�&�����|D�,�i�~R,%��|O"�����h\3+��a����������i8��\$!1�L��a6s�
z+M�R�b��_
k�v�j���U��裒-��jX�Gt������b�~�˚��ꖺwt���͝�SkP�2���(=cvt�"�[3��&��h�DN�=�Pɛ�A�G���'_�R#��M:.���3� ���tJ~��3zwx
���;�7��O�8��Y)
�DSE����/����7�i��!wy�6��$��8E0�Taތ�|@�
g����.;m���9�9�s�HrL7&�����3Bs�|[o&ou�Sg�խ�+{�AE���kZ� �"N�d�5��:��IV��ڊ�>�F�b�K��Ψf)*c��G5<��C����.g�]��k��
��� A0�-��٣��v�T
�d4K(��Yq`���(u��{,�:0*$|2����/I��,�`E�����xP��#q�����`��/�:�����';�ىV�D)˴�r��89�w�}[��F����ޜη���+��h�KH�\�ǚU���䬂J�V$pUj�|c0���{���L��A��?�V�=�4���S�Ŵt`���d���o��d�bUP���J�x�g��JR�r�O���s �����4Mw���
�""�42����`M��D�/N!��v�3չ���.�f+�@xO�V�q�j^�Cߪ�Km���,�8H9�Z��<&�o��(�@��k����M5����]�M��U2=vpB6DXj`�r��<�w��1�Y�:�
�o�<�9�;����F���$;2֜�j����x,�ʁ�C�Rĉt��$�VJf�f��9�)�a�9P��&���6Oo��l�<������ds=#3�s��P-�bD��"��[:�wɺ^j��Ӂ��Qej`���Tq�=����H&�o��kĉLD�W�O������*J3s[�6�j1�@��nr<�ξۇ�#���@ �0��c ���?ﵝ<2�D�Ӧ ��}��Ts��S��"�R�
���.}�oZ���Fo*���ݗ������:�������7��H��䍚�x��]���a6v5�R��̾e1��$XL����
J�aa�݆,��섐�"3-�G�!˥8���8
|�T:S�P������pMR�Y�b��{�+�O�eۛ2���g���u��V=�U>-�kb6U���ЩpZ�M��O�`���$W�D�y���A�[�4��a��J?�fD?=�d��(KD䴱:�D�/[�#��$A�#KH.:��x?%��V�r�@[B$�}�c�o��S6`LPfM&ɔ��A<:��v��Ú
Q�~P�w���[��+�������`+j�
V��+��R*���u�l!���|�+'�KY�6�6��_�ud�}_���[�yuۘ�j����o$��Y=�yjR�i)��b�ԋLaD(�X�U�wI�ڻZ�$�7ڻ�9��&��4Z���'��DF���[N]�~�dD?V�Q�W��Ͳ�}vS>�Nm���+S�q�H��a���U!�Β����Wb_+�����U�O]�^���l59 @��1�'���A�^��m����o�:��9�ף�s�-�N:���tD-�zkS��j�a4�rc�zF�ۻ
�x��v��7[�äC8�#7�p5�+���
�~*�bJJY�zֳw+�����-��p�/L�L[cg���n�lc��a�P����H�F����$}�9`������\
��83�Ym�1b>�~ƽJ���Ϗ�yBs="�����f�(zK��M�"�H`��w�c�Ed��:b8�6(9��<��c�l�ݘ/���k��g�G���������^ESE)5�G�_^��k߇�v���̚�}T3�;6�
WvTCP_���k���._e��єNJ�L{T�!��6�j>h��0��#���[��㗚����K��z�,�!�3���2����:6d>�himE�\�=�H��Z+{6��@W�ʯ&lC'�,��rX
!8�(\�̭2�-�P8h��@�C4��<~����Z7j%)e����eF�pZ�'15��^6B���3�nc�o#~���²q��R�@!ա��
z�^�Ks]T�@�TN�T
�,S*@7��C���ī�Ʌ����L��iQ�N�,�� #:��RѪ���j��9��1�-�Y��P�N¿�\&�yL8�ӹ��&0�c��v�Ɖ\�����J�A��;��Q;�]���I�M8 �s���Mf�?�I��r�r!�K�9я8p�}Q�콍��g�-�*sm�~�X�P0d�M^��?D�dI�m<��p;�y�,"ۦ�6��v�pT\^�n���3m�>8�eC���N}����cà�٭$s7ۼ��#յ<SF-A����z��≱�
�B� *{�6cg���Tz�GX2+�����a��0����;�
�EEaG�d��[�M���
�i���g��:B�[� U���3�J9�
0��I�2' o����\e�%4^5}����5���
�0=�
��J�}m�y�&����"��.cւ V��}e�J���:42q`G�O�-���-B���J�F��Y�۾�3|��|)��������IG��a����+�*��ttPb��A�Do?C��g�t��;��I�]G��2RE<^�mK3����+��;�
�[���3���[1����y�v���
#��p�<j�iC�af�~\�G�C�4���dubt
B�K��бQm�=�a���Tq<��^z�ء�(��G~QۼZoO��c��r>R�{b��4���vM�q���l)<�V�{ě晐�2P��T�'D�
Vt�������oP�aU���6`���"�Qe�]ka-�^<xj�<�G.���~��������5۹�ۯ]�V��`8Ϧ����%���r�y�v����;��pc���������`�٘�uҙ��9q��q�E���ҹ���B�����6�Ǒa�e��E�ثO�Y���Ǒ#:y�p���/!/��5s���U'!
��"|���B㡪�
�t\�T#���ҝM�$+2n_���
���b���^�&��������e��i��c�I�=��u%E���ȭ�֓
���fj�aظ����E�ӝ��_�e���(r}�mo9��UP6zH$g�4�ٺ6�P�@@�X
(1�Θ��x_ Jy�{�3���',����M�1n���>v�O��ճ����j���ְr�1�f4cs�_%v%l��K�ZNi�+V��3�'�����~��N�M�G@H��B�b+���v�VFq@�ݱuKZ�h�p@��E0�����ua����SXd��U���K}ԯ�8G�X�KiI���%���uR)�E��I-�ږ8��|1��G�Ξ��f6�Ȁ�=!K�F6�Qf[X���~��_��j�\^�͋^k����`����D��s�G]~�㤛yo�}��;+i%�N}�Q��0��ԥ�U��u)M��[�Z`"�7
��?/[C�{�l�)�$Mr����|^�� a�����:���"�֊��a �l�>�h��y��a��{�2>��CP����L�
�j?�ntg���]��S����{�UӇ�('��b�'f��g0Ӄ����LPA�Mtd�)�2ú�Y!�v�&`o���2P[�aޔ��5��S�|#+��7J��
#ȸ�_��dU��6#VD����B"K���|�����)o���tk�l���,��l���U�)ݹe�5�<A��\0��_�7���^~{�$
qR�ΰf���P
a!f���XU���hX�l۽^��:(�m�?��@=bhg��O͖{-�i�:�'�A�8?g��zHFz0�[D#�A�.��%'��w�=23�ɸ��Z'�Hx�����&I��4�1I�Ji����e�z����͏��o�ٴ��{�����i�ß8 0[�K�/�n*�a5���ᰉ�,c������+��A��BDrlDo���"$Th�T����9�$�岣�'���0V�'|�"������
���S�AJ!�Տߑ�6�F6R\�6\��9�-�_=��Q�"9IW.\.zmkz�F͵U�x<9��ɑ�$�7i�FS����ʧb߂@�ۨ�}��u��o���Ͼ��Ѫj�4=���oeUK�xd�W�뻸1nD�X���y�"���5倘�ʂ����K�����-�o7B"��ě)��uW��E�h9��b)P�%.�$�G��(@(��u��R��fLT
ϪJ6
���)H*y����=���Q/����uI.��<���,��r#�y|�l�<`��Q��=���F$��A�t阍2��d6c��Wǥ䇣4~�%�vb�a�Е_Cծ�Y�l�̨�vq��s$m:�G���\�W[����C �l��}�R�^�2J�I6�X�l9��=��`t�ӑ�/���P��jes"��_�
L��w�m��~��X���N�M�1x���ٛ#��NmzS�%b��,���Ž�~�B�� `�9�Vu6U�}ֺG��u�n�wO�����fsC�\������g�������V��Φ��@����:�_`c+}�L�<�[��#U��*|�歺[��[姙�ԧo��ɼ��\=GR�K,![<��H�?��;�9���:��Iͣ+��a���!���*��?#�'G��=���Q6�,�g�m&;���������X故0��
�������;qW�q�'�4��I�C�g���Y�`�~`6ix0OG�g`���[~��?NC�Q@�Ȅ6�N���A}j��Ba�3�ť)���˴:q�I���gZ�2�vlf,�У��Y��Ѯ��bԩ����Xo�Iė˜�X���_'���5��]J���2P�92��C͉���@�C�����6E�e�B@���A�9�߇���Ǵ�y]�H� �-�
�b��9
��O�0uw��I���7J�x�ū2��\�Vf=nV�V����"#9���v8x
��mpAh���y�3��pQ %��t^���
|�]�YB8jCn�#&�ɇ��ʴv�˒P�>�O�������y�UAt2�_�������n53e*��1���v����(K_H�vV�ʉ3},��A�C�Uƍ�Cu���t��i�-]�`�����7�]R�
!zs�N��t���&��̉̄k)��SL����̹�y7��$��ϥDJ�N�d��"��9�
�31
I��Z(^(
lw6
/�@�Y�B�^���}�OT~9c�c��]���{�)��}�D8�${����yc�,ʤ�{�tA�W3zHI��m��D�4ܤU��T3d�I���D�)
��I۬�.d�~�[-�K�^2�Zc��
�8��u�,Y�^\�_��ԁ�_�+�cJ��$�\2:ZW��b�B��w=��[1'N�YVz4�;��(�fzN���U��f(p֙�!x�#����L�=#ŋT�hn�b��a˳"��,�T�\o�!��@@sN%��|
���t��Xj� j�� �Qo5��������o�eF)o��
�9˷�:�h*'cJ�孏��[��{ȄNf�nz�]8F�/�|��1�v��g@�J:�Y��նNu�:�d��hH���o
����t�M��`��R̍�R�i�:|N�_P"����B@����
m`a����:M��� c2�Ũ<���ؓ��U�O�S�\��%a\A�p���ꄯ�e�\��A�����.̰{���w�ǿ~<dXIh��RN�gkv��o�{n�Ԝ�}���H|e�iV�W����?��#�(K:��m`�&�L�x^F��+'�����Z慉��ŏ1?^�E�(�ݝ�D��u��6��T��LS��6O�am��d�ʙy�2���|�^�S�K�}*�2L/Ř)�h~����\1��
D�̅���$��1�G/Εo��0^����_|q,��|��`�ܷ*z�|���'�usv�j(q�R��zL>��6������ �;s2�ŋ`���W�`�TyP�g�ee0����00�}/ǔ��;h[tG�D�5�^E��#�h�ȍ:f? �u3z0�ڎ�$�T���^T�Ahz� �x
�I{��5�������'�r��K
��z�o
l֢<���Nl���f��M*�~�Uʏ�W��_�?�v;(A���ͺ�R�^�
3�=6�6=2�n�~}c���O7�X���d��J�|��LP�ޝ~ͅ���8�+QD���\���ҭíS�\�=�U�v�
M䅚c"a��K;�A�=ԨĚ����k�J�N�p��M%AR`�و;�(���5�W���=���Y
�g-�^v4��X�ى��J�@��=�c�3���}�*)u���b�T�F�'�|�N3����E����9��ڪ)1��!G���k8��6�D�
~H���Gp�%�Fz3�2��M�J�aZ��?�c��n0�)?�h�N��u�����m3H�~����1rD�'����1������Kr�t�sJ�Js������ָU�����2��r^�+hNzg��l0'\/e��tXԐ�v�l
�j�cm}!Q�ϼ��t#��z��#]����ϕ��O��ׇjE�:�# �6�n:<�N���u�i�����{�z���1ʞ����UV��l�+�a�N��W���h��)O�2ymEl٤�A��7���YQp���fB��<8����;����'gKR5n�����T@ �n�*��!=a5��������Z~CW��P^DX-Xf�j�N�ű�q4�O�I@��S����}�Xh/�>�,b����89����-:G|W��)��b��A��5G��<*ٕ��:ğ�!]gj~�O�&��U�N뢹8��
����g�]-WW(W�NI�3��N��gr�3|��m
�m��'=[n�M,?�$��HD��D�-��O?5uX�]˓��3�7�>�*�w�g?���*!��JyT�@U�g��z��I��_��7�&�\t��H.Y�Z�(4Y'�d��T�
�F��s�-�qy�a�7�
[��67K&�J�/$�c/��x���[���ᶏ;�Ī�z1Fv��]G�'ڏ�Q�BSO�������І$�y�(��TS��-;�hűz��T��%D��ts��"��=�gwU�uD?b�$Zr�9�G���<��&�Ña<�v5��0�]f%S��an*���؊���oмb���8pJ9����⠚�'�-s�@�r��넅��T���AX��I�\8m]{�Of�`#��X�T^f�5��''������W�2Ϸ
v�sE�\��Qs��(�ː@A�jR*Z���a��̳�Slі�R�[�ܜd�*)�ɩ���P�¢ĽHt�o��5��8��.��]�h�\s�І؋����?�Vs���h-U�'�#E�g�m]��2NjWl�rm�Z������#2�BE75^^��a4��wU��K�'g?ge���213����Ǹ�o`��lKzP6^�
�$�$9N���Wvg2�HϏ���CR�ߜa7F�/��3�\8���F�\�/zP��/?������{x��Ӽ�]�������/�^9�@7c�ޥG<Ho~�F��!�6�:�j�*��Nb�lNy����C�cG��d2[d7�W4]�
�5�4i�2���*��h��p�*�9���mYmط��kh"ɋŊ�W�!��A�an��J�|�V�N�c|�u���j+�'���7������('tcnV��d�Uc���)�I╵��8()�K�Ζ9�U'���պ�j��?Vפ@B�O�E�G
,�cC�"Q[b�$�9td҆�=��X�
�dL���M���͋��h��~���l�c�.��ж�t�q�?Y'{'ވ�A�cS�V�M�%�kD�
�{Ʀ�X�=�:��*|�ͼe"������~��Ov ;�G_RϞ��\���G�$4<��ie�f3���Ph�H��b0��6ĎU����s����LӨ���Q�|_P�����3�0����D���C��H���,A1^'�M4������]%�EJ53�蕂
+ͪBP�^$R��R
DB+�M-� �s��b�R�VFeP�;7����I��o��m��^��M����k��++_�����[9K����W��R�vۧ�?f�q2�s��}�X�@y�f��������H�/=�����֯�A~
��0�̜�xra�
GD�v�l�Q���Z\\�D,h�i�J�]&(A/�"Fb��a�ƚ�
��m2�l]��x$��E5x�Ð1x��{�����A�1>^2���_���Be�;b��~�փ)�Ό2�j���
�r�8]'�7��
����
b�C�h�T��d���)�+���mD)���.5�1�-���|Yy���*��o�ڤ�L
���4A她=
��T���@|�X$�in.K�I|�R���@�P����@���P��*���a����k@�۟�������=I�� �=�l����[���ג"�h�X0�QҜf��˒��펖�c�<#9`|cO}$o>e�X<�`,�o���_��K�3�����p�{Y����An[�9�M�
�T(!"��?Z�]�iE�m��>�'����{G�t��
��*~���y���`�'�A�?٘#��)�o�($��ȉەL���vYO1o���_<�/ǐ�M�(���W�藑Q�'^�#0�M|�3}x7t��<��a��@�̻�H�l�1�>���&
.�m�v��!*��)$�z��mr��t���(�:���G�G�beV�w�i$C�O1�
���c�Z�Z�<Gc<z��@�:�J-����_`�8���~�چ��M� ���)
uE����sY1�B��7�4w�0�G��5��z��A0�|Р��[��@��V��ܟ�Q�q^@W�r-���U��O���$9'��IBjf`5
�"ѦYx�Z��
�U�O/&83��,�8�k�2�&��
'�?�eEv�$��L`�B�%�=�T��ftF5対8�.���<1=>�0�G�
7z@Jy��~��p)g�,g��YL.$�,��
��-�<�k��{�y�c*0�2�/q1��������g������K���M&�R<���7xC�y[M�ʛ
#ͺ����Dya���3\��wf�wr�F<G�W>�ĸ��M�]\��N���s�Wݍd�<ӡ���W����064�t�ȴ��v�Ȼ0>ԯ����;
��)f�#�* �2<�h��
�~'B�w���m�H/��������wqM����o�gC)̵67�#�B�S��>_-[��L|R�R����lQ�}�\T�H)
�9Fa��"^�b�A:�ݳQ4��'
�=�sO ���'�@.���Y&8z
�,i7����3y�;���U}p/�I��xV�x��il�F�Z��f���hX�c����.b��B*�|&��|g��e/�k�u��v\_H����b���d�p�G��/�A�}�㬬'�xȜ�Ջ�;�E����
�!W�����j��{���ZI$�z�{O�p�;�x��=�q�{�����5�l2�3O��=�@�j�j#�GY�T�n�>�&ެ��#��CBϩ�zLuy���lS�a�a���0�LTv��3��,�2
�sdTr�U}E����l1�z�`Xa*h{�qiuU�\��"L��д@�T��X�RU��Fg�]s���E���5�V0��X��/��u��k�z��B��'ك�J�x���� �Iz����7�������Y��Ε�1t���y���Κ_}��|�xm�[�xJ}z�l��D��V���r��csdsq�v�[��&��`�oU���l�?<j�C�! OeqB��=�J�\�`��Lr�孈�d1Mh�o�w�ѹKi�ģ�d��*;^ҋ��$��xH���U��U`]G�kC�ꆂ�����O��QS�C��w�o�g~�yG8P�{{H��.$���6�!}d4,q>�`�ll�UMBR��Pe�2�A�1R���H�q��lB�Q���$�W�%��b�hB���ÚV@(?��F��A�Q}<GD�2�:�e@�f�$"�8�ȍF����f��5`��{���K�uv�\��X�+���vj��^4=��03O��(���0-I��fK�R���o���O���i�2�)؆�G�Ǟ
X<�ǘe�l��m��S�\��P��!!�ox�$�+��>dl���+��b���NIM�dT"+�ƌ��o0��`�89����\|5
ޣ�ئ(������y�j�q�m(����<\G� �2���dT��P��0���$���n��@�
Ē!�X�㺕�����N��kճ�xiki����ݝͨћ"0?�^2�XF�,{s��r_e@V�����y�g����N�_�i����wq�;X��ED��\��b1G��(����Rs���T����<\ډQ���2tT �;��`���[�,��Ak��K��bDl#�b8�,]�i\����|kC����xLq~r�
�Ά>|�ž�B����a��b�?a��ag3�0����( j��"F�A*�{ߣ�d�]ř+XH�z�s����Z�S��L�u:��˅�)�Ҳ��n�J�EBnS����>Ħ����� m�h,�R����T�~}�9, �/������.��H�~�!���`��E���x��O�ۖ
�mwI�l꧴ёUz�z�k*�*|m��*.?���~�
��c��hp��?e�Y�]�*H|̛1���e?�V; ا 2�PQV���lW6m5O�3'�^���x�,�ҹ�a)T��eU��s10����ft9�����T��{�!��L���@�OL���tǽ!���^�L!t��i
���^��:C��R�� ����K��
?2T��Yx�۩Fq#0���
<��hѭ����)���kes�a�T�l��
x����9���d��%+��b8X�Z�
��;g�v8n7�ϻ��a��&�^���o�b{w OO��7�jϯ�زΞ��,�~��WY��ػqÎz����Voλ�g�'5�(��"ե�
�A�Ӄ[�:��P��|�Ӓ+>��#�2?$Mnd�u�e�S�J%����e؞~��U�q����
��҈z�Rn�п,7��˱������>`�
�/�uFg��Og)P�J�\)X�k
VF"��\t����r�#��wE]�s�:Y�#n��8��Lm"6D��
�Vġ�H`Q
��ү�QkG�]�<2�N�?����U
��&��|�a���_G�}�di�!�:`Ⱦ�����[�\,Y��]J����Ϲߐ���ì~���O���A%>���]��2P�l5p��O��ѐ��[ʀ4O@�¡,�Ҭ���-�,�4��X7�-#?�3��{���M·�C��1�8�a��Y)�M�"k��a�_=4�JqM��?��nh6�k�ɜ��P�
�2�;�3�g�4ՍZЦө�GZ�k(m�p�v��riZF�}���i:�/��czP��uV�Q9E��&'�/���v��<�2���ۊ����YQ)�j.�HN����11�s��ʗ���؋�{�
��'|�k��lT�%�1�ꪋC���g�QUJ[�'��U�ؔ�̝�ֶ{�81�
��r�n���ҹ��}��
:,�й�6X7����f��e�'
NM�2p|�4��p6��Vn듁p&S=�[-
ߞ��~�Nj�I���Y�/c`YAq6�-��Y�30#V~hs��EPT;�u��b6��WD#�N1o>��)Θ��Cx4�$�/jl1�
y�.�/���,���Rr���[YE*GЕ�Km/�|7�����SI��SƗ�q�F��㍹���6��:c�Vs�@��w��+�k�1��c��aí�����w0:Y5�Q�"
���+g"%*�2�t��`�G��ݴ�
�f:hN3�3�^�~<PM��Z�*w�����Ґ�I0�p!"`�PS�L�6
6�O��{&���`(�ۅ���Mq�aP����=P��Z_]��pv�W�{m�h:
�Uu,
A�j9�^��*��7#�C�f��]��gr�{NY���
5���$�O�e�
Gn��s��$��\�i�`�D�����?�߾;���w���5U�xj~�̦�ܵ����֝�>�yө��)�o)l*��H�-�;���+�|��+[��-��ZG�X�f~<F���_��̝����r�f^R��
߂�4/)+��1La1PEv~�:+L>�M�e�b75���[ �Ho}pi8�;`�$�7��~�Yw�4��RypJ�s�������}�!*Yf�~����W��]�TKV�0Fy��l��$"��\��A��E?���W
,�[b�0q���.�|��x�Z�/�ˁ���]���P*4�$*(����R7��L�&����`goTܑ.�$�V̇�h�U�L�Hn�e��i_�"���o߁��e*mb��D2���u{��ݹш
߶\����ؿ����Z�D�ܚ��
v�z�1Ul��Rl-wk2V�x�Ց;�4�00�=ԑx�~ګ��o2R�mԔ��=��_��r���Z&�ן/߸�����(��[��C{�%b[f�.��<Nc0G2�ڼj��~H��iDP��ce�|:P�7i�/q���-ڏ���\�b�7R�>�\l$}�V����چU���*B3�l�RPf� �d�'���<j�E����x���}�6f�s�(İS���e~4�U���)�C1�i�s%C��r�H"�3���) ��L[��ө)�mj��U��ٜ"����I��R��6�W3��nP���H����ߛ5Q7s\�@��Sw���RhƄ�eq�܍G0?~�ؑZ>���GL������c[�d�N
�%C9�X�<�Q��^i����p,U
ȑTÉ�~��U�2('w|�/��B3�����J,�t
���WgLN$�
[�V�|�v�h0X�X�����<�j�h���j0��{rLNm���[[L�3S�$Y����ʈ~
߇���K������!�QE(؋�����P:&��{�ƼӬ4sœ��WL3A�6�R
iv-7S:�L�3��e���=^�����Ŧ4˳�4�OC��R~ܐ��NK0+c$&3�M����u<:�"Z���,���n2N����EG���%Wթ!`�4ى��_��`��}�.�Kq���~�J�k��t��k�S�y*�
��)�I��k$Q��r�q3�T��)A
Rs��=[D�
j9q���v�C�no�KR2�v�)���1d�c}D�2k<9?�];�8����BR)x�ˣ;H�i�}{�74���4Ϗ[��:g�V-}@�
ݡ_׀JPz�������X;�)aDJ�?���\#X���r��w�m���A�Ў2\�
�=�69j�R�Lm���.I�eG��R�'��v�$� P�>5h_
��c�ҠW�?��+��������`ރχ�#C�����B��W'B��~����c�b
���5~}`��A�E((r�{2me5�
t>`v���d,p*=�ϕƼ'��
o�$ݥ�;f�`�̢�t��ɟJ�$��H��Z�K��Ԋ���k�+Lm����R2��1�,�q������F���p�̹-��J%b�����=g�V���^�y���~���0~-P��ת{�ƛB���2X�Z�?�oG!x�n.��}%�}Oo _�?b�J���N��v�$bl;z��`�&K��x^]"���d�+�geI2�����
�B#�(ijNN>SwF�W��|�b� ���W�oW^\q�?��1>BL�/=�iR��,����cykW�Z)�BU����kjy�4X���K��,
3�
�F��9�pK�u���շ����q�@���OAv�yG4����.,m��#D"^�ѣ�8l�QZ��1���C����\�4oJܨ��힊������dD6�h[��|��L�]�V�~�.��:������0z*��HX�,�Ͽ�7��z��U�QN�e.7$:���.��0֣M��j��9�g�{2ڬC���O��墸���N٘�@.��W�1D�z[���[�M%V�5�r!4&U�r�
s�7%y�N�J(?�nYm�"T�C�Mmr�.�ݴ{bSNT��]*}�v`������1�^H����v�No�UۆAS6W�Oىe[(��B�͝�to1bϫZH��{���~�N�}Vˋٹo��<�>#��o���TFD"�%7�3���.�(?�f������]��`!��������1%U��qL:蜧�ϸ|��@8'�+��V��Wu۠��0��}
+T/��Qn���l�~�c��{�p��a�=��V:#vm��~���1���t 0�SPH�]�/�j�g/!���{/�c
�j���h���[�=�U�@ʍq�Ig6�M������mq�%Y8�dc�`"��X�t�������>�"��{��ri���P�O?��0=�/�9��F�nV}�OY[՜���"I��
�{GEz `)Ӈr���OoK�Y꺧�S����4;�������L'�>�c���N@����8
�ʋ�{삕zb�8_xV������(X"]Δ�ěM6w�,�f�gf��+͜)T��JUt>
-�]z}�o�*�mGŶ�1�S��<����۵��&��:��Q�z�H��j��l�j��L�
�F,����a�Y�"'Lˬ�ɴ��bJp{���6�ի�h���]��m�
�E�=��~��f���Fv���E�`EWinux�8!GVY�??7K^�+�[2���%_�mw�s�Z���MZ?�v�l���9��f��O��{���,�'9�/}
T}�����6��V�zô�vU�[��dT,_u�V���E�+B:�x��a�Y.L4�r�P�1�"��n��j[)Xs�54���
�4s�S�6����{�(,�kW���
�:Dm�3����/
�T�*���z'�1�o�'3��o�w|Ћ��=�Y�<
a�D�m�?F_�Y3�f^�L�f�f'@�&M7�F0{���G���T�B����/�f��zqc�].L.I�n^����W�k��(�h��c�!Ȝ��|�%�?%��\��6�Q��n*��0��'�'����W�hĩ�=��ŝL��CgR��9V��玫؛A�ӚT�Q��y�č&i�٣h���QJ,#�|d驺z���|yYH�����{�FI%��O���RD�&�k�'� ��(����k�ͷ_�u�XT��4�J�o���tǠ��`X����l�/��-�ԩ����
TBIj�ԛ/�
��J�n0,�ħXB��U��H�h�Fe�%�6�%�/���:&zLl�dKT��
�^�Gv͊��SA4�:�D�I����ʯ���<��!.�1?nT���zhԓ尵�Z�B�����Cn���I������~+��sm�8�T��=f!c�(�KH���S���H7!L�S�.D�4�$��~]��ٴa�G��s�iK7���"dϸ}�����|�{���ܰQ�7�r-�y����̂z�RaV�]v4t��������2�����-��讨YD�ی�S�@�%_�B(F���Hke%&5��='�jF,�����G��oW�9�;�(�ڤ���X�3z`�f�M��<�~�1��bR�6t��0l�u�F���Ij˯���Jo��I�q���Ĵ(��cǘ�U��@���Ѣ#e�&��V������y(� �{̧Ku���WKe��Z
^>(wDI���߹}x��
��ƺ�5�gY�G2�2��&���sσ!q��\ �������C�P%U�
fb���S����'�H�Lbi�,�s��F���6���7D�
�g̣oGa)j�S-&�>7��y���CCΖi�]MR���A��0��
Kf��F=z��gg��tf�7Kx
�[��L^.[��ԭ>�Z�c�7���36�c͗��q��w��*CC�V<��])E��9��)�ϛ�0l�SM�.$�bAS��Hib%z�qݓV��ʀ7�+8�{
\�H�A�Z#[�8��0�*��r[-�swn�xP+HEl���Y./�k6wKb�?�8�8G�I.�u���r�l9�Eiޜ����`�"�ƃ���ȇ�˺�&v��I��բu*J\[�^en�Q%j ?{�nW+��1��Z���C�� �$��3��!��6���/�SG�
@�4ΌE�!�Rd�8hg?��J~���u?Zi��D��4��K{j%)�'�x��Ma��YvkEt�,l���c:��w�Xk||2��$�.Ey�=x��*-LM��_���xC���{�t��4.��<�P�r�͙��s�1��/��N8�uu��.ӿS�_r�j�]�\���av^�����s��Q��ZŜ�-��D�u�S��g�6����{${�r�2����5�>���, ��hc�b�J֊�?${ou�o>ͨ��vCl��(��<�/0�x�(D'aԧ�R�0��"�o@����>N�9ߖQ�]��}��3�(�
z^)(Үe�}E1\�p�B�(y��f̷�H����Y��/HI��;,���q«=���d��<zl�hi
f|A��f�g]y\��:e���}���կ�F��M�.M�-L�C��E�f麬��u��\Q(K�ۄ�Rj���R�Ǐ��/��[��uTOb��D;Cطc�E���E�TSq��h3d��-{�fXp���6��h]���V�Ha3<���v��J@X�����M�zdR�Lb�3��/�����dz�"���?Ԁg�:D_���P��7���_٠�Sc}����ߨ�ʕ�0�$��0��s���MG%^��X��5��Tn;���>&T�<��)3SfV1��ړ'���vh���D���n�$4n���'�r}b0��D�xo�V���U�JgIN����}��4��/��|ߥ\��$M��y��"�j�}j����ib�!�NӽSB�v�C9�wp�7}��5�����q2�Ѫ��Ҵ�UÍ�,��鼁I��}�;��Y͜ȝ�DJm[���O��sޥ$Fl�X��~�=/_��S�L��J���&��^(
qwv#�� ���.�P���:bB��fV�2q�gn�ٙ��l8VӅ��b��0�aG-OTlO=A�f��W�OOJ��{��̑Ͳ�g��
k:���I��3��*z�A$���̊k�P
�`��n�FGx)�G�RPE%�5�\�}������3۵Ruu��W�-�������2�����G��������%v�oM���k
x��B�uF��N7ׂkV)12�dB!4
��.
��N�8O,f����2TiV
u����d�L��zy���u�g���;�Ks�'^���y+�7UUO���B��ж�+�$�%O�9elե*��c@��F��c6gg�MU_�~1f��v�V�5
��-V
��0��
)_D�{��Գb1�#Q|�k�9=�?���Po���c�s��$&��}�BoWT��"M���=�Dy$,I��N,چ� w�I�x�E���6��x�n�C�C-���,�ϕ��̲Y
:�y�~��ʝ�،��=Y���c�,Txe�qU�k���*O��Tq�\�E���*��/ؒ/��NS�Uf:��b��?�ī�H�t$ٶUfu��dH"��$�2kQ�/���WiX���N��x
�r6���_y{?2�ڽ��C~{���u�8�|�܁�Sf��+��{��3�0`�wbcC���Q��+zƪ\T�-�{�]��ξ6�Ѯ�c�?�8�Z~|�&�e��D��9qW�2R,Y+���y<`Ow�A�bz6|�]�:q��Z�O�V�gM��̥ic�kJ�0�=,������4�,am"����RC#��,c�f���Z6RcG�Ţ:�)e� ���eI��r6.��Z;��P�+O�)��$\�wI�V��(h�`z�{%�fp��xl }�o��nr
��7�%ӧ��{��
��x�m���1o��i��q��
J���O��'V!��"��=�$
ї4��KS�+���&Z�ۙ��'�憥Y���^��e���~���}�,��x'"s�o߮d����߽}{.�k���TJY;ff��j�KV���B�+�j��qM�WL�"�e�/��Yf����xw�I��:k�I��q.��Dz�dLWim��]ɗ���]
f��)�B��{l�ֻ��`�j�~�ކ��;ā;~�7��-zA����X�'��tb����WO�.��$�GS0R��a�#�Q���P�O�|�P[����%`C)c���"�ͽdD1�xp_s*5�ac<�v��P��c�q`{D8�Shv��i
���W� ��w�pk���R|��O�2/n�@�6M��R�իB|��\Un��^�l�s���=[{���A�?��zJ_R6��SA��� �������o���wn���~��GK+�(uhK�7���,���H��⺔���Q��/��,���Z��y�(NZ��y
����ɧ���e+u�h�C�<�/�,s wy��#�j��I��诵�{�Ҏ����,ٿ�%�`S"[;��_~`!>�]�*��t]8J�u�uO�
��աH>��h�Lkq7g��R2�,ʪ��Z]�|��$�CZ���m
������q�X�� �LrS���Kb��홞���%H���/���w�>G�9�(|�v�v�NnNvX
N
Ѐ`p�����+�{(��u\�
s��Q��p�ݨ3��q�\��͟��$�ﵧ�;Q�Sřz��[jl �6n�
8�DT�}��㔨�P�E %��BW�ح�Y�w��.�����!����/^�mdSZ~j=�*Qgd�⨎�0t���]�����q�-�.P�JBp��1 �ث��at�l�/���y�p�q�{~��TOH���6��� u�N���wY�|�
A�Vr��wDh4Kk���+
�/�@
@��O�����J��ZB1[�?l{�JՊ���q�9Pv�oY6�CJ������������$���H`7Ei���)*eK��Y8��{V���)b��pNv/A�%�;�uh�(w̃�l}�*�4�y|uV:&�*P;L�Q���g*}O��W;xT�!���F�[���o�
l���*�����K��K��Uv�ܼƌ٫NY4�$Gd+�3�$K�VZ���F&FuR��j.GN��ۖ�5ƴ�revv�v���Ȭ2M��C[�)�|��eGyb�{�)ڻ���.I{l�1����C��e�sZ�t��h��ɻ�RæGp��7?��(�d��W�^=�
���&�f�V��͞�iϟ\���G��6$��$��uP=o�u87����[�%>`<�.��$�Mtӗ�B)G�jS�Q���Ud�`��S�"��3��ɽ�}Mױ�Tth?�7���]�����i�EH���zş��|�-���td���ۑ,�:�D�����j7l��D6٧-�����+�}ZU4�^��xO�ݼ��f��QH����U;"I{�)��1��Z���.����@�2b+q�z�V��s^�>��V[ŵ���-5�v�����]蚮���c��"��"f���\�߬��<�ۋcy��#��Qj�6dr#�ȑ���J��4l�O���(y��N��}$m�[�-�|�Ԉ*��S�\�ќ��臉@��@
���ie'�m��'q$��s'B���A��d�)��.�* �_y��#z_Ы_����{��_a�_=+䊒ӌϞ'P�ܺw
G�J��l.���r�q�Z�vD(�DCG�&�C�ر�!��=�ǣz4���v(�$;�{�2
@�iǘ�u��pc�E��
hh s��>
��L�^�f�ڻw�
TWޟ��R�
�/_�I�Ħ�M'B.���,P�-�H�j)��%P����Dp2��^�^w�`K֫�K�Pa>ξjϨg�)�KS��ټ�dGFYG�$����X`�7%�Ҁc�K��QO����"BաB�'��^.�`"�;�G����leԒ�O^l��:�Q�>�45e�=[7$z�����i��F�\*B�'ǝ�A�ko����MFc�������3|�Ӭ%v�>!���]�����'! ��}:xi�/�xcR�^W��I������C��z��_`~c���V��Fvf�]5On��C��?��ҷ�7�9��']�/g}��փi��UIȃ��O�t��̒�?��k���:����[��>TSi������E<7�E-�N ؐw;�mD��u���[�����z�+9��g_PO$��UYN��[�#j���I&���3�\e4n����)Rvcx�/�V�C�?�K�����g{G��X����"b��(�6��ʛ�|���� R�r�I���&�-Nձ��*�?��2BpEYP�[��.���r?�gO�h��/%l�RO�E�
�f
N=d&�u_qb�?X°��f:��J/��}?(u�6����P�"��L~�iV-�g1��YBg� �����}H�K2�4鵖r)�ۡ�#|ti�@@��J�R[��k
x����cE^����I2߸�dVo�qP���kZa2��H�/�=(�c[lW%i����cX�c���hP�q���6�c�M�?�}iSh�Rm��]��6;���?'����B}g��M�m��Ǟ���Cj,v���Ա��>����G��+zYl?G�ܦ*{��.�m7�A�T�^1D�"�;R�Ur��"bh��lqw$���/gy�R�mZp�%�0B�ϝ#4�b���\q0n� �N]M�<�q��N��{Ԉ��h�@��1?��~�t����6͜��T��k���̆ҙ҇�\M�|�t
�5O<4>
J�}��,�QrQ*ͯ��A\'�)yz�'�KdخD��Wdi�@gzu'1\}�^q���I<>e^�h)�Q*��lz�B�l?g�������G��Z���0`��~���9�<!:���+��xۣ""p�[�W�}��"�Y|ʒ��>�/ie+U�r�W���Ws6
�g�*�D}�z�yn+ህwUӋ։��f�G�%!���L[#��"�h2�fmh��|Fqb}*�H��#z���nV˴��]�xA
�1����m��k�
ׂV|=�@�=��OB�z�P�d��5Vrl$���ZՄ8����8^Ϗ�qp(:A6J5PY2 èV��'G����pe�\��hj���p�1a���w�ʓS�A$�|�H��E#7ч����|��p��*���
�`�D]Z�B-��\6�iWẍG������GG��~�Y�J��T7Mq^��#�0����õq������b�0�KVot�[
�Ֆm^�k
k��-d�p�ݟ��^J��d�3��ݕF�F�T�Ϻۗ�9o�\S�8��qk�"�σxL_:��P��Lh��0!��iˌ�{��8�:���zE
�Oy���/�l
,)�G�����q��Q��R�`��\J�>[����ip&Հ@�����
��$��:�Q8���Bt:@`{>���'�a�ޝu9��9�'��L�cи�đHh��d͞���YG�f�������/� N�=�Sf�0T�;WJ&�
�I�2����31��kÉr`��}��A̶���������d���@\q-�9(�B�,vѣ�ALX�q�H[�!�f�-t|����n�PΤR^�b����GO�f�=+����h���W�D;Kf�x1��^U�]�3�@j�K8{V�.
"k5���h�G¾�pC鹒�*�6i��S+п�u4495�dj�+��Kk��Nq�B��M�++?{�2M��NJV�u�90�$#dV�/�,)��
Ak0�Ƃ^����F�ߛ����n������<%��J�����vq$������d @�ww��?��R��s�
D1�F-�_�E1}�zc�ƝZ�h��[����$��&DWx&fe�%��
~) ~��XL�t˛�҅��JK�//(�F[�KY=;��ؕb����~$Vd�]��8��|��bJ�):v
���3R�R�Q��}˺�O�� k�UP��}��SV����xsQ�ro���3��z�2�F���'֯���nN?��{"]�1B+�յ�
�;*�
���eO]���-��N~���2�̜�u%l�(Z�����b�9M�h]Z3')�9�#�>�*�<c�;�Ԛ}l>�%�)�V`leY�.5*���D~�-��d5J��Z�!Q��Ӧ�^fP��/fj��T�X��X&(f!�Ý^�g/j< �/��륃S'J֓5�V^ ���ߟ��^�m�{��2��;��
0i7$�&⩵�ӵ�����XEOS��x�5DZ�يt"�h��v�_C���S���~A$�<�@���f�\;S�a�)��6C��_���Ίg0(4i-k�<
#5t�\CC��h�>;�!`����
3��-�6�ht�D]�S�eN����
�}�}�����"����#Qn����`F:��>�79$lV��e~���̈Ja�%��q~�ܣ�˴��^l�C��
f+/����eBa��<�'�
\*F�C�;��|�c
��ڀ�N��f�!�L2i~�<[
����p�&�ѕA�kn�n��r�틧���n&�fvnjn�-��2�5(!�������rC~��D���"`\T�'j ��P`�0i�O͚�F�krf�uə��کj\'�3�!B�IEl�Q?��m12<T���R礥|�X}���v��f�*�?_�K|IY������{�%m`*5�D���`��N��9$#�c�����z�K����t�d��k�7��[�3�z�ܐ,����b<�|S<�~غ-VE�l̤��iA@O[��.5>�pQ����e�>��R�w�تD�.ۋ���
XN#�'N���jj��о4�!��tK_���f�R��!@棼C�J-�ja�H*�����N��p�@w�V�[;��
��➄s�q���H��l��ڜA�?�y� "�j�!���<�U�?�h����k�1��oa���e�8S��1�Н䋄��!���9�h��I
��B��
9K�o_([f0���o!����31�C���;X�Ih$�ɀ禹@��@0Wl
�]�&)s6��4w�Y�3c.��Mg^��1���O�qs#Ms�3ZNLMi�}���
�9�U�~��x~{�$6���F�ɬQ�Ei�2Wv�YF�A��Vl�����VDXer�(���Z�e���Ͱ�3)��\t��5\^�"r�Ш�s�
�w�P�5��f7�N�K$f��^q{�"L���]��z`@��DQh���6f���~h�G�5�uU7G�����~�
���.�#3�P��TV�!�n���ژPf6�Չ>l�6 9@�Җ������5Ϛ62�t@7
��L��2 ��
t���'ԯ�bH���Լ�w��Wf��Ɋ7=��.=bx
%d?
���a���
�9�e�p����H�ҩK��\��ۏ������$����C%�0����
������ntv��:��M�`᳑B���asp�&)"-qc��� ��@�I����bk������3eP�F8��ZmUL(�(qP05�n'���C���V���i��������j���ɿX?q�g^:ӛ�[[P�V8�����6��=Iɉ(�c�G���@���Lb!l�l��8߬Mv���vVb�q�~��/���%�Ii����҂ϡ֣T�=�!B��PS:�m�u�v��P��s�ϥ�;����Z|s,G��:��pH���g��Vu��ZR>f��@��e⋮@F�<6�Ͳ�.��L�
�/�)�X�3"LN>�^�m��w'����>��\�C<��C�Kb`�(.��u�ְ����T�'�
�o���MG�{x�$
v��9�
�|�F���x�ʀa@QI�֧�'�=�z|Q�o�^B�f��,�Zf�W�4�#�4��y�I���9#��5ZڭE���2�p�'��B��~���U�j}ۣWwE�`�
m�'?�!�@
��C
2C���pc��lݻOš�{(�C2��kC����k��'�U�"��C?�T�Q^��ڝ��kK��m�3��m��$���ͮ��]�<i(Q&wldmY�1�
s��3�hOJ����:�N�I��7N��$�zڸ��##ot4zϊ�p��驚�0��k�x�ȬU����ÜF~:(|�B�����n��m� `N-���d�l��9�/\T�&1����9�V<vn�:};B+ׇd�S�\H���l5�
j���fe_�����Ńa�8��||g���x��WF�i��%C�F#�Mk��1����wJ%"�\Ӿ7����R
��6�;�{<�UK�9`�;$�Ѿ�<�{b�a*MwfԱ���O_�g�2��Ej�]V��4�X�*��g�S0�K���c��A��T�P�ݏ�`~�e?�F�[��n�jX�nر�U��5Z
�"��p�ss���41�@�����Gi�<J��<{��z���ޢM�}�a��!Be:�܍o�`-�C\�.yk��$��exdz�N�H���(���_����!�KF���otvW��w-��s�L�>��]9b� �Jn�)sn�t_���_xEK��D�
��B �$gY�A�V>g$�%L�0L#��{&��Ftd�\��P�=��a4��
�8"�<ܝ��s�L^^N���Ec��v���H-_>�����;|+�c��!�������8�O/�.规��Jn�8�&�,���%�s�t�]6(k�H6��Fq#(ۉ[�y����{��0(�^��ֿ�b��ף�Ŭ�����������&f��zCqI���<Μ$��((h\�ED�C�������c_�x�/��E�.:���i^��+�Ο�1צ��҂Ji4@`l�xN�L$搘6��T���.��?���4]�X�1h|}g8<1Ȥ<�@K��/��/��5�p�ל�o��t��p�a
j�t�bE��E�y��&Ц4`د���$�L���"����Jvi��l�j�Z%=')��8�e���`8�T����*�M�8���.������w�~��\(H�t�vr�"jDo�GG
�i���lHe��%ia&9�d���d>�-i
�lM�ܰ��TA�$��VHG|��
�$��:�1Rs\�Z $�Pj�ۇ��]ً�g�8`簆
�zߒ��V�X��ݕx�rtX/�A�p�2�^[1~R{�뚬���ɇ�:kCU'5n��%�'�CXP06G�ۮ��l[�<�N�scOFeQ��-�gi$�RN���o7�Wz�
_t��"?�z<Q��l&��B,5�"�}\��i^�|}��R�����l;$��ѻ�'dxw��A*�ͺ1_w�f$or�w�V�$
��T�Hi�����L����lVc\����7O슚��ŹR�D)�]��B����=3���qF�MM��ȓ�B�g����
�OM[�`�W[pBΉt��i�\��`�{X���/)�ƩcD�R��Pvz�x��49H�_��ه�#�1��&��P�/��֡��&�U��u���)��l9�Э�:!�}ɑ�=[�*��;����u{����.��p��"�!��,��|v�nN�K�63ud>��6����y/H�}���ё�{qL���$��
��-���a��[���st�nS�n2�ğ�@���ѷ�����xHNp�������2���&��3 �����f��x�)�WP'h�7f�>��
�s!�;�p��&Q����cN>OgdH�E�1u {��^�گ�V�}���2�@�J�H�S��>!~��L�^d ��r��5/��GyNW�-�`����ɚLJ��=��(R�V2�ȏ�M;�:�-��A0<Ȥ L�1L<F(�J��L��Cl�Y���N��_7�:*�\8͏�w��
d5'L�����H�s5M
�2ID�%��WP\pyr�~��ҍ�)qN0�E�|)�(�@��(";�JGZ�!���U��,WL�#E�E�����O5.K��������Slso��z�d�7��ӳ;%n<�5�*���iu���?o��mI��"m��.�XL���F������r��s������
8�!���{N�c�yٗ����Nf��2�!�n"5hU�F��J'�d�B�2��sv5� �����C�r>~.���ܤ�kg��LinN�d����u'����f]��B�sL��A�5S�h�K�v�vn-�_e�9e�V"m���B:�GΫ�x�c�ZX
���o��y����HKgT�~cN¸���OZK:�b�A�%9C ]��o�ʗ����w�1��)(�t��^�?��u�Ʀ�-A���9�����9N�لL����#�A2Yu����5��/_=fql��j���އ���ˡ?u��Ar�Z����]�A�X
_�v�M��1V��&P\���6X��2��m7䥱[lҏ'�A��Q6R�S�Q}�딭S��e���S\D-wLrTC]�ӎorly�݂X���J^fo�-���˰��(�X3�R>\�#� 9��VP饘QՐۑ,a�e���X�#�*���gV�Tnq���GL�(��Z)�o�M�i��!#Z��H.��$�ɀW�����\�p���*ȶ��/��.g��y
9��L2��p�(�#Z-)i�����j��jԭ=�0b���`n�0�a]�k2�I)�X�E�8f�nD�η�%8�CS.�o��ě�Ng�'d�p�-��J�=a���Y<l��Ǡ�OYdb�Hl_LC
^]����o����>�ɹب��Nk�Y ��Ե=�����f��N���H�^�����f�<���(|�E��(SL��\���>�u�4vdN��~�HN��[�nD���eh/ڈ(2�1�he_ʔQnV=�C��H�E��gi~�%�B��15���czŕv
�>a�Y��%�e�&c!��pIB
�8г]~A-l�64�1���/�[\\ZI�
T4�W���aa8'l��xRY��N�e��j3:��-:G��6�v��ad$$`�M,ܔC�z�3�!q�1�����]Ӌ��n#x��B����l]��K�^�t����_@Y�u�gS��k��]�OƤ�&v:��N��a�L�ewɋ��-hY}:��xi
O�
��x|+^�ñ�Cq%��]{[[�q"� �x@L�upՔ��j����-��[=�����ئ�\�e��jq[�%��^W���'�Hj�y�c��%J8�Imx���=�C/�].&�w4�D��,Ƙ��3���"�z���`�U���
|M:3Qc!�_ǣ��W(Wj���q��S�#f(G4GޗI>�����n�ڄE��٩����^�����˗��<D$>n�HG[�M�'�C�&�Ǹ'o�rUm�����N��ݾwJ?��6�\A<��N���ZK5�D�)����Hi=�i�qlS��:�B2�&yY��^�bخu}�Y+lc��Z�mL��%9��s��̪Y�O�1�ߺYD2L�
���ʢ%���c+7�V�_.rsIq
pש��
>�bG�Nz�Ž2�q�X��D�I��a����'H�V�T��으���E�t�|��G�3�(
oOtrJl�s<�;���3)YQ��`gw�8"o�&��7>�cѭ��^��@&��t�T�}g��$�}��0h�h�)�GT���s��y4r��
o�
M�H;Φw�~|�
!(���������ad�" ���-sQg#�,1M��|��/�u�h�R���-�.k$G�K,݅1a=a���YP�A�,q�%!�
ONzvN6�^��>��ƬA�v�J�F�ӽ�)��
/���ުl̒�B3GM��'[�,n\��\k�ѣ
m1�hm�o�>!����jM0C
<����埵��ߎ\������`K|_xN�`ǀ���pWJ�jHL�M�<��_���=����C��M@Wޅ�%ꉷ��dž���f���%�Mn�p�Z�3�@>'�M��d
�Y�,BT��u��J�:����o>��b^չ�ȑ�ދGx��_W�`�H��"=�ϟ��z&=�@�%ӌH���qi�x�DH�Xx�jꄯK
|@QT��P��+�:u�c�}О�T�����B5�ڨ�81��hȩ����a��Fu�XLc[�nNרxtN�D�X��*N8������s7�|����2
�R{>}78��.��G���yՂ��Og�#�Q���q�'�g
�f����K�Y��`�9�h�2��6�$}��
��(�T?��}A�`�7�8��LHFR�G�
E�FJXw!S�K�r���@EKa��2�'��ʌ�%v[؟[7��S�F�j��j��[5�h�Mt,���^���i#��Co���q§�Z�e���t��e�Wi�����p_�t��^*>����Vlh�Z�Q�jX��B�㨪�9�q7�@������'������[=e��H+^ї����a/�G�6�z�<�6)yж��DH�wF����v�2nF�)%�d�����.�)��ەP6^÷r ��{�h��<�L�?�Ih.�����dht[$���] ��fŘ�9&4.�;�s;�B�����
�k�����~�>�j)ϰy"T�㝼j�MU��dM�ݱ��[��D�g4{+�ݝ���:�<�9q���A��w L}��A=£6�۠ev��Au�+U�_��Q�3f�?���R�\�0R�
�R^
�,���V�w��W����2�`A �v�G�<9��4nX;�?��?�*uV0�����{[4"��,���qӼ��<��RK�+���k5�WxcF��PO�=*��;E����D�~��:� �m\A��p�����\XX�d����+�Hk6��Zb���WsX�/��$_��Q��Z_���hh�L�u|��8�
���Z����}�IH�:ƋoK}��
�a/-�k��xVq0��r��LC�_�D6h&軓S�q}pߨ�=��~38���^x�Sߡc���8Um��e~7����VUZ�:�vƯ�[m�>���?�
��p}�_�gKB���_
%�_�g=�Ih|.ݥą�V^1䓺0 "{��7��m�s�9�ꛦ���B��N��I�p��i{
]J�
��:M����y�%��u�����G��Vց����kk<o)�{<O�GJץ�xCNj3-˪���W-739�Bƒ(T
`�P���X�i��wQ�:����6�)"S
#�-��,�"v ��\��d~n��2rr2Ob�6�[�T���
R�Kc�Y�犋��4c]�>����py��jp:G]�Z����$0
��_�N+M7�Y2l
@x��6q�� ��4���59O��}T��r�f5��2�k
t�߲�}�p�U\�ur����sVl�ת�a����
}Vm���~3�gm���,\7m}�-���*�,EH�q�$Yx�=E���_V'��C��R�i�ND��9���/Cb����x��@8`�2I̪,!���f݄�nE��8�b�+Q��2쪘�CZ^?G��Vf��砱��(B��Ie�+�9��:
A���
��v����4�RB�H
�z�ѳy�|�x���֣�W?�E�t��FO�ܔ�c��=��1E�$V(T��}�rY�!HhQ!.F/
d���իG���0����;j86t�������� 8��y��QG��/Z��a3=
���O����_�ؤJ��Pג�I�Rs�Z=��|ڼA#������#�su��曻;.�����.t�ש:�KIT'�6���m7��"�:���s�b�q�yL�@Z,Y� bg����,���n����{O�;]�ɪ!_�"=c�Ӻ���dij�2�G�B�X�$���|��i�!���*nT�%��;�*���^3�/c�E��s�4��CwLj})���<(��YpHw���W�^��HL�-v��p��đ@w��Пp�̹�U�K����>1뷀��L˾�f�0p��Ύ�=�_��! 9�q�[���ƭ��t�-c\
� @�q�]���CAJ��p�Pao|y�lN��{F��*3�F��xLTv���0ԛV,�������jH�A(\���x�����xtP�
���R�^����S��h"�H��Jn#_p�.�$���s2�i��B����{T�uZKt\�LI�%���*���P�={�b�"U�Q�"V�R} >Z������ŊN��Vݮ�-�J��hσ��
�^����;��FQ��,*+�"�"�00)�:;:V��P8*e(7�Jl�����0oHe^Ɗ��y%�`��4��Y�[eX}�6K�J˩���^#<ɝ��I�_/�23-@�l�4��`��P�=�K&=.)��՜XvL���f�o���BG]ޮ��+��Py��I�n�V`�k-~S��d��d��cU��.�gƗ'�
1N����0P!����H��]Hf��[�Z�x���\.�
��+�\_4b��Ov�����#������v!�l�,�x<�DxIN-F��e,/�\m���d�Py��Ir��ǐ&$�G�K�K��և1�q�zG�!����A��38�̍�97U;ȴVe�g
���L��ΐo�tp�R<s��k0U�-������=C���C����WjA����Oi�ퟌ��il0Gtc=T� �u5�<ل�'M�>#��
�A�D���䶅�)�m�"Ǜ�X!-�Μa�R�����_��});�;6��П�(��o:֔�qC^��Ǖ��۵�A=�z�O�b� �d�~���������hz�n/J~�ǪŤzS�,J��J#2ŭ��i�Z~_�{c��]o�bR:�v:��?e? tZ]ָ�ՠ�gժMk�&�zz�q��%�UCW\Y�ڻes���7iv����Z�d��T�V�Q�C�$mČk�i�w�ƿ#��;�̋� %y�G�8@5:yq)���|⌬N��=������Bց�^\��S�8]�]�?{��rW����[-�+W�q�)^2���-��KK�0g4�LҼ�&O��SP�d���Ş-m���>����n�x�QyY崎b��y�CQ����A��)��B��D`<`���������7����%f"�Y����>���ШG]�T}�_�����T�,a���^&xԠ���,v�4�EpW�¶��S�A�N�Ⅽgj�)����&��d��5�4��(���$���sD�Bݦx��O�h�XQ��L�w��`�q�nP�sT�s��'@�Tz��,�2��J�*njވ�4_�}3�����י�j�ҫ-�%i����
����P�O�F?��kjS�#�G�'��p�1��J�m�b���a[�2��?kKq��!��@-^Y97�*��o0�i�M�l�=�ߺ��������(�7g���_��Ǚ�W�أ��..��
�p���k�����#��c]@��q�o�s]�vK��i]�C+�K6�-�/'S���{V��F#pƦuO&��g�z��u��t��xeL�.��v�s�Mf�џ@/��)�u����A�)0!۽�)/Y���_$mU?S^� Gq����Vċj.v���UH��0��mǕ��*3����bt3����(��$F#��P�hzZ���o��\��d�沠pmL�~�Ljb�mmK��� �qsN�"Q_Qh9� -��㳟CU�џ��O�=ކ�y�5��Yk�����N.eu�i�#u��ڒࠠ���p�*��!��C_3��Q�p�azm�g�-��� �-���k
8��Z��莧�YP�d�M����`TG���hѤ]:�d���VN�vc�W:w��|kҁ.:ӫ�O�ڑs�w
pT����%zه�*�0)��A&3��PPQ_i.�-Z�!���%�Tt���f3�k״�+��f���6������6mP�яH4�ׇ��2��
�umMCͥ�pm*Y˭���9�_����J[���.9��&��,r�H�i߃8Ʌ��a������[�N�n��<�CrxL��r�J2�vc��>x� �����J�#u��:nY���}l�z�Ӯ��^Y;���z��Ӊ�1�`7z�v/��_眓��{��='T�
`Jټ]�ȇU�)K{v�[���՝y�`�-0-�?���^����[�mSƐ�=�O#_D���q�q�mR0���)�
i�bJ��}���<�w�o�a�6�[����^D���Zz`����̶.D�K���=b� ����b��l�w헂M���7dֆ������#wQ]!���˘��g1}BJ�9�����Ԏ�I��=CVR��%�L�MU�]C(�+#O�1Q�dj�2��~&�B'٩p��c�Q�4�1#���qʸL��̮�L�➒��GZt*j�I�`��Q���/�HJe�l���豎���x[0�D�1�STK�af�;���3`L��}�{اJ&5������J�^����G������&���x��%n�q##�G��7���p(/8����ʶJGy���8�?�����+>I�����克W�T�m
Aj��/b����YFNG�uc����\�����:�i%���fU,p�I�p
��^y���B�cx�2�����
Vb�6N�d�ٍәT���l�W�{tĈT{��S/�Q�Y��K���7��#��pQcGo���g�Q��G?e<���t���J���8�3�Y��ި�F^:�̊�|�ʚ8`r}�Q�hF�4�뢺j"�:k�2;k��.,�&��z�TIF�Ty�=�K��;�pr$�Ѳ�8f_��TIV[��[�ź`���.N0�U���8IY��
�D5�7�o-
!�mv9��\/�KR����!���6���b��\�+'I�e/��a��Fzͷ��{���P|�w��4ej-��t�۠^�\�SK�+'�J�R��S�f����4��Ԗ+�e���"Ӄ�j\��ʌ�E�.�>p���!�\�B���}vچN!"f���R�0r�G��*��
����/J����6�M���n���~��}}<��o���lϸ�p�f%��n~��W�X�U�lA!�ˍ!ӫ��8�iD*�z3��@��EYo�J�N�C8f���,�R �Ə�m�w�E��(�i�wL��e��7�xЬ���2��Lz�
B��,�'\n@Oޤl�o<i���YU��ʣ�:�8��p�u��Z�8�&>�s4PcX�Y��������}t�p�-� ��yC&��z���
Z`7�)�<i���6Oggtx�
hTI�w1a�r���3;e����0t����Ysmv�YE����{)�K���Yh�&�ۑǶ��X����>T)�0�jJ���ׯ�$7
�����۷o�Uck��w��Y;8��>���+g�6w&$�>ނu���>�
�VZ�J�����g�˿�=���>O��i�]@����QY������O�����ƽAI�N%F(��Y�9�9��J�C4�Q@J���9��u�3p=�0A��1
��,^�>�(��HR��Bx��Lԇ�j-���a�p3���7ub�NV4|u��砋ale��z���J@��5���y�C�Q@RRq�O���</�&�IG&-p@_S/�mn�����c��Z5;�<y ��/骞P��e
��������P.Wk�Y�D4�<�A������NǬ��i�D��N$�7
�.�
�+�gI�g��:�#?ḤPuG�q+5<(��ڮ-H�JD����U1&g�ξ#Y�#}ă��-�s�<I�ʹ�`�{6p�S���uA�mm�G�p<��s�Oic0ʶ�u�����f�5o#������.�o]�l�<(I�Ֆ+�
[D-���d���qꝻ�)�<UPqyoQ^49K�# *���%^��"Vv�*-���s�y1"N�!�4��\U$џʋ[��M}�ߑO�r=��K-�
��82I��+��(�Ydmh����La��$U�T��
��C�(����' H(x��
��=��<XU��Q�����L)FM��^�>�¼�p����1�B��j�*�O��|O�,������0�߰�ʹн�,u����
�Hs�5��IJ��R���(���+��F�L�?Fh#~J��1�������p)O"�-J��q
�Ƀ7�u6��(ۄ������!P@��>Á1�
�&'�s3�ه�X,�9Y�|�s��A�CEvp�|̺%��3�7�_*xC��8�
<�"�'"G�����!�£���V�볩�s�&<6D-m�������t�t�z�q5��"m����J���}_�(^�m�'V����s�۴F�>}*s�V�Ӈ"����m��������9oq�����{��o��!<�]w�@a�#a���Y�Y}i����|#�r��\��I�_ߙ�W+��"푎��Nܞ�0�|��9�8�ֽ
.�yf����n�sˡ�b���~p*5E#�s
�vN�9>�c���QG�!�Ú��8��Њ�y�6&���-2�~Q����[�aṖ��о)5�����_[��z�_i�t���b(߭O��=�C/�����P4?9�T�,�1��լ��9��"�f���P]S���Ԝ(0v4�s�Jsb��nQ�{��}�#�@����ɏ���U����^��R+�/6�'
������Kh��-��F�s�5�X��ޖX�yXQ�3����
����WK���b"��&�â�{�[�m�p��Z���ֶ/ʲ��Z[��Z-l$�N�e�WHW�M�_�
Vӧ�x�s�䀱X
)���o�C&�6�l�ktIp��].@?wS���h�s-�$�9��n�P[������p�Y�ӲG�:������E�t����b&�<
�E�_���p�0Jtz�X��B����.R��
.E��Ď��u-0OSBþm ���Ǣ�����]v��d�`��ÝX�P���[
��V�C�4O�������0&z��u��4�&��E�ʙ't�A��B��%�+�DˎG~A�x��CPKZ��n���Rg��x�+��i|�o�ʜ��8��o�qJ�`��G��~��ɕo
P
�8�yuq�뢵����𐠵�������Ռ=ƶ��T�·n2p���aA/�F[
]+p^��F���(���?ɬ3gg���Q)���Ċ�DLm4��G;�?81�[ѫ�T�>
=�Q8��)ʒ�5��ck+gdR�����A|�v��a�kBcz���[���C8�^'�դ���O�S0��*
)�5r��|��Ȥ��^�?�z}�[�SWU�����T}��?L���U�^����}L �6h�8�
�b�ǎEڰn�/�M��A��6����6Mk<��u9�o5)?q� #�019u�A.�mX�iȪ�fg�Q���Wo�g�@��u�;� �o#���&�o4�O�:on��M^���;>��r�0�.'�}�)X��"�9��O����~�.7@3����_~I*���`���֣��q���^Q(T����ߠ1�``��w2����u���Փ��أ���0�F�(zc<��mL�hc�-p�:�|m��.Ǣ�VfhJ��M�~�
�[е�}��r��2��~��wzJ�:Ս{�s �3��xԺ�,G�
�MKd���v%b�o���|��l6�z ^aCG;zVl�
|_����m௷E�ZQl��Z��>g��sSo���l���P��8�C�4>@���e1bς���
��z���F]�5�Qƃ�/Y
�vAfG�WJ;��=�yw@�R���q�\kK0{2tv�0="w
0�N����r
�D�n��J`3�7�%/-�*�R��.U+�[l�Q��7H����0x�/{džq���8>6F��'0*G\�Q�a�$;�h�fEB���C����-`0��)�y�[hʑ����V�
H2�pC��xQ�P¥��9�>&zgိ�*�+kɼ�'���W_�~I����Pg_�CO{b���̖���aշ�N��
���
��~A'�/I��팟o����"��ܬ*0w�����K�OLx���i1�M*ˀzܗ�{�
�m�eJ�!,O'��Z2N�m��:���ܢ*G�`��x]sҶ#fD\�����FI��Hw��]���I���?�7#ȂU�.�5w5ɮ�R?7�����0�:�3��np&9&�Vup���AFs���Uc;I}�!\��Uv���}��b���z:���9y�!
R��������
N@)�0ߗDd;(A�Xr�[B�N�a+��{��?X����/��Jڽ՜v�ݶ�6�lҤg���O%���P
(�/V��
�j��>MT��c74bɤ^�~^�()y�I����Єe7a'x�U$u8���/����N�Ψ'n���h贑�51��;�^n4�8�ߖS�q�F;�
Jx�����]�]��Y
��MG-WM���_� K���V�gGg����>���W&��i�&
�əۣκ5�X�n��F>gla�⧲�0���x){���8��}>;|��9 i�
7?��kN���W�����
��A��P�Ej��p�Y�rҊ���J�p7�~V����8��o�?�������
����3#JF ;Sl6QA�i����C��fT0Y�w�I���+~��[��kB��4�1L��[�*��;/j�LAM0X�}>������.�tغu��tj���iZ���6��)���u�d���n�������?������
�|n4oZ��8H�/��h�!��}�I>����d�� �_�Y�3�rD�wc6�Z���K�ج���A�;��T��
GXKb4�p:I9��m��{#?{��X%��C��KM;���E�({vT6La�Y}�j�O��ѭT�в�`u
������J��ۃ�2f�1��D���/�M��R�1�Cb�
@#�^$yH"�c�%߀��.Mt��B��l7
��^���]]]�*��e�g^1:�� v"t���2��=M@f]�M�̟D_��w`tј������m�����uJw�"Bh����O;��ֽ.��w�3,�eJ�VKm�C2LCyӝO�L��U�{�/\"����K� h���� �bxZ���LR���i�O�(=�|���V}��)���[[��P�[����n���2�6Y�K�� �UL�}�W0$ڃR:���O�3Ij�(ΒRօJ���)��������H�I���n�S�(�g�K�p���2�\���oN��ya軚����8�'��p��%�K�EE�gO�[:*��p��ⳇW�����F��t��!W�o�ڧ�"�˲"Cրo��o��B�J�d��;'K͒�__���h�v�+���d�����ލ��
'������V���m���I.^�˅ ��8��B��s�f�G0�8�ռ�*ʮ
��꩐�Tҕ��c��6�s~���Jim���xY~��V�)�I��ƛ��+��h���Μ�;]��E���BAАQ��l"�U����,�C�)��'f�C{�KD�]�p#(^�����y�s=��=U��jon��lVe�u�iJ+$��d�U�#�;��O��
?9�2��<�;�q>o T�r�x&�
[��'-�x�p�0j�[�;3�Iw����6N?;��<m'*�xD�?$A�ʂ�8�f""0���ZI�;��
_ߢUcGk�"�#�+QE ��p�Xd|ĭ̧�!x3�f2��[��F����K��oa���K~�۷R�6 �Y�cj��<��L]��%���TS˶R�O��Wöbc�£�e�P�}�S���\��
��T���u�
h���Ыk��.x�{���zZ JTo�;�8��H�����P^EsT
'K�@�����
�t��B�%Fj�dC���ת
o����@XV+���z.�T��"!"�����B����F�.~�_��ac�a;��
�;%# O6�L��=B
dX���o�
�ߡ�s���L�!.�A2�R� �4
����:g�_�*[t���S*]��6�,�O9�3����5��ؖ#^��l��m��[�e��П��W�
=�68u�P�ݤ�_��
��M��p�"K�}q��fn�V}[�[�!q�e���*`g
if��|T��/\w�G3� ��zC�Ulr������QH�$q�}r`���og�՚g�O3�=���+����ƻ��{�N�b��-p�g[r�:�����~Df,�!�>��K���9YR2��v�r�D3��'�
��K�gՂ?h?�r_��K&`t͡���y7��&.�>�t��u�4�ߛ�G�
���:�^M�pv��wڴ�Yz~ڇձ�M٪�!�RW�d�;�#�� ^�z�ʈ����Q��t\�Wy�\OJ14��:5�\���SXT���
ݓ��g�v�V9�UkX,m�iM�\����(n��>E�I�
a���I�i�_��,������(�
;.s�)�=5�A�I��(��wX�g�}4Y����Dp�4��{�jq(Q
̷ZJ�U�Zf�K��*�xC~p"�2��r�#�$!�J��zZY�.�^|h�}���z���Xa�I���E�Xg�t^4�R{��f�L�y�p�ᚚ�1ި|�O
�2��5�"�t�U�A�ޗ�@��u�R�PN�X�1�ZN���/�ܨ�x�����IQ�×��_�y6�EK����
/������
cuD�o���7դ� ���|2��V�C��f+H��
�:`�w��i��y�~wk���t@�4OE],�<����ͦ?s��b1-��
�J����A�������A2��-=��t�칙C�õ̍�:�
�Ba�;�W�CE�Ξr��{�`�&��,'��t�����[8�q�u�
-(�J�]��4
����ʹ5���ay��
hh�Y����.��4�j&���4��a����q�'(��5���s�X�G�jWB���~����cm۶�/��.6�a�_A5���+=d���>Ĺ_.�h����8tB�s��0�HJ��l��l[UH4�v. ��>]�(
k�9.�
U�A:,A-���w�yʰ�҉��V�jVU�^���}�|wTH�Ә,Aq�0;,�ZD*��#{���l�H7��bRX�0C��d�uBѢ�5�d�=�V�\T=�Q3�7o�qA̐A���O��l�ܿ���!��{_uDG_���rk��ߘT�^���}W�o).8����|gWP�Ce�J����x�6N����(�~v�_�;�Ξ���S?���W#M�˿��^��S����mG�
θJ��Q50
�i�<�&+��;��V=�K�rU��
�e������#��,�t��F�jë��Γ�U��|N'uL�����x��&�)
�6wrroG�4
���L�R�� gn��Za�����#t+2�>if!ϥ�)Ǿ�>0$&��q�����qJY\���I�S(�ˤ7�^+�'����w�ٚ�ze�!�e��-���ݙ{��a��wτ�
��K"�Jd
��Ly"F��ջ�P�n�)�ж��w�-YU��6L�8"�!ѡ��|�F�j=c��Ƞ���E����R���z!�<�nU<�Qc������o+�-`(|ɍ
���O,�tcR҇�ӆ���/j�n�@<�Q�g�����4�6���W=Z�ڒ�9���4cK���&{���}�8#Z�X��WUU+�QG��Q�����3,��/�%�Eo�����އռ���d�7z}
#O�t{yD"3����K��d���
{Cu7��'�
C)n�0{�4�k���(| u(5��u)"�|�V
��Wr���e��n�n���XW�O�{���Bu�WU���,2L!�(�K}���=�� �[�MP)�s2��l�6%�j
#\Jg1a^9Q�.���F�/
�
y|x��&�>z�|%%N��{�9��cS'I�#�ܳ&�QF��n�๕��!JƄe�e�o},��X�M0c�s9]��e08u�x����B䦂��@h~T$�%
?��-&�=���Es��nϨ��f'$��Є`9��w����vȒ�ߖ���$sNy�7zԯ�3.ɉA�>��c���,v��A���?p-?�#�G�v˧�hm,�Qv��G�=KԾ ��n�k@p*�;r��Q���w�Z�*ړ�Ǥ���
�3ν�եwR�-�`Qz\�ӧ�v��c�<�s���*)���%m�gNܦIy�~#��+U`~�U����獫l'�-q�'��֣����h&ɚ,�B�L��<�g�MIM ٧����@nf��\��}��do����[6[�B$��9-��R]Ղ��T�}�uA$�+�eҢ4�k���v'����^K����6
a;8d-x+���J_�u_2G��re=�?���(�����w��//�(�_`�5�w�/�/+:X}�Z�X��.ruȐQ����W&��eUs?�z�N��|jj_�Mw31���#qJ[u�WF�x�Ԏ�}�y}M�r�.)r�1+��) �Qn�"|D�U)^8s6���c��#���A�;}�/�
�� ���?��K��θĻ�G���Mg�i��9^#0��;؎�Jb��ꘙ��#�<���M�z}tum��k��p��aS�����
2�p.A^S1�_.wGao%7�,SUW��Օ
7�md�%E�=,�P���[Ұ�劚���l����K�=3�>h:pZ7ן�g~��#��;xD�t��O���|��tҺ}��&Y9����ƮpbuU[]���T���ι#��U�Fo~�y�ե��j��`a����~�.;&\UB�D����<��j���5y�уo�)]���,���+�]�*�D��89�ż���mS��T�I�9⺹���"����_KKgh��&�\^a=�X���(�u`��mgO,�Ӊ�h}����y�$�ے�$�E�[��b����\ڊ�xl~[����l:�鈼�,����g�\j��gY� ��'��&f)�GL|�ƭ*�Q��pr���~�;�Z��I]��
!<�aPB�I��b�CUxЏ��Eg��C�(�<g�d���РrM{LWҮGh7�9�W�Fɜ,sR��ߕzH7�zϙ�FrcHK����oS���Fa0��z���h�C���:+/����ҭ�[-W��
p���3v��\uq�GG+ԛDX)��'��&M�uƗ�Û~E��ވ�Wp���5J�pGՠ���0��_�ԍ���qW�Ę��
]5�x�����1�yu�&��8Hȏ'��;��@�<Q�v�8�����uV�<�ɦEY)+��tn��|�߲�K������3*����"���ޫ##���
�ЎN�i"MC�F�Z�uT
���7���y\=�ц�ёc�XY$*�^�IN�h�q��h�<��쇢��[�筆��%���UY��A�G�8�m^��s��u�¶��$6 y�7YVP�߾���tF�(j�:���ڸ�$j����{w%ph�B�L���\=@�"0���4)U�w�'
�O�w4��#��N>q��٘���>��0S|�_Ae�g�<2�8�@�+�5� 3�gKp:���E�L�Bv�K����j�:��*&z����0�V
>��G�X�CJ��I�O��Er����W����b�$�W+�^j�ɒ�����ϖ����6�H�X#18�ˌ5����ԋ���`�֩�wG�U�,�03 �������̵1��Q�&���g;!��]v�X��~0�a������ ��\�M�����F4C&h�
�V�Ӿӗ|���怙w9�}��9�/��H�Y����1��˚�W�(�u2igo�}9�~!V7�;�:H� �xǗ�~㲿��vW�ز�j��
�w�$��kʪe���1Z^�W$S�+ļњ,�-�3��!�cm�h��9����%
Q*;%�_���8�FV(����s�߷f�8d�����شgm5@@7V։��!)���^`��#m�܊����G�k�!��y�u訦���(+�q��:��D݉5/��b��w������b+�b��ᎁ���6�}�H�Л�m$��te�1-ě
���G]i�ܘ��$��Q:npy�s�ǩ��B��q8��H�r-;�-c�N�*�r�J]c����G�Y���ucyUk�u���DQ�)��:4^���K<|�XE�ޚ.Hx�r亞�j�Κơ���-�]��eU6���x�bk���_lo��Ⱟuv��oL�zA+�$^ҕ\w�%>�[�P��G<����2���<�U����w�����+=ܧT�2bwݠwx����
�ay�#G���t�s+�s������[�U�Y1��n,�,(�4��c$�U�S��9���B�%�Z�H�\R���m�YZ�,]�KH�[�E�ÿ��/l;�f��
�$�6��![aB�r���d�Z���V�zoْ��n�H��K�VU�%����)G��B�$�E7\f�YֵT���
�Kg��ɷ;�7�
w��Bh�)�k���4�����\�r<�zu��t�S�o�?(#�"�*G����<K?�'<i��T?����Zm
l��ױ�k�ưC��d� @�P�J�����uU�
7"C*����l�e����A�I����̮BZ|G�~ۙ���Q����ec)XH��#�����k�����3��KV�
=[����X�_��ߐ���W�Co����F�x�#)ȁt8�6�]��H��w3,ky��ѡx���,A� e��#��/��t�su��#���8������;g̗��]�[�d`�o��A�l��g#�
o�@�^��vI�C������k��r��k�Mp�Ԁ��K���mnJ�6���!� {�zQIVN�r�rE�Z��p��W�w([y����
*
N�C�S��!!�أc�����-q���UwJ�=j,�������l�[^sM��u�;כΧ�:}�Ҝ� � qg������cNh����T�v�)W��d���]�]�*I����n����M�:�2�ұ�ux�v�>����F��n�D!�$S�x8��;����;�(���~
�Wou�\�Ht�*GĞv�:��[�L�r��-���y�G�m
k�-6K�=�9�D>�Gk����aD�l9�<j�U�r��7����j��*�Nl�����)8�j�2��b��S�-a��s���4d
,�`�8j0_FC*�6���*�[$_\
q';C2lD�I�=#��:�Vp-(_��Ha̹$�$=w�#mC*A�1J��P�%�s�d*�:��% }���4�AR8������zø���=�?Eu,q-��أ����÷���,!�p��N��:��Ő5��V�I4����?>�*K2����J8Os������P"偙�bN�%�
�p�xc��N�&ay�{M�lƪ3#L�mN̕&�>��4w��ՙި���|3����}+�e�}����_���,�,A�L��u�[����ϲQJ5�'z���@Nԝ�Z̉�ED�@�(PVdl��\8N�&,��)I]�d��N���Y8+�ʞ�_�w���u⥊�8�#��+�1d�8s6����Ǭ}壯����Uy��fc����+��!)�Ȧ��1���[�N����}3ǮIG��u]��x~�^�ʔ�4
���qd���[>�,{�1#�^3��ID��=�q$�%�ɥ��:A*��Cg
R��@�B��H���@�!Tn���w�l��˭��a�]���ɬ���z5����{z���1�R&��l�\Wџ��g���EIّt)���8�R�Tp*YM�ڋ�FfR�8V�Y�bJir5Fč N4e�gH%�<�ټ�
��n�j�c*v��<᧼
/���U��jao.lG��vA�vP���ؠ�Z�j����9�IdA��v�Ɖ<��jO��3��j�5�Kh�iMt|��en�*=-AB��Q����.|�"?��Ïs���\Z��%�g��t2^L�#;K�0>;���!���SSI��!!��H�>�S��|�B�ϵŵQN�,$�,J��,��y�a�>A���"T�S�M���K�����"�I쫈�+�;;�Ӽ�[���5��*^�1!��;m�--?wb^e��Ci�O{�*���N�C/���.M�s'������f+v�S�'�̘��
T�kO�H�L��T�pR��s�#2�Y��@�2��N�6^T��)u[�>4(n#�*w�²Jb����$Ȥ��F�TxM3,"&
�ܴy��Wm�����k!o�
�� ��,˒�e����6�G�G\r]U2%��8�WH��
C����Qo娣�)���*�[zb�2�n����ʹ�.CL?��g��l�2�\��#�.W���Y`�WG��>r8��e1����j��B����
��U���q8�`{l_d<C�hj�h��|�v�o��L9����g���䇄�b�%�&��h�
�x��L��){(fo���P�H���~l����8�
-s�3�(!���Ckb���er�
A�E�H��Њm�q�ؠ̮�x���+9&V��HLa������jK##0c�e��[abh�@�/9�����Jy1�MK��:�5b�oN�K�T��hw���Q�� ��)坁�(
�i�Ƕ&p9������F�d�I���S�z��Ԣ���uq�g�ݴ�VD�Z�&`�W�::�*�^�!�V��p}�����a���,?���8��晛�K��_���7�g�?�r�W.U�[���c�>��9)\�<����r�.-�^�
�BtR@�͓�f�8�w��<_I���a���Ɵ̢��(��C�U��/)�\R�~���?~ۨ
ÿ�dZ��ZەGƐ�����rg���Jp_�"}�Ie�g�����̒6-G�;����K�>�$n�����+��L�[��o�"�N�>��e��Y�f��C-��\Qz��%��se�g����@��%���
I���^������*�Ӭ����D��<�����!��0�O!
�w!����ޞ{����D�S����r.��~���B�z��+�B�mA�*�+y����(k����w�_�3d���V��y��4/ܺ��Y���hs�v�zJ�0�a�p67��X��6���� ��y�n�o���}l��k�n�r7
yyh�D�bK��S�OR5p�8�.T�a[��Y�hKHCJ]c@�/�s-`ϼ���E��a�Gk�Yr�ʇ�K<�E�e��W�V�RP���t�G+$�д�
����R��b��͇P��TE[j҅�
���*���NU��Z��{�V<�����Q�����w�*�?�Ӄ7N�s�O�� j�$�0`۱���/�N�K�]ϫ�]
iZ?;:w���<����7҆�҇��ߦ�٨nV�wl�}D��A�%�yv���+�w$,��Xl>�/j�1�'$Y�F���\��(���AЃ�]x�i�Zk���$5��U܈�?Z��N�:5�Z��C�'Z�ܤ�}w���~HE���VN'�O:�R��|J%�ء��C.^��ڎ�`��g͐(3!��a
�[0ɘ»#��c]j��)��`��rsJ!�*j�c�f`��o�+�
���;mx���x��
�2<s�5��@�HT�}��^��P��:u{��P'����/���>=
}JKo���
a
��XN�-��K�;xL@@����a��,�����u]Ϻ��U,Y�;I�a�˯�%y��\ ��#�2"�d���aE>P�~�?nŠv]wZ���Y���a)���3�3t2������T��۷MN�6=�?Cݹ�ސ�d�}1�y"9�gV��˚!Z1�qz&�W��w��-f�R��C|K�>���'�cwA?`6$,�|C�kٝ��0�->\�#�˽�����5K�Li�Tom��\[کNJXu�}ꕵۡ�x���[@4�u� �g�����@���+�"��R.AS�T�+�8S���3r
P,qݕV^�f���b��ڝ]d|k�
xtQ�ä=�:�qC/Ѿ�K�6�9@�̦��8ۃ�)��6m�k�ϋ�z{�v����C��G���v�̠d���
lC�ȇ�`�h��r�����.�S�F�m�إ>2푈��n��\�y
���3�k��43b�?��s�Nj����T����%�a�)���2��}7
��� I���
}A6m�"o'�iLI��I5��y��?����|��Ue-�Ң�hb��=Ϫ۱_�*'�{��h�3r����y":�U@>�q��|J�!�������72ZΝ�� ]�p%}��,r �T���āe�u�1't�̖X�m�٩X$:Dl>�O������KX[�;���4E�h!�BA���j�Z�<|:f����^�O��h5��a�
����K�����u����/bz�t��w~�8i$��oo��t�^3Q?r��Lˊ�f��o��In�H���i�qUgg��)Ӈ�i�-a��ui��4,a{�
n�Y$����H�kJc��J8@�t1A�y��8�RQ�)(�
�qr�<���'T��2QUE��T�����ԫ
���*D<!�⥘`��]�0^ߢ+=ǫ��I| ^�O�ax��'��D�TSR<=�O+_.��㨊����d��'�� tl�9���e5��,ƙOv'zz�{�S�]���x����j
D]�âKqo"
���M~���7��*5ׯ��S�p�E���B>WV-J(��YWZ~]�^��oP�6{
�[���=<ozQ%��g�fx��>���ʤ�Ɣڗ��>�����!���C�/�9���ky�y�r�L+>;��ʒ����[�/� �f�n��>�O<�1�#r��y�w�70"���a�YM��0Ib�8H^-r�i�
a�B��7�N9�!��gI
2�iOB���*{Ȫ!�&�F�s��S�����mt�*V��ch|��ʢ�&E=��E�+��BJ�&Q"/q�d��"�8Yn�����$�:����W�|�8���a�% �F������~�\����\�
���=��w��帙�"��i�4��}B��W3�߬���[o4Yf��"����31Doڔ��r�]C���pϼAyl��k�7S
L��j��
�@�>��s�%���0�)u�A�
�9��-^{#x�/�ަL[`�0/��(��?¨Y�)�؛a
�wI{�d�dC1������ڐ�G�d�j��<����R��0�*eYC�NsI(~.�D<��ouwϪ/۟EP�q�{��cۉX$6����i��E���<�-����o�mp�V�tX�b�K�ͻ���/�mjh��o��2,;W�́�x�I�gƭ،90s��Q�NO��
�HP�1�'�gK�,-���"�z2��ט�m���q
Z�(Ez�QNe�sD���=Ն;�,c�P�_"bpy�Ik<Ɖt�,_��B����-�q���
��ܐ.�_����h�"{��g�G�j����y����;!X�;����C
H��*g�r-��;2I;���d�T��X��%\�fT����ǚRs��m��-�/,���;U��U�����v-{���=�nO 9���k�U�땐������(�ndz�Ii���P_�
�k��a��6d>*;�� ڻ�{�V���q��S���[�B�O�l]yW��MRZ�$.��%������qj"�̙��.��9*����H*�:�H��fc�Ep��R��o���Q#"h��tL��\�V� ���Of������}=Q]��L���H��|�<l�%��C�6h�%`t4�5{�)�D�$�C���W2M���F���D���p����VI4e@�
���G"�����S�]}��ۅ��M�b�F�)�Ktݸ�����Mq9%qc+���9����sf�
Ѷ����b�!�t�Oe�
�^7u|�P����^g-jъ(B� q
7�~���?V\x]�oF�og&�w5O��o�,3�۪lLT���õ��Nn�U`z�\T����d��S���\��k��+](PX����x%2��_�垘�2g@�E����g��Hj��t�M��M�6�FN�
�c^���ٲ���c���-J�D�_�.+�LQl�O��d�`u����;��֦U�b�h�+�}O�]�����ډõ!�bh� �����y2/�$}-4���-�����}��|�~\��/m�ڈϱ�
^�$2�͔�5#��\�P\�kX����txM�)ƕOl�)^�V9f+�ts�j���˗##��x���?g�B�P|�Cv
�q�?/�&�����yt�g"�g']�OIi�W�vd��/����n����)�0���P#X2?�Bdž��)�5�sb�b{t�c�zc�7�U�A�Ԓ1)!��(����S���,�4���H�C�$np?$�=��i[��~������YX���A#�_0�����j�%#J��8_���f.�����-Ί^�.��'
�du�����x,=r�#�e������*AZ��݅�[S*k����촀��HN�T��%�E����v�A���c�R�Y�6��d�̻�Yܲ��������G&�c�<��o���&�l�wu��?LHZ���n���M)D/�U�qֲ;���;�
�쏌���g������)��ݢ�������yw|^~d�l�&ɾ@��S
�lև�r�S�Z�.b~��
�~��ey�ye���f�i���S��ԑDT�����M���O%�,%d,�L�=�B��-��1�;,��{�}�,Ҝ�=��s��n��=ǺOI;�$���p���'i&k��7���G.�����t�0�r��
'��b\9��r���
lgjO��-r��l�c���7icm+�!�D�]���a1=Ѥ5q��l��l��գ�%���ґ�j� G�dT
�v/�� ��#����N�^�x���B�:��W�ڼɏ��E�vR4q�U=zjUdARK�]����hl!�W���uB��
m(c��'
He��t��o{R�}$oEb��?����ˬ�A�y�f���C/Ο�{�ֳu7z䒏���XG�v�����-W>���_~�kϣ���v�rți�&!�*)��rI���b@�쪖%M5Нs�!N���=�3h�%`�U3����yV|���p��k,6��խ�]+{���EΗ\��^����yn۔.*Qz�MO��տ��D���'�T��S\�0�WU'5���:�#�h΅A%�EZ�ʜ5b�Ҝ�6M.�^q���Ӷ�X��(��1���]l���(4��A���Ң�ۋ���VXkv)^ۚ�n6�e�Q�~�q`�a4E������l�Z{!����e�ٹ�R��fm��wš|���N�wda{%Q� c�y��g��R�����A9z�X�BN�|5�ّ��O��49_w��9������.���f�o��(�D��\EPl��~�P��ˢA�'��Ǐm����
|��)�]ˍ��1��<|`){��y?�J;|Ɠ�=���J7��M��MA���~we����H��b^;+��4���T��1纲ѳ�'ZNWR�f�Z�x��
R���}�����E�ڢu^���}�
����=ּ3�CA�lC\�'EΩ)�.�b.-��GB�����HA|ZE�y�˭�y�H��:��$��'�X��v�3&�y�VQJ/����I^���� �'4Z�Y[}>�ēn�����ѭ�ţv�To�w(�kxǂ�
��Կ�^gWzۼ�r�1k
}Pc�.f�ŝ��L@�^�-��7�pj�o����rͤ�DⶴppKt��r��U}�$gmJt�AP���v���h*ٲ�͛-���Z�v&�dH�j|4�P�9���?]]zw��
�w���L�����z�
z�����Щ!�.+',z�b8����*߮$����jΆ,��7�bC���o�/�]�E�h+��#PN��:
��<�D�S_S4;��LG������V_�!G��8��ʜ%���gq]�wX���\z]�B�W���λ�z��TS�v��l�������V�+#��ᡜ��������L
��W����ϛ=�u5�f�]�Y:�5tgq8hĢ)����+��<5d��P�:9�?tun$�{`�Y���?!�&]ܳ��p�a���R�<�ұ�nk}�DpzawY��$�z�:�ߓ�Hz�����dY�Gj�a�r�>��qE@��G�4�����+������5|��"�E@������8�x�y>�XqI��3%�4&���Ueѣx�ޜ+�V[
W�?�$�U����7���H���2�ܘ�m
�&�{}�3�}�������`RU��=}ii*��"Q:��,
!8��6�ܤP�'�T�s���rvw���MDKOx���inM�'\W�� mF���f�P��O�V�
��\����`���%~�J�JvCm�8�kv9�E��g�fv�G١�w2�0�$�-�\��I�MD7�Oۺ��rU��:Qڃ�1<;� -���:�z�^%�q��B�ZK�QD���{җ�x�oe%�*p�7|�-t<^�xأ�bT��*n��}�ۙo��˞�(��ﴲ����\���^(�Zn��3�f��Z�,2��:����"��n�@{��8,�-�^��wQ���R����E~����'>�@^U�>���W5��%3#X�5�"߶縵�mw���#,�,�C�8閅�W��O=Ļ��H�7��=ζ��:+�
ᓞ(N�<��n"];٬�D
+�M}�Y`��*L��vl
�q����Zf���u&��-��A8�M���������6u
t2i{�5���k���
�v@����Jgv;1ph�Pu�2[�p��C��Um��
�^H��n�|:�}���Jt�8��2E����l=�U-�ӭ}����0��s� .>Q����x��T��a7$�m�}�;aÿ�mk.�4���7���Kt�B�{����Z=���+�I�����w��oN�.��R�"k�O5h��a��C�K�0O���P�$�/�{q�u[��_f�_".�w�y$�8)"oX�;3�4Z'��G&���o��5��gȬ [�푂p�x�$~VlYy�?A:�O0O.?Iv�{��~l�z]%��x��դ�1�G2��
ͯ�4`1w����^��"B�~��<k�h�:���&�9D�ɗ��@ �I���4<�l�C"�`��6���7Ћ�콀{�=V�+��
`��T�U0딎��s*Oʏ�tj���y�2�Ϡ��|*(Tw�l�d��b�nQ/��7Z[�i}�hím^��W�L�m�?�,/okkX�Ft�����+�-��{V���X7�NFd���39�ȑ�V��{\��o��o���7*:�^�.f��=g���
;:uP[�u�+�Z��P��ϸ�u~({��������R���ʑг%�?�L��'m�O#��8�x
��$N>�|�ߖ^��y~r���ۙ|�,y-�n��Q�ߖB�N�"n���%;Ts��B֭f�
=3�EXX�7�W
��s ��i*(*+"AC.��ڥ�+�:����WR^m�SQM��z+�.�
�sS��!�F]��bZxL�}N��N�
�$��pgv��E��mA~D���Ph#�.�0k���㲧�o�n��?��֭l���/Ox��$]��L�`.\(�P�+:rj{�x}cO���#V
��̥)�:��f���(ý�Q��
�ǀ�*��[�յ����~�-`h��1):����ҙ���n@-��݁�'>c(�����>,����U0�.Q����/��sU*�k�ޑR1&&;{�=<� Q���dÅR%����R� �����F@"��z��EG1�M�}<*:Q�5 ��zW���՟���D��Kj~�_������[#������Z���/��9XMF��ۇ{��7�ș���ک�����+�h����sDf!!/���y��{ܸ��=��g0<���)�8�4�T�Mʦzj�^K"��$L�+��!^��\*��d%\��%��N��s���$���Z��:˼��&�,�t'U�}�~�#���
�\���ɝ��/!-�mY�V�B-Ei8ɷ9���2<��S~N K۩�p�'�Â���*�֜�wcWF�c���K?�ZAJ�ƺ�p7Է��b
�i����KL�`]��gɎp$l)�q�����ҍV�B�C�*c�K�irz!�3�ڇ���|0��F��
`�Z�B�Q^��z}"!թM���r"�[�R���M?�����
�7��� �dLdH+X��Tp�����;��W����3��k>j��W]�[��т�QT~�79�E�<�r���jO>�3�Sѧ�B0�n+�\q�\Xh�;ed���I�x��6�>�
��XC���Vr�pN�F��K�|99QP�ba-�~
$�GnX��?:a.pf.!®C�f��߄Z$����
���ݞ\؉j����rv�b�1��F4
%B
�B
k"�r�,$��$��\�7K��5�s��n_���+����v���
��P$�ϩ3�/��x�>J��aw/��T�i�X�F�N��)@��ԅA����K$r>�G�nc Q�R]
��]e\C
w^�ʺ�W6ު}LB|��ұ���61�R
��pn=��b�>@k��D�R��ƌB�<d�D�OK���gzJ�2�mo��zMnE�}EKG�W�䷔H�C� i���3��<I>�MQ����n�h��5�0�qb9jC_�~P�o��a��ʀ�1�>bש����i�v���63u_��;fj�/1'y�9�D8�a�
��n+.Z��fq��>�Z���T��Οά�s6����
���w�V�@)������w1����`�h� �|Zw������U��i�a�{�]�"��5�X�
�M��DXfl|6�b��3��Z=c�d�dž/��bWO�����g�L
�Á^�~Їo�;Lx��0e�_�Z��,���Cõݷ%�"����({���>��9�6?���������C��`/���}�G�(?���Zi� �6�m�� v{L��3�Z�[a��x���'�96!��1�2�'�p���ͥ�[�˔�)�)�L@ƙV~+r���2��ʑkk��9�Z�� 0NG����2�5r�aQJ�#�+�Z�,�O���h�O
�:��X=`�O��0���ߋ��W<�N�;��{[�����e0�^�G���ݬ�-{:�&ܖ�V�O=t]����4ƏKF}1Q�WP�y�@O�~k��[�+��c��D�����@��k,�UB�#ű&�rC��e�,�/at[XOd�Ԛ{-�@�a�i`
Q�/�
��B�X�I�HU�,}�Ȥ]�Oy�,�����tGd���.@�뾄���}�ۀ���9S�U�W�!O��ҕ��`h��?�/�=���
�o�"���:8��A6VK�#��X�����Iq�q�K����y,Ѹ�:^PAu~���[��5���<�`d��l2u���v
6�5b��ǭ���K�v����o�����
�o��
Iѐ�8��0���M���� S��N����&Q�%�����x["��:�v�EbJړ�0��K"�`�G^���!�ܾ�3#G����WT�b�Aý'���4I��Io��5�K@�d)ƻ�H9eW�`��p�[��':��q�\}���4=�@D7�Z���w�Y5����06���Ә��В�
�*)����z�G�S<.F9"��Ca�!z����[�~�P>��ݴc��ZB��b�4lٟ��s���ԳܻY���j(J��՜�:�qZo%9"
����]c,:�Zr�PA<�@p�/�"����
��g�]�[u�o�W�(�AǸ3aI�L/��)^j��_��s��;�_"����K�Y� mĄ�"�oj��=1H��f�Τ;F
��
U\V>��{��9Yc6J�?x�̀W�0M-��7�ؙ���HrV�2
��I��<�����(�����
5uywjBt����A���֏o��\e3Y��L\�ʺkl#s�s���˯�G�b�/k���BZ0��r�D�h�D�q9�W���z�C�8
@���C�4������.7��U�{_�\���_}#!|z�(12�O������d�@�C?�x7�N.?y�jvGC��Ҍ��"�ʚY�lC�`���2�'%��b[iܫ6���hLF�
�HO]������
�M���"��U��1�P��
[���9���������X��
�|U��B����
S~z|.�4���TP��{.��b9�p�y�-�~^z��
�\��@J��X`n�bDWpk9_c,:�2�Ya��FμҦb�1���DLc�a�u"ҝT�T�7+ov�z�Ӏƣ<�n�siDw١/�ţ�����3mW.�{2+ا���t�b��J���c�"��9����ʓ�����8�lɭ@��Ѥ̤%�>i�����O��������~��}$��f}e���]�Է��9��9y2�6WL���u�SMv����q��9t�)iG��0���6��G -0I�#�u��1��}ŭ[c���z���6WŁ!-pi?K����8�'`�PCrr������p\���B;�k�i��~8�߯I��{'�D����ʪ�J�"am@!�B��S҂���
�?{���łk}�Mq�W���W�,/���R+O��C�[��Yw3|c����k=}Q����c;Y�4���������ed6n���گlc`��,�ɩߤ@7iM��=���Gs��4g��%�rG���p�H�C5p�#��S/ڝ*��� ϓ]6��}�N�x����������Er�P?Sr��b���O�{Q��p���h*L���b���YS�n�
/�BZ�;}�m~9a�4����-�h�[�����͎ϭ�J$�1��N�&�|'�c�䬥/ʺ��&᧥�,��/�94�
�g��)^D��/�P"�܈Edӽ&S#��pK���D��D��
�Ț���M�9B��4G��e@�f�~;a~�WOk
�CL��
T��|�;��v�)aH������z�=lyN��S^���xG��0�f��x!e�Ƹ.�9����\(
�(noAiO�@ut:)�S�P�U6�&*��B�v���pF~�[����@���]���J��a0��dT�x͊Z�С���q0.�W2v���1hd�-CZ�V�A@�G�ñ|g;��=E�4�'K<�@��|��4^�q |�\���V���1p�%[�#S���#�F����#��-�C�I����̥�+\),�Wyy�:#��s�Q�����P^<���E�/�P����Ny����ߞ�?)��e��S��b: jw�na����\�T�]n>,��Jz���F
"穼�ƹ0-���h�����q�(B?���Z{)���6{�o���ݔ��2WC��tˋ��g�5�T8�����,+O�e0HU�ܺ�vRrA�D�
��6���ř��!��D)n:��nc �a��=2�ݫ��ws9�O�Y�V@^��XI�{+���#��b�����W��y+@%
��0.�{�'~{d�z�r��/�ێl����L��*b��d�_����Ec�f����a�"�sص�- ��v�$�95�]�&,�̋�P��L�Y��$8�>���=��[��w�<* C~�$\���Y�Y7��W$Y���^��q�F%E����A�W�Q�7�{����EH2�C�)C��u͔��.w9A�Yȓ�K������c������d
�Ị�<����w��TPN�wb���ԡ���"~H��6�6�_�0wnDKAAN���e9������iFVg�?����#���|�����ּ^2�|�Ś{�A&�X�|��[QhY�^���oG|���#W*��fe`-�ޣ�\�6�i��˺�.tu/^��y���kA�������/�˙��5��n�nמz�]1���Z[ϝomV95˅_�6� e^�^��!M���M���H�чVx]m$��Տ�KJM�4F-��oQ�C����2����3q/�T�]�)�<6.jxo�/|CA^�[cB�2��|A �{o�1��K{�2A`O��F8��;��'
��9ƀ@bR�]ʷ�q,V�o�<*�l�^�ܫ�QcT��_�5?$�U�0_9
f��)��C��ץ��)���י�P�["q,6��
���<sZ�mNv.
���.'��
Ԝ����}9��P̂�$
���h?���˃2=��+.�#G=wO��G>�#�a���cd$�\�ـ����ݻ���g�y�Z�g��v�b���Էaz8�{ț}Bh�A�{mD�����.��'*K��Oik;��D
�#�����/h����;�@��±
!��+�ګ�-�c�kn.���v�$?:���ܗ���b�{��az�K���ޣd�GkyVֶ����Z��ͥ:��'Z�sg�.�O\/+�i�.��5j�>(��=��>��v
��w=7\�4���߈y�~)��qNKs�s~�9<��k
��{d����o�Þ;���Z荄��A�R�4�vríḾ�Ѳ�ʀ���&�_>�p<a\&�R�_q���o
@X"P]TU�0y��v�v�w��t�]�U�i��<C���i�x=c1v79�(f�
�M�k�ڄ:�'ڪ
�I���`|y�9D��5�n��U:�C+/>9U�F(#eI�|�K!����l0��36��n�LG�e*6Ne
/ˌ�Ԏ�Ūjj՚�w����e��7r|т���֔������讞��
�A�Z�S�Cr
֔B�I��nt���~�-�#Z�V����v��L��Br��"9ŗ5���9��8V��x�h�_d^�:�|xmW(��~��
�M�y�+�)#%ʂ��u�����~ޯ���щ�*���K��X����<���g��7|`����z��H0���ikY�=2�����n
_��u�X��GWVҹ����Y]/K<J�Tdn���Y���JM6@��rݍ��N�bj���D8�|
��'�+^�j��t}����bFAGĊ���̃��/��c�D�;'f�{s�)y��'� �K17���E��m�蘷Ҕ�k�<#���ꨏS�I��V�:� �e�8Z�(t
i��@>�8[���4XL��{��J.��.
5|E��^]sҝc�C~���L@�!=�I�uz�m�ʐ^��IU:���d���a?a2h/���i�y�;��nQ����o
�(�����&�=X;-�?�vkC�)���fm9��ҟE��f^��-MזJ��=�4o,q�˒�i^�X\lX�ۓ����{-:�������V{��??�&��*_i��]�Ţ@����T~�9{��U�p��M��Xא�j���S雩W::��@V�Vپ��=-��}_e���y{�Ď�^�g�if�h�j�r�Ԯ���0(��w90���{�T�,OT�<~
����>ϷXVX���8��^tΪ���/�����y
�F&��$ZL����ȏ!D����Hn˃8�m�����L����:�d�J'�!c\?�<ƶ}���@}���������݁
"'�||�2�_}��W 3:����}6)X�.�邈�I���e�mś�[�:ޝ��r�m��L#hd
��c^o����;�6��a�!m����L�S���
>�n��N-���j'�9BP�B��"7�%"���J�<��Z���)�
}�B �[S�����gԓd%���7
�O�M�mf�Z�dQ?��8k����
��8V��jW��{z�
�5�zՄ���ff2!�]�J�7�����3��Cƅ2P����,�Mw��ǹ���*)��5H�����%
s�9ҏt�I�TH��'�~�ic��K�"�~X��=~KH�^�!O�q&�
�"�^���S9c*l`t��12�2�Q�d�@���Z1�N���[
:����H\��t܆���Ce�S�S�R|D��XECyd�hp�9@<(�+�����$̙4���;.9댋)5��d�e�sz$���U��f����{��<&�v�$���b�)K��W��T�����R�8Y�j���'��?K^GW��{�o%8���dw������J�g�M�z 3.��7S�[�^�n�?�ԣ��l���C9�Xd��C?��5{/�����{/���{�
�2D{D
u�wo����̧���
�Cj�c���T�#Ț����y+L��@w1�����c�@�]��?�|���K��9��d�X�����e,r���755���뼼�ِ���\\5A��� �7� �[��B�~����b��s�^w�E)`sOrя)eަlCZ�@Kg���ߝ��z��/mi�M)�|D�R�ѿ��=���/��|��pzW�PC<��x�u=(9�m8m؊�-LW��.n:�Z}w杠6�
w�$"��O5��t�5����Nց�;&̢�
'|^0���R�.�T(|$p��Ȳ���!��M:�
toTĦK���MH'������O��|2�6N�5�k
1J-�1�YYs��ViU�8o��fYp�s�*�l �/�Evs2J��/�?|��Ÿ�F�b-�VAcF��:���l�l��{类�.K�M(6MYW��,3��w���Ec©Q���<
���CT?�l�7UZ�����*��{E��ipCT�4�c)f�(1/�Z,�O��,��T�eE��C���kؖ��K�,�KH:�&��#H���D5mrH���?3�Q�F"���D�Љ���6��ŷP�>��� !�Uq�u�.��f�c�^�t��X�\ZZ�J��9V]�бو+|�f��q�,��ҏ��A�_/儘�(#�
:���k�Q�n��~C�
����<�ϳM�f��ɥ�$<;���e����ڤ1%��i���EUg�q*;�R��1=X��hW`�VU�r7���.Y"�q��y�W�(�M��&��q��ψ��b�)�c�����Anj�I�W4y��tҝ�1���Q�܃��j� 6���W!h�d77�"N���˴��:�C�M\t��i1r��[?Ѓo�{�TEz�r� �6��k?Z���Q[���7�/�����V�{.�=ծ�"�+����9=�
K�Le,`S��w�9oW͡ɓ�l��
�_��G�׆aR�0��e����_ǁu���5��X2��k�>���[�:��k�ї/7:�YÒ���+W.1Ad�e;�f��4�����Y.����H:��^����θ`"<�H�W��G!�u�M�,�Z@LT7�cC����ގ���
��>�7%1��$E5��:D�kP����2r�@����5�����ݕ+�Z����f}��G�
7���R=�4GOb��T˷�
��ώ�#_�w�Taҳ�j���t��[����H� �-ys���G�d�h�Au.Z�54N^�����R�ӲG�2Qё��\I����>�]zP����=�>';��r���?�8D�x[k5j�4I�T�U �W�0�*����hڬ�Fg��LRg�X,���cA�!����*��}%��s�Y|�{�F����+���u]�$�_oI�r+sź�v8��s����R���?,%_��'N,�8+
���kħ�F�gd/$[�5�'��Z�ǡ)���A�{P���
{�2d��fܥ�C(���QU�g1�r�\;�H��b��b�τ�����e+lI�"�"�Ӝ��
�.�?��>ik����V2Y�r.��6�ы�<�OF}K��lc�+$�#˧{ɘ
6S�9Ґu����d���`���*�ٕX���5�=��e���ou7~�4�-�x��f��&�|ۼc���;¼�,�Z�_ݥ�&k㯩���\&��cwF��c렮7��ؔ���WK��]�}Q�Y�:��HA=r/KuWT�7���Voi�������;�Ս��+�ݖO?e������m�+�9W���*�3���M��u=��-�ZR)����Q�v!E�Qa�(9�P+Bv�{@�E5�*q�]?�����vS���!W㐸�7g!�N���£Ir��WO���ԇdmb���W�B���M�!��*I��>t�3<Z��o��30X������ܧ�?�y��I=�5`ռ�4�j�M,��Cy�=�o݉�TpGX��Fo���~U�o���+ZmG��z-�V-���;z�i���ʁ@�5~c8{���n�PL�T�{���+�<�T4��B��-ܾ[�@A��d/y@e��A�*m�hɛ��03�N>�9�
�3��D��˓���ʬ�������y�*{+�I�fD$5w����[E�G�e��L�e�ur�H����1�����T�~ΧtWyw�$vsj�f2(�d���F�g]kSz!~�']:4`�lyi1�Yʸ��7y��T��)IJ��u��
����^��ճ�ķ�'^D��v������IwN{+$>�|��ؿ�z�Fd����a�����O��bDL�{̬��o���<5|�ʐ��-DI��ߚk���y�BoW�+�o���^��'^N?��
=8\|7rp0�~Iq��X��������3�
X���dyz��l���0�E�p)��K�d��BĔ,�D�K��Ξk���m���?^$�fRd9M"Q��%��ƨѣf�H��ç�]�9_R�U��Aq�}<����=�^��F-ڋ�V���욽Vq�*ĝ�/s�r��������u!`D����[I�w�=) Ek�v���kȿgou�S�,`����*糣:�g<�N����Ͼ${֩ڗm��ߕ�˻:7m�L̝VP� ���Zo�x��\�b'C��L}zq!=Ew�
h8���t��[�F3Xc���Xru�.�$K|�3�b��8���r�ҋ���?Mzbި�A�ԧ?�k+Q��=�JZ;T�gr��]M{C�}BK��&0��F~~�Y��:�P]�\��
B���T�*&��,F�u�U�y���`H��n�
n��
F��|�K�ln��x��\.���H|���Im�,�i]�&�+C��9�DZ���7�+�g����Ds��>���������mb�|{�{q�Ouye�ڬ(+7��oʈz0'�#2�VQ���ǗM�E��}�
��LK�4��~�I�:�ֲnj5'J�e9wse>{hP��g���,��f!�k���土^��Ɔ��l|�w�u|Ñ߬�<e��͛�ԝ|wZ@O�iP�� �l�ns��S�֔���L��|���Br��%I�Р�u֡;E��R,���Mj7���l}�-[���`�p���ɮ�0ف.u��I"uCC6�L���N��-�J�b�;B�!�
��~)����4dn�dNj7s�'�E o�9J� n0���p�3�;����̝�07*]�R݇�Ɖ�C��
ܙ<?��4���?�{t�q����������b�X��ݰ���e��m�7�� � w�v�C��l�W�j�m'�|[d��>���D�Q�x3Ck�p)���e���C>��Ԟ$�2f=����:H�h5ڢ��hF��L�,@��:�����E��~7��BV?Q#���3QA�.јڬ��xW�uj�T�a7`N�"�*�kKbY��JD�:
��,T����3sq�%̓!L�ooP�M�Z~8_BU�h�2|��H@�����m�Ej]<��m�� wFɇ�|�![��$��Q��#�z����T�֞N��6� �讎�HNb!b'r�V���!R�n�&>w���w�������)�rR`�><\��|�a�
��+��Q۹o���=b$Jh��ܒ"A丄�uu?�\��hG!�7�˽&K>��p50�E��*���~#>ĤR�>p8%�q��{��}�#��p����q�Ϳ�fOG[pVa��rN�v�
@`H�r�r��UHk�έ|z��g,t��Q����ͭ�Nb��)��Y�0G�}ws=�?1�]�Ο.:����X��ӻ$��V�ލځsw�/��@�@���{W,}v✥"Ըz����EIIK�U��ŏIe�P�`��fq�4ꒀ<Et�\|4:C(zm�;n �ih07��1(�XX�b>�y]%]�
�-"Փ9�s��zRi�
٪Ӎ럤1�!�Sj�3
��^��-S`Y9����%̥ʒ�>�2�.�-}�pѷ��7��^�-R��2�U�[��KV�^����j��]�N牅�a��"}���-��|�����
k�2a�^����!b)-D��*5�7ho�Ѡ��J���?\ζn<�o��Q���0^�06�%g�>)�f��U�*7���U��'��M$+���6_7 Ԥ��Y�|j���ip��UzǵA�������[���.`�{f�"[ꨃ����H17�0��u
eeɲH�k.���a0<�bGQ�Ji�%��_�+!���}W�jۑu(Gkf��EsF�/�r�yy�#�X5�F��H�Ʈ5��Y�e��8<�1g휨�}fP�}�,-�^_�J��Ϸ&}$��6�vƸ����e���o�0��?�
{�d�"�+�=����*��c�y��xy�Z%�=vS#C��9
p"8*�^Zx��7S�͊;���s���_"�̯i��#'�+*�q2I��yl%��E����^[Ɖ��7�8A�-�4�㋲�.��A�uF�EOZ�a�;R3G�F����~#��T�]\{jg�W�X�~�<�pDm�E�ݭ���Q��G�C���=p�$sC�T"���Y�uG?��1zˠx��i�v�5:�h�`��亟#�*�����,����f�#>3e�Tu��u+(�l�:��*o�w����Q���ʑ��GwE��8���w����U��՛�n�K�-�
�͎K�M��r�9�]�ay��+��2���p+ҹ����x��?�_Q{��(Ƕ;
�-!��1FR9n�f��!������?n��
cD$=K��n,P�Yg��xq�ͩ�'C��
�}�G�%3Cg�Q�Ӝc$�n�%lcf�Uˌ�N�^�ޤ��M�-�'KV�Ϛ�9�y��e�z�bQ��ȵ��ƏxT�R�Q���5~
^��u9g��3�f
�{��&#T��u�H�8%���2t�):�N#�s�??%��?05����љ�T*�R��g�)Sאy"҇SAܻ�錪�)q���R�K=W�H���=��.(<���>L}�,�7�汫�Ǝ��P���
s�+�fI��X\h���;s�b)�.V��Ħ,��|pU����YY�
��}�0ӐT�z��q�M�eRp���-NS\
�.�]���H�d�v�i�dK9}�dqz���K�5�nX
e���5bF���6�ʍm�C��@;�?�{R,l�=���p�e��(��FM-��c�<�:G�Нn��喊����&R�aRV��z*/�ҴT�#�H6����v���#�I�(����V!QҠ��G���߄�+x�m2k3����zU�35հ����2o�~Gq��r�v
�����*�
��[Ւ�C�[~:�m&��$�4ij��B8�4|���؍pH��r���+ƺQ)���I�
�<Dmh�� l��H�7Iy�C��j�����AG�@���^�rUe5��ôc�G#[!C�"J�Tܻr7+LUʻ��|%�#N�M�6�t?&���B��D�o��;�<>��g�H�S��ba-ui-��l����/о�0�\M�}K�?�FdD��{=�{<ԍ���^Ѡ��;��|x� ��]94j���Fa��f�|�l\�Q�!�r5��3L�c6�?a�a���5�c��G|�-����ls^���8�%�6u�O��9�Q��ǟ��nXIx����4paܽf�ζ�K~�?+2yIb)��;�(��J���Ε�FH�����+�*1&"ɰ��ɍ���P�a�%'o�f?���cO�O�K����8�Vz��M��é�cg��֧�6Y_}� �o��m��+zgT|�VQ?'����"�x��R�;gO^�L��8;��q���a��ߘl�Lb�L\�Ww�>k���~[gwk��:��>2}Z�B�{��W
,�w�&�S�
k��a@�Ը�?�6>3����n=)?{�2���������H2,)q��H`��ޕ�3jkTĞB���?��Qm$%�)�����}bU�q_�c�qY -����_�1Ӂ�)j�?���E=7>��-9�6�l���.��
s�x"�h��c���[��y��7�?�N
-������
T��K�����7�9�|�Ѱxz�j�gmh�I�n�H�o�g)�v���~����
C�;L�Jq�u��p��mW�<���˗=l+(�lCP���m-�[I�H�HK(��|LQk�g�ª?C�EBx��}QN�"��;��FNU��cE�\k5E�G
н�^Jv�<�+��Dk���r�K�C�N
�w¹*�{�����Ϛ�>��j��h��É�W~{�|�k�ÿ��$a�=�����g�1�iz���f҆M��m��
���z`��0X�*��+G��n��
?J�>�[St�d�>)�`zdM���+�9���,Z',
į>cu}n��mĐ�N�=�z8$Rգ�3�c��1ME��K�Y�$����������
5�
�]Y<z�(�����:�Ob�N��A�E�5إ,��/��-���D�ʰ���sU�2
b�C=���(�F�sU�;ˏ(.��&��@÷?K�*ؕ�1���E<�
�|g�<�%u"
���kC�D%ʫ��p�zE�]�h?�*d�Pg�\�R
D�ć�U�$F��&�i�橇�Z>^=xܠ�KHUNy����xU���q��Y��d*�gg�mnL�%��r䰼!�@��Z"��["(�͘pf��k��"v���$�ρ9&L�I�Q����V�:���WIZ�k�7��TT�!�X�52Q���I��e(�Z���P��
b��}LL�ϰ�:�.'���T/�k�S-�>���l��T��5�}T�r��#�e�(��S�G��:�'Wm�P
8��oV�V����7S*��6⋫��-���7k�I�5P|-�w����S�X�����-g���`(�T��zI(j�aZ�c^�w.��8��g-�fV���]hl�3.yO�u�2&������8EAD|L|Z�3�ɡ���2�]�ۑ�5�KqO�[�شܵ,Մ>�k*���j��sέ� *��Ѯ|\�A[
��T����O��=5�@'����z��=]Z(CGE��fM��8�G�W��P+q�NE��m�F06�8Z:b7���-�Ь��%�{��Ch����1��^t��m,R��\��H�T�Z#x�㮽���`��Y�'���}?����}��iou8�K��P1�����㥙夆C����������Z�"�8������@x�
µ-�``�Pj�}6Ll�R����U\�6[��CZ�����N�"��*Y���=3C�Ⱦ3���ڣ��x~���,ce�G��;�,5�R>U�w�6Լ�SAR7|aq��u��^�ځ;V�`ۼ<��V�����V�HɪE-�3��t9Ʌh��G�;��~V�n<r-˥������V��?�%�asR�1��>:����{�~۔x�9:�7N�+m1����f75dGr��z��ZFݬ(:��%�P�
9�G��a�xLI�rl2}���>M�n?��K�wE/��:T�@��Y_���a���^O�ME^3� ����O��\��������s
_�^��9$-�Q���5��y�'��m��s���с
�c�v�V
�I����߇�!?�I���$7�ܡ�\ód[�#���mH��܁���F��&8�$*����p��w,意�hiḩt�-,6�i0��I�^�,`�Ś7��{~�5Q�R<?OȊc%S���(��D<�Cɓά����*��r���W/�<5�IT���,�y�P� ��4�M^�V˿���e?1�M��BO�P��<qBT}��6Z |.<��3p�G�2q�Zoݹ�p|UNbUqk��w~m��9`�L�E�E@Ka}��!,��/��p���7���b��
]��G�{�����O1�R1��
;č��A��&���u³F��?�m ��]��1���ϛ�Gg����돾��IY���ƃ�#J��j�aZ��z"L(�Bz~Fq���i�eU7m��4/��u?��@��H��� D�B��L�����0}*�X"��J�Z���
F��b��N�����@FP'H�fX�DIVTM7L�v\��(N�,/ʪnڮ�i^�m?��~����(N�,/ʪnڮaBRic�0N�n�q^��~?��yd��=#?��j��ߴl�|�`�p���B�XB�+��J�Z���
F��b��N���q
���$
����")�Pit���py|�P$�Her�R��huz��d�Xmv����z@��H��� D�B�Y��`��.�/���L�P���No0�����p����?_
�%R�\�T�5Z�!A1�
)�a9��d�Xmv���x}~� e\H��u�Ӳ]n��)�&�q!=?�8Q��4ˋ�����q��uۏ�s���I���(Ɋ��iَ�A�I��EY�M��8�˺��yݟ�
#(�$E3,��$+���e;��a'i�eU7m��/!��m)hrYzb��3�3�S�H`]A�Mx1A���>]���5�j��^F�i�T\?8E|ӕ��_�e��oH{U��Ġ��T�&L�-3�QW�n��Ԥu����M������*
ۥ����D��+�%�j;�b�ͮ�'
Y�>
(؟�4��w�]|���/���JW#Ȥ�Zca7�����B'8:{�}
��N�$�8�o��Q|W����
�mOnL�)��Q^!W��CM8�}:N�hۑc&4ٝq�o���_��@�xމ�ɐ��5����
Q�+�t�*\��]�w �C!�W��^"�yw��n������e�/��R�=�`���*��5b�J����z�MwZ���N h��PQ�7���-�␜�E��g�����C�29��*X����YK�Uk�&D���\�4����]�aw�-�5�&_kD�@�;���I1f�ͫ�{�C�[ŏY}E��xd�S�9ɇ��@�~��$�`�K��P����K}���=�wv��ZR
?P��h{�%���Zdϙ�'�bi��ys-KhO�ü���.��
[4/%0y�]�|�(��珫D���Bˀ(�D��뺹�"�c��fw��8��Ng�P�m���zd�o*Ģj6h�n�i[�}�iY
L�ٱ�E�f�9��eF�8�d�ǣ��O�k�@�p����#B\���'Mo�=�)�
uĐE�B>:��6Qlo�����6��]�Z*
�)�
˸k�ֿ�����
�/�d?6�
Q���7D��x����'ey:��K��CaM�۽�T&�uf��T����x_�����W�D�){5�PJ7�A�����2��wW�q��o-C��g*�����te�
���j^"�~�4�{;fo-�W�?��*w�W�1�{���|���k�.Q�Z"�
X�-��J��/~������۵�dp��;�<W����4�M�S��/��+�En���ش�0�;��=��N���{�3����!�Q)9]=$}������2����K��Pg(۫PY�)k�揚�f�,�}�eK��fh��#�*�3W��A+�����xv��fe��+�+�,��fTr�~j��) �[Tn����*��4p��]���W1dz�%�f��5*y�����W �� @Y�9~����Ë���Ʉ�T5�X�ٳi_�q#
�;�����K(�56�9L�FQ�/�R���L��EE&Rz��O�EK��-�Q}Y�kv���
������qsOLc�G�2�h����n⪻�
:`�֥��$����ǘ7UѬr���_J�Q!wJ������:6���m�纏h�%��b��4���� �T�M��_�3\j�z��Fs1g�.�c�b��G�d?2RY`o��;�����2u��%�{��^r�)`+�v��۳������7�Fs=���CuC�{�C.�=Z8kV�Ye���`�Ԯ_Y�ꓣUu@�i��R|:��^�y��%�����}.ӀT4O���.]qq�Z-v.w�e��i��������o���:��f/1I|F�b���D�X����CE��?{���U�-Nx���0�w���6�~U�~}.x�����c��f�!�6�x�>�}�WAD<i��3��״)�>�|Qķ��~������X���C�����}���<A�>�������6cT���;k���#7.{7c��8�T����_���4��X��;B*bm���#"""*��RJ)EDDDD����̛?9��7���t3Zk�g�с�hz�������t&ޯw.���Y�N�ˋվ�gH@E���!�6����~b�rݴ���z��]DDDDDDDfffffffVUUUUUUU�i��{z�����6�Nd�PK��[l5Džo�oFApplication/Frontend/Assets/icons/fontawesome/dist/fontawesome.min.cssnu�[���@font-face{font-family:'NFontAwesome';src:url(fontawesome-webfont.woff2?v=4.7.0)
format('woff2');font-weight:400;font-style:normal;font-display:swap}div
.n2i.nfa{display:inline-block;font:1em/1
NFontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.nfa-glass:before{content:"\f000"}.nfa-music:before{content:"\f001"}.nfa-search:before{content:"\f002"}.nfa-envelope-o:before{content:"\f003"}.nfa-heart:before{content:"\f004"}.nfa-star:before{content:"\f005"}.nfa-star-o:before{content:"\f006"}.nfa-user:before{content:"\f007"}.nfa-film:before{content:"\f008"}.nfa-th-large:before{content:"\f009"}.nfa-th:before{content:"\f00a"}.nfa-th-list:before{content:"\f00b"}.nfa-check:before{content:"\f00c"}.nfa-remove:before,.nfa-close:before,.nfa-times:before{content:"\f00d"}.nfa-search-plus:before{content:"\f00e"}.nfa-search-minus:before{content:"\f010"}.nfa-power-off:before{content:"\f011"}.nfa-signal:before{content:"\f012"}.nfa-gear:before,.nfa-cog:before{content:"\f013"}.nfa-trash-o:before{content:"\f014"}.nfa-home:before{content:"\f015"}.nfa-file-o:before{content:"\f016"}.nfa-clock-o:before{content:"\f017"}.nfa-road:before{content:"\f018"}.nfa-download:before{content:"\f019"}.nfa-arrow-circle-o-down:before{content:"\f01a"}.nfa-arrow-circle-o-up:before{content:"\f01b"}.nfa-inbox:before{content:"\f01c"}.nfa-play-circle-o:before{content:"\f01d"}.nfa-rotate-right:before,.nfa-repeat:before{content:"\f01e"}.nfa-refresh:before{content:"\f021"}.nfa-list-alt:before{content:"\f022"}.nfa-lock:before{content:"\f023"}.nfa-flag:before{content:"\f024"}.nfa-headphones:before{content:"\f025"}.nfa-volume-off:before{content:"\f026"}.nfa-volume-down:before{content:"\f027"}.nfa-volume-up:before{content:"\f028"}.nfa-qrcode:before{content:"\f029"}.nfa-barcode:before{content:"\f02a"}.nfa-tag:before{content:"\f02b"}.nfa-tags:before{content:"\f02c"}.nfa-book:before{content:"\f02d"}.nfa-bookmark:before{content:"\f02e"}.nfa-print:before{content:"\f02f"}.nfa-camera:before{content:"\f030"}.nfa-font:before{content:"\f031"}.nfa-bold:before{content:"\f032"}.nfa-italic:before{content:"\f033"}.nfa-text-height:before{content:"\f034"}.nfa-text-width:before{content:"\f035"}.nfa-align-left:before{content:"\f036"}.nfa-align-center:before{content:"\f037"}.nfa-align-right:before{content:"\f038"}.nfa-align-justify:before{content:"\f039"}.nfa-list:before{content:"\f03a"}.nfa-dedent:before,.nfa-outdent:before{content:"\f03b"}.nfa-indent:before{content:"\f03c"}.nfa-video-camera:before{content:"\f03d"}.nfa-photo:before,.nfa-image:before,.nfa-picture-o:before{content:"\f03e"}.nfa-pencil:before{content:"\f040"}.nfa-map-marker:before{content:"\f041"}.nfa-adjust:before{content:"\f042"}.nfa-tint:before{content:"\f043"}.nfa-edit:before,.nfa-pencil-square-o:before{content:"\f044"}.nfa-share-square-o:before{content:"\f045"}.nfa-check-square-o:before{content:"\f046"}.nfa-arrows:before{content:"\f047"}.nfa-step-backward:before{content:"\f048"}.nfa-fast-backward:before{content:"\f049"}.nfa-backward:before{content:"\f04a"}.nfa-play:before{content:"\f04b"}.nfa-pause:before{content:"\f04c"}.nfa-stop:before{content:"\f04d"}.nfa-forward:before{content:"\f04e"}.nfa-fast-forward:before{content:"\f050"}.nfa-step-forward:before{content:"\f051"}.nfa-eject:before{content:"\f052"}.nfa-chevron-left:before{content:"\f053"}.nfa-chevron-right:before{content:"\f054"}.nfa-plus-circle:before{content:"\f055"}.nfa-minus-circle:before{content:"\f056"}.nfa-times-circle:before{content:"\f057"}.nfa-check-circle:before{content:"\f058"}.nfa-question-circle:before{content:"\f059"}.nfa-info-circle:before{content:"\f05a"}.nfa-crosshairs:before{content:"\f05b"}.nfa-times-circle-o:before{content:"\f05c"}.nfa-check-circle-o:before{content:"\f05d"}.nfa-ban:before{content:"\f05e"}.nfa-arrow-left:before{content:"\f060"}.nfa-arrow-right:before{content:"\f061"}.nfa-arrow-up:before{content:"\f062"}.nfa-arrow-down:before{content:"\f063"}.nfa-mail-forward:before,.nfa-share:before{content:"\f064"}.nfa-expand:before{content:"\f065"}.nfa-compress:before{content:"\f066"}.nfa-plus:before{content:"\f067"}.nfa-minus:before{content:"\f068"}.nfa-asterisk:before{content:"\f069"}.nfa-exclamation-circle:before{content:"\f06a"}.nfa-gift:before{content:"\f06b"}.nfa-leaf:before{content:"\f06c"}.nfa-fire:before{content:"\f06d"}.nfa-eye:before{content:"\f06e"}.nfa-eye-slash:before{content:"\f070"}.nfa-warning:before,.nfa-exclamation-triangle:before{content:"\f071"}.nfa-plane:before{content:"\f072"}.nfa-calendar:before{content:"\f073"}.nfa-random:before{content:"\f074"}.nfa-comment:before{content:"\f075"}.nfa-magnet:before{content:"\f076"}.nfa-chevron-up:before{content:"\f077"}.nfa-chevron-down:before{content:"\f078"}.nfa-retweet:before{content:"\f079"}.nfa-shopping-cart:before{content:"\f07a"}.nfa-folder:before{content:"\f07b"}.nfa-folder-open:before{content:"\f07c"}.nfa-arrows-v:before{content:"\f07d"}.nfa-arrows-h:before{content:"\f07e"}.nfa-bar-chart-o:before,.nfa-bar-chart:before{content:"\f080"}.nfa-twitter-square:before{content:"\f081"}.nfa-facebook-square:before{content:"\f082"}.nfa-camera-retro:before{content:"\f083"}.nfa-key:before{content:"\f084"}.nfa-gears:before,.nfa-cogs:before{content:"\f085"}.nfa-comments:before{content:"\f086"}.nfa-thumbs-o-up:before{content:"\f087"}.nfa-thumbs-o-down:before{content:"\f088"}.nfa-star-half:before{content:"\f089"}.nfa-heart-o:before{content:"\f08a"}.nfa-sign-out:before{content:"\f08b"}.nfa-linkedin-square:before{content:"\f08c"}.nfa-thumb-tack:before{content:"\f08d"}.nfa-external-link:before{content:"\f08e"}.nfa-sign-in:before{content:"\f090"}.nfa-trophy:before{content:"\f091"}.nfa-github-square:before{content:"\f092"}.nfa-upload:before{content:"\f093"}.nfa-lemon-o:before{content:"\f094"}.nfa-phone:before{content:"\f095"}.nfa-square-o:before{content:"\f096"}.nfa-bookmark-o:before{content:"\f097"}.nfa-phone-square:before{content:"\f098"}.nfa-twitter:before{content:"\f099"}.nfa-facebook-f:before,.nfa-facebook:before{content:"\f09a"}.nfa-github:before{content:"\f09b"}.nfa-unlock:before{content:"\f09c"}.nfa-credit-card:before{content:"\f09d"}.nfa-feed:before,.nfa-rss:before{content:"\f09e"}.nfa-hdd-o:before{content:"\f0a0"}.nfa-bullhorn:before{content:"\f0a1"}.nfa-bell:before{content:"\f0f3"}.nfa-certificate:before{content:"\f0a3"}.nfa-hand-o-right:before{content:"\f0a4"}.nfa-hand-o-left:before{content:"\f0a5"}.nfa-hand-o-up:before{content:"\f0a6"}.nfa-hand-o-down:before{content:"\f0a7"}.nfa-arrow-circle-left:before{content:"\f0a8"}.nfa-arrow-circle-right:before{content:"\f0a9"}.nfa-arrow-circle-up:before{content:"\f0aa"}.nfa-arrow-circle-down:before{content:"\f0ab"}.nfa-globe:before{content:"\f0ac"}.nfa-wrench:before{content:"\f0ad"}.nfa-tasks:before{content:"\f0ae"}.nfa-filter:before{content:"\f0b0"}.nfa-briefcase:before{content:"\f0b1"}.nfa-arrows-alt:before{content:"\f0b2"}.nfa-group:before,.nfa-users:before{content:"\f0c0"}.nfa-chain:before,.nfa-link:before{content:"\f0c1"}.nfa-cloud:before{content:"\f0c2"}.nfa-flask:before{content:"\f0c3"}.nfa-cut:before,.nfa-scissors:before{content:"\f0c4"}.nfa-copy:before,.nfa-files-o:before{content:"\f0c5"}.nfa-paperclip:before{content:"\f0c6"}.nfa-save:before,.nfa-floppy-o:before{content:"\f0c7"}.nfa-square:before{content:"\f0c8"}.nfa-navicon:before,.nfa-reorder:before,.nfa-bars:before{content:"\f0c9"}.nfa-list-ul:before{content:"\f0ca"}.nfa-list-ol:before{content:"\f0cb"}.nfa-strikethrough:before{content:"\f0cc"}.nfa-underline:before{content:"\f0cd"}.nfa-table:before{content:"\f0ce"}.nfa-magic:before{content:"\f0d0"}.nfa-truck:before{content:"\f0d1"}.nfa-pinterest:before{content:"\f0d2"}.nfa-pinterest-square:before{content:"\f0d3"}.nfa-google-plus-square:before{content:"\f0d4"}.nfa-google-plus:before{content:"\f0d5"}.nfa-money:before{content:"\f0d6"}.nfa-caret-down:before{content:"\f0d7"}.nfa-caret-up:before{content:"\f0d8"}.nfa-caret-left:before{content:"\f0d9"}.nfa-caret-right:before{content:"\f0da"}.nfa-columns:before{content:"\f0db"}.nfa-unsorted:before,.nfa-sort:before{content:"\f0dc"}.nfa-sort-down:before,.nfa-sort-desc:before{content:"\f0dd"}.nfa-sort-up:before,.nfa-sort-asc:before{content:"\f0de"}.nfa-envelope:before{content:"\f0e0"}.nfa-linkedin:before{content:"\f0e1"}.nfa-rotate-left:before,.nfa-undo:before{content:"\f0e2"}.nfa-legal:before,.nfa-gavel:before{content:"\f0e3"}.nfa-dashboard:before,.nfa-tachometer:before{content:"\f0e4"}.nfa-comment-o:before{content:"\f0e5"}.nfa-comments-o:before{content:"\f0e6"}.nfa-flash:before,.nfa-bolt:before{content:"\f0e7"}.nfa-sitemap:before{content:"\f0e8"}.nfa-umbrella:before{content:"\f0e9"}.nfa-paste:before,.nfa-clipboard:before{content:"\f0ea"}.nfa-lightbulb-o:before{content:"\f0eb"}.nfa-exchange:before{content:"\f0ec"}.nfa-cloud-download:before{content:"\f0ed"}.nfa-cloud-upload:before{content:"\f0ee"}.nfa-user-md:before{content:"\f0f0"}.nfa-stethoscope:before{content:"\f0f1"}.nfa-suitcase:before{content:"\f0f2"}.nfa-bell-o:before{content:"\f0a2"}.nfa-coffee:before{content:"\f0f4"}.nfa-cutlery:before{content:"\f0f5"}.nfa-file-text-o:before{content:"\f0f6"}.nfa-building-o:before{content:"\f0f7"}.nfa-hospital-o:before{content:"\f0f8"}.nfa-ambulance:before{content:"\f0f9"}.nfa-medkit:before{content:"\f0fa"}.nfa-fighter-jet:before{content:"\f0fb"}.nfa-beer:before{content:"\f0fc"}.nfa-h-square:before{content:"\f0fd"}.nfa-plus-square:before{content:"\f0fe"}.nfa-angle-double-left:before{content:"\f100"}.nfa-angle-double-right:before{content:"\f101"}.nfa-angle-double-up:before{content:"\f102"}.nfa-angle-double-down:before{content:"\f103"}.nfa-angle-left:before{content:"\f104"}.nfa-angle-right:before{content:"\f105"}.nfa-angle-up:before{content:"\f106"}.nfa-angle-down:before{content:"\f107"}.nfa-desktop:before{content:"\f108"}.nfa-laptop:before{content:"\f109"}.nfa-tablet:before{content:"\f10a"}.nfa-mobile-phone:before,.nfa-mobile:before{content:"\f10b"}.nfa-circle-o:before{content:"\f10c"}.nfa-quote-left:before{content:"\f10d"}.nfa-quote-right:before{content:"\f10e"}.nfa-spinner:before{content:"\f110"}.nfa-circle:before{content:"\f111"}.nfa-mail-reply:before,.nfa-reply:before{content:"\f112"}.nfa-github-alt:before{content:"\f113"}.nfa-folder-o:before{content:"\f114"}.nfa-folder-open-o:before{content:"\f115"}.nfa-smile-o:before{content:"\f118"}.nfa-frown-o:before{content:"\f119"}.nfa-meh-o:before{content:"\f11a"}.nfa-gamepad:before{content:"\f11b"}.nfa-keyboard-o:before{content:"\f11c"}.nfa-flag-o:before{content:"\f11d"}.nfa-flag-checkered:before{content:"\f11e"}.nfa-terminal:before{content:"\f120"}.nfa-code:before{content:"\f121"}.nfa-mail-reply-all:before,.nfa-reply-all:before{content:"\f122"}.nfa-star-half-empty:before,.nfa-star-half-full:before,.nfa-star-half-o:before{content:"\f123"}.nfa-location-arrow:before{content:"\f124"}.nfa-crop:before{content:"\f125"}.nfa-code-fork:before{content:"\f126"}.nfa-unlink:before,.nfa-chain-broken:before{content:"\f127"}.nfa-question:before{content:"\f128"}.nfa-info:before{content:"\f129"}.nfa-exclamation:before{content:"\f12a"}.nfa-superscript:before{content:"\f12b"}.nfa-subscript:before{content:"\f12c"}.nfa-eraser:before{content:"\f12d"}.nfa-puzzle-piece:before{content:"\f12e"}.nfa-microphone:before{content:"\f130"}.nfa-microphone-slash:before{content:"\f131"}.nfa-shield:before{content:"\f132"}.nfa-calendar-o:before{content:"\f133"}.nfa-fire-extinguisher:before{content:"\f134"}.nfa-rocket:before{content:"\f135"}.nfa-maxcdn:before{content:"\f136"}.nfa-chevron-circle-left:before{content:"\f137"}.nfa-chevron-circle-right:before{content:"\f138"}.nfa-chevron-circle-up:before{content:"\f139"}.nfa-chevron-circle-down:before{content:"\f13a"}.nfa-html5:before{content:"\f13b"}.nfa-css3:before{content:"\f13c"}.nfa-anchor:before{content:"\f13d"}.nfa-unlock-alt:before{content:"\f13e"}.nfa-bullseye:before{content:"\f140"}.nfa-ellipsis-h:before{content:"\f141"}.nfa-ellipsis-v:before{content:"\f142"}.nfa-rss-square:before{content:"\f143"}.nfa-play-circle:before{content:"\f144"}.nfa-ticket:before{content:"\f145"}.nfa-minus-square:before{content:"\f146"}.nfa-minus-square-o:before{content:"\f147"}.nfa-level-up:before{content:"\f148"}.nfa-level-down:before{content:"\f149"}.nfa-check-square:before{content:"\f14a"}.nfa-pencil-square:before{content:"\f14b"}.nfa-external-link-square:before{content:"\f14c"}.nfa-share-square:before{content:"\f14d"}.nfa-compass:before{content:"\f14e"}.nfa-toggle-down:before,.nfa-caret-square-o-down:before{content:"\f150"}.nfa-toggle-up:before,.nfa-caret-square-o-up:before{content:"\f151"}.nfa-toggle-right:before,.nfa-caret-square-o-right:before{content:"\f152"}.nfa-euro:before,.nfa-eur:before{content:"\f153"}.nfa-gbp:before{content:"\f154"}.nfa-dollar:before,.nfa-usd:before{content:"\f155"}.nfa-rupee:before,.nfa-inr:before{content:"\f156"}.nfa-cny:before,.nfa-rmb:before,.nfa-yen:before,.nfa-jpy:before{content:"\f157"}.nfa-ruble:before,.nfa-rouble:before,.nfa-rub:before{content:"\f158"}.nfa-won:before,.nfa-krw:before{content:"\f159"}.nfa-bitcoin:before,.nfa-btc:before{content:"\f15a"}.nfa-file:before{content:"\f15b"}.nfa-file-text:before{content:"\f15c"}.nfa-sort-alpha-asc:before{content:"\f15d"}.nfa-sort-alpha-desc:before{content:"\f15e"}.nfa-sort-amount-asc:before{content:"\f160"}.nfa-sort-amount-desc:before{content:"\f161"}.nfa-sort-numeric-asc:before{content:"\f162"}.nfa-sort-numeric-desc:before{content:"\f163"}.nfa-thumbs-up:before{content:"\f164"}.nfa-thumbs-down:before{content:"\f165"}.nfa-youtube-square:before{content:"\f166"}.nfa-youtube:before{content:"\f167"}.nfa-xing:before{content:"\f168"}.nfa-xing-square:before{content:"\f169"}.nfa-youtube-play:before{content:"\f16a"}.nfa-dropbox:before{content:"\f16b"}.nfa-stack-overflow:before{content:"\f16c"}.nfa-instagram:before{content:"\f16d"}.nfa-flickr:before{content:"\f16e"}.nfa-adn:before{content:"\f170"}.nfa-bitbucket:before{content:"\f171"}.nfa-bitbucket-square:before{content:"\f172"}.nfa-tumblr:before{content:"\f173"}.nfa-tumblr-square:before{content:"\f174"}.nfa-long-arrow-down:before{content:"\f175"}.nfa-long-arrow-up:before{content:"\f176"}.nfa-long-arrow-left:before{content:"\f177"}.nfa-long-arrow-right:before{content:"\f178"}.nfa-apple:before{content:"\f179"}.nfa-windows:before{content:"\f17a"}.nfa-android:before{content:"\f17b"}.nfa-linux:before{content:"\f17c"}.nfa-dribbble:before{content:"\f17d"}.nfa-skype:before{content:"\f17e"}.nfa-foursquare:before{content:"\f180"}.nfa-trello:before{content:"\f181"}.nfa-female:before{content:"\f182"}.nfa-male:before{content:"\f183"}.nfa-gittip:before,.nfa-gratipay:before{content:"\f184"}.nfa-sun-o:before{content:"\f185"}.nfa-moon-o:before{content:"\f186"}.nfa-archive:before{content:"\f187"}.nfa-bug:before{content:"\f188"}.nfa-vk:before{content:"\f189"}.nfa-weibo:before{content:"\f18a"}.nfa-renren:before{content:"\f18b"}.nfa-pagelines:before{content:"\f18c"}.nfa-stack-exchange:before{content:"\f18d"}.nfa-arrow-circle-o-right:before{content:"\f18e"}.nfa-arrow-circle-o-left:before{content:"\f190"}.nfa-toggle-left:before,.nfa-caret-square-o-left:before{content:"\f191"}.nfa-dot-circle-o:before{content:"\f192"}.nfa-wheelchair:before{content:"\f193"}.nfa-vimeo-square:before{content:"\f194"}.nfa-turkish-lira:before,.nfa-try:before{content:"\f195"}.nfa-plus-square-o:before{content:"\f196"}.nfa-space-shuttle:before{content:"\f197"}.nfa-slack:before{content:"\f198"}.nfa-envelope-square:before{content:"\f199"}.nfa-wordpress:before{content:"\f19a"}.nfa-openid:before{content:"\f19b"}.nfa-institution:before,.nfa-bank:before,.nfa-university:before{content:"\f19c"}.nfa-mortar-board:before,.nfa-graduation-cap:before{content:"\f19d"}.nfa-yahoo:before{content:"\f19e"}.nfa-google:before{content:"\f1a0"}.nfa-reddit:before{content:"\f1a1"}.nfa-reddit-square:before{content:"\f1a2"}.nfa-stumbleupon-circle:before{content:"\f1a3"}.nfa-stumbleupon:before{content:"\f1a4"}.nfa-delicious:before{content:"\f1a5"}.nfa-digg:before{content:"\f1a6"}.nfa-pied-piper-pp:before{content:"\f1a7"}.nfa-pied-piper-alt:before{content:"\f1a8"}.nfa-drupal:before{content:"\f1a9"}.nfa-joomla:before{content:"\f1aa"}.nfa-language:before{content:"\f1ab"}.nfa-fax:before{content:"\f1ac"}.nfa-building:before{content:"\f1ad"}.nfa-child:before{content:"\f1ae"}.nfa-paw:before{content:"\f1b0"}.nfa-spoon:before{content:"\f1b1"}.nfa-cube:before{content:"\f1b2"}.nfa-cubes:before{content:"\f1b3"}.nfa-behance:before{content:"\f1b4"}.nfa-behance-square:before{content:"\f1b5"}.nfa-steam:before{content:"\f1b6"}.nfa-steam-square:before{content:"\f1b7"}.nfa-recycle:before{content:"\f1b8"}.nfa-automobile:before,.nfa-car:before{content:"\f1b9"}.nfa-cab:before,.nfa-taxi:before{content:"\f1ba"}.nfa-tree:before{content:"\f1bb"}.nfa-spotify:before{content:"\f1bc"}.nfa-deviantart:before{content:"\f1bd"}.nfa-soundcloud:before{content:"\f1be"}.nfa-database:before{content:"\f1c0"}.nfa-file-pdf-o:before{content:"\f1c1"}.nfa-file-word-o:before{content:"\f1c2"}.nfa-file-excel-o:before{content:"\f1c3"}.nfa-file-powerpoint-o:before{content:"\f1c4"}.nfa-file-photo-o:before,.nfa-file-picture-o:before,.nfa-file-image-o:before{content:"\f1c5"}.nfa-file-zip-o:before,.nfa-file-archive-o:before{content:"\f1c6"}.nfa-file-sound-o:before,.nfa-file-audio-o:before{content:"\f1c7"}.nfa-file-movie-o:before,.nfa-file-video-o:before{content:"\f1c8"}.nfa-file-code-o:before{content:"\f1c9"}.nfa-vine:before{content:"\f1ca"}.nfa-codepen:before{content:"\f1cb"}.nfa-jsfiddle:before{content:"\f1cc"}.nfa-life-bouy:before,.nfa-life-buoy:before,.nfa-life-saver:before,.nfa-support:before,.nfa-life-ring:before{content:"\f1cd"}.nfa-circle-o-notch:before{content:"\f1ce"}.nfa-ra:before,.nfa-resistance:before,.nfa-rebel:before{content:"\f1d0"}.nfa-ge:before,.nfa-empire:before{content:"\f1d1"}.nfa-git-square:before{content:"\f1d2"}.nfa-git:before{content:"\f1d3"}.nfa-y-combinator-square:before,.nfa-yc-square:before,.nfa-hacker-news:before{content:"\f1d4"}.nfa-tencent-weibo:before{content:"\f1d5"}.nfa-qq:before{content:"\f1d6"}.nfa-wechat:before,.nfa-weixin:before{content:"\f1d7"}.nfa-send:before,.nfa-paper-plane:before{content:"\f1d8"}.nfa-send-o:before,.nfa-paper-plane-o:before{content:"\f1d9"}.nfa-history:before{content:"\f1da"}.nfa-circle-thin:before{content:"\f1db"}.nfa-header:before{content:"\f1dc"}.nfa-paragraph:before{content:"\f1dd"}.nfa-sliders:before{content:"\f1de"}.nfa-share-alt:before{content:"\f1e0"}.nfa-share-alt-square:before{content:"\f1e1"}.nfa-bomb:before{content:"\f1e2"}.nfa-soccer-ball-o:before,.nfa-futbol-o:before{content:"\f1e3"}.nfa-tty:before{content:"\f1e4"}.nfa-binoculars:before{content:"\f1e5"}.nfa-plug:before{content:"\f1e6"}.nfa-slideshare:before{content:"\f1e7"}.nfa-twitch:before{content:"\f1e8"}.nfa-yelp:before{content:"\f1e9"}.nfa-newspaper-o:before{content:"\f1ea"}.nfa-wifi:before{content:"\f1eb"}.nfa-calculator:before{content:"\f1ec"}.nfa-paypal:before{content:"\f1ed"}.nfa-google-wallet:before{content:"\f1ee"}.nfa-cc-visa:before{content:"\f1f0"}.nfa-cc-mastercard:before{content:"\f1f1"}.nfa-cc-discover:before{content:"\f1f2"}.nfa-cc-amex:before{content:"\f1f3"}.nfa-cc-paypal:before{content:"\f1f4"}.nfa-cc-stripe:before{content:"\f1f5"}.nfa-bell-slash:before{content:"\f1f6"}.nfa-bell-slash-o:before{content:"\f1f7"}.nfa-trash:before{content:"\f1f8"}.nfa-copyright:before{content:"\f1f9"}.nfa-at:before{content:"\f1fa"}.nfa-eyedropper:before{content:"\f1fb"}.nfa-paint-brush:before{content:"\f1fc"}.nfa-birthday-cake:before{content:"\f1fd"}.nfa-area-chart:before{content:"\f1fe"}.nfa-pie-chart:before{content:"\f200"}.nfa-line-chart:before{content:"\f201"}.nfa-lastfm:before{content:"\f202"}.nfa-lastfm-square:before{content:"\f203"}.nfa-toggle-off:before{content:"\f204"}.nfa-toggle-on:before{content:"\f205"}.nfa-bicycle:before{content:"\f206"}.nfa-bus:before{content:"\f207"}.nfa-ioxhost:before{content:"\f208"}.nfa-angellist:before{content:"\f209"}.nfa-cc:before{content:"\f20a"}.nfa-shekel:before,.nfa-sheqel:before,.nfa-ils:before{content:"\f20b"}.nfa-meanpath:before{content:"\f20c"}.nfa-buysellads:before{content:"\f20d"}.nfa-connectdevelop:before{content:"\f20e"}.nfa-dashcube:before{content:"\f210"}.nfa-forumbee:before{content:"\f211"}.nfa-leanpub:before{content:"\f212"}.nfa-sellsy:before{content:"\f213"}.nfa-shirtsinbulk:before{content:"\f214"}.nfa-simplybuilt:before{content:"\f215"}.nfa-skyatlas:before{content:"\f216"}.nfa-cart-plus:before{content:"\f217"}.nfa-cart-arrow-down:before{content:"\f218"}.nfa-diamond:before{content:"\f219"}.nfa-ship:before{content:"\f21a"}.nfa-user-secret:before{content:"\f21b"}.nfa-motorcycle:before{content:"\f21c"}.nfa-street-view:before{content:"\f21d"}.nfa-heartbeat:before{content:"\f21e"}.nfa-venus:before{content:"\f221"}.nfa-mars:before{content:"\f222"}.nfa-mercury:before{content:"\f223"}.nfa-intersex:before,.nfa-transgender:before{content:"\f224"}.nfa-transgender-alt:before{content:"\f225"}.nfa-venus-double:before{content:"\f226"}.nfa-mars-double:before{content:"\f227"}.nfa-venus-mars:before{content:"\f228"}.nfa-mars-stroke:before{content:"\f229"}.nfa-mars-stroke-v:before{content:"\f22a"}.nfa-mars-stroke-h:before{content:"\f22b"}.nfa-neuter:before{content:"\f22c"}.nfa-genderless:before{content:"\f22d"}.nfa-facebook-official:before{content:"\f230"}.nfa-pinterest-p:before{content:"\f231"}.nfa-whatsapp:before{content:"\f232"}.nfa-server:before{content:"\f233"}.nfa-user-plus:before{content:"\f234"}.nfa-user-times:before{content:"\f235"}.nfa-hotel:before,.nfa-bed:before{content:"\f236"}.nfa-viacoin:before{content:"\f237"}.nfa-train:before{content:"\f238"}.nfa-subway:before{content:"\f239"}.nfa-medium:before{content:"\f23a"}.nfa-yc:before,.nfa-y-combinator:before{content:"\f23b"}.nfa-optin-monster:before{content:"\f23c"}.nfa-opencart:before{content:"\f23d"}.nfa-expeditedssl:before{content:"\f23e"}.nfa-battery-4:before,.nfa-battery:before,.nfa-battery-full:before{content:"\f240"}.nfa-battery-3:before,.nfa-battery-three-quarters:before{content:"\f241"}.nfa-battery-2:before,.nfa-battery-half:before{content:"\f242"}.nfa-battery-1:before,.nfa-battery-quarter:before{content:"\f243"}.nfa-battery-0:before,.nfa-battery-empty:before{content:"\f244"}.nfa-mouse-pointer:before{content:"\f245"}.nfa-i-cursor:before{content:"\f246"}.nfa-object-group:before{content:"\f247"}.nfa-object-ungroup:before{content:"\f248"}.nfa-sticky-note:before{content:"\f249"}.nfa-sticky-note-o:before{content:"\f24a"}.nfa-cc-jcb:before{content:"\f24b"}.nfa-cc-diners-club:before{content:"\f24c"}.nfa-clone:before{content:"\f24d"}.nfa-balance-scale:before{content:"\f24e"}.nfa-hourglass-o:before{content:"\f250"}.nfa-hourglass-1:before,.nfa-hourglass-start:before{content:"\f251"}.nfa-hourglass-2:before,.nfa-hourglass-half:before{content:"\f252"}.nfa-hourglass-3:before,.nfa-hourglass-end:before{content:"\f253"}.nfa-hourglass:before{content:"\f254"}.nfa-hand-grab-o:before,.nfa-hand-rock-o:before{content:"\f255"}.nfa-hand-stop-o:before,.nfa-hand-paper-o:before{content:"\f256"}.nfa-hand-scissors-o:before{content:"\f257"}.nfa-hand-lizard-o:before{content:"\f258"}.nfa-hand-spock-o:before{content:"\f259"}.nfa-hand-pointer-o:before{content:"\f25a"}.nfa-hand-peace-o:before{content:"\f25b"}.nfa-trademark:before{content:"\f25c"}.nfa-registered:before{content:"\f25d"}.nfa-creative-commons:before{content:"\f25e"}.nfa-gg:before{content:"\f260"}.nfa-gg-circle:before{content:"\f261"}.nfa-tripadvisor:before{content:"\f262"}.nfa-odnoklassniki:before{content:"\f263"}.nfa-odnoklassniki-square:before{content:"\f264"}.nfa-get-pocket:before{content:"\f265"}.nfa-wikipedia-w:before{content:"\f266"}.nfa-safari:before{content:"\f267"}.nfa-chrome:before{content:"\f268"}.nfa-firefox:before{content:"\f269"}.nfa-opera:before{content:"\f26a"}.nfa-internet-explorer:before{content:"\f26b"}.nfa-tv:before,.nfa-television:before{content:"\f26c"}.nfa-contao:before{content:"\f26d"}.nfa-500px:before{content:"\f26e"}.nfa-amazon:before{content:"\f270"}.nfa-calendar-plus-o:before{content:"\f271"}.nfa-calendar-minus-o:before{content:"\f272"}.nfa-calendar-times-o:before{content:"\f273"}.nfa-calendar-check-o:before{content:"\f274"}.nfa-industry:before{content:"\f275"}.nfa-map-pin:before{content:"\f276"}.nfa-map-signs:before{content:"\f277"}.nfa-map-o:before{content:"\f278"}.nfa-map:before{content:"\f279"}.nfa-commenting:before{content:"\f27a"}.nfa-commenting-o:before{content:"\f27b"}.nfa-houzz:before{content:"\f27c"}.nfa-vimeo:before{content:"\f27d"}.nfa-black-tie:before{content:"\f27e"}.nfa-fonticons:before{content:"\f280"}.nfa-reddit-alien:before{content:"\f281"}.nfa-edge:before{content:"\f282"}.nfa-credit-card-alt:before{content:"\f283"}.nfa-codiepie:before{content:"\f284"}.nfa-modx:before{content:"\f285"}.nfa-fort-awesome:before{content:"\f286"}.nfa-usb:before{content:"\f287"}.nfa-product-hunt:before{content:"\f288"}.nfa-mixcloud:before{content:"\f289"}.nfa-scribd:before{content:"\f28a"}.nfa-pause-circle:before{content:"\f28b"}.nfa-pause-circle-o:before{content:"\f28c"}.nfa-stop-circle:before{content:"\f28d"}.nfa-stop-circle-o:before{content:"\f28e"}.nfa-shopping-bag:before{content:"\f290"}.nfa-shopping-basket:before{content:"\f291"}.nfa-hashtag:before{content:"\f292"}.nfa-bluetooth:before{content:"\f293"}.nfa-bluetooth-b:before{content:"\f294"}.nfa-percent:before{content:"\f295"}.nfa-gitlab:before{content:"\f296"}.nfa-wpbeginner:before{content:"\f297"}.nfa-wpforms:before{content:"\f298"}.nfa-envira:before{content:"\f299"}.nfa-universal-access:before{content:"\f29a"}.nfa-wheelchair-alt:before{content:"\f29b"}.nfa-question-circle-o:before{content:"\f29c"}.nfa-blind:before{content:"\f29d"}.nfa-audio-description:before{content:"\f29e"}.nfa-volume-control-phone:before{content:"\f2a0"}.nfa-braille:before{content:"\f2a1"}.nfa-assistive-listening-systems:before{content:"\f2a2"}.nfa-asl-interpreting:before,.nfa-american-sign-language-interpreting:before{content:"\f2a3"}.nfa-deafness:before,.nfa-hard-of-hearing:before,.nfa-deaf:before{content:"\f2a4"}.nfa-glide:before{content:"\f2a5"}.nfa-glide-g:before{content:"\f2a6"}.nfa-signing:before,.nfa-sign-language:before{content:"\f2a7"}.nfa-low-vision:before{content:"\f2a8"}.nfa-viadeo:before{content:"\f2a9"}.nfa-viadeo-square:before{content:"\f2aa"}.nfa-snapchat:before{content:"\f2ab"}.nfa-snapchat-ghost:before{content:"\f2ac"}.nfa-snapchat-square:before{content:"\f2ad"}.nfa-pied-piper:before{content:"\f2ae"}.nfa-first-order:before{content:"\f2b0"}.nfa-yoast:before{content:"\f2b1"}.nfa-themeisle:before{content:"\f2b2"}.nfa-google-plus-circle:before,.nfa-google-plus-official:before{content:"\f2b3"}.nfa-fa:before,.nfa-font-awesome:before{content:"\f2b4"}.nfa-handshake-o:before{content:"\f2b5"}.nfa-envelope-open:before{content:"\f2b6"}.nfa-envelope-open-o:before{content:"\f2b7"}.nfa-linode:before{content:"\f2b8"}.nfa-address-book:before{content:"\f2b9"}.nfa-address-book-o:before{content:"\f2ba"}.nfa-vcard:before,.nfa-address-card:before{content:"\f2bb"}.nfa-vcard-o:before,.nfa-address-card-o:before{content:"\f2bc"}.nfa-user-circle:before{content:"\f2bd"}.nfa-user-circle-o:before{content:"\f2be"}.nfa-user-o:before{content:"\f2c0"}.nfa-id-badge:before{content:"\f2c1"}.nfa-drivers-license:before,.nfa-id-card:before{content:"\f2c2"}.nfa-drivers-license-o:before,.nfa-id-card-o:before{content:"\f2c3"}.nfa-quora:before{content:"\f2c4"}.nfa-free-code-camp:before{content:"\f2c5"}.nfa-telegram:before{content:"\f2c6"}.nfa-thermometer-4:before,.nfa-thermometer:before,.nfa-thermometer-full:before{content:"\f2c7"}.nfa-thermometer-3:before,.nfa-thermometer-three-quarters:before{content:"\f2c8"}.nfa-thermometer-2:before,.nfa-thermometer-half:before{content:"\f2c9"}.nfa-thermometer-1:before,.nfa-thermometer-quarter:before{content:"\f2ca"}.nfa-thermometer-0:before,.nfa-thermometer-empty:before{content:"\f2cb"}.nfa-shower:before{content:"\f2cc"}.nfa-bathtub:before,.nfa-s15:before,.nfa-bath:before{content:"\f2cd"}.nfa-podcast:before{content:"\f2ce"}.nfa-window-maximize:before{content:"\f2d0"}.nfa-window-minimize:before{content:"\f2d1"}.nfa-window-restore:before{content:"\f2d2"}.nfa-times-rectangle:before,.nfa-window-close:before{content:"\f2d3"}.nfa-times-rectangle-o:before,.nfa-window-close-o:before{content:"\f2d4"}.nfa-bandcamp:before{content:"\f2d5"}.nfa-grav:before{content:"\f2d6"}.nfa-etsy:before{content:"\f2d7"}.nfa-imdb:before{content:"\f2d8"}.nfa-ravelry:before{content:"\f2d9"}.nfa-eercast:before{content:"\f2da"}.nfa-microchip:before{content:"\f2db"}.nfa-snowflake-o:before{content:"\f2dc"}.nfa-superpowers:before{content:"\f2dd"}.nfa-wpexplorer:before{content:"\f2de"}.nfa-meetup:before{content:"\f2e0"}PK��[��!����;Application/Frontend/Assets/icons/fontawesome/manifest.jsonnu�[���{
"id": "fa",
"label": "Font Awesome 4",
"class": "nfa",
"isLigature": 0,
"prefix": "nfa-",
"testString": "\uf00c\uf000",
"compatibility": ".n2i.fa{display: inline-block;font:
normal normal normal 1em/1 FontAwesome;font-size: inherit;text-rendering:
auto;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing:
grayscale;}",
"data": {
"glass": {
"name": "Glass",
"kw": "Glass,martini,drink,bar,alcohol,liquor"
},
"music": {
"name": "Music",
"kw": "Music,note,sound"
},
"search": {
"name": "Search",
"kw": "Search,magnify,zoom,enlarge,bigger"
},
"envelope-o": {
"name": "Envelope Outlined",
"kw": "Envelope
Outlined,email,e-mail,letter,support,mail,message,notification"
},
"heart": {
"name": "Heart",
"kw": "Heart,love,like,favorite"
},
"star": {
"name": "Star",
"kw":
"Star,award,achievement,night,rating,score,favorite"
},
"star-o": {
"name": "Star Outlined",
"kw": "Star
Outlined,award,achievement,night,rating,score,favorite"
},
"user": {
"name": "User",
"kw": "User,person,man,head,profile"
},
"film": {
"name": "Film",
"kw": "Film,movie"
},
"th-large": {
"name": "th-large",
"kw": "th-large,blocks,squares,boxes,grid"
},
"th": {
"name": "th",
"kw": "th,blocks,squares,boxes,grid"
},
"th-list": {
"name": "th-list",
"kw":
"th-list,ul,ol,checklist,finished,completed,done,todo"
},
"check": {
"name": "Check",
"kw":
"Check,checkmark,done,todo,agree,accept,confirm,tick,ok"
},
"times": {
"name": "Times",
"kw": "Times,close,exit,x,cross"
},
"search-plus": {
"name": "Search Plus",
"kw": "Search Plus,magnify,zoom,enlarge,bigger"
},
"search-minus": {
"name": "Search Minus",
"kw": "Search Minus,magnify,minify,zoom,smaller"
},
"power-off": {
"name": "Power Off",
"kw": "Power Off,on"
},
"signal": {
"name": "signal",
"kw": "signal,graph,bars"
},
"cog": {
"name": "cog",
"kw": "cog,settings"
},
"trash-o": {
"name": "Trash Outlined",
"kw": "Trash
Outlined,garbage,delete,remove,trash,hide"
},
"home": {
"name": "home",
"kw": "home,main,house"
},
"file-o": {
"name": "File Outlined",
"kw": "File Outlined,new,page,pdf,document"
},
"clock-o": {
"name": "Clock Outlined",
"kw": "Clock Outlined,watch,timer,late,timestamp"
},
"road": {
"name": "road",
"kw": "road,street"
},
"download": {
"name": "Download",
"kw": "Download,import"
},
"arrow-circle-o-down": {
"name": "Arrow Circle Outlined Down",
"kw": "Arrow Circle Outlined Down,download"
},
"arrow-circle-o-up": {
"name": "Arrow Circle Outlined Up",
"kw": "Arrow Circle Outlined Up"
},
"inbox": {
"name": "inbox",
"kw": "inbox"
},
"play-circle-o": {
"name": "Play Circle Outlined",
"kw": "Play Circle Outlined"
},
"repeat": {
"name": "Repeat",
"kw": "Repeat,redo,forward"
},
"refresh": {
"name": "refresh",
"kw": "refresh,reload,sync"
},
"list-alt": {
"name": "list-alt",
"kw":
"list-alt,ul,ol,checklist,finished,completed,done,todo"
},
"lock": {
"name": "lock",
"kw": "lock,protect,admin,security"
},
"flag": {
"name": "flag",
"kw": "flag,report,notification,notify"
},
"headphones": {
"name": "headphones",
"kw": "headphones,sound,listen,music,audio"
},
"volume-off": {
"name": "volume-off",
"kw": "volume-off,audio,mute,sound,music"
},
"volume-down": {
"name": "volume-down",
"kw":
"volume-down,audio,lower,quieter,sound,music"
},
"volume-up": {
"name": "volume-up",
"kw": "volume-up,audio,higher,louder,sound,music"
},
"qrcode": {
"name": "qrcode",
"kw": "qrcode,scan"
},
"barcode": {
"name": "barcode",
"kw": "barcode,scan"
},
"tag": {
"name": "tag",
"kw": "tag,label"
},
"tags": {
"name": "tags",
"kw": "tags,labels"
},
"book": {
"name": "book",
"kw": "book,read,documentation"
},
"bookmark": {
"name": "bookmark",
"kw": "bookmark,save"
},
"print": {
"name": "print",
"kw": "print"
},
"camera": {
"name": "camera",
"kw": "camera,photo,picture,record"
},
"font": {
"name": "font",
"kw": "font,text"
},
"bold": {
"name": "bold",
"kw": "bold"
},
"italic": {
"name": "italic",
"kw": "italic,italics"
},
"text-height": {
"name": "text-height",
"kw": "text-height"
},
"text-width": {
"name": "text-width",
"kw": "text-width"
},
"align-left": {
"name": "align-left",
"kw": "align-left,text"
},
"align-center": {
"name": "align-center",
"kw": "align-center,middle,text"
},
"align-right": {
"name": "align-right",
"kw": "align-right,text"
},
"align-justify": {
"name": "align-justify",
"kw": "align-justify,text"
},
"list": {
"name": "list",
"kw":
"list,ul,ol,checklist,finished,completed,done,todo"
},
"outdent": {
"name": "Outdent",
"kw": "Outdent"
},
"indent": {
"name": "Indent",
"kw": "Indent"
},
"video-camera": {
"name": "Video Camera",
"kw": "Video Camera,film,movie,record"
},
"picture-o": {
"name": "Picture Outlined",
"kw": "Picture Outlined"
},
"pencil": {
"name": "pencil",
"kw": "pencil,write,edit,update"
},
"map-marker": {
"name": "map-marker",
"kw":
"map-marker,map,pin,location,coordinates,localize,address,travel,where,place"
},
"adjust": {
"name": "adjust",
"kw": "adjust,contrast"
},
"tint": {
"name": "tint",
"kw": "tint,raindrop,waterdrop,drop,droplet"
},
"pencil-square-o": {
"name": "Pencil Square Outlined",
"kw": "Pencil Square Outlined,write,edit,update"
},
"share-square-o": {
"name": "Share Square Outlined",
"kw": "Share Square Outlined,social,send,arrow"
},
"check-square-o": {
"name": "Check Square Outlined",
"kw": "Check Square
Outlined,todo,done,agree,accept,confirm,ok"
},
"arrows": {
"name": "Arrows",
"kw": "Arrows,move,reorder,resize"
},
"step-backward": {
"name": "step-backward",
"kw":
"step-backward,rewind,previous,beginning,start,first"
},
"fast-backward": {
"name": "fast-backward",
"kw":
"fast-backward,rewind,previous,beginning,start,first"
},
"backward": {
"name": "backward",
"kw": "backward,rewind,previous"
},
"play": {
"name": "play",
"kw": "play,start,playing,music,sound"
},
"pause": {
"name": "pause",
"kw": "pause,wait"
},
"stop": {
"name": "stop",
"kw": "stop,block,box,square"
},
"forward": {
"name": "forward",
"kw": "forward,forward,next"
},
"fast-forward": {
"name": "fast-forward",
"kw": "fast-forward,next,end,last"
},
"step-forward": {
"name": "step-forward",
"kw": "step-forward,next,end,last"
},
"eject": {
"name": "eject",
"kw": "eject"
},
"chevron-left": {
"name": "chevron-left",
"kw": "chevron-left,bracket,previous,back"
},
"chevron-right": {
"name": "chevron-right",
"kw": "chevron-right,bracket,next,forward"
},
"plus-circle": {
"name": "Plus Circle",
"kw": "Plus Circle,add,new,create,expand"
},
"minus-circle": {
"name": "Minus Circle",
"kw": "Minus Circle,delete,remove,trash,hide"
},
"times-circle": {
"name": "Times Circle",
"kw": "Times Circle,close,exit,x"
},
"check-circle": {
"name": "Check Circle",
"kw": "Check
Circle,todo,done,agree,accept,confirm,ok"
},
"question-circle": {
"name": "Question Circle",
"kw": "Question
Circle,help,information,unknown,support"
},
"info-circle": {
"name": "Info Circle",
"kw": "Info Circle,help,information,more,details"
},
"crosshairs": {
"name": "Crosshairs",
"kw": "Crosshairs,picker"
},
"times-circle-o": {
"name": "Times Circle Outlined",
"kw": "Times Circle Outlined,close,exit,x"
},
"check-circle-o": {
"name": "Check Circle Outlined",
"kw": "Check Circle
Outlined,todo,done,agree,accept,confirm,ok"
},
"ban": {
"name": "ban",
"kw":
"ban,delete,remove,trash,hide,block,stop,abort,cancel"
},
"arrow-left": {
"name": "arrow-left",
"kw": "arrow-left,previous,back"
},
"arrow-right": {
"name": "arrow-right",
"kw": "arrow-right,next,forward"
},
"arrow-up": {
"name": "arrow-up",
"kw": "arrow-up"
},
"arrow-down": {
"name": "arrow-down",
"kw": "arrow-down,download"
},
"share": {
"name": "Share",
"kw": "Share"
},
"expand": {
"name": "Expand",
"kw": "Expand,enlarge,bigger,resize"
},
"compress": {
"name": "Compress",
"kw":
"Compress,collapse,combine,contract,merge,smaller"
},
"plus": {
"name": "plus",
"kw": "plus,add,new,create,expand"
},
"minus": {
"name": "minus",
"kw":
"minus,hide,minify,delete,remove,trash,hide,collapse"
},
"asterisk": {
"name": "asterisk",
"kw": "asterisk,details"
},
"exclamation-circle": {
"name": "Exclamation Circle",
"kw": "Exclamation
Circle,warning,error,problem,notification,alert"
},
"gift": {
"name": "gift",
"kw": "gift,present"
},
"leaf": {
"name": "leaf",
"kw": "leaf,eco,nature,plant"
},
"fire": {
"name": "fire",
"kw": "fire,flame,hot,popular"
},
"eye": {
"name": "Eye",
"kw": "Eye,show,visible,views"
},
"eye-slash": {
"name": "Eye Slash",
"kw": "Eye
Slash,toggle,show,hide,visible,visiblity,views"
},
"exclamation-triangle": {
"name": "Exclamation Triangle",
"kw": "Exclamation
Triangle,warning,error,problem,notification,alert"
},
"plane": {
"name": "plane",
"kw":
"plane,travel,trip,location,destination,airplane,fly,mode"
},
"calendar": {
"name": "calendar",
"kw": "calendar,date,time,when,event"
},
"random": {
"name": "random",
"kw": "random,sort,shuffle"
},
"comment": {
"name": "comment",
"kw":
"comment,speech,notification,note,chat,bubble,feedback,message,texting,sms,conversation"
},
"magnet": {
"name": "magnet",
"kw": "magnet"
},
"chevron-up": {
"name": "chevron-up",
"kw": "chevron-up"
},
"chevron-down": {
"name": "chevron-down",
"kw": "chevron-down"
},
"retweet": {
"name": "retweet",
"kw": "retweet,refresh,reload,share"
},
"shopping-cart": {
"name": "shopping-cart",
"kw":
"shopping-cart,checkout,buy,purchase,payment"
},
"folder": {
"name": "Folder",
"kw": "Folder"
},
"folder-open": {
"name": "Folder Open",
"kw": "Folder Open"
},
"arrows-v": {
"name": "Arrows Vertical",
"kw": "Arrows Vertical,resize"
},
"arrows-h": {
"name": "Arrows Horizontal",
"kw": "Arrows Horizontal,resize"
},
"bar-chart": {
"name": "Bar Chart",
"kw": "Bar Chart,graph,analytics"
},
"twitter-square": {
"name": "Twitter Square",
"kw": "Twitter Square,tweet,social network"
},
"facebook-square": {
"name": "Facebook Square",
"kw": "Facebook Square,social network"
},
"camera-retro": {
"name": "camera-retro",
"kw": "camera-retro,photo,picture,record"
},
"key": {
"name": "key",
"kw": "key,unlock,password"
},
"cogs": {
"name": "cogs",
"kw": "cogs,settings"
},
"comments": {
"name": "comments",
"kw":
"comments,speech,notification,note,chat,bubble,feedback,message,texting,sms,conversation"
},
"thumbs-o-up": {
"name": "Thumbs Up Outlined",
"kw": "Thumbs Up
Outlined,like,approve,favorite,agree,hand"
},
"thumbs-o-down": {
"name": "Thumbs Down Outlined",
"kw": "Thumbs Down
Outlined,dislike,disapprove,disagree,hand"
},
"star-half": {
"name": "star-half",
"kw": "star-half,award,achievement,rating,score"
},
"heart-o": {
"name": "Heart Outlined",
"kw": "Heart Outlined,love,like,favorite"
},
"sign-out": {
"name": "Sign Out",
"kw": "Sign Out,log out,logout,leave,exit,arrow"
},
"linkedin-square": {
"name": "LinkedIn Square",
"kw": "LinkedIn Square"
},
"thumb-tack": {
"name": "Thumb Tack",
"kw": "Thumb
Tack,marker,pin,location,coordinates"
},
"external-link": {
"name": "External Link",
"kw": "External Link,open,new"
},
"sign-in": {
"name": "Sign In",
"kw": "Sign In,enter,join,log in,login,sign up,sign
in,signin,signup,arrow"
},
"trophy": {
"name": "trophy",
"kw": "trophy,award,achievement,cup,winner,game"
},
"github-square": {
"name": "GitHub Square",
"kw": "GitHub Square,octocat"
},
"upload": {
"name": "Upload",
"kw": "Upload,import"
},
"lemon-o": {
"name": "Lemon Outlined",
"kw": "Lemon Outlined,food"
},
"phone": {
"name": "Phone",
"kw":
"Phone,call,voice,number,support,earphone,telephone"
},
"square-o": {
"name": "Square Outlined",
"kw": "Square Outlined,block,square,box"
},
"bookmark-o": {
"name": "Bookmark Outlined",
"kw": "Bookmark Outlined,save"
},
"phone-square": {
"name": "Phone Square",
"kw": "Phone
Square,call,voice,number,support,telephone"
},
"twitter": {
"name": "Twitter",
"kw": "Twitter,tweet,social network"
},
"facebook": {
"name": "Facebook",
"kw": "Facebook,social network"
},
"github": {
"name": "GitHub",
"kw": "GitHub,octocat"
},
"unlock": {
"name": "unlock",
"kw": "unlock,protect,admin,password,lock"
},
"credit-card": {
"name": "credit-card",
"kw":
"credit-card,money,buy,debit,checkout,purchase,payment"
},
"rss": {
"name": "rss",
"kw": "rss,blog"
},
"hdd-o": {
"name": "HDD",
"kw": "HDD,harddrive,hard drive,storage,save"
},
"bullhorn": {
"name": "bullhorn",
"kw":
"bullhorn,announcement,share,broadcast,louder,megaphone"
},
"bell": {
"name": "bell",
"kw": "bell,alert,reminder,notification"
},
"certificate": {
"name": "certificate",
"kw": "certificate,badge,star"
},
"hand-o-right": {
"name": "Hand Outlined Right",
"kw": "Hand Outlined
Right,point,right,next,forward,finger"
},
"hand-o-left": {
"name": "Hand Outlined Left",
"kw": "Hand Outlined
Left,point,left,previous,back,finger"
},
"hand-o-up": {
"name": "Hand Outlined Up",
"kw": "Hand Outlined Up,point,finger"
},
"hand-o-down": {
"name": "Hand Outlined Down",
"kw": "Hand Outlined Down,point,finger"
},
"arrow-circle-left": {
"name": "Arrow Circle Left",
"kw": "Arrow Circle Left,previous,back"
},
"arrow-circle-right": {
"name": "Arrow Circle Right",
"kw": "Arrow Circle Right,next,forward"
},
"arrow-circle-up": {
"name": "Arrow Circle Up",
"kw": "Arrow Circle Up"
},
"arrow-circle-down": {
"name": "Arrow Circle Down",
"kw": "Arrow Circle Down,download"
},
"globe": {
"name": "Globe",
"kw":
"Globe,world,planet,map,place,travel,earth,global,translate,all,language,localize,location,coordinates,country"
},
"wrench": {
"name": "Wrench",
"kw": "Wrench,settings,fix,update,spanner"
},
"tasks": {
"name": "Tasks",
"kw":
"Tasks,progress,loading,downloading,downloads,settings"
},
"filter": {
"name": "Filter",
"kw": "Filter,funnel,options"
},
"briefcase": {
"name": "Briefcase",
"kw":
"Briefcase,work,business,office,luggage,bag"
},
"arrows-alt": {
"name": "Arrows Alt",
"kw": "Arrows
Alt,expand,enlarge,fullscreen,bigger,move,reorder,resize,arrow"
},
"users": {
"name": "Users",
"kw": "Users,people,profiles,persons"
},
"link": {
"name": "Link",
"kw": "Link,chain"
},
"cloud": {
"name": "Cloud",
"kw": "Cloud,save"
},
"flask": {
"name": "Flask",
"kw": "Flask,science,beaker,experimental,labs"
},
"scissors": {
"name": "Scissors",
"kw": "Scissors"
},
"files-o": {
"name": "Files Outlined",
"kw": "Files Outlined,duplicate,clone,copy"
},
"paperclip": {
"name": "Paperclip",
"kw": "Paperclip,attachment"
},
"floppy-o": {
"name": "Floppy Outlined",
"kw": "Floppy Outlined"
},
"square": {
"name": "Square",
"kw": "Square,block,box"
},
"bars": {
"name": "Bars",
"kw":
"Bars,menu,drag,reorder,settings,list,ul,ol,checklist,todo,list,hamburger"
},
"list-ul": {
"name": "list-ul",
"kw": "list-ul,ul,ol,checklist,todo,list"
},
"list-ol": {
"name": "list-ol",
"kw":
"list-ol,ul,ol,checklist,list,todo,list,numbers"
},
"strikethrough": {
"name": "Strikethrough",
"kw": "Strikethrough"
},
"underline": {
"name": "Underline",
"kw": "Underline"
},
"table": {
"name": "table",
"kw": "table,data,excel,spreadsheet"
},
"magic": {
"name": "magic",
"kw": "magic,wizard,automatic,autocomplete"
},
"truck": {
"name": "truck",
"kw": "truck,shipping"
},
"pinterest": {
"name": "Pinterest",
"kw": "Pinterest"
},
"pinterest-square": {
"name": "Pinterest Square",
"kw": "Pinterest Square"
},
"google-plus-square": {
"name": "Google Plus Square",
"kw": "Google Plus Square,social network"
},
"google-plus": {
"name": "Google Plus",
"kw": "Google Plus,social network"
},
"money": {
"name": "Money",
"kw":
"Money,cash,money,buy,checkout,purchase,payment"
},
"caret-down": {
"name": "Caret Down",
"kw": "Caret Down,more,dropdown,menu,triangle
down,arrow"
},
"caret-up": {
"name": "Caret Up",
"kw": "Caret Up,triangle up,arrow"
},
"caret-left": {
"name": "Caret Left",
"kw": "Caret Left,previous,back,triangle
left,arrow"
},
"caret-right": {
"name": "Caret Right",
"kw": "Caret Right,next,forward,triangle
right,arrow"
},
"columns": {
"name": "Columns",
"kw": "Columns,split,panes"
},
"sort": {
"name": "Sort",
"kw": "Sort,order"
},
"sort-desc": {
"name": "Sort Descending",
"kw": "Sort Descending,dropdown,more,menu,arrow"
},
"sort-asc": {
"name": "Sort Ascending",
"kw": "Sort Ascending,arrow"
},
"envelope": {
"name": "Envelope",
"kw":
"Envelope,email,e-mail,letter,support,mail,message,notification"
},
"linkedin": {
"name": "LinkedIn",
"kw": "LinkedIn"
},
"undo": {
"name": "Undo",
"kw": "Undo,back"
},
"gavel": {
"name": "Gavel",
"kw": "Gavel,judge,lawyer,opinion"
},
"tachometer": {
"name": "Tachometer",
"kw": "Tachometer,speedometer,fast"
},
"comment-o": {
"name": "comment-o",
"kw":
"comment-o,speech,notification,note,chat,bubble,feedback,message,texting,sms,conversation"
},
"comments-o": {
"name": "comments-o",
"kw":
"comments-o,speech,notification,note,chat,bubble,feedback,message,texting,sms,conversation"
},
"bolt": {
"name": "Lightning Bolt",
"kw": "Lightning Bolt,lightning,weather"
},
"sitemap": {
"name": "Sitemap",
"kw": "Sitemap,directory,hierarchy,organization"
},
"umbrella": {
"name": "Umbrella",
"kw": "Umbrella"
},
"clipboard": {
"name": "Clipboard",
"kw": "Clipboard,copy"
},
"lightbulb-o": {
"name": "Lightbulb Outlined",
"kw": "Lightbulb Outlined,idea,inspiration"
},
"exchange": {
"name": "Exchange",
"kw": "Exchange,transfer,arrows,arrow"
},
"cloud-download": {
"name": "Cloud Download",
"kw": "Cloud Download,import"
},
"cloud-upload": {
"name": "Cloud Upload",
"kw": "Cloud Upload,import"
},
"user-md": {
"name": "user-md",
"kw": "user-md,doctor,profile,medical,nurse"
},
"stethoscope": {
"name": "Stethoscope",
"kw": "Stethoscope"
},
"suitcase": {
"name": "Suitcase",
"kw": "Suitcase,trip,luggage,travel,move,baggage"
},
"bell-o": {
"name": "Bell Outlined",
"kw": "Bell Outlined,alert,reminder,notification"
},
"coffee": {
"name": "Coffee",
"kw":
"Coffee,morning,mug,breakfast,tea,drink,cafe"
},
"cutlery": {
"name": "Cutlery",
"kw":
"Cutlery,food,restaurant,spoon,knife,dinner,eat"
},
"file-text-o": {
"name": "File Text Outlined",
"kw": "File Text Outlined,new,page,pdf,document"
},
"building-o": {
"name": "Building Outlined",
"kw": "Building
Outlined,work,business,apartment,office,company"
},
"hospital-o": {
"name": "hospital Outlined",
"kw": "hospital Outlined,building"
},
"ambulance": {
"name": "ambulance",
"kw": "ambulance,vehicle,support,help"
},
"medkit": {
"name": "medkit",
"kw": "medkit,first
aid,firstaid,help,support,health"
},
"fighter-jet": {
"name": "fighter-jet",
"kw":
"fighter-jet,fly,plane,airplane,quick,fast,travel"
},
"beer": {
"name": "beer",
"kw": "beer,alcohol,stein,drink,mug,bar,liquor"
},
"h-square": {
"name": "H Square",
"kw": "H Square,hospital,hotel"
},
"plus-square": {
"name": "Plus Square",
"kw": "Plus Square,add,new,create,expand"
},
"angle-double-left": {
"name": "Angle Double Left",
"kw": "Angle Double
Left,laquo,quote,previous,back,arrows"
},
"angle-double-right": {
"name": "Angle Double Right",
"kw": "Angle Double
Right,raquo,quote,next,forward,arrows"
},
"angle-double-up": {
"name": "Angle Double Up",
"kw": "Angle Double Up,arrows"
},
"angle-double-down": {
"name": "Angle Double Down",
"kw": "Angle Double Down,arrows"
},
"angle-left": {
"name": "angle-left",
"kw": "angle-left,previous,back,arrow"
},
"angle-right": {
"name": "angle-right",
"kw": "angle-right,next,forward,arrow"
},
"angle-up": {
"name": "angle-up",
"kw": "angle-up,arrow"
},
"angle-down": {
"name": "angle-down",
"kw": "angle-down,arrow"
},
"desktop": {
"name": "Desktop",
"kw":
"Desktop,monitor,screen,desktop,computer,demo,device"
},
"laptop": {
"name": "Laptop",
"kw": "Laptop,demo,computer,device"
},
"tablet": {
"name": "tablet",
"kw": "tablet,ipad,device"
},
"mobile": {
"name": "Mobile Phone",
"kw": "Mobile Phone,cell
phone,cellphone,text,call,iphone,number,telephone"
},
"circle-o": {
"name": "Circle Outlined",
"kw": "Circle Outlined"
},
"quote-left": {
"name": "quote-left",
"kw": "quote-left"
},
"quote-right": {
"name": "quote-right",
"kw": "quote-right"
},
"spinner": {
"name": "Spinner",
"kw": "Spinner,loading,progress"
},
"circle": {
"name": "Circle",
"kw": "Circle,dot,notification"
},
"reply": {
"name": "Reply",
"kw": "Reply"
},
"github-alt": {
"name": "GitHub Alt",
"kw": "GitHub Alt,octocat"
},
"folder-o": {
"name": "Folder Outlined",
"kw": "Folder Outlined"
},
"folder-open-o": {
"name": "Folder Open Outlined",
"kw": "Folder Open Outlined"
},
"smile-o": {
"name": "Smile Outlined",
"kw": "Smile
Outlined,face,emoticon,happy,approve,satisfied,rating"
},
"frown-o": {
"name": "Frown Outlined",
"kw": "Frown
Outlined,face,emoticon,sad,disapprove,rating"
},
"meh-o": {
"name": "Meh Outlined",
"kw": "Meh Outlined,face,emoticon,rating,neutral"
},
"gamepad": {
"name": "Gamepad",
"kw": "Gamepad,controller"
},
"keyboard-o": {
"name": "Keyboard Outlined",
"kw": "Keyboard Outlined,type,input"
},
"flag-o": {
"name": "Flag Outlined",
"kw": "Flag Outlined,report,notification"
},
"flag-checkered": {
"name": "flag-checkered",
"kw": "flag-checkered,report,notification,notify"
},
"terminal": {
"name": "Terminal",
"kw": "Terminal,command,prompt,code"
},
"code": {
"name": "Code",
"kw": "Code,html,brackets"
},
"reply-all": {
"name": "reply-all",
"kw": "reply-all"
},
"star-half-o": {
"name": "Star Half Outlined",
"kw": "Star Half
Outlined,award,achievement,rating,score"
},
"location-arrow": {
"name": "location-arrow",
"kw":
"location-arrow,map,coordinates,location,address,place,where"
},
"crop": {
"name": "crop",
"kw": "crop"
},
"code-fork": {
"name": "code-fork",
"kw":
"code-fork,git,fork,vcs,svn,github,rebase,version,merge"
},
"chain-broken": {
"name": "Chain Broken",
"kw": "Chain Broken,remove"
},
"question": {
"name": "Question",
"kw": "Question,help,information,unknown,support"
},
"info": {
"name": "Info",
"kw": "Info,help,information,more,details"
},
"exclamation": {
"name": "exclamation",
"kw":
"exclamation,warning,error,problem,notification,notify,alert"
},
"superscript": {
"name": "superscript",
"kw": "superscript,exponential"
},
"subscript": {
"name": "subscript",
"kw": "subscript"
},
"eraser": {
"name": "eraser",
"kw": "eraser,remove,delete"
},
"puzzle-piece": {
"name": "Puzzle Piece",
"kw": "Puzzle Piece,addon,add-on,section"
},
"microphone": {
"name": "microphone",
"kw": "microphone,record,voice,sound"
},
"microphone-slash": {
"name": "Microphone Slash",
"kw": "Microphone Slash,record,voice,sound,mute"
},
"shield": {
"name": "shield",
"kw": "shield,award,achievement,security,winner"
},
"calendar-o": {
"name": "calendar-o",
"kw": "calendar-o,date,time,when,event"
},
"fire-extinguisher": {
"name": "fire-extinguisher",
"kw": "fire-extinguisher"
},
"rocket": {
"name": "rocket",
"kw": "rocket,app"
},
"maxcdn": {
"name": "MaxCDN",
"kw": "MaxCDN"
},
"chevron-circle-left": {
"name": "Chevron Circle Left",
"kw": "Chevron Circle Left,previous,back,arrow"
},
"chevron-circle-right": {
"name": "Chevron Circle Right",
"kw": "Chevron Circle Right,next,forward,arrow"
},
"chevron-circle-up": {
"name": "Chevron Circle Up",
"kw": "Chevron Circle Up,arrow"
},
"chevron-circle-down": {
"name": "Chevron Circle Down",
"kw": "Chevron Circle
Down,more,dropdown,menu,arrow"
},
"html5": {
"name": "HTML 5 Logo",
"kw": "HTML 5 Logo"
},
"css3": {
"name": "CSS 3 Logo",
"kw": "CSS 3 Logo,code"
},
"anchor": {
"name": "Anchor",
"kw": "Anchor,link"
},
"unlock-alt": {
"name": "Unlock Alt",
"kw": "Unlock Alt,protect,admin,password,lock"
},
"bullseye": {
"name": "Bullseye",
"kw": "Bullseye,target"
},
"ellipsis-h": {
"name": "Ellipsis Horizontal",
"kw": "Ellipsis Horizontal,dots"
},
"ellipsis-v": {
"name": "Ellipsis Vertical",
"kw": "Ellipsis Vertical,dots"
},
"rss-square": {
"name": "RSS Square",
"kw": "RSS Square,feed,blog"
},
"play-circle": {
"name": "Play Circle",
"kw": "Play Circle,start,playing"
},
"ticket": {
"name": "Ticket",
"kw": "Ticket,movie,pass,support"
},
"minus-square": {
"name": "Minus Square",
"kw": "Minus
Square,hide,minify,delete,remove,trash,hide,collapse"
},
"minus-square-o": {
"name": "Minus Square Outlined",
"kw": "Minus Square
Outlined,hide,minify,delete,remove,trash,hide,collapse"
},
"level-up": {
"name": "Level Up",
"kw": "Level Up,arrow"
},
"level-down": {
"name": "Level Down",
"kw": "Level Down,arrow"
},
"check-square": {
"name": "Check Square",
"kw": "Check
Square,checkmark,done,todo,agree,accept,confirm,ok"
},
"pencil-square": {
"name": "Pencil Square",
"kw": "Pencil Square,write,edit,update"
},
"external-link-square": {
"name": "External Link Square",
"kw": "External Link Square,open,new"
},
"share-square": {
"name": "Share Square",
"kw": "Share Square,social,send"
},
"compass": {
"name": "Compass",
"kw": "Compass,safari,directory,menu,location"
},
"caret-square-o-down": {
"name": "Caret Square Outlined Down",
"kw": "Caret Square Outlined
Down,more,dropdown,menu"
},
"caret-square-o-up": {
"name": "Caret Square Outlined Up",
"kw": "Caret Square Outlined Up"
},
"caret-square-o-right": {
"name": "Caret Square Outlined Right",
"kw": "Caret Square Outlined Right,next,forward"
},
"eur": {
"name": "Euro (EUR)",
"kw": "Euro (EUR)"
},
"gbp": {
"name": "GBP",
"kw": "GBP"
},
"usd": {
"name": "US Dollar",
"kw": "US Dollar"
},
"inr": {
"name": "Indian Rupee (INR)",
"kw": "Indian Rupee (INR)"
},
"jpy": {
"name": "Japanese Yen (JPY)",
"kw": "Japanese Yen (JPY)"
},
"rub": {
"name": "Russian Ruble (RUB)",
"kw": "Russian Ruble (RUB)"
},
"krw": {
"name": "Korean Won (KRW)",
"kw": "Korean Won (KRW)"
},
"btc": {
"name": "Bitcoin (BTC)",
"kw": "Bitcoin (BTC)"
},
"file": {
"name": "File",
"kw": "File,new,page,pdf,document"
},
"file-text": {
"name": "File Text",
"kw": "File Text,new,page,pdf,document"
},
"sort-alpha-asc": {
"name": "Sort Alpha Ascending",
"kw": "Sort Alpha Ascending"
},
"sort-alpha-desc": {
"name": "Sort Alpha Descending",
"kw": "Sort Alpha Descending"
},
"sort-amount-asc": {
"name": "Sort Amount Ascending",
"kw": "Sort Amount Ascending"
},
"sort-amount-desc": {
"name": "Sort Amount Descending",
"kw": "Sort Amount Descending"
},
"sort-numeric-asc": {
"name": "Sort Numeric Ascending",
"kw": "Sort Numeric Ascending,numbers"
},
"sort-numeric-desc": {
"name": "Sort Numeric Descending",
"kw": "Sort Numeric Descending,numbers"
},
"thumbs-up": {
"name": "thumbs-up",
"kw":
"thumbs-up,like,favorite,approve,agree,hand"
},
"thumbs-down": {
"name": "thumbs-down",
"kw":
"thumbs-down,dislike,disapprove,disagree,hand"
},
"youtube-square": {
"name": "YouTube Square",
"kw": "YouTube Square,video,film"
},
"youtube": {
"name": "YouTube",
"kw": "YouTube,video,film"
},
"xing": {
"name": "Xing",
"kw": "Xing"
},
"xing-square": {
"name": "Xing Square",
"kw": "Xing Square"
},
"youtube-play": {
"name": "YouTube Play",
"kw": "YouTube Play,start,playing"
},
"dropbox": {
"name": "Dropbox",
"kw": "Dropbox"
},
"stack-overflow": {
"name": "Stack Overflow",
"kw": "Stack Overflow"
},
"instagram": {
"name": "Instagram",
"kw": "Instagram"
},
"flickr": {
"name": "Flickr",
"kw": "Flickr"
},
"adn": {
"name": "App.net",
"kw": "App.net"
},
"bitbucket": {
"name": "Bitbucket",
"kw": "Bitbucket,git"
},
"bitbucket-square": {
"name": "Bitbucket Square",
"kw": "Bitbucket Square,git"
},
"tumblr": {
"name": "Tumblr",
"kw": "Tumblr"
},
"tumblr-square": {
"name": "Tumblr Square",
"kw": "Tumblr Square"
},
"long-arrow-down": {
"name": "Long Arrow Down",
"kw": "Long Arrow Down"
},
"long-arrow-up": {
"name": "Long Arrow Up",
"kw": "Long Arrow Up"
},
"long-arrow-left": {
"name": "Long Arrow Left",
"kw": "Long Arrow Left,previous,back"
},
"long-arrow-right": {
"name": "Long Arrow Right",
"kw": "Long Arrow Right"
},
"apple": {
"name": "Apple",
"kw": "Apple,osx,food"
},
"windows": {
"name": "Windows",
"kw": "Windows,microsoft"
},
"android": {
"name": "Android",
"kw": "Android,robot"
},
"linux": {
"name": "Linux",
"kw": "Linux,tux"
},
"dribbble": {
"name": "Dribbble",
"kw": "Dribbble"
},
"skype": {
"name": "Skype",
"kw": "Skype"
},
"foursquare": {
"name": "Foursquare",
"kw": "Foursquare"
},
"trello": {
"name": "Trello",
"kw": "Trello"
},
"female": {
"name": "Female",
"kw": "Female,woman,user,person,profile"
},
"male": {
"name": "Male",
"kw": "Male,man,user,person,profile"
},
"gratipay": {
"name": "Gratipay (Gittip)",
"kw": "Gratipay
(Gittip),heart,like,favorite,love"
},
"sun-o": {
"name": "Sun Outlined",
"kw": "Sun
Outlined,weather,contrast,lighter,brighten,day"
},
"moon-o": {
"name": "Moon Outlined",
"kw": "Moon Outlined,night,darker,contrast"
},
"archive": {
"name": "Archive",
"kw": "Archive,box,storage"
},
"bug": {
"name": "Bug",
"kw": "Bug,report,insect"
},
"vk": {
"name": "VK",
"kw": "VK"
},
"weibo": {
"name": "Weibo",
"kw": "Weibo"
},
"renren": {
"name": "Renren",
"kw": "Renren"
},
"pagelines": {
"name": "Pagelines",
"kw":
"Pagelines,leaf,leaves,tree,plant,eco,nature"
},
"stack-exchange": {
"name": "Stack Exchange",
"kw": "Stack Exchange"
},
"arrow-circle-o-right": {
"name": "Arrow Circle Outlined Right",
"kw": "Arrow Circle Outlined Right,next,forward"
},
"arrow-circle-o-left": {
"name": "Arrow Circle Outlined Left",
"kw": "Arrow Circle Outlined Left,previous,back"
},
"caret-square-o-left": {
"name": "Caret Square Outlined Left",
"kw": "Caret Square Outlined Left,previous,back"
},
"dot-circle-o": {
"name": "Dot Circle Outlined",
"kw": "Dot Circle
Outlined,target,bullseye,notification"
},
"wheelchair": {
"name": "Wheelchair",
"kw": "Wheelchair,handicap,person"
},
"vimeo-square": {
"name": "Vimeo Square",
"kw": "Vimeo Square"
},
"try": {
"name": "Turkish Lira (TRY)",
"kw": "Turkish Lira (TRY)"
},
"plus-square-o": {
"name": "Plus Square Outlined",
"kw": "Plus Square
Outlined,add,new,create,expand"
},
"space-shuttle": {
"name": "Space Shuttle",
"kw": "Space Shuttle"
},
"slack": {
"name": "Slack Logo",
"kw": "Slack Logo,hashtag,anchor,hash"
},
"envelope-square": {
"name": "Envelope Square",
"kw": "Envelope
Square,email,e-mail,letter,support,mail,message,notification"
},
"wordpress": {
"name": "WordPress Logo",
"kw": "WordPress Logo"
},
"openid": {
"name": "OpenID",
"kw": "OpenID"
},
"university": {
"name": "University",
"kw": "University"
},
"graduation-cap": {
"name": "Graduation Cap",
"kw": "Graduation Cap,learning,school,student"
},
"yahoo": {
"name": "Yahoo Logo",
"kw": "Yahoo Logo"
},
"google": {
"name": "Google Logo",
"kw": "Google Logo"
},
"reddit": {
"name": "reddit Logo",
"kw": "reddit Logo"
},
"reddit-square": {
"name": "reddit Square",
"kw": "reddit Square"
},
"stumbleupon-circle": {
"name": "StumbleUpon Circle",
"kw": "StumbleUpon Circle"
},
"stumbleupon": {
"name": "StumbleUpon Logo",
"kw": "StumbleUpon Logo"
},
"delicious": {
"name": "Delicious Logo",
"kw": "Delicious Logo"
},
"digg": {
"name": "Digg Logo",
"kw": "Digg Logo"
},
"pied-piper-pp": {
"name": "Pied Piper PP Logo (Old)",
"kw": "Pied Piper PP Logo (Old)"
},
"pied-piper-alt": {
"name": "Pied Piper Alternate Logo",
"kw": "Pied Piper Alternate Logo"
},
"drupal": {
"name": "Drupal Logo",
"kw": "Drupal Logo"
},
"joomla": {
"name": "Joomla Logo",
"kw": "Joomla Logo"
},
"language": {
"name": "Language",
"kw": "Language"
},
"fax": {
"name": "Fax",
"kw": "Fax"
},
"building": {
"name": "Building",
"kw":
"Building,work,business,apartment,office,company"
},
"child": {
"name": "Child",
"kw": "Child"
},
"paw": {
"name": "Paw",
"kw": "Paw,pet"
},
"spoon": {
"name": "spoon",
"kw": "spoon"
},
"cube": {
"name": "Cube",
"kw": "Cube"
},
"cubes": {
"name": "Cubes",
"kw": "Cubes"
},
"behance": {
"name": "Behance",
"kw": "Behance"
},
"behance-square": {
"name": "Behance Square",
"kw": "Behance Square"
},
"steam": {
"name": "Steam",
"kw": "Steam"
},
"steam-square": {
"name": "Steam Square",
"kw": "Steam Square"
},
"recycle": {
"name": "Recycle",
"kw": "Recycle"
},
"car": {
"name": "Car",
"kw": "Car,vehicle"
},
"taxi": {
"name": "Taxi",
"kw": "Taxi,vehicle"
},
"tree": {
"name": "Tree",
"kw": "Tree"
},
"spotify": {
"name": "Spotify",
"kw": "Spotify"
},
"deviantart": {
"name": "deviantART",
"kw": "deviantART"
},
"soundcloud": {
"name": "SoundCloud",
"kw": "SoundCloud"
},
"database": {
"name": "Database",
"kw": "Database"
},
"file-pdf-o": {
"name": "PDF File Outlined",
"kw": "PDF File Outlined"
},
"file-word-o": {
"name": "Word File Outlined",
"kw": "Word File Outlined"
},
"file-excel-o": {
"name": "Excel File Outlined",
"kw": "Excel File Outlined"
},
"file-powerpoint-o": {
"name": "Powerpoint File Outlined",
"kw": "Powerpoint File Outlined"
},
"file-image-o": {
"name": "Image File Outlined",
"kw": "Image File Outlined"
},
"file-archive-o": {
"name": "Archive File Outlined",
"kw": "Archive File Outlined"
},
"file-audio-o": {
"name": "Audio File Outlined",
"kw": "Audio File Outlined"
},
"file-video-o": {
"name": "Video File Outlined",
"kw": "Video File Outlined"
},
"file-code-o": {
"name": "Code File Outlined",
"kw": "Code File Outlined"
},
"vine": {
"name": "Vine",
"kw": "Vine"
},
"codepen": {
"name": "Codepen",
"kw": "Codepen"
},
"jsfiddle": {
"name": "jsFiddle",
"kw": "jsFiddle"
},
"life-ring": {
"name": "Life Ring",
"kw": "Life Ring"
},
"circle-o-notch": {
"name": "Circle Outlined Notched",
"kw": "Circle Outlined Notched"
},
"rebel": {
"name": "Rebel Alliance",
"kw": "Rebel Alliance"
},
"empire": {
"name": "Galactic Empire",
"kw": "Galactic Empire"
},
"git-square": {
"name": "Git Square",
"kw": "Git Square"
},
"git": {
"name": "Git",
"kw": "Git"
},
"hacker-news": {
"name": "Hacker News",
"kw": "Hacker News"
},
"tencent-weibo": {
"name": "Tencent Weibo",
"kw": "Tencent Weibo"
},
"qq": {
"name": "QQ",
"kw": "QQ"
},
"weixin": {
"name": "Weixin (WeChat)",
"kw": "Weixin (WeChat)"
},
"paper-plane": {
"name": "Paper Plane",
"kw": "Paper Plane"
},
"paper-plane-o": {
"name": "Paper Plane Outlined",
"kw": "Paper Plane Outlined"
},
"history": {
"name": "History",
"kw": "History"
},
"circle-thin": {
"name": "Circle Outlined Thin",
"kw": "Circle Outlined Thin"
},
"header": {
"name": "header",
"kw": "header,heading"
},
"paragraph": {
"name": "paragraph",
"kw": "paragraph"
},
"sliders": {
"name": "Sliders",
"kw": "Sliders,settings"
},
"share-alt": {
"name": "Share Alt",
"kw": "Share Alt"
},
"share-alt-square": {
"name": "Share Alt Square",
"kw": "Share Alt Square"
},
"bomb": {
"name": "Bomb",
"kw": "Bomb"
},
"futbol-o": {
"name": "Futbol Outlined",
"kw": "Futbol Outlined"
},
"tty": {
"name": "TTY",
"kw": "TTY"
},
"binoculars": {
"name": "Binoculars",
"kw": "Binoculars"
},
"plug": {
"name": "Plug",
"kw": "Plug,power,connect"
},
"slideshare": {
"name": "Slideshare",
"kw": "Slideshare"
},
"twitch": {
"name": "Twitch",
"kw": "Twitch"
},
"yelp": {
"name": "Yelp",
"kw": "Yelp"
},
"newspaper-o": {
"name": "Newspaper Outlined",
"kw": "Newspaper Outlined,press"
},
"wifi": {
"name": "WiFi",
"kw": "WiFi"
},
"calculator": {
"name": "Calculator",
"kw": "Calculator"
},
"paypal": {
"name": "Paypal",
"kw": "Paypal"
},
"google-wallet": {
"name": "Google Wallet",
"kw": "Google Wallet"
},
"cc-visa": {
"name": "Visa Credit Card",
"kw": "Visa Credit Card"
},
"cc-mastercard": {
"name": "MasterCard Credit Card",
"kw": "MasterCard Credit Card"
},
"cc-discover": {
"name": "Discover Credit Card",
"kw": "Discover Credit Card"
},
"cc-amex": {
"name": "American Express Credit Card",
"kw": "American Express Credit Card,amex"
},
"cc-paypal": {
"name": "Paypal Credit Card",
"kw": "Paypal Credit Card"
},
"cc-stripe": {
"name": "Stripe Credit Card",
"kw": "Stripe Credit Card"
},
"bell-slash": {
"name": "Bell Slash",
"kw": "Bell Slash"
},
"bell-slash-o": {
"name": "Bell Slash Outlined",
"kw": "Bell Slash Outlined"
},
"trash": {
"name": "Trash",
"kw": "Trash,garbage,delete,remove,hide"
},
"copyright": {
"name": "Copyright",
"kw": "Copyright"
},
"at": {
"name": "At",
"kw": "At,email,e-mail"
},
"eyedropper": {
"name": "Eyedropper",
"kw": "Eyedropper"
},
"paint-brush": {
"name": "Paint Brush",
"kw": "Paint Brush"
},
"birthday-cake": {
"name": "Birthday Cake",
"kw": "Birthday Cake"
},
"area-chart": {
"name": "Area Chart",
"kw": "Area Chart,graph,analytics"
},
"pie-chart": {
"name": "Pie Chart",
"kw": "Pie Chart,graph,analytics"
},
"line-chart": {
"name": "Line Chart",
"kw": "Line Chart,graph,analytics"
},
"lastfm": {
"name": "last.fm",
"kw": "last.fm"
},
"lastfm-square": {
"name": "last.fm Square",
"kw": "last.fm Square"
},
"toggle-off": {
"name": "Toggle Off",
"kw": "Toggle Off"
},
"toggle-on": {
"name": "Toggle On",
"kw": "Toggle On"
},
"bicycle": {
"name": "Bicycle",
"kw": "Bicycle,vehicle,bike"
},
"bus": {
"name": "Bus",
"kw": "Bus,vehicle"
},
"ioxhost": {
"name": "ioxhost",
"kw": "ioxhost"
},
"angellist": {
"name": "AngelList",
"kw": "AngelList"
},
"cc": {
"name": "Closed Captions",
"kw": "Closed Captions"
},
"ils": {
"name": "Shekel (ILS)",
"kw": "Shekel (ILS)"
},
"meanpath": {
"name": "meanpath",
"kw": "meanpath"
},
"buysellads": {
"name": "BuySellAds",
"kw": "BuySellAds"
},
"connectdevelop": {
"name": "Connect Develop",
"kw": "Connect Develop"
},
"dashcube": {
"name": "DashCube",
"kw": "DashCube"
},
"forumbee": {
"name": "Forumbee",
"kw": "Forumbee"
},
"leanpub": {
"name": "Leanpub",
"kw": "Leanpub"
},
"sellsy": {
"name": "Sellsy",
"kw": "Sellsy"
},
"shirtsinbulk": {
"name": "Shirts in Bulk",
"kw": "Shirts in Bulk"
},
"simplybuilt": {
"name": "SimplyBuilt",
"kw": "SimplyBuilt"
},
"skyatlas": {
"name": "skyatlas",
"kw": "skyatlas"
},
"cart-plus": {
"name": "Add to Shopping Cart",
"kw": "Add to Shopping Cart,add,shopping"
},
"cart-arrow-down": {
"name": "Shopping Cart Arrow Down",
"kw": "Shopping Cart Arrow Down,shopping"
},
"diamond": {
"name": "Diamond",
"kw": "Diamond,gem,gemstone"
},
"ship": {
"name": "Ship",
"kw": "Ship,boat,sea"
},
"user-secret": {
"name": "User Secret",
"kw": "User Secret,whisper,spy,incognito,privacy"
},
"motorcycle": {
"name": "Motorcycle",
"kw": "Motorcycle,vehicle,bike"
},
"street-view": {
"name": "Street View",
"kw": "Street View,map"
},
"heartbeat": {
"name": "Heartbeat",
"kw": "Heartbeat,ekg"
},
"venus": {
"name": "Venus",
"kw": "Venus,female"
},
"mars": {
"name": "Mars",
"kw": "Mars,male"
},
"mercury": {
"name": "Mercury",
"kw": "Mercury,transgender"
},
"transgender": {
"name": "Transgender",
"kw": "Transgender"
},
"transgender-alt": {
"name": "Transgender Alt",
"kw": "Transgender Alt"
},
"venus-double": {
"name": "Venus Double",
"kw": "Venus Double"
},
"mars-double": {
"name": "Mars Double",
"kw": "Mars Double"
},
"venus-mars": {
"name": "Venus Mars",
"kw": "Venus Mars"
},
"mars-stroke": {
"name": "Mars Stroke",
"kw": "Mars Stroke"
},
"mars-stroke-v": {
"name": "Mars Stroke Vertical",
"kw": "Mars Stroke Vertical"
},
"mars-stroke-h": {
"name": "Mars Stroke Horizontal",
"kw": "Mars Stroke Horizontal"
},
"neuter": {
"name": "Neuter",
"kw": "Neuter"
},
"genderless": {
"name": "Genderless",
"kw": "Genderless"
},
"facebook-official": {
"name": "Facebook Official",
"kw": "Facebook Official"
},
"pinterest-p": {
"name": "Pinterest P",
"kw": "Pinterest P"
},
"whatsapp": {
"name": "What's App",
"kw": "What's App"
},
"server": {
"name": "Server",
"kw": "Server"
},
"user-plus": {
"name": "Add User",
"kw": "Add User,sign up,signup"
},
"user-times": {
"name": "Remove User",
"kw": "Remove User"
},
"bed": {
"name": "Bed",
"kw": "Bed,travel"
},
"viacoin": {
"name": "Viacoin",
"kw": "Viacoin"
},
"train": {
"name": "Train",
"kw": "Train"
},
"subway": {
"name": "Subway",
"kw": "Subway"
},
"medium": {
"name": "Medium",
"kw": "Medium"
},
"y-combinator": {
"name": "Y Combinator",
"kw": "Y Combinator"
},
"optin-monster": {
"name": "Optin Monster",
"kw": "Optin Monster"
},
"opencart": {
"name": "OpenCart",
"kw": "OpenCart"
},
"expeditedssl": {
"name": "ExpeditedSSL",
"kw": "ExpeditedSSL"
},
"battery-full": {
"name": "Battery Full",
"kw": "Battery Full,power"
},
"battery-three-quarters": {
"name": "Battery 3/4 Full",
"kw": "Battery 3/4 Full,power"
},
"battery-half": {
"name": "Battery 1/2 Full",
"kw": "Battery 1/2 Full,power"
},
"battery-quarter": {
"name": "Battery 1/4 Full",
"kw": "Battery 1/4 Full,power"
},
"battery-empty": {
"name": "Battery Empty",
"kw": "Battery Empty,power"
},
"mouse-pointer": {
"name": "Mouse Pointer",
"kw": "Mouse Pointer"
},
"i-cursor": {
"name": "I Beam Cursor",
"kw": "I Beam Cursor"
},
"object-group": {
"name": "Object Group",
"kw": "Object Group"
},
"object-ungroup": {
"name": "Object Ungroup",
"kw": "Object Ungroup"
},
"sticky-note": {
"name": "Sticky Note",
"kw": "Sticky Note"
},
"sticky-note-o": {
"name": "Sticky Note Outlined",
"kw": "Sticky Note Outlined"
},
"cc-jcb": {
"name": "JCB Credit Card",
"kw": "JCB Credit Card"
},
"cc-diners-club": {
"name": "Diner's Club Credit Card",
"kw": "Diner's Club Credit Card"
},
"clone": {
"name": "Clone",
"kw": "Clone,copy"
},
"balance-scale": {
"name": "Balance Scale",
"kw": "Balance Scale"
},
"hourglass-o": {
"name": "Hourglass Outlined",
"kw": "Hourglass Outlined"
},
"hourglass-start": {
"name": "Hourglass Start",
"kw": "Hourglass Start"
},
"hourglass-half": {
"name": "Hourglass Half",
"kw": "Hourglass Half"
},
"hourglass-end": {
"name": "Hourglass End",
"kw": "Hourglass End"
},
"hourglass": {
"name": "Hourglass",
"kw": "Hourglass"
},
"hand-rock-o": {
"name": "Rock (Hand)",
"kw": "Rock (Hand)"
},
"hand-paper-o": {
"name": "Paper (Hand)",
"kw": "Paper (Hand),stop"
},
"hand-scissors-o": {
"name": "Scissors (Hand)",
"kw": "Scissors (Hand)"
},
"hand-lizard-o": {
"name": "Lizard (Hand)",
"kw": "Lizard (Hand)"
},
"hand-spock-o": {
"name": "Spock (Hand)",
"kw": "Spock (Hand)"
},
"hand-pointer-o": {
"name": "Hand Pointer",
"kw": "Hand Pointer"
},
"hand-peace-o": {
"name": "Hand Peace",
"kw": "Hand Peace"
},
"trademark": {
"name": "Trademark",
"kw": "Trademark"
},
"registered": {
"name": "Registered Trademark",
"kw": "Registered Trademark"
},
"creative-commons": {
"name": "Creative Commons",
"kw": "Creative Commons"
},
"gg": {
"name": "GG Currency",
"kw": "GG Currency"
},
"gg-circle": {
"name": "GG Currency Circle",
"kw": "GG Currency Circle"
},
"tripadvisor": {
"name": "TripAdvisor",
"kw": "TripAdvisor"
},
"odnoklassniki": {
"name": "Odnoklassniki",
"kw": "Odnoklassniki"
},
"odnoklassniki-square": {
"name": "Odnoklassniki Square",
"kw": "Odnoklassniki Square"
},
"get-pocket": {
"name": "Get Pocket",
"kw": "Get Pocket"
},
"wikipedia-w": {
"name": "Wikipedia W",
"kw": "Wikipedia W"
},
"safari": {
"name": "Safari",
"kw": "Safari,browser"
},
"chrome": {
"name": "Chrome",
"kw": "Chrome,browser"
},
"firefox": {
"name": "Firefox",
"kw": "Firefox,browser"
},
"opera": {
"name": "Opera",
"kw": "Opera"
},
"internet-explorer": {
"name": "Internet-explorer",
"kw": "Internet-explorer,browser,ie"
},
"television": {
"name": "Television",
"kw": "Television,display,computer,monitor"
},
"contao": {
"name": "Contao",
"kw": "Contao"
},
"500px": {
"name": "500px",
"kw": "500px"
},
"amazon": {
"name": "Amazon",
"kw": "Amazon"
},
"calendar-plus-o": {
"name": "Calendar Plus Outlined",
"kw": "Calendar Plus Outlined"
},
"calendar-minus-o": {
"name": "Calendar Minus Outlined",
"kw": "Calendar Minus Outlined"
},
"calendar-times-o": {
"name": "Calendar Times Outlined",
"kw": "Calendar Times Outlined"
},
"calendar-check-o": {
"name": "Calendar Check Outlined",
"kw": "Calendar Check Outlined,ok"
},
"industry": {
"name": "Industry",
"kw": "Industry,factory"
},
"map-pin": {
"name": "Map Pin",
"kw": "Map Pin"
},
"map-signs": {
"name": "Map Signs",
"kw": "Map Signs"
},
"map-o": {
"name": "Map Outlined",
"kw": "Map Outlined"
},
"map": {
"name": "Map",
"kw": "Map"
},
"commenting": {
"name": "Commenting",
"kw":
"Commenting,speech,notification,note,chat,bubble,feedback,message,texting,sms,conversation"
},
"commenting-o": {
"name": "Commenting Outlined",
"kw": "Commenting
Outlined,speech,notification,note,chat,bubble,feedback,message,texting,sms,conversation"
},
"houzz": {
"name": "Houzz",
"kw": "Houzz"
},
"vimeo": {
"name": "Vimeo",
"kw": "Vimeo"
},
"black-tie": {
"name": "Font Awesome Black Tie",
"kw": "Font Awesome Black Tie"
},
"fonticons": {
"name": "Fonticons",
"kw": "Fonticons"
},
"reddit-alien": {
"name": "reddit Alien",
"kw": "reddit Alien"
},
"edge": {
"name": "Edge Browser",
"kw": "Edge Browser,browser,ie"
},
"credit-card-alt": {
"name": "Credit Card",
"kw": "Credit
Card,money,buy,debit,checkout,purchase,payment,credit card"
},
"codiepie": {
"name": "Codie Pie",
"kw": "Codie Pie"
},
"modx": {
"name": "MODX",
"kw": "MODX"
},
"fort-awesome": {
"name": "Fort Awesome",
"kw": "Fort Awesome"
},
"usb": {
"name": "USB",
"kw": "USB"
},
"product-hunt": {
"name": "Product Hunt",
"kw": "Product Hunt"
},
"mixcloud": {
"name": "Mixcloud",
"kw": "Mixcloud"
},
"scribd": {
"name": "Scribd",
"kw": "Scribd"
},
"pause-circle": {
"name": "Pause Circle",
"kw": "Pause Circle"
},
"pause-circle-o": {
"name": "Pause Circle Outlined",
"kw": "Pause Circle Outlined"
},
"stop-circle": {
"name": "Stop Circle",
"kw": "Stop Circle"
},
"stop-circle-o": {
"name": "Stop Circle Outlined",
"kw": "Stop Circle Outlined"
},
"shopping-bag": {
"name": "Shopping Bag",
"kw": "Shopping Bag"
},
"shopping-basket": {
"name": "Shopping Basket",
"kw": "Shopping Basket"
},
"hashtag": {
"name": "Hashtag",
"kw": "Hashtag"
},
"bluetooth": {
"name": "Bluetooth",
"kw": "Bluetooth"
},
"bluetooth-b": {
"name": "Bluetooth",
"kw": "Bluetooth"
},
"percent": {
"name": "Percent",
"kw": "Percent"
},
"gitlab": {
"name": "GitLab",
"kw": "GitLab"
},
"wpbeginner": {
"name": "WPBeginner",
"kw": "WPBeginner"
},
"wpforms": {
"name": "WPForms",
"kw": "WPForms"
},
"envira": {
"name": "Envira Gallery",
"kw": "Envira Gallery,leaf"
},
"universal-access": {
"name": "Universal Access",
"kw": "Universal Access"
},
"wheelchair-alt": {
"name": "Wheelchair Alt",
"kw": "Wheelchair Alt,handicap,person"
},
"question-circle-o": {
"name": "Question Circle Outlined",
"kw": "Question Circle Outlined"
},
"blind": {
"name": "Blind",
"kw": "Blind"
},
"audio-description": {
"name": "Audio Description",
"kw": "Audio Description"
},
"volume-control-phone": {
"name": "Volume Control Phone",
"kw": "Volume Control Phone,telephone"
},
"braille": {
"name": "Braille",
"kw": "Braille"
},
"assistive-listening-systems": {
"name": "Assistive Listening Systems",
"kw": "Assistive Listening Systems"
},
"american-sign-language-interpreting": {
"name": "American Sign Language Interpreting",
"kw": "American Sign Language Interpreting"
},
"deaf": {
"name": "Deaf",
"kw": "Deaf"
},
"glide": {
"name": "Glide",
"kw": "Glide"
},
"glide-g": {
"name": "Glide G",
"kw": "Glide G"
},
"sign-language": {
"name": "Sign Language",
"kw": "Sign Language"
},
"low-vision": {
"name": "Low Vision",
"kw": "Low Vision"
},
"viadeo": {
"name": "Viadeo",
"kw": "Viadeo"
},
"viadeo-square": {
"name": "Viadeo Square",
"kw": "Viadeo Square"
},
"snapchat": {
"name": "Snapchat",
"kw": "Snapchat"
},
"snapchat-ghost": {
"name": "Snapchat Ghost",
"kw": "Snapchat Ghost"
},
"snapchat-square": {
"name": "Snapchat Square",
"kw": "Snapchat Square"
},
"pied-piper": {
"name": "Pied Piper Logo",
"kw": "Pied Piper Logo"
},
"first-order": {
"name": "First Order",
"kw": "First Order"
},
"yoast": {
"name": "Yoast",
"kw": "Yoast"
},
"themeisle": {
"name": "ThemeIsle",
"kw": "ThemeIsle"
},
"google-plus-official": {
"name": "Google Plus Official",
"kw": "Google Plus Official"
},
"font-awesome": {
"name": "Font Awesome",
"kw": "Font Awesome"
},
"handshake-o": {
"name": "Handshake Outlined",
"kw": "Handshake Outlined"
},
"envelope-open": {
"name": "Envelope Open",
"kw": "Envelope
Open,email,e-mail,letter,support,mail,message,notification"
},
"envelope-open-o": {
"name": "Envelope Open Outlined",
"kw": "Envelope Open
Outlined,email,e-mail,letter,support,mail,message,notification"
},
"linode": {
"name": "Linode",
"kw": "Linode"
},
"address-book": {
"name": "Address Book",
"kw": "Address Book"
},
"address-book-o": {
"name": "Address Book Outlined",
"kw": "Address Book Outlined"
},
"address-card": {
"name": "Address Card",
"kw": "Address Card"
},
"address-card-o": {
"name": "Address Card Outlined",
"kw": "Address Card Outlined"
},
"user-circle": {
"name": "User Circle",
"kw": "User Circle"
},
"user-circle-o": {
"name": "User Circle Outlined",
"kw": "User Circle Outlined"
},
"user-o": {
"name": "User Outlined",
"kw": "User Outlined"
},
"id-badge": {
"name": "Identification Badge",
"kw": "Identification Badge"
},
"id-card": {
"name": "Identification Card",
"kw": "Identification Card"
},
"id-card-o": {
"name": "Identification Card Outlined",
"kw": "Identification Card Outlined"
},
"quora": {
"name": "Quora",
"kw": "Quora"
},
"free-code-camp": {
"name": "Free Code Camp",
"kw": "Free Code Camp"
},
"telegram": {
"name": "Telegram",
"kw": "Telegram"
},
"thermometer-full": {
"name": "Thermometer Full",
"kw": "Thermometer Full"
},
"thermometer-three-quarters": {
"name": "Thermometer 3/4 Full",
"kw": "Thermometer 3/4 Full"
},
"thermometer-half": {
"name": "Thermometer 1/2 Full",
"kw": "Thermometer 1/2 Full"
},
"thermometer-quarter": {
"name": "Thermometer 1/4 Full",
"kw": "Thermometer 1/4 Full"
},
"thermometer-empty": {
"name": "Thermometer Empty",
"kw": "Thermometer Empty"
},
"shower": {
"name": "Shower",
"kw": "Shower"
},
"bath": {
"name": "Bath",
"kw": "Bath"
},
"podcast": {
"name": "Podcast",
"kw": "Podcast"
},
"window-maximize": {
"name": "Window Maximize",
"kw": "Window Maximize"
},
"window-minimize": {
"name": "Window Minimize",
"kw": "Window Minimize"
},
"window-restore": {
"name": "Window Restore",
"kw": "Window Restore"
},
"window-close": {
"name": "Window Close",
"kw": "Window Close"
},
"window-close-o": {
"name": "Window Close Outline",
"kw": "Window Close Outline"
},
"bandcamp": {
"name": "Bandcamp",
"kw": "Bandcamp"
},
"grav": {
"name": "Grav",
"kw": "Grav"
},
"etsy": {
"name": "Etsy",
"kw": "Etsy"
},
"imdb": {
"name": "IMDB",
"kw": "IMDB"
},
"ravelry": {
"name": "Ravelry",
"kw": "Ravelry"
},
"eercast": {
"name": "Eercast",
"kw": "Eercast"
},
"microchip": {
"name": "Microchip",
"kw": "Microchip"
},
"snowflake-o": {
"name": "Snowflake Outlined",
"kw": "Snowflake Outlined"
},
"superpowers": {
"name": "Superpowers",
"kw": "Superpowers"
},
"wpexplorer": {
"name": "WPExplorer",
"kw": "WPExplorer"
},
"meetup": {
"name": "Meetup",
"kw": "Meetup"
}
}
}PK��[մ�ee8Application/Frontend/Assets/icons/fontawesome/readme.txtnu�[���https://nodeca.github.io/js-yaml/
https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/src/icons.yml
var a = <--- json;
var b = a.icons;
var result = {};
for(var k in b){
result[b[k].id] = {"name": b[k].name, "kw":
[b[k].name].concat(b[k].filter).filter(function(n){ return n != undefined
}).join(',')};
}
console.log(JSON.stringify(result));PK��[�!�'Q'Q>Application/Frontend/Assets/icons/icomoon/dist/icomoon.min.cssnu�[���@font-face{font-family:'NIcomoon';src:url(icomoon.woff?vtvdid)
format('woff');font-weight:400;font-style:normal;font-display:swap}div
.n2i.nicomoon{display:inline-block;font:1em/1
NIcomoon;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.nicomoon-home:before{content:"\e900"}.nicomoon-home2:before{content:"\e901"}.nicomoon-home3:before{content:"\e902"}.nicomoon-office:before{content:"\e903"}.nicomoon-newspaper:before{content:"\e904"}.nicomoon-pencil:before{content:"\e905"}.nicomoon-pencil2:before{content:"\e906"}.nicomoon-quill:before{content:"\e907"}.nicomoon-pen:before{content:"\e908"}.nicomoon-blog:before{content:"\e909"}.nicomoon-eyedropper:before{content:"\e90a"}.nicomoon-droplet:before{content:"\e90b"}.nicomoon-paint-format:before{content:"\e90c"}.nicomoon-image:before{content:"\e90d"}.nicomoon-images:before{content:"\e90e"}.nicomoon-camera:before{content:"\e90f"}.nicomoon-headphones:before{content:"\e910"}.nicomoon-music:before{content:"\e911"}.nicomoon-play:before{content:"\e912"}.nicomoon-film:before{content:"\e913"}.nicomoon-video-camera:before{content:"\e914"}.nicomoon-dice:before{content:"\e915"}.nicomoon-pacman:before{content:"\e916"}.nicomoon-spades:before{content:"\e917"}.nicomoon-clubs:before{content:"\e918"}.nicomoon-diamonds:before{content:"\e919"}.nicomoon-bullhorn:before{content:"\e91a"}.nicomoon-connection:before{content:"\e91b"}.nicomoon-podcast:before{content:"\e91c"}.nicomoon-feed:before{content:"\e91d"}.nicomoon-mic:before{content:"\e91e"}.nicomoon-book:before{content:"\e91f"}.nicomoon-books:before{content:"\e920"}.nicomoon-library:before{content:"\e921"}.nicomoon-file-text:before{content:"\e922"}.nicomoon-profile:before{content:"\e923"}.nicomoon-file-empty:before{content:"\e924"}.nicomoon-files-empty:before{content:"\e925"}.nicomoon-file-text2:before{content:"\e926"}.nicomoon-file-picture:before{content:"\e927"}.nicomoon-file-music:before{content:"\e928"}.nicomoon-file-play:before{content:"\e929"}.nicomoon-file-video:before{content:"\e92a"}.nicomoon-file-zip:before{content:"\e92b"}.nicomoon-copy:before{content:"\e92c"}.nicomoon-paste:before{content:"\e92d"}.nicomoon-stack:before{content:"\e92e"}.nicomoon-folder:before{content:"\e92f"}.nicomoon-folder-open:before{content:"\e930"}.nicomoon-folder-plus:before{content:"\e931"}.nicomoon-folder-minus:before{content:"\e932"}.nicomoon-folder-download:before{content:"\e933"}.nicomoon-folder-upload:before{content:"\e934"}.nicomoon-price-tag:before{content:"\e935"}.nicomoon-price-tags:before{content:"\e936"}.nicomoon-barcode:before{content:"\e937"}.nicomoon-qrcode:before{content:"\e938"}.nicomoon-ticket:before{content:"\e939"}.nicomoon-cart:before{content:"\e93a"}.nicomoon-coin-dollar:before{content:"\e93b"}.nicomoon-coin-euro:before{content:"\e93c"}.nicomoon-coin-pound:before{content:"\e93d"}.nicomoon-coin-yen:before{content:"\e93e"}.nicomoon-credit-card:before{content:"\e93f"}.nicomoon-calculator:before{content:"\e940"}.nicomoon-lifebuoy:before{content:"\e941"}.nicomoon-phone:before{content:"\e942"}.nicomoon-phone-hang-up:before{content:"\e943"}.nicomoon-address-book:before{content:"\e944"}.nicomoon-envelop:before{content:"\e945"}.nicomoon-pushpin:before{content:"\e946"}.nicomoon-location:before{content:"\e947"}.nicomoon-location2:before{content:"\e948"}.nicomoon-compass:before{content:"\e949"}.nicomoon-compass2:before{content:"\e94a"}.nicomoon-map:before{content:"\e94b"}.nicomoon-map2:before{content:"\e94c"}.nicomoon-history:before{content:"\e94d"}.nicomoon-clock:before{content:"\e94e"}.nicomoon-clock2:before{content:"\e94f"}.nicomoon-alarm:before{content:"\e950"}.nicomoon-bell:before{content:"\e951"}.nicomoon-stopwatch:before{content:"\e952"}.nicomoon-calendar:before{content:"\e953"}.nicomoon-printer:before{content:"\e954"}.nicomoon-keyboard:before{content:"\e955"}.nicomoon-display:before{content:"\e956"}.nicomoon-laptop:before{content:"\e957"}.nicomoon-mobile:before{content:"\e958"}.nicomoon-mobile2:before{content:"\e959"}.nicomoon-tablet:before{content:"\e95a"}.nicomoon-tv:before{content:"\e95b"}.nicomoon-drawer:before{content:"\e95c"}.nicomoon-drawer2:before{content:"\e95d"}.nicomoon-box-add:before{content:"\e95e"}.nicomoon-box-remove:before{content:"\e95f"}.nicomoon-download:before{content:"\e960"}.nicomoon-upload:before{content:"\e961"}.nicomoon-floppy-disk:before{content:"\e962"}.nicomoon-drive:before{content:"\e963"}.nicomoon-database:before{content:"\e964"}.nicomoon-undo:before{content:"\e965"}.nicomoon-redo:before{content:"\e966"}.nicomoon-undo2:before{content:"\e967"}.nicomoon-redo2:before{content:"\e968"}.nicomoon-forward:before{content:"\e969"}.nicomoon-reply:before{content:"\e96a"}.nicomoon-bubble:before{content:"\e96b"}.nicomoon-bubbles:before{content:"\e96c"}.nicomoon-bubbles2:before{content:"\e96d"}.nicomoon-bubble2:before{content:"\e96e"}.nicomoon-bubbles3:before{content:"\e96f"}.nicomoon-bubbles4:before{content:"\e970"}.nicomoon-user:before{content:"\e971"}.nicomoon-users:before{content:"\e972"}.nicomoon-user-plus:before{content:"\e973"}.nicomoon-user-minus:before{content:"\e974"}.nicomoon-user-check:before{content:"\e975"}.nicomoon-user-tie:before{content:"\e976"}.nicomoon-quotes-left:before{content:"\e977"}.nicomoon-quotes-right:before{content:"\e978"}.nicomoon-hour-glass:before{content:"\e979"}.nicomoon-spinner:before{content:"\e97a"}.nicomoon-spinner2:before{content:"\e97b"}.nicomoon-spinner3:before{content:"\e97c"}.nicomoon-spinner4:before{content:"\e97d"}.nicomoon-spinner5:before{content:"\e97e"}.nicomoon-spinner6:before{content:"\e97f"}.nicomoon-spinner7:before{content:"\e980"}.nicomoon-spinner8:before{content:"\e981"}.nicomoon-spinner9:before{content:"\e982"}.nicomoon-spinner10:before{content:"\e983"}.nicomoon-spinner11:before{content:"\e984"}.nicomoon-binoculars:before{content:"\e985"}.nicomoon-search:before{content:"\e986"}.nicomoon-zoom-in:before{content:"\e987"}.nicomoon-zoom-out:before{content:"\e988"}.nicomoon-enlarge:before{content:"\e989"}.nicomoon-shrink:before{content:"\e98a"}.nicomoon-enlarge2:before{content:"\e98b"}.nicomoon-shrink2:before{content:"\e98c"}.nicomoon-key:before{content:"\e98d"}.nicomoon-key2:before{content:"\e98e"}.nicomoon-lock:before{content:"\e98f"}.nicomoon-unlocked:before{content:"\e990"}.nicomoon-wrench:before{content:"\e991"}.nicomoon-equalizer:before{content:"\e992"}.nicomoon-equalizer2:before{content:"\e993"}.nicomoon-cog:before{content:"\e994"}.nicomoon-cogs:before{content:"\e995"}.nicomoon-hammer:before{content:"\e996"}.nicomoon-magic-wand:before{content:"\e997"}.nicomoon-aid-kit:before{content:"\e998"}.nicomoon-bug:before{content:"\e999"}.nicomoon-pie-chart:before{content:"\e99a"}.nicomoon-stats-dots:before{content:"\e99b"}.nicomoon-stats-bars:before{content:"\e99c"}.nicomoon-stats-bars2:before{content:"\e99d"}.nicomoon-trophy:before{content:"\e99e"}.nicomoon-gift:before{content:"\e99f"}.nicomoon-glass:before{content:"\e9a0"}.nicomoon-glass2:before{content:"\e9a1"}.nicomoon-mug:before{content:"\e9a2"}.nicomoon-spoon-knife:before{content:"\e9a3"}.nicomoon-leaf:before{content:"\e9a4"}.nicomoon-rocket:before{content:"\e9a5"}.nicomoon-meter:before{content:"\e9a6"}.nicomoon-meter2:before{content:"\e9a7"}.nicomoon-hammer2:before{content:"\e9a8"}.nicomoon-fire:before{content:"\e9a9"}.nicomoon-lab:before{content:"\e9aa"}.nicomoon-magnet:before{content:"\e9ab"}.nicomoon-bin:before{content:"\e9ac"}.nicomoon-bin2:before{content:"\e9ad"}.nicomoon-briefcase:before{content:"\e9ae"}.nicomoon-airplane:before{content:"\e9af"}.nicomoon-truck:before{content:"\e9b0"}.nicomoon-road:before{content:"\e9b1"}.nicomoon-accessibility:before{content:"\e9b2"}.nicomoon-target:before{content:"\e9b3"}.nicomoon-shield:before{content:"\e9b4"}.nicomoon-power:before{content:"\e9b5"}.nicomoon-switch:before{content:"\e9b6"}.nicomoon-power-cord:before{content:"\e9b7"}.nicomoon-clipboard:before{content:"\e9b8"}.nicomoon-list-numbered:before{content:"\e9b9"}.nicomoon-list:before{content:"\e9ba"}.nicomoon-list2:before{content:"\e9bb"}.nicomoon-tree:before{content:"\e9bc"}.nicomoon-menu:before{content:"\e9bd"}.nicomoon-menu2:before{content:"\e9be"}.nicomoon-menu3:before{content:"\e9bf"}.nicomoon-menu4:before{content:"\e9c0"}.nicomoon-cloud:before{content:"\e9c1"}.nicomoon-cloud-download:before{content:"\e9c2"}.nicomoon-cloud-upload:before{content:"\e9c3"}.nicomoon-cloud-check:before{content:"\e9c4"}.nicomoon-download2:before{content:"\e9c5"}.nicomoon-upload2:before{content:"\e9c6"}.nicomoon-download3:before{content:"\e9c7"}.nicomoon-upload3:before{content:"\e9c8"}.nicomoon-sphere:before{content:"\e9c9"}.nicomoon-earth:before{content:"\e9ca"}.nicomoon-link:before{content:"\e9cb"}.nicomoon-flag:before{content:"\e9cc"}.nicomoon-attachment:before{content:"\e9cd"}.nicomoon-eye:before{content:"\e9ce"}.nicomoon-eye-plus:before{content:"\e9cf"}.nicomoon-eye-minus:before{content:"\e9d0"}.nicomoon-eye-blocked:before{content:"\e9d1"}.nicomoon-bookmark:before{content:"\e9d2"}.nicomoon-bookmarks:before{content:"\e9d3"}.nicomoon-sun:before{content:"\e9d4"}.nicomoon-contrast:before{content:"\e9d5"}.nicomoon-brightness-contrast:before{content:"\e9d6"}.nicomoon-star-empty:before{content:"\e9d7"}.nicomoon-star-half:before{content:"\e9d8"}.nicomoon-star-full:before{content:"\e9d9"}.nicomoon-heart:before{content:"\e9da"}.nicomoon-heart-broken:before{content:"\e9db"}.nicomoon-man:before{content:"\e9dc"}.nicomoon-woman:before{content:"\e9dd"}.nicomoon-man-woman:before{content:"\e9de"}.nicomoon-happy:before{content:"\e9df"}.nicomoon-happy2:before{content:"\e9e0"}.nicomoon-smile:before{content:"\e9e1"}.nicomoon-smile2:before{content:"\e9e2"}.nicomoon-tongue:before{content:"\e9e3"}.nicomoon-tongue2:before{content:"\e9e4"}.nicomoon-sad:before{content:"\e9e5"}.nicomoon-sad2:before{content:"\e9e6"}.nicomoon-wink:before{content:"\e9e7"}.nicomoon-wink2:before{content:"\e9e8"}.nicomoon-grin:before{content:"\e9e9"}.nicomoon-grin2:before{content:"\e9ea"}.nicomoon-cool:before{content:"\e9eb"}.nicomoon-cool2:before{content:"\e9ec"}.nicomoon-angry:before{content:"\e9ed"}.nicomoon-angry2:before{content:"\e9ee"}.nicomoon-evil:before{content:"\e9ef"}.nicomoon-evil2:before{content:"\e9f0"}.nicomoon-shocked:before{content:"\e9f1"}.nicomoon-shocked2:before{content:"\e9f2"}.nicomoon-baffled:before{content:"\e9f3"}.nicomoon-baffled2:before{content:"\e9f4"}.nicomoon-confused:before{content:"\e9f5"}.nicomoon-confused2:before{content:"\e9f6"}.nicomoon-neutral:before{content:"\e9f7"}.nicomoon-neutral2:before{content:"\e9f8"}.nicomoon-hipster:before{content:"\e9f9"}.nicomoon-hipster2:before{content:"\e9fa"}.nicomoon-wondering:before{content:"\e9fb"}.nicomoon-wondering2:before{content:"\e9fc"}.nicomoon-sleepy:before{content:"\e9fd"}.nicomoon-sleepy2:before{content:"\e9fe"}.nicomoon-frustrated:before{content:"\e9ff"}.nicomoon-frustrated2:before{content:"\ea00"}.nicomoon-crying:before{content:"\ea01"}.nicomoon-crying2:before{content:"\ea02"}.nicomoon-point-up:before{content:"\ea03"}.nicomoon-point-right:before{content:"\ea04"}.nicomoon-point-down:before{content:"\ea05"}.nicomoon-point-left:before{content:"\ea06"}.nicomoon-warning:before{content:"\ea07"}.nicomoon-notification:before{content:"\ea08"}.nicomoon-question:before{content:"\ea09"}.nicomoon-plus:before{content:"\ea0a"}.nicomoon-minus:before{content:"\ea0b"}.nicomoon-info:before{content:"\ea0c"}.nicomoon-cancel-circle:before{content:"\ea0d"}.nicomoon-blocked:before{content:"\ea0e"}.nicomoon-cross:before{content:"\ea0f"}.nicomoon-checkmark:before{content:"\ea10"}.nicomoon-checkmark2:before{content:"\ea11"}.nicomoon-spell-check:before{content:"\ea12"}.nicomoon-enter:before{content:"\ea13"}.nicomoon-exit:before{content:"\ea14"}.nicomoon-play2:before{content:"\ea15"}.nicomoon-pause:before{content:"\ea16"}.nicomoon-stop:before{content:"\ea17"}.nicomoon-previous:before{content:"\ea18"}.nicomoon-next:before{content:"\ea19"}.nicomoon-backward:before{content:"\ea1a"}.nicomoon-forward2:before{content:"\ea1b"}.nicomoon-play3:before{content:"\ea1c"}.nicomoon-pause2:before{content:"\ea1d"}.nicomoon-stop2:before{content:"\ea1e"}.nicomoon-backward2:before{content:"\ea1f"}.nicomoon-forward3:before{content:"\ea20"}.nicomoon-first:before{content:"\ea21"}.nicomoon-last:before{content:"\ea22"}.nicomoon-previous2:before{content:"\ea23"}.nicomoon-next2:before{content:"\ea24"}.nicomoon-eject:before{content:"\ea25"}.nicomoon-volume-high:before{content:"\ea26"}.nicomoon-volume-medium:before{content:"\ea27"}.nicomoon-volume-low:before{content:"\ea28"}.nicomoon-volume-mute:before{content:"\ea29"}.nicomoon-volume-mute2:before{content:"\ea2a"}.nicomoon-volume-increase:before{content:"\ea2b"}.nicomoon-volume-decrease:before{content:"\ea2c"}.nicomoon-loop:before{content:"\ea2d"}.nicomoon-loop2:before{content:"\ea2e"}.nicomoon-infinite:before{content:"\ea2f"}.nicomoon-shuffle:before{content:"\ea30"}.nicomoon-arrow-up-left:before{content:"\ea31"}.nicomoon-arrow-up:before{content:"\ea32"}.nicomoon-arrow-up-right:before{content:"\ea33"}.nicomoon-arrow-right:before{content:"\ea34"}.nicomoon-arrow-down-right:before{content:"\ea35"}.nicomoon-arrow-down:before{content:"\ea36"}.nicomoon-arrow-down-left:before{content:"\ea37"}.nicomoon-arrow-left:before{content:"\ea38"}.nicomoon-arrow-up-left2:before{content:"\ea39"}.nicomoon-arrow-up2:before{content:"\ea3a"}.nicomoon-arrow-up-right2:before{content:"\ea3b"}.nicomoon-arrow-right2:before{content:"\ea3c"}.nicomoon-arrow-down-right2:before{content:"\ea3d"}.nicomoon-arrow-down2:before{content:"\ea3e"}.nicomoon-arrow-down-left2:before{content:"\ea3f"}.nicomoon-arrow-left2:before{content:"\ea40"}.nicomoon-circle-up:before{content:"\ea41"}.nicomoon-circle-right:before{content:"\ea42"}.nicomoon-circle-down:before{content:"\ea43"}.nicomoon-circle-left:before{content:"\ea44"}.nicomoon-tab:before{content:"\ea45"}.nicomoon-move-up:before{content:"\ea46"}.nicomoon-move-down:before{content:"\ea47"}.nicomoon-sort-alpha-asc:before{content:"\ea48"}.nicomoon-sort-alpha-desc:before{content:"\ea49"}.nicomoon-sort-numeric-asc:before{content:"\ea4a"}.nicomoon-sort-numberic-desc:before{content:"\ea4b"}.nicomoon-sort-amount-asc:before{content:"\ea4c"}.nicomoon-sort-amount-desc:before{content:"\ea4d"}.nicomoon-command:before{content:"\ea4e"}.nicomoon-shift:before{content:"\ea4f"}.nicomoon-ctrl:before{content:"\ea50"}.nicomoon-opt:before{content:"\ea51"}.nicomoon-checkbox-checked:before{content:"\ea52"}.nicomoon-checkbox-unchecked:before{content:"\ea53"}.nicomoon-radio-checked:before{content:"\ea54"}.nicomoon-radio-checked2:before{content:"\ea55"}.nicomoon-radio-unchecked:before{content:"\ea56"}.nicomoon-crop:before{content:"\ea57"}.nicomoon-make-group:before{content:"\ea58"}.nicomoon-ungroup:before{content:"\ea59"}.nicomoon-scissors:before{content:"\ea5a"}.nicomoon-filter:before{content:"\ea5b"}.nicomoon-font:before{content:"\ea5c"}.nicomoon-ligature:before{content:"\ea5d"}.nicomoon-ligature2:before{content:"\ea5e"}.nicomoon-text-height:before{content:"\ea5f"}.nicomoon-text-width:before{content:"\ea60"}.nicomoon-font-size:before{content:"\ea61"}.nicomoon-bold:before{content:"\ea62"}.nicomoon-underline:before{content:"\ea63"}.nicomoon-italic:before{content:"\ea64"}.nicomoon-strikethrough:before{content:"\ea65"}.nicomoon-omega:before{content:"\ea66"}.nicomoon-sigma:before{content:"\ea67"}.nicomoon-page-break:before{content:"\ea68"}.nicomoon-superscript:before{content:"\ea69"}.nicomoon-subscript:before{content:"\ea6a"}.nicomoon-superscript2:before{content:"\ea6b"}.nicomoon-subscript2:before{content:"\ea6c"}.nicomoon-text-color:before{content:"\ea6d"}.nicomoon-pagebreak:before{content:"\ea6e"}.nicomoon-clear-formatting:before{content:"\ea6f"}.nicomoon-table:before{content:"\ea70"}.nicomoon-table2:before{content:"\ea71"}.nicomoon-insert-template:before{content:"\ea72"}.nicomoon-pilcrow:before{content:"\ea73"}.nicomoon-ltr:before{content:"\ea74"}.nicomoon-rtl:before{content:"\ea75"}.nicomoon-section:before{content:"\ea76"}.nicomoon-paragraph-left:before{content:"\ea77"}.nicomoon-paragraph-center:before{content:"\ea78"}.nicomoon-paragraph-right:before{content:"\ea79"}.nicomoon-paragraph-justify:before{content:"\ea7a"}.nicomoon-indent-increase:before{content:"\ea7b"}.nicomoon-indent-decrease:before{content:"\ea7c"}.nicomoon-share:before{content:"\ea7d"}.nicomoon-new-tab:before{content:"\ea7e"}.nicomoon-embed:before{content:"\ea7f"}.nicomoon-embed2:before{content:"\ea80"}.nicomoon-terminal:before{content:"\ea81"}.nicomoon-share2:before{content:"\ea82"}.nicomoon-mail:before{content:"\ea83"}.nicomoon-mail2:before{content:"\ea84"}.nicomoon-mail3:before{content:"\ea85"}.nicomoon-mail4:before{content:"\ea86"}.nicomoon-amazon:before{content:"\ea87"}.nicomoon-google:before{content:"\ea88"}.nicomoon-google2:before{content:"\ea89"}.nicomoon-google3:before{content:"\ea8a"}.nicomoon-google-plus:before{content:"\ea8b"}.nicomoon-google-plus2:before{content:"\ea8c"}.nicomoon-google-plus3:before{content:"\ea8d"}.nicomoon-hangouts:before{content:"\ea8e"}.nicomoon-google-drive:before{content:"\ea8f"}.nicomoon-facebook:before{content:"\ea90"}.nicomoon-facebook2:before{content:"\ea91"}.nicomoon-instagram:before{content:"\ea92"}.nicomoon-whatsapp:before{content:"\ea93"}.nicomoon-spotify:before{content:"\ea94"}.nicomoon-telegram:before{content:"\ea95"}.nicomoon-twitter:before{content:"\ea96"}.nicomoon-vine:before{content:"\ea97"}.nicomoon-vk:before{content:"\ea98"}.nicomoon-renren:before{content:"\ea99"}.nicomoon-sina-weibo:before{content:"\ea9a"}.nicomoon-rss:before{content:"\ea9b"}.nicomoon-rss2:before{content:"\ea9c"}.nicomoon-youtube:before{content:"\ea9d"}.nicomoon-youtube2:before{content:"\ea9e"}.nicomoon-twitch:before{content:"\ea9f"}.nicomoon-vimeo:before{content:"\eaa0"}.nicomoon-vimeo2:before{content:"\eaa1"}.nicomoon-lanyrd:before{content:"\eaa2"}.nicomoon-flickr:before{content:"\eaa3"}.nicomoon-flickr2:before{content:"\eaa4"}.nicomoon-flickr3:before{content:"\eaa5"}.nicomoon-flickr4:before{content:"\eaa6"}.nicomoon-dribbble:before{content:"\eaa7"}.nicomoon-behance:before{content:"\eaa8"}.nicomoon-behance2:before{content:"\eaa9"}.nicomoon-deviantart:before{content:"\eaaa"}.nicomoon-500px:before{content:"\eaab"}.nicomoon-steam:before{content:"\eaac"}.nicomoon-steam2:before{content:"\eaad"}.nicomoon-dropbox:before{content:"\eaae"}.nicomoon-onedrive:before{content:"\eaaf"}.nicomoon-github:before{content:"\eab0"}.nicomoon-npm:before{content:"\eab1"}.nicomoon-basecamp:before{content:"\eab2"}.nicomoon-trello:before{content:"\eab3"}.nicomoon-wordpress:before{content:"\eab4"}.nicomoon-joomla:before{content:"\eab5"}.nicomoon-ello:before{content:"\eab6"}.nicomoon-blogger:before{content:"\eab7"}.nicomoon-blogger2:before{content:"\eab8"}.nicomoon-tumblr:before{content:"\eab9"}.nicomoon-tumblr2:before{content:"\eaba"}.nicomoon-yahoo:before{content:"\eabb"}.nicomoon-yahoo2:before{content:"\eabc"}.nicomoon-tux:before{content:"\eabd"}.nicomoon-appleinc:before{content:"\eabe"}.nicomoon-finder:before{content:"\eabf"}.nicomoon-android:before{content:"\eac0"}.nicomoon-windows:before{content:"\eac1"}.nicomoon-windows8:before{content:"\eac2"}.nicomoon-soundcloud:before{content:"\eac3"}.nicomoon-soundcloud2:before{content:"\eac4"}.nicomoon-skype:before{content:"\eac5"}.nicomoon-reddit:before{content:"\eac6"}.nicomoon-hackernews:before{content:"\eac7"}.nicomoon-wikipedia:before{content:"\eac8"}.nicomoon-linkedin:before{content:"\eac9"}.nicomoon-linkedin2:before{content:"\eaca"}.nicomoon-lastfm:before{content:"\eacb"}.nicomoon-lastfm2:before{content:"\eacc"}.nicomoon-delicious:before{content:"\eacd"}.nicomoon-stumbleupon:before{content:"\eace"}.nicomoon-stumbleupon2:before{content:"\eacf"}.nicomoon-stackoverflow:before{content:"\ead0"}.nicomoon-pinterest:before{content:"\ead1"}.nicomoon-pinterest2:before{content:"\ead2"}.nicomoon-xing:before{content:"\ead3"}.nicomoon-xing2:before{content:"\ead4"}.nicomoon-flattr:before{content:"\ead5"}.nicomoon-foursquare:before{content:"\ead6"}.nicomoon-yelp:before{content:"\ead7"}.nicomoon-paypal:before{content:"\ead8"}.nicomoon-chrome:before{content:"\ead9"}.nicomoon-firefox:before{content:"\eada"}.nicomoon-IE:before{content:"\eadb"}.nicomoon-edge:before{content:"\eadc"}.nicomoon-safari:before{content:"\eadd"}.nicomoon-opera:before{content:"\eade"}.nicomoon-file-pdf:before{content:"\eadf"}.nicomoon-file-openoffice:before{content:"\eae0"}.nicomoon-file-word:before{content:"\eae1"}.nicomoon-file-excel:before{content:"\eae2"}.nicomoon-libreoffice:before{content:"\eae3"}.nicomoon-html-five:before{content:"\eae4"}.nicomoon-html-five2:before{content:"\eae5"}.nicomoon-css3:before{content:"\eae6"}.nicomoon-git:before{content:"\eae7"}.nicomoon-codepen:before{content:"\eae8"}.nicomoon-svg:before{content:"\eae9"}.nicomoon-IcoMoon:before{content:"\eaea"}PK��[CU�u�u;Application/Frontend/Assets/icons/icomoon/dist/icomoon.woffnu�[���wOFFu�u�OS/2``cmaphTTV�qgasp�glyf�f`f`�a�headh$66��hheah\$$
��hmtxh����I8�locap<���rmaxpt
,�namet<���J �postu�
�������3 @�����@�@ 8
����
���������797979� 5 !!!�������r��s���s�����
� 7!53!7%"&54632�``�``�%%%%��``�`���```%%%%`'#'3!53!3�����@�@�`�
���
����@ ���'!!3#3#3#3#3#3#!!333!�@���������������@����@@�������������@���@@@#5!3!265!!!!!!!!3#!!���%`(8���@����������@�����@%8(
����@@@@@@@@�����2'7>%''`B^@�@1��@
P�<�@8��^B1@�@�
��@P��@8����7'.'7#%5���@�@�;2c����������N@@�@�@��2;N��������������6$3#*10��Q�c��|H�0�@�d8�O������� 6 &7>%811.54632#"&'0>781>7���'P�f��
iiN98((88( ��9s��
���P��'�
��s9 (88((8��9Nii
���9234.234.7.54632#"&'%?�7j30W&%;`e��G�225`Fz�@��%%% ��@@�`;%&W03j7��e�`522�G]�zF�@@�`� %%%���@����%&"'1;0232677'764'#5�&j&�y�k�(
�
�j�z�%%��m�m�*�%%�z�j�'�
�k�y�&j&�em�m�*���a�6.'32>7>&'#"&'32>7>'aK\j77j\KHYe55eYH~!|F)N!
,TJ="
"�E�wl//lw�E+XXV).L66L.)VXX+��>K-?'@�5*0�A���)-#54&#!"3!26=3!#";2654&+5!5!�&�@&&�&���
�
@�@���@&&�&&@��
��
@
@�@�!-48181!8181!5!"3!2654&##"&54632!537������&&�&&�8((88((8@��@�@�@&�&&&�(88((88�����������,<HO#54&#!";3!2654῵!81!"81!8181!81#"&54632!537@@&��&&@&�&&�&@��&�����8((88((8@��@�@@&&�&@&&&@��@&��(88((88�������@+?C32>54.#"#.#!"#"3!2654&".54>32#530!8L++L8!!8L++L8!��$0�0$�&&�&&�&;gM--Mg;;gM--Mg���`+L8!!8L++L8!!8L50PP0&��&&@&��-Mg;;gM--Mg;;gM-�@��� L#32654&!";74.#".54>32.'>54&'>5
@@
�
@�P��jj��P4F),Aq�VV�qA,)F4��@
�
��
�@j��PP��j.X)9*L;'�
*V�qAAq�V*
�D';L*9)X.���*3#".54>32#".54>32�@#=R..R=##=R./S�#=R..R=##=R./S��
!:,,:!!:,pr�!:,,:!!:,p@@(,.#"32>7>54.'
�6qvy??yvq66qvy??yvq6��@��
)TY[//[YT))TY[//[YT)����� @@"!#535#535#53!!#535#535#53%��������@����������@��@�������������������@@+/4632#"&%4632#"&54&#!"3!26=!5!�^BB^^BB^��^BB^^BB^&��&&�&����B^^BB^^BB^^BB^^�`&&��&&`��������'3?K[!"3!2654&"&54632"&54632"&54632"&54632"&54632.#!"463`�B^^BB^^��(88((88((88((88�(88((88�(88((88((88((88X:�B^I7&^B�B^^BB^�@8((88((8�8((88((8�8((88((8�8((88((8�8((88((8�7I^B�:X}&@����".#"32>72#"&5463�#Wcn:j��PP��j:ncW#��@))))
)B/P��jj��P/B)M�))))��2�!.'1897!5.'>&2IeF--FeI{j�f
Q.�.Q
f�jd6aWM!!MWa6\ɋ&GX|&&|XG&������O">7>54.#".'.#"3267>7!5.'32>54.#,N'8"
8K**K8
"8'N,+K8!!8K+,N
))3�3))
N,+K8!!8K+7"
(YN-+L8""8L+-NY(
"!8M++M9
#
8_L8&&8L_8
#
9M++M8!���@� ��@@����"F[e�4.'81#0130412>5"&'.'.5467>7>32467#*10232.'?>'"&'.'.5467>7>32#0SE~�ii�~ES0#� ��$B&3773&B$t�Rv vK�c90AE"Q./Q"EB0:c�L��
.wBBw.!
!.wBBw.
6'K#_X_#K���
0B
....
��$EQ2.#"'>3%>32.#"1.#"'>7>324632#"&�O�4Z#]55]#Z4�O�;.hs|@@|sh.[$T\c33c\T$�(LGC[6~��MM��~6[CGL(*UWZ--ZWU��%%%%�<5Z#((#Z5<E-F//F-[$8&&8$�)17[6T::T6[71) ��%%%%���%Do4.#"!'>.54632'>54&#".54>32''>54.#".54>32P��jj��P1Y{I�I{Y1��%%3,:K55K:,KDW(F]55]F(WDK�I/P:
2WuBBuW2 :P/I<dH(Gy�]]�yG(Hd<�j��PP��jS�}_
_}�(%%;; F.5KK5.F �O5aJ,,Ja5O����;O`5BuW22WuB5`O;�SkE]�~JJ~�]EkSp-AU4632#"&>54&'.54>7#.54>7>54.�K55KK55K&>,,>&!''!��'!&>,,>&!'�$4!6W>"">W6!4$�6W>"">W6!4$$4�5KK55KKN;HT..TH;4�SS�4��S�4;HT..TH;4�S@zn`("]o~DD~o]"(`nzp"]o~DD~o]"(`nz@@zn`����
.2654&#"#".=##!5#5>=�B^^BB^^"#=R..R=#@(E]6�@�6]E(^B�B^^B��B^`.R=##=R.``8bM1�@@�1Mb8`@����&!"&5463!!"3!181"389!5!��`(88(`��5KK5�
`��@��8((8K5�5K��@
@@H@#'8#";26545%#";2654ș?>'.�
�
-��`�
�
-����
���@
�@
�
�@�
�@
�
�@OW�� W;��@�'-%5#35#3#35#3#35#3#35#3##!53!5@@�@�@�@�@�@�@�@@@@��@��@�@@���@@���@@���@@��@@@���@@����#!"3!2654&!!!!!!!!!!`�(88((88H�@�����@��@��@��@�8(��(88(@(8����@@@@@�@����'1!"3!2654&!!!!!!4632#"&#"!54&`�(88((88H�@�����@��@@8((88((8��(8@8�8(��(88(@(8���@@@@�(88((888&@@&@����!7.'.'.#!"3!2654&''#5#!"&54630:1;�-3')�!//!�!/�%
�)� �
���
��3-/!��!//!p)'6)�
%�� ` �
@����"8K.'.'.#!"3!2654&''#5#!"&54630:1;.#!"463!.�-3')��!//!`!/�%
�)o �� s�s
��')��!/% �[3-/!�
!//!�)'6)�
%� � �
�/!�
,. @����!7ESa.'.'.#!"3!2654&''#5#!"&54630:1;!"&5463!2'!"&5463!2'!"&5463!2�-3')�!//!�!/�%
�)� �
���
�@
�
�@
�
�@
�
�3-/!��!//!p)'6)�
%�� ` �
�
�
�
@����+3I%!575#"&546327.'.'.#!"3!2654&''#5#!"&54630:1;@����8((88((8V-3')�!//!�!/�%
�)� �
���
�@�@����(88((88�3-/!��!//!p)'6)�
%�� ` �
@����#9a.'.'.#!"3!2654&'1'#5#!"&54630:1;..#"326=%.#"32654&'�-3')�!//!�!/�%
�)o �
���
���!5KK55K!5KK55K�3-/!��!//!p)'6)�
%�� ` �
G@�8((88(�3�8((88(@
@����$:
.'.'.#!"3!2654&''#5#!"&54630:1;�@��-3')�!//!�!/�%
�)� �
���
�@��[3-/!��!//!p)'6)�
%�� ` �
@����%;?C.'.'.#!"3!2654&'9'#51#!"&54630:1;!!%7'�-3')�!//!�!/�%
�)o �
���
�@��@���3-/!��!//!p)'6)�
%�� ` �
��������
@����%;?CGKOSW[jn.'.'.#!"3!2654&'9'#51#!"&54630:1;3#;##3#;##3#;##3#;#;26=4&+5##5�-3')�!//!�!/�%
�)o �
���
��������������������������P����3-/!��!//!p)'6)�
%�� ` �
@@@@@@@@���@�@@���!!!%#35!#!35!��@�����e�@��e��@������e������ee���@���
47=#54&+"#!'#58138154&+3#!35#"3!!#!35!��&�&����@
@
��� @
��@e��@@@&&@��@@��
@���@@
��
��[e�@���
% 7% 7��V�����g��g��g��g���������3�3�3�3�@!!����@��@@@
%!!!@������
���@��@��@'!!##5#53533@��@��������������@�����@ '!!!5!@��@�����������@�@'!!'333@��@�ࠀ����������@'!!###@��@�ࠀ��������"���!"27>54&"&54632��0�$�(���(88((88��$(�d�0���8((88((8"���.!"27>54&"&54632#"2?��0�$�(���(88((88�x
P0�$�(��$(�d�0���8((88((8�
�$(�d@@#'+/37;?3#3#3#3#3#3#3#3#3#3#73#73#%3#%3#'3#%3#���@@�@@�@@@@�@@��
� �
��@@�@@�@@@@@@@@�������@��������������������������@@@@@@@@@@@@@@9���"&*.26:>BFJNRVZ^bfjnrvz~��������������������������!!1!3#%!!1!3#!!1!3#3#;##3#;##3#;##3#3#;##3#;##3#;##3#;#3#%3#73#'3#%3#;#73#;#73#;#73#;#73#3#%3#73#;#73#73#3#%3#73#73#;#73#3#%3#;#73#;##3#73#73#@�@�����@�@������@�@�����@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@�@@��@@@@@�@@@@@@@@@@�@@@@@@@@@@@@@@@@@@@@��@@@@@@@@�@@@@@@@@��@@@@@�@@@@@@@@@@@��@@@@@@@@@@@�@@�@@�@@��@�������@������@�@������@@@@@@@@@@@@@@@@@@@�@@@@@@�@@�@@�@@�@�@@@�@@@@�@�@@@�@@@@�@�@�@@�@@@@@@@����,1''#"&546?'&"7>322764' @����J
!%6 J@��J !%6 J@T���������J
6%! J��@J 6%!
JT@���������0%#"&54632#"&54632!4&+33!5!"&585�8((88((8�8((88((8�%��0K5�%
(88((88((88((88x�%@�d45K@%����';?C"32>54.".54>32535#5##3#3353+53#53�c��KK��cc��KK��cP�i<<i�PP�i<<i�0��@����@��@@�@@�K��cc��KK��cc��K��<i�PP�i<<i�PP�i<��@@@��@@@��������'r"32>54.".54>32&+"&'32654&+532654&+>;27>'.+"#";#";;2676&'�c��KK��cc��KK��cP�i<<i�PP�i<<i�o
-�2 �
��
� 2�-
J+�:X#
#X:�+J�K��cc��KK��cc��K��<i�PP�i<<i�PP�i<$
@
$%+I7
@
7I+%����'V"32>54.".54>327#532654&+546327>'.#"#";!2654&#�c��KK��cc��KK��cP�i<<i�PP�i<<i�0�`
`8(,
J+B^
�K��cc��KK��cc��K��<i�PP�i<<i�PP�i<�
(8%+^B
�
����'b"32>54.".54>322654&+76&'&'.#";#";326=32654&+53�c��KK��cc��KK��cP�i<<i�PP�i<<i�0
D_ee_D
``
`
`
``�K��cc��KK��cc��K��<i�PP�i<<i�PP�i<`
����
@
`
`
@@@#'+/!"3!2654&!2!546!"&5!%3#73#73#���(88(@(88��@
��M��
���@@�@@�@@@8(��(88(@(8@
``
��
��
����������#'+;G!"3!2654&!5!%!"3!2654&!5!5!5!!"3!2654&##5#53533���&&@&&��@��&&@&&��@��@���&&@&&�@��@��&��&&@&�@�&��&&@&��@�@�&��&&@&���@�����/?N\"32>54.4632#"&1'>54&'79.#"'>32.546773267#"&j��PP��jj��PP����pPPppPPp^�
��I11I'V..V�ޱ
��I11I'V..V�P��jj��PP��jj��P�PppPPpp[I11I'V..V'I�
���I11I'V..V'���
�����)#"&'.54676.#"130>54.�0
00`00PP0$HTB<*-I[//���0<H<>TV@0PP00`00
0VT><H<0���//[I-*<BTH$���:.546'.#"&'&67>781>31:3:31281�biS!f==f!Sib%If�[[�fI%�*a &$$8$#
#$8$$& a*>&.##.&>@����#'+!2#"&5463!54631323#3#3#3#���5KK55KK5���K5�5K�@````````���K55KK55K�@5KK5��@�@�@�@!"3!2654&!7! %���(88(@(88�������ggg�����@8(��(88(�(8�Z����&�6nn��"�����#35%7'7
``���'i�``��@�@�``����'���``@@�@���@�"10>54."&54632BuW2dxddxd2WuBPppPPpp�2WuBx�̂��xBuW2�pPPppPPp���@�'3"10>54.".54>32'4632#"&BuW2dxddxd2WuB)G55G))G55G�I33II33I�2WuBx�̂��xBuW2��5G))G55G))G5�3II33II����!*'.5!"&'&676#!2
�
�
�@ ��p
^�@��
�@
@
������!$2"32>54.4>32.5
"&'%#j��PP��jj��PP����Aq�VR�8�d�4<�nIR�8��4<Aq�V�P��jj��PP��jj��P�V�qA<4��d8�RIn�<4��8�RV�qA���%%%@���@����������
�@����%%%
%%%%�����`@`��������������Rf��f]��]R]x]
@�%+2#5267>54&'.#"33>!3�]�zFFz�]G�225522�GG�2&2 ���Nv����Fz�]]�zF`522�GG�22552&_4�Q�g;���@����-%'3"32>54.".54>32�Ӏ��j��PP��jj��PP��jP�i<<i�PP�i<<i�����P��jj��PP��jj��P��<i�PP�i<<i�PP�i<���"32>54.'3j��PP��jj��PP��)Ӏ�Z�P��jj��PP��jj��P���Z@����'7EK"32>54.".54>32>54&#"1%.#">#!5]�zFFz�]]�zFFz�]K�a99a�KK�a99a�\
pP.P2[QE��P.Pp
EQ[�@@Fz�]]�zFFz�]]�zF��9a�KK�a99a�KK�a9�0Pp)"
'6E(�")pP0(E6'���@���:]%4.54&'.'4654&#"3267>5041.#".'.'>7>32O`P!2@$&&)F3P`P<k�V<%%<V�k<�(_4I22I4_(8:
:8 JPU++UPJ 8:
:8�lhHPT
*K=+
$$4GZ1TPHhl3)&&)361DD1
@����
A5354&+"332>54.#"&'.5467>7326'�%�%�Q�g<Aq�VV�qA<g�q-u@@u-.00.+p==p+.00.�A@%%@AFo�RV�qAAq�VR�oF��.00.-u@@u-,0��:0,-u@@u-����#'373#73#73#3#73#73#3#73#73#%3##5!#5#!!!@����������������������������������@���@��@@�����������@��������@@@@��@��#'!!!";!32654&"&54632!!����&&��&&��%%%%%�����@&��&�&@&�%%%%�@@@�@#'+/37;?C!"3!2654&3##5%3##5%3##5'3#3##53!5!#535#535#53@�&&&&�&���������������@@��@@@@�������@&��&&�&��@����@����@����@�������@�@��
!!!!!'@�����
@@���������@@@@
4&#!"#!5!5!7!81!81�&��&��������&&����@@���@�#!"3!2654&!!"&546327!!�@(88(�(88�x��%%%%��8(��(88(@(80
��%%%%�����@�
!"3!2654&"&54632#%!!��&&@&&��
��@�&��&&�&�.��@����!"3!2654&"&54632%!!
��(88(�(88��
��@�8(��(88(@(8�
`���/O.'7'&"#132>7>54.#".'.5467>32�B�J�@�
�@�-YVS(6qvy??yvq6�)TY[//[YT))TY[//[YT)� �@�@� )TY[//[YT))TY[//[YT��6v??v66v??v���!/= .#!"3!2654&##'#5!'!"&5463!2!"&5463!2��
�@
�%�%<�������@
�
3��
@
4@����%%
0��+�ի
�
���! .#!"3!2654&##'#5!��
�@
�%�%<������4@����%%
0��+���!3!265 35!37!@���
�
������[@J@���`
������@@�!3!265!5# 7!@���
�
����@@�[@J@���`
�������@@��� ###
-'%����H�[�[H�����Ha��aHi������33 3
-5%�������%�[�[%����pcm��mc�������!!!3#!3!3��������@@K5�������@5@@7!265!%3#!!��Pp�p�@@���@@pPPp�@�����+A"32>=4.".532>=".532>=j��PP��jj��PP��jj��PP��jj��PP��jj��PP��jj��PP���,:!�!:,,:!�!:,��,:!�!:,,:!�!:,��,:!�!:,,:!�!:,�!"'!'>32>54.#5d\R#���5�PP�i<"0U(@-P��j�'7#����4<<i�P+QIA`#Vbl9j��P�
7.54>32!.#"-@(U0"<i�PP�5���#R\d5j��P�9lbV#`AIQ+P�i<<4���#7'P��@����
>. 6�+&8�������FO@M��e�����������5 5&&>@�����8&+iOF��������e��Mr�����75 5.7+&8�������FOi�M��e��������r@����% >&''������8&+iOF�ɸ����e��Mr������"2#"&'5>54&'.54>j��PP��j()Z]`03M,F1P���Aq�VV�qA)3
W4HR\1V�qA����!N%#"&'#".54>322.#"*#"&'5>54&'.54>@$4Y
)<iN--Ni<<iN-��h��R%Q*H�359()Z]`03M,F1P��;"8(#(F]55]F((F]5*Kx?n�U1-/{D"@)3
W4HR\1V�qA����$H12#"&'5>54&'.54>3.'#"&'2>7>7>54&5�c��KK��c&&SWX-0D)B.K��c2*M�C
H�57hbY''>6?TF�=i�PQ�j='/
Q1
CMV.P�i=��*E&B% !0
K),^1-wDN�.���3W">7>3:3267>7>54&'.'.#512#"&'5>54&'.54>)O&#>253/
)O&#>2552>#&O)j��PP��j()Z]`03M,F1P��
")d6;3.
")d66d)"
�Aq�VV�qA)3
W4HR\1V�qA����!n%#"&'#".54>32>7>3:3"&'5>54&'.54>32.'.'.'.#"@$4Y
)<iN--Ni<<iN-��253/
()Z]`03M,F1P��jh��RC" 2(>#&O))O&#>;"8(#(F]55]F((F]5*K�)d6;3.
�)3
W4HR\1V�qA?n�U*N
"
"����3X|">7>3233267>7>54&'.'.#512#"&'5>54&'.54>3.'#"&'2>7>7>54&5�&I"!9-0./&I"!9-00-9!"I&c��KK��c&&SWX-0D)B.K��c2*M�C
H�57hbY''>6?TF@%Z05.. %Z10Z%�=i�PQ�j='/
Q1
CMV.P�i=��*E&B% !0
K),^1-wDN�.@�@%5>54.#"!4.@5K$NHHN$K5Q�g;�;g��5�J<iN--Ni<J�5-CW00WC-����A%5>54.#"!4.>7.'.5467>7.#"!>75K$NHHN$K5Q�g;�;g���*e9 P9
OZHN$K5Q�g;
�5�J<iN--Ni<J�5-CW00WC-)
*Y-Aw20<:E-Ni<J�5-CW0
���2>%4>7>54.#"!."32>54.##5#53533�"=U2$NHHN$K5Q�g;�`<iN--Ni<<iN--Nid�@��@��9gVB<<iN--Ni<J�5-CW009-Ni<<iN--Ni<<iN-����@�����26%4>7>54.#"!."32>54.!5!�"=U2$NHHN$K5Q�g;�`<iN--Ni<<iN--Nid��@�9gVB<<iN--Ni<J�5-CW009-Ni<<iN--Ni<<iN-��@���# '!5.'5>54.#"!���`@�`��@2�K5K$NHHN$K5Q�g;�`��`@�``s&5�J<iN--Ni<J�5-CW0���4632#"&#'#"!4&@pPPppPPp�#�J``J�#`
PppPPpp��lt``���pP��@Pp@=2#".5'4>3">!2#".5'4>3">�.R=##=R..R=#Fz�]@u- I.R=##=R..R=#Fz�]@u- #=R..R=##=R.
]�zF�0.
#=R..R=##=R. ]�zF�0.
@=".54>32#5267>7!".54>32#5267>7
.R=##=R..R=#Fz�]@u- ��.R=##=R..R=#Fz�]@u- @#=R..R=##=R.
]�zF�0.
#=R..R=##=R. ]�zF�0.
@����";W>54&'!!>54.'4>75.51!.=467>7!!.�4U=!��!=U44U=!z!=U4��9S66S9�9S66S9�661�f1666M�M�!^s�H
H�s^!!^s�H H�s^!�@FhMdMhFFhMdMhF"G@G3
2G@GxKLw8��#/BUht4632#"&4632#"&4632#"&4632#"&81463281#"&5%81463281#"&581463281#"&54632#"&�K55KK55KK55KK55K�%%%%p%&&%��%%%%��&%%&
9'(88('9X****@5KK55KK;5KK55KK�%%%%�%%&&V%%%%p%%&&
'99'(88(��****
���:r.'.'.'.7>7>7>7>7:3265<51'.'.'.'.7>7>7>7>19$#T.-a11_,-O!!46!"N++Z..Y))K1 %f3I((U**S'&E,.C%%O''M$#@)
!�2c-.R"#57#"Q-,^//\++M
24!
L)4%�(G.1G&'Q))P%%B+
-A$#K&$3����
-?Pbp�����"&=4632"&=4632"&/&676#"&/&676#"&/.7>"&/.7>#%#"&546;2%81#"&54638132#"&'&6?6#"&'&6?6#"&'.?>#"&'.?>#####�Y-Yf Z
Z �7�*�
_��
�o����
���
�$ �m�
��7
Y Yf
Z
Z�#�##�#�J����-�-�� ���Z
*Y*��Z
Z��$ Y
$ ZuZ
Z��!� �
x�
����*4C467'7.%>54&'7.'>75#"&'3267'��*;&r'-�-'r&;*��Ep!�RgyB��!pEBygRTC##Cr7}CC}7r� <07h_T#�+o>>o+�#T_h70< 1S;<:cL1;S�1Lc:��!!����'Z"32>54.2#".54>#".'.54>7813267>4&'7j��PP��jj��PP��j5]F((F]55]F((F]fGMT++TMG/
/C11110{CC{01111C/
/�P��jj��PP��jj��P�(F]55]F((F]55]F(��/
/GMT++TMGC2{�{2/33/2{�{2CGMT++TMG9����)6BObn4632#"&81463281#"&4632#"&4632#"&5%4632#"&4632#"&581463281#"&5!#"&54632�K55KK55K�>++>>++>g8('88'(8��2$$22$$2��.
!--!
.i****w&%%&�C00DD00C@5KK55KK��+>>++>>�(88('88I$22$$22$p!--!
..0****&&%%0DD00CC��F#/;GS%4632#"&4632#"&%4632#"&4632#"&4632#"&%4632#"&4632#"&�8((88((8�`8((88((8@8((88((8�:8((88((8L8((88((8��8((88((8L8((88((8
(88((88�(88((88((88((88N(88((88��(88((88((88((88t(88((88���8".'.5467>732>54&'.'7#3c\T$$8&('%h?+3U!Aq�VV�qA!U3+?h%'(&8$$T\c3@&8$$T\c3I�=;_VM11q;V�qAAq�V;q11MV_;=�I3c\T$$8&���3">3232654.2>7#".54&#"i��RCq�UV�qA8((8P��ji��RCq�UV�qA8((8P���N��h[�vDFz�](88(j��P�N��h[�vDFz�](88(j��P���D�1812233332323023323:323232013023181263623263263>7>7>7>7627267>7261263>7>7>7>7>3>7>7>7>7>7>7>7>7>7>7>7465>7>7467465>7465465645045>5465<5645645<12650451814&5&454&54&5.'.'.'.'&4'4&'.'4&54&5.'.'.'.'.5.'.'.'.'.'.'.'.'.'.'"&'"&#.'.'.#.#.#.'"&#"�"#.#"&#*#&"#&"#*#4�"#181"#"#"#"#"""#"##0107041465>7467465>7461465>7>7>7465>5>7>7>7>7>7>7>7>7>7>7>7263>7>7263627263>3623623021627:3:7:3263:3:3:323:323021209>720222321233322110109011"#"#""##"#"1*#"*#**#"#*#*#*#&"#*#&"#0"10"9"&'.'"&'"&#.'"&1"&#.#.'.'.#.'.'.'"&'.'.'.'.'.'.'.'.'4&5.'.'4&5&4'4&5.5&45"41<1&4'<5<'<54&5<5<5<5645<5645041049.'
%
%
&
$J
#
"
�
%
&
%
%A
"
#���-!7.#"3267>7#".54>327���7�MM�76::67�MM�7 `#Vbl:j��PP��j5d\R#�@�6::67�MM�76::6 T(A-P��jj��P'7#����)7ES!!%!!#!!!#"3!26533!2654&#"&546;2#"&546;2#"&546;2@������x8���8**0*�*0**�����@
@
o���@@@���*��**x��**0*��
�
�@
����"6%'.>54.#"326776&".54>32��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]Y�2�GP�i<<i�PP�i<1+'�K(F]55]F((F]55]F(����"6B%'.>54.#"326776&".54>32##33535#��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]������Y�2�GP�i<<i�PP�i<1+'�K(F]55]F((F]55]F(����������"6:%'.>54.#"326776&".54>32!!��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]����Y�2�GP�i<<i�PP�i<1+'�K(F]55]F((F]55]F(@����
!7')'7''77'7�`��`����`�������`����`�����`�������`����`��`�`��`�����
!'7''77'7)7'@���`����`����`��`����`����`����`��`����`��
���`�����
''7'!7��`������`����`��`���`��������
''7'!7���`����`����`��`���������!-";535353732>54."&54632�BuW2�{%@���S6BuW22Wu(88((88�2WuB�{�%@��S
2WuBBuW2��8((88((8����$)9'./.35353535676&'"'&4?62�e5e9��F��
���� �6���.8-���-
�� -
�e5e�6����@��GF9��.7-���-
- �� ����##54&+"#"3!2654&%46;2!PqO�Oq
�\&�&��OqqO��
��&&�����#2#54&+"32#!"&5463!5463Oq�&�&���qO�qO��&&��
��Oq����'%>54.#""/3267?6&�3-Ni<*�f6�-Ni<%D�3e��D%<iN-�6f�*<iN-�3e3�37OS54&+"#3;26=!5534&+"!!;26=35#534&+"#3;26=!5!53�����@������@�����������@����@�����������������@����37OS326=4&+5##";33#26=4&+##";35'3#26=4&+5##";3'3#��������������������������@�@�������@������@������6J.>7'#".5#&'>323467>7.'".54>32� /#e2(G5�
>HM#e%
.#e2(G5�
>IL$d%
�Z+K9
9K++K9 9K^#LI>�
5G)2#. �
$#LH?�5G(1#. �$m
9K++K9 9K++K9
���0<��%7'./#'737>77'>?5'.'"&546325'.'7'.'7'.'7'./#'''77737>77'>77'>77'>?"&54632l)-: @ :-)FF)-: @ :-)FF�%%%%C9C'.8
;%@%;
8.'C9CC9C'.8
;%@%;
8.'C9C��:QQ::QQ�:-)FF)-: @ :-)FF)-: @ �%%%%�@%;
8.'C9CC9C'.8
;%@%;
8.'C9CC9C'.8
;%kQ::QQ::Q����%&"'!'#72?64'��'�.���DΠθ.(q�.�.�DΠθ'��q( ����/3'#3#3#5#3#3#%37' &"2?64''7�@��@@��@@�@���@@@�@�@2��(<|(<��@��@���@@�@@@���@�@�N|<(��<(R�@����)#54&#!"#"3!2654&%!!##5#53533��&�&�5KK55KK������������&&�K5�5KK55K���@��������=5#.'3'#4&1>54&#"0#'3#3#73326737#>7�%�F>:�pPPp�:>F�%��|F>:p,�JJ�,p:>F|�@7a(�OppO���(a7@"A���:EE:�A"����"32>54&'7.#�]�zFFz�]]�zF@SgyB��Fz�]]�zFFz�]6e-�7\A$�@���N7!!3"&5463:37.54632:3:3.54632#*##"&5467'*#*##�����(88(h8((8h� 8((88(� 8((8hh8(@���8((8�(88(�*(88((8��(88(��(8@7!!3#3#3#3#�������������������@����@���@#'7;#";2654#";2654#";2654
�
�
��@�
�
��@�
�
��@
��
@
���
�@
�
�@@
��
@
����$0<5!#3267#"!4&+5>7326=#"&=3%#"&'>=3@���pP"g=@5KK5@=g"Pp���0Dt
�D0
t���Pp2D
�K55K�
D2pP��D0@@9t0D9@@����*:TX\`d>7>76&'.#".'.#"#3!3#'>32#>%&67>312&"'.'.'!!5!5!!!7!5!
-%K 1=2-:,% +$�@@�b1 !S&34�q
)3O���@��@��@�
<"<"2}11y,&s,��@��N
!.+k
O3)��� ����
����@�)8.#!"#"3!2654&+>7>54&%!!<5467
�$/,"T/`
@
`/T",/���� 1r<O�8+9��
H9+8�O<r(Y//Y(���}@#>'.#!"#"3!2654&+!'y �@ 9`
@
`�d��d
�r��
~������7;#54.#"32>=32654&%.'>7>32#"5��<i�PP�i<<i�PP�i<�%%��" ",k99k," ",k99k����`!:,,:!��!:,,:!`%@%> ���
����5";26'>54.!####;;26'3265#�(F4T@
$ $ @T4F]5((5
S$
$S
�#=R.Oy��&&yO.R=#��@��@�`
�&&
����=.#">30030&73267>7>7>74&'�)hu�BQ�|c"
##���s_��D/
�*K"X�/)5+<V=:2"5M1/m>7zAk��NHvW$S.$T`k;�j()$`4(TRO#��� #0> 1%5�����Ccp,���@@����
�bH2taA��@@���S2!.54>>5#53.'#53.'.'#5.#"#53#3#333>j��P&Fa;�;aF&P���-ZUj@#R-@
@-R#@jUZ- �%6%� �P��jH�s^!!^s�Hj��P��CJO)@"@@ #2FUUF2# @@"@)OJC����5G"32>54.>54.'>7>32#"&7+"&=4673j��PP��jj��PP���� 2F)8.7�MM�7.8)F2 .j99j�
@
�P��jj��PP��jj��P��1/UF5?s/6::6/s?5FU/1
�@
@�
����6%7>726376&/."?065>??6&'��g
�"@'ag�!
@'�
2 ,�'A"�gb'@
!�
h�� 3 O����2&67>10>'6.'.1.'A3
(+(
%C^,
'�]B�%a[C 9N((& 8jQ@k�9?hRD!RPE/���Lu�(q
u�R<}yq20L.+QPQ+<h`[.D����
%532654&#!";3!26%53!���
��
��7Ij�jI���
��[���Y��@����7!#"&5!32>5#"&'.'33267>=3��@pPPp@�@Fz�]]�zF�5�KK�549$o#(%&`55`&%(#o$94���PppP@��]�zFFz�]��59955�JE��5`&%((%&`59��J�5@����
-13!265#3#3#3#3#54&+"#"!54&!#53�&@&�@@�@@�@@�@@����@������&&�����@��@��@�@PPPP?@����
!!%5!!7!5!#53��@����@@����@�����@@�@@#;!54&#!"!"3!2654&%81!81!#+"&=!+"&=#5!��&�&�&&�&&���@�
@
��
@
���@&&@&��&&@&@@�`
``
`@���'''.3?5!����۬&Z&�ۀI��@��@�I�۬&Z&��ۀ����@�@'+#54&#!"332654&'!32654&'3%53��&��&@Q K55K b K55K Q���`��&&�@!5KK5!!5KK5!������!###!!%3�@��
� ��@ @�� �
@����6����4632#"&%'#%37�8((88((8�J�n@�nJ�<��<�`(88((88��<��<���W��a����)5?JU#.'5##335>73'#.'5"&54632#>3.'5>73e
=\uC�Cu\=
ee
=\uC�Cu\=
e�d>)(G9(��%%%%[)>d (9G�d>)(G9( Y)>d (9G(Cu\=
ee
=\uC�Cu\=
ee
=\uC�)>d (9G�%%%%Yd>)(G9(��)>d (9G(�d>)(G9( @���� %0%6&>7%��@�@���� 0c�zz�c0 �H�H���G9��9G�^���;;���^����� ! !�������������@����-1#"&'.5467>7532>54.%3#�2.00.-u@@u-.00.2EvU0Fz�]]�zF0Uv����-�"-u@@u-.00.-u@@u-"�Sp�L]�zFFz�]L�pS��Y�''7''7'2?>[�f�[�sWWs3�D$F-�B�9yuk�[�f�[�sW�Ws��+kuy9�B�-F@����"06!4&#"!"3!2654&%2#"&546!33!26=3'7%���K55K��
@
�S%%%%���
�
��@�:�:@5KK5
��
@
@%%%%��`
`�e�:r�:@���)%!!!!!!'#5#53#575#53#535#535#5�����������@@@�����������������@��2@�<2@��@@@@@���!!%!!!!%!!!!%!!����������������������������������#/!!!!!!4632#"&4632#"&4632#"&������������K55KK55KK55KK55KK55KK55K������@5KK55KK��5KK55KK��5KK55KK���UY]ae%#54&#!5326=4&+";!"#";26=4&+5!#";26=4&+5!#";26=45#5353#53�B.�����.B����܀�����������.B����B.���������������@���@�@@�!!!!!!@����������@�@�@`!!!!!!75'�������������@�@�@��@��@`!!!!!!7�����������@�@����@`!!!!!!7�����������@�@�����$4&'.#".#".#"3!26L9&AU19a!7
8N (G55G(�Hf.>^0U?$1*N7
4G((G5f@(/.#".#".#";732654&''3533{&AU19a!7
8N (G55G([��oHfL9������X0U?$1*N7
4G((G5��fH>^�(���@�&->54&#".#".#";!532654#7|^B
d@Be$5]F((F]5��B^L������> B^:KN<(F]55]F(��^B;X����"(>54&#".#".#"3!2654&'77|^B
d@Be$5]F((F]5`B^L��@`�@� B^:KN<(F]55]F(^B;X�@`�@�#'#!5!!## ���ࠀ��@��
���@@�@����
�
7!!%!5!!5!% ##����` �@@�@@���
���� 33!!#53����`�
�@���������@��!!#53 ##�
�@���`����@����@����%,8DKSYdou~����"32>54.>73##>73!#53'5#'>7>7#>7#>73.'373#..'.'.'53'537.'3#7#.'%>7#>3.'.>73�c��KK��cc��KK����
p���
p� ���
&��&
�u� ���
�1�� �
&P&
��� Qp
�@`& :�{: &`)`&
:y:
&`�K��cc��KK��cc��K��A!!@@A!!@@!�@�+)R+�)��!@��@!!A��@��+)R+�)��!@�!A@!�,M)#F)M,#�
,M)#3)M,#���c"32>54."&'>=4&#".5.+".5467326?>=>323:3j��PP��jj��PP��j/Y)�
*TB)�
n,F3u�A!5c,F&IQY�P��jj��PP��jj��P�@`
%,%
� 7�O_j94`,�M
G&&GE_wF
1#S����/\"&'.46?>32"'&4?64'.#"#"&'.46?62326?64'&4762#�
#$$#�#Y11Y##$$#X,X))33�))
�1Y##$$#X,X))33�))+#$$#�#Y1D$Z^Z$�"%%"$Z^Z$W+X)t)�)t)+��%"$Z^Z$W+X)t)�)t)+$Z^Z$�"%���
3#267#"&'.#">32��@>ff>>ff�#d9Hw!!wH9d#��}�b�~]}H'27>4&'."01267871'01"&'.46787162"'&47�A��(((s(�!""!"UXT"�g/////v{v/A��"TXT!"!!"�(r)((�z
'
EyA��(r)((�"TXU"!""!�g/v{v/////A��"!!"!TXT"�(()r(�z
&
E�=I"32>7.#"&'.'>7>732>54&'1#"&54632T��j$$j��TT��j$$j���.KK.8�CC�8.KK.(F]55]F(�8((88((8/TvGGvT//TvGGvT/�M--M$&&$M--M,5]F((F]5,6(88((88��NZ#5##3353#"&'.'>7>732>5<1.'.#"32>7.'%2#"&546�������K.8�CC�8.KK.(F]55]F()F3
T��j$$j��TT��j$
1�@(88((88@������!-M$&&$M--M,5]F((F]5.@O,/TvGGvT//TvG2
~8((88((8�@'P!!!5.#"32>7.'!2#"&546#"&'.'>7>732>54&'������
T��j$$j��TT��j$N0�:(88((88�8�CC�8.KK.(F]55]F(.KK.@�@|/TvGGvT//TvG8a'8((88((8��$&&$M--M,5]F((F]5,M--M�&7C`&".#"3267642.546>7>7.'%4&'32>7#"&'32>7.'�(�'R+T��j$X6� `��
1
z%8��K.=(B���'5]F(>E.KK.8�C9M-`2T��j$"c=��/TvG>i(�(`(��%z
1
(8�-M,)K=F)F'��(F]�EM--M$&M/TvGCq*���@� �@@��@�������
'!7!@@���@@@��@������@
���
)7FTcr��%2#"&=46"&=46322+"&5463+"&546;2"/&4762'&4762"%"'&4?6262"'&4?"32>54."&54632%%%%%%%%�%%@%%�@%@%%@%}-5.5��-5.5g5.5-��5.5-=5]F((F]55]F((F]5B^^BB^^�%@%%@%�%@%%@%�%%%%@%%%%�.5-5�.5-55-5.�<5-5.�(F]55]F((F]55]F(�`^BB^^BB^���"32>54.4>3".j��PP��jj��PP���<i�PP�i<�P��jj��PP��jj��P�P�i<�<i�
���(6DR`n}�"32>54.22#"&=46"&=46322+"&5463+"&546;2"/&4762'&4762"%"'&4?6262"'&4?5]F((F]55]F((F]5B^^B%%%%%%%%�%%@%%�@%@%%@%}-5.5��-5.5g5.5-��5.5-�(F]55]F((F]55]F(�`@^BB^�%@%%@%�%@%%@%�%%%%@%%%%�.5-5�.5-55-5.�<5-5.���
%
%%7'?������<<<<��*��pp��*33A��3�����`���v��$��$�����
%
%%'������<<<<�p��*�33A��3�����`���;�$��v���
%
%%������<<<<33A��3�����`����".#">54.�(J?22?J(8bI*f��NJ��i*Ib�2A""A2*Ib8q���po���m8bI*���
2.54>32'7>3�8bI*i��JN��f*Ib8-R"N�`�><�*Ib8m���op���q8bI*&|�����]@����#"&54632#"333334&@8((88((8�%@P
P@%`(88((88�%��������@%����&#"&546327'.#!"733333'7@8((88((8�1���1o&�{@
@{�&o`(88((88�8#��$�Z���@��@�Z����)D#"&54632#"&54632#"333334&7'.#!"733333'78((88((8@8((88((8���%@P
P@%�1���1o&�{@
@{�&o`(88((88((88((88�%��������@%�#��$�Z���@��@�Z����';GS2>54.#"2#".54>2>7#".''4632#"&%4632#"&j��PP��jj��PP��jV�qAAq�VV�qAAq�V+UQL#7Vo??oV7#LQU�%%%%�%%%%@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�
CtV11VtC
�(88((88((88((88���+?"32>54.2#"&546!2#"&546".'32>7j��PP��jj��PP��V%%%%��%%%%�?oV7#LQU++UQL#7Vo�P��jj��PP��jj��P�8((88((88((88((8��1VtC
CtV1���'3?Q2>54.#"2#".54>4632#"&%4632#"&#".'7326j��PP��jj��PP��jV�qAAq�VV�qAAq��%%%%�%%%%@R:FQ,,QF:Rf==f@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�%%%%%%%%��2#9))9#21<<���+>"32>54.2#"&546!2#"&546".'73267#j��PP��jj��PP��V%%%%��%%%%�,QF:Rf==fR:FQ,�P��jj��PP��jj��P�%%%%%%%%��)9#21<<12#9)���'3?L2>54.#"2#".54>4632#"&%4632#"&##"&=!5j��PP��jj��PP��jV�qAAq�VV�qAAq��%%%%�%%%%�@8((8�@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�%%%%%%%%�@`(88(`@���,8"32>54.2#"&546##"&=!5!'"&54632j��PP��jj��PP����%%%%�@8((8�@%%%%�P��jj��PP��jj��P�%%%%��`(88(`@�%%%%���'3?R2>54.#"2#".54>4632#"&%4632#"&'>32.#"j��PP��jj��PP��jV�qAAq�VV�qAAq��%%%%�%%%%��R:FQ,,QF:Rf==f@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�%%%%%%%%�N2#9))9#21<<1���+="32>54.2#"&546!2#"&546.#"'>32j��PP��jj��PP��V%%%%��%%%%�f==fR:FQ,,QF:�P��jj��PP��jj��P�%%%%%%%%��1<<12#9))9#���';GY2>54.#"2#".54>>7#".'64632#"&%".54632.j��PP��jj��PP��jV�qAAq�VV�qAAq�u4]J6:Xq@,SI<GU^�%%%%��2
8((8
2@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA��
"-8
?mP.*<$ q(88((88!!���1F"32>54.2#"&5462.#"&6546".'67>7#j��PP��jj��PP��V%%%%��-98##89�,SI<GU^14]J6:Xq@�P��jj��PP��jj��P�8((88((88''��*<$
"-8
?mP.���'5=AIk�2>54.#"2#".54>;2>=.'.53#535381267>323267>54&#"3!81267>323267>54&#"j��PP��jj��PP��jV�qAAq�VV�qAAq��(F]5�5]F(�@$�����$���**D00D�**D00D@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�`@5]F((F]5@�F&����&F, $$ 0DD0 $$ 0DD0 ���4V]ah"32>54.2#"&'.#"#81"&'.546!2#"&'.#"#81"&'.54633.3753j��PP��jj��PP��V0D**D��0D**D0��)G3�@�3G�P��jj��PP��jj��P�D0 0DD0 0D���/AP���-PA/���'IY2>54.#"2#".54>2+"&5#+"&=46;235463267#"&'7j��PP��jj��PP��jV�qAAq�VV�qAAq�v
&�&�&�&
�
�
`Ft"6:FQ,$E"4@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�
`&&&&`
�D8!#9)7
���$F"32>54."&'73267#+"&5#+"&=46;23546;2j��PP��jj��PP��j$E"4Ft"6:FQ,@&�&�&�&
�
�
�
�P��jj��PP��jj��P��7
D8!#9)�&&&&`
���'9Up2>54.#"2#".54>.#"'>32#"&5<1>7>36!>20#"&5467.'.j��PP��jj��PP��jV�qAAq�VV�qAAq�f==fR:FQ,,QF:
%%4+
�
+4%%
@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�S1<<12#9))9#�
%%$0
0$%%
���.I["32>54.>7>36#"&5<%>20#"&5467.'..#"'>32j��PP��jj��PP��*4+
%%��
+4%%
�f==fR:FQ,,QF:�P��jj��PP��jj��P��$0
%%e
0$%%
�1<<12#9))9#��7Jv�"&5<1>7>36#%.7>20#"&5467.'267#".'734&'.#".'32>54&'>".54>32�%4+
%��
+4%%
�=fR:FQ,,QF:Rf=
[:
INT,,TNI :[
# #P��jj��P#
#�V�qAAq�VV�qAAq�%$0
%�
0$%%
�_<12#9))9#21<�"A:X''X:A"7d(8�Ej��PP��jE�8(d��Aq�VV�qAAq�VV�qA��+Fat4&'.#".'32>54&'>>7>36#"&5<%>20#"&5467.'.".'73267#
[:
INT,,TNI :[
# #P��jj��P#
#�@4+
%%��
+4%%
,QF:Rf==fR:FQ,�"A:X''X:A"7d(8�Ej��PP��jE�8(d��$0
%%e
0$%%
��)9#21<<12#9)���'3?K2>54.#"2#".54>4632#"&4632#"&%4632#"&j��PP��jj��PP��jV�qAAq�VV�qAAq�*K55KK55K%%%%��%%%%@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA��5KK55KK�(88((88((88((88���+7"32>54."&54632"&54632"&54632j��PP��jj��PP����%%%%�5KK55KK�%%%%�P��jj��PP��jj��P�@8((88((8��K55KK55K�8((88((8 ���'3?LXdqu2>54.#"2#".54>#"&54632'2#"&5467"32654&##"&54632'2#"&5467"32654&#!!j��PP��jj��PP��jV�qAAq�VV�qAAq�*
(88((88(B^^BB^^B`
(88((88(B^^BB^^B���@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA��
S8((88((8@^BB^^BB^�
S8((88((8@^BB^^BB^�@@���+7;G#"&54632#"&54632"32>54.4632#"&!5!7"&54632�
@
�j��PP��jj��PP����8((88((8��
(88((88
�P��jj��PP��jj��P�`(88((88��@�8((88((8���'3?Z2>54.#"2#".54>4632#"&%4632#"&3&'.#&6767>'j��PP��jj��PP��jV�qAAq�VV�qAAq��%%%%�%%%%VA96>xH%"#A96>xH%"#@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�%%%%%%%%��6a8>%"?#6a8>%"?#���+E"32>54.2#"&546!2#"&546&'.#&6767>'3j��PP��jj��PP��V%%%%��%%%%�>xH%"#A96>xH%"#A9�P��jj��PP��jj��P�%%%%%%%%��8>%"?#6a8>%"?#6a���'3?C2>54.#"2#".54>32654&#"32654&#"!!j��PP��jj��PP��jV�qAAq�VV�qAAq��%%%%�%%%%��@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�%%%%%%%%�e@���#/"32>54.!5!2#"&546!2#"&546j��PP��jj��PP���@%%%%��%%%%�P��jj��PP��jj��P�@�%%%%%%%%���'3?Qb2>54.#"2#".54>4632#"&%4632#"&&"3>5&'!62#.56j��PP��jj��PP��jV�qAAq�VV�qAAq��%%%%�%%%%$P
b\B.L"��P
b\B.L@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�%%%%%%%%�P"@&
"P"@&
���+S"32>54.2#"&546!2#"&546"&'.5#.56762467627&j��PP��jj��PP��V%%%%��%%%%�
b\B.L"PP"K/B\b�P��jj��PP��jj��P�%%%%%%%%�Y$$"@&
"$$"
&@"���'+7C2>54.#"2#".54>'4632#"&%4632#"&j��PP��jj��PP��jV�qAAq�VV�qAAq�@�K5%%%%�%%%%@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�L�L�%%%%%%%%���+0"32>54.2#"&5464632#"&'%j��PP��jj��PP��V%%%%�[%%%%K��K�P��jj��PP��jj��P�%%%%@%%%%�5L�L����'3I^2>54.#"2#".54>#"&54632"&'&""'&4762#!"&'&""'&4762j��PP��jj��PP��jV�qAAq�VV�qAAq��K55KK55K�6
"j" @6
"j" @P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA��B^^BB^^
!!
!!
���(4I"32>54."'&4762#"&'&""&54632#"&'&""'&4762j��PP��jj��PP����
"j" 6�5KK55KK�6
"j" �P��jj��PP��jj��P��
!!
��^BB^^BB^�
!!
���/=GKUt�.#&3265<1.'"32>54.3!267#"&'7546;#"&533532#>=4&#!".54>32"032654&'>7>'.n+
%%4�j��PP��jj��PP����
�
8�OO�8 pp ��@p H/!�
!/08Aq�VV�qA8�+4%%
�
%%$0P��jj��PP��jj��P��0880H` � ��� `
`!//!`
8�OV�qAAq�VO��
0$%%
���
+Faq;5#"73#%#326=4&"32>54.>7>36#"&5<%>20#"&5467.'.#!"&=463!2 pp ���0pp �j��PP��jj��PP��*4+
%%��
+4%%
B/!�
!//!�!/0` � ��� ` �P��jj��PP��jj��P��$0
%%e
0$%%
�5!//!`!//! ���'5C^lz��2>54.#"2#".54>#"&546;2!#"&546;2"&'.#""'&47>32"&=4632"&=4632%"&=4632"&=4632j��PP��jj��PP��jV�qAAq�VV�qAAq�v�
�
�3�
�
�%!!%
MM z
�3
@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA��
�(
@
@
�
@
@
�
@
@
�
@
@
���!/=Xft�"32>54.#"&=46325#"&=46327#"&546;2#"&'.#""'&47>327#"&=46325#"&=46327#"&546;2j��PP��jj��PP����
�
�
%!!%
MM �
�
�
�P��jj��PP��jj��P�
@
�
@
`
�1
e
@
�
@
`
@����>J�54&#".#".#"54&#"'.#"21#"3!26=4&+7>5#"&546325!.546322127>54632326546323265463232654632�8(
+!
!8((8�
(8�-
�
,I@
T����
�
`�(8
�(88(�u^8($
�
�
�
��
��
w�
��
�>J�%32654&'>54&'>54&'32654&#!7>54&#""154&+";26=3%"&546323'>3213!2#!"32#"32+"32+��(8
�(88(�u^8($
�
�
�
��
��
w�
��
�8(
+!
!8((8�
(8�-
��
,I@
T�"
�
@����>J�#"&'#"&'#"&'#"&5#"&54672417#"&=463!2+4&#"326'!32672617623265463232654632326=46323265�8(
+!
!8((8�
(8�-
�
,I@
T����
�
�(8
�(88(�^8($
�
�
�
�
����
w�@
@
�>J�%#"&5467.5467.5467#"&5463!'.5463221546;2+"&=#%2654&#"#7.#"1#!"3!2#"32#";2#"3`�(8
�(88(�^8($
�
�
�
�
����
w�@
@
8(
+!
!8((8�
(8�-
��
,I@
T�"
�
����!/ !5"3!26'1.#1#"&54632'"&=4632����
�K%3f3%�K
@%%%%@%%%%c��W]��,@@,g��%%%%e%�%%�%���(=AE"32>7>54.'.#512#".54>3#3#*PKD--DKP**PKD--DKP*j��PP��jj��PP��*����`-DKP**PKD--DKP**PKD-`P��jj��PP��jj��P�@�������8M3#2#575!57"32>7>54.'.#512#".54>���%������*PKD--DKP**PKD--DKP*j��PP��jj��PP���@%��@�@��-DKP**PKD--DKP**PKD-`P��jj��PP��jj��P���#!4&+"!"3!;265!26=4&�
�
��
`
�
`
@`
��
�
��
`
�
@@3!26=4&#!"
�
�@
�
�
���-A46;2+"&5!535#533"32>54.".54>32�
��@@�@�j��PP��jj��PP��jV�qAAq�VV�qAAq��
�P@�@��P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA���'3"32>54.".54>32'77'7j��PP��jj��PP��jV�qAAq�VV�qAAq�J��`��`��`���P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA���`��`��`�����(4A.#"32>7>54.'>32467#".5j$T\c33c\T$$8&&8$$T\c33c\T$$8&&8$&!��/q>O�i<�&!/q>O�i<*$8&&8$$T\c33c\T$$8&&8$$T\c33c\T$��>q/!&<i�O>q/��!&<i�O����S%81 81>76&/.81 81.'&81 817>781 816?>'.���7� ��� �7��� 77 ��77 ���7� ��� �7���
@ ' `� ���@�
���*V
%7 ''��s�������!Y�R�Y*����������X�Y�X@����
048>334&+"33#%5#";5#54&+326=4#535#53 7��@&�&@��@�&&���&��&@�����`�R�`���&&�����@&��&@@``&�@&`&&ƀ@���@
F�.@���!5!55!3!%!#���@�������@@��@�����������@��@����5!5!5!%!#!!5��@�������@�@��������@���������'*"32>54.".54>32
j��PP��jj��PP��jV�qAAq�VV�qAAq������P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA������'+/"32>54.".54>323#3#j��PP��jj��PP��jV�qAAq�VV�qAAq��ꀀ���P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA`��������'+"32>54.".54>32!!j��PP��jj��PP��jV�qAAq�VV�qAAq�������P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA`�����'*."32>54.".54>32%3#j��PP��jj��PP��jV�qAAq�VV�qAAq�������P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA����������'*.2#".54>2>54.#"%#3j��PP��jj��PP��jV�qAAq�VV�qAAq�������P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA����������'*-2>54.#"2#".54>'7'7j��PP��jj��PP��jV�qAAq�VV�qAAq�����@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�����������'*-"32>54.".54>32j��PP��jj��PP��jV�qAAq�VV�qAAq��������P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA@��@���@@@ ����@�����@�@!!!!�@���@��@���@�@!!��@��`�
@@���� ��@�@@��`�``
%��@``@�����@���@�@73��@@����@��@��@�@@��@���@�@#������@@@�`��@�����@��`@�@%3�@��@��@�@@��@@@#���@@�`�����`@@7!! !�����@~#C\w%"&'&47>54.'&4762#'"&'&47>4&'&4762#1'"&'&47>4&'&4762"&/#"&546;7>z !3""3!((=))=( �
1111'/
/ � (,--,��s
s� &(!LSZ..ZSL!(([el88le[(Z'2{�{2'GMT++TMG[(MPM(,qtq,��
@
�
��
p~8S%"&'&47>4&'&4762#1'"&'&47>4&'&4762"&/#"&546;7>�
1111'/
/ � (,--,��s
s� �'2{�{2'GMT++TMG[(MPM(,qtq,��
@
�
��
G~3%"&'&47>4&'&4762"&/#"&546;7>% (,--,��s
s� �(MPM(,qtq,��
@
�
��
�~%"&/#"&546;7>��s
s� �
@
�
��
�~*#'#57'5373"&/#"&546;7>�UkkUkkUkkUk�K�s
s� UUkkUkkUkkUk�@�
@
�
��
~&##5#53533"&/#"&546;7>���������s
s� ��������
@
�
��
~!!"&/#"&546;7>�`�s
s� ����
@
�
��
���! !3!5 5!#�����������������������2.#"34>32!#".'7!732>5z#U`j8j��P`Aq�V.WOE�`�&Aq�V.WOE����#U`j8j��P&>+P��jV�qA$3
�`���V�qA$3
����&>+P��j��';P%"&/#"&'.5467>327>32'3267>54&'.#"%"326?'.#0X"ff"X00X""$$""X00X"ff"X00X""$$""X�5555g��555gg5�$"gg"$$""X00X""$$"gg"$$""X00X""$�55f�55ff���`%#'737'#"'.+3#326?;7'e��e��
��
������
��
��������
��
����
��
������7 7 ! ��� ����
���� !!!� � �� ����
��� ����� ������ !!�
��������� !���� ����
�� ����!!!����
����� ' � ��@ ���
���!! ���� �
�@m@!%32654&#!"1326=326764m���%%��!%% �%%
��%%��
6�mm &"2?3265326764'm��6��6�%%� -@��6��%%e�
6�S�@"732654&'.#1!";27�%%
��%%��
6S�%%�!%%�� @S�-%64'&"!"3!2m@��6��%%e�
6S@6@6�%%� �@�@"#"3!267>514&#".#"��%%�!%%�� ��%%
�%%�
6�m� "'&476246327>32m��6��6�%%� S��@6�e%%���
6�@�-" 54&#"31!2654&+>54&'&"��%%
�%%�
6-���%%��!%% SS�-%&4762!2#!"���@6�e%%���
6S@6@6�%%� ���'-32>54.#"#".54>327 7P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�Z���Z��j��PP��jj��PP��jV�qAAq�VV�qAAq��Z��Z����'-"32>54.".54>32' j��PP��jj��PP��jV�qAAq�VV�qAAq��Z��Z��P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA�ZZ����'-4.#"32>%4>32#".7 'P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA�ZZ��j��PP��jj��PP��jV�qAAq�VV�qAAq��Z��Z����'-2>54.#"2#".54>' 7'j��PP��jj��PP��jV�qAAq�VV�qAAq��Z��Z�@P��jj��PP��jj��P�Aq�VV�qAAq�VV�qA�Z���Z����3#!3#!!'7%!5!5�@@�@@@@��@����@������@�������@�
"&*.33'3#73#73#3#73#73#'3#%3##5%!!�@����
``�``�@@�@@```�``�@@@@���@������@@@@@`�`@@@@�`@`��@��@�
"&*.##7#5%!!3#73#73#3#73#73#'3#%3#@��������@��``�``�@@�@@```�``�@@@@��������@���@@@@`�`@@@@�`@`
����%@D%##7!"&'&47#"&5463!232#.#"326?37>'%7#@������ ��
��
]� � 7�7 ��LL����� N
��
n�
�� nn ���
����%@C%##7!"&'&47#"&5463!232#.#"326?37>'%7@������ ��
��
]� � 7�7 ��LL����@ N
��
���
�� nn ���
����26%##7"&5#"&546;2#";#";2654&3#@�����
@
3�
��
�
�������@
`
��
�
�
�
�
@�
����26%##7"&5#"&546;2#";#";2654&3#@�����
@
3�
��
�
�������
`
��
�
�
�
@�
���
%##7'!!!!!!3#@����
@����@@��������@�@�@� ���
%##7!!!!!!3#@����
@����@@���������@�@�@��@�@/:EIT_%"&=##"&546;5#"&54632354632+3232654&#!"326=735#732654&#"%";54&�B^�^BB^^B``B^^BB^�^BB^^B``B^^�8((88(�@(88((8@���`(88((8��(88(`8@^B``B^^BB^�^BB^^B``B^^BB^�^BB^`(88((88((88(`@�@8((88(`8((8`(8�@^7(%!"&5#"&'&6762+%!46;'32���
�
@
@
���
S��S
@
` @ �� ��
@`
��
�@"&/'.7>32���
�
�
��
�
@��&%!"&'!"&5463!232#!"&5463!2�� ���
@ ��
��
@
�
-
��
@
���!"3!2654&'7��5KK55KK��Z�3Z�K5�5KK55K���Z�2Z���!"3!2654&!!��5KK55KK5��K5�5KK55K�����'3"32>54.".54>324632#"&j��PP��jj��PP��jP�i<<i�PP�i<<i���pPPppPPp�P��jj��PP��jj��P��<i�PP�i<<i�PP�i<�PppPPpp���"32>54."&54632j��PP��jj��PP��j5KK55KK�P��jj��PP��jj��P��K55KK55K���'"32>54.".54>32j��PP��jj��PP��jP�i<<i�PP�i<<i��P��jj��PP��jj��P��<i�PP�i<<i�PP�i<���7'!5##3!3535#!@�@��@�������@��@@��@�����������@@�����#37Gm�#";26=4&326=4&+"73##";26=45%#";26=4&7#"&'.=4&#!";23!2654&#!"&'.=4.+"&'.5467>3!2;2@�&&�&&f�&&�&&�����&&�&&���&&�&&&@@u-.0K5�5KK5@@u-.0K55KK
�
<i�P@
<i�P@
@&�&&�&�&�&&�&����&�&&�&��@&�&&�&�0.-u@@5KK5�5K0.-u@@5KK55K��
@P�i<
@P�i<
���/?OSW[_cgkosw{��+"&=46;2+"&=46;2+"&=46;2+"&=46;275#'#37353#3#3#3#3#3#3#%3#'3#'3#3#73#%3#'3#�``@``��``@``�p0pp0pp0pp0�@@@@@@@@@@@��@@@@��������@�������������```�````p0pp0pp0pp0��@����@���@��@@@@@�@@@@@@@.��9Ua}.'>'./.'.>767>&81'.'&67>7>"&54632&'81.'.7>76�AFDP�
��
�PDFADFA��AFD�@44�
s44'8|
0'��T'0��|8''RK=7'��'7=KRQ$$6#$6
��$$6$#6���B"326554.>7>32#".'.'.'>7j��P�K55K�P����2!KQW,,WQK!22!KQW,,WQK!2�,:!`����%%@�`!:,�
e����%"&#"3.54670
!37#73267 DhFq�m5IH
eJ
KxY=l�,�4-U&.P=�;a}AM;&7�o����#�� 7k ��f�a%81#5467>7>323267>54&'.'.#"#3+!5#"&58132!5"&5��
':.S$$8~~ &�D1�8%&E!X�=n
(
"
<&#w<H��6(
88&SN&,�,$
88A�\�v%"&'.5461.+"#"&#"+";21#">326&#"&'.'546;>54&+"&=4>3281#">326&#WL
@#,!EgC!<NI
-F-*G,L�
�%5"/GI
-F-*G,+@$=C!"6`�P.1]I,<%$@$�!
51YD(Pv�L<%$� %3'3#7#%'#3!53#����������@������@���������@@@��@���� %'7!55'#3!53#����@@������@@��������@���@@@��@���@!######5!@������������������@�$>54.#!!2>54&32+#32�
(F]5���5]F(D��e*<<)f���,>>�"T/5]F(��(F]5FtFK55K��K55K�@�3#".533267>5!!��2WuBBuW2�I((I������`<iN--Ni<��`88������#3!53#5������@�@��@�@@@�=##"&'.5332654&#!5!.'.5467>32#4&#"32�50,q>>q,05�rNNrrN�,0550,q>>q,05�rNNrrN;n+�@A"5b$!$$!$b54LL44L@$b55b$!$$!$b54LL44L!���3%!7!5>54.#"!!5.54>32�@��1R<!7`�II�`7!<R1��@FvU/P��jj��P/UvF@���H_p>P�g;;g�P>p_H��!Sl�G]�zFFz�]G�lS���%73!5 5!#'.#! !26�,&@�@L���,"6:�ja��WB�_��J�L�'7"����8���#3#73#%3#73#%3#!3!!#!�������������
��@
���@@@@@@@@@@�@��������@�����3#575#53#'# 373�����܈����������2@�<2@�n����������%3#575#53#'# 373�����܈���������22@�<2@�R������P��
@?!3#33#7#"&546;2654&+";2+";2654&'.�::r��r�H:�:d���@
�
�(8
%@
�
�(8
%�����������
8(!
8(!
P��
@?!3#33#7%#"&546;2654&+";2+";2654&'.�::r��r�H:�:����@
�
�(8
%@
�
�(8
%������������
8(!
8(!
��0%7!3#33#B::r��r�H:�����������"!#!!3!%3#'3#%3#73#%@����@��@���������������@���@����@�����@@@@@@@�����7!!!#!5!''7'77@����ѷ�����"��>��>��>��@���@�����>��>��>��
@#'!5!!5!5#!5!!%!!=!!!!5!����@���������@��@��@������������������
�#'!5!!5!5#!5!!%!!5!!!!5!����@����������������@��������������������#'/37?CH3#73#%#535#53#73#%3#33#73#%#535#53#73#%3#3!!1!������@��@�@�������@��@�����@��@�@�������@������@�@@@@�@�@�@@@��@@��@@@@�@�@�@@@��@@@���������!####".54>�����5]F((F]�������(F]55]F(���"333335 5]F((F]5�������(F]55]F(�������@���"333335 5]F((F]5������(F]55]F(���������������"&'.5467>323267>54&'.'.'.5467>7.'.5467>321#"&'.5467>54&'.#"#>54&'.'.'�%>
4%<P-
F(&?
,?X- E)2$#
:+!%$
6($@2
-)F58) &$>1
')K!47*
%%?�23
2!/�!!!!!!!!!!�����������@���@����!!!!!!!!!!�������������@���@����!!!!!!!!!!��������������@���@����!!!!!!!!!!�������@�@�@�@��!!!!!!!!!!����������������@�@�@�@����!!!!!!!!!!%�����������������@�@�@�@�����@@
0>3 "!3>7>7!!S�z���`�`0���~!O,�F@�@<H<��7Zs�� /��
V@��
!!!'!'7�@����@
@�@��`�����@���@��@���`���
��% %' 7'@`@��`�`��@`��`@@`��`����`�
W�)% %' 7''@`@��`�`��@`��F�F�`@@`��`����`�i�@�#!!!!!###53535#5#5333#53@���@��@@@@@@@@@@@��������@��@@@@@@@@@@�@���3"%>54&'%32654&#".#"326732654&`";�Q�;"B^^BB^�Q;"B^^B";�^BB^^�
�^BB^^B
�^BB^�
B^^BB^���#/9!"3!2654&!2 >3<5.5!"&'77#7'7U�VGddG�Gdd�d
���
@��@� �ZZ� @���dG�VGddG�Gd���I�@�ۺ @�ii�@ �������+!"3!2654&2 >3!*#' '*#!U�VGddG�GddG������V�������V�dG�VGddG�Gd���-�9�c�0��������!"3!2654&'7 7U�VGddG�Gdd�N�II��I��dG�VGddG�Gd��N�����
�Z��0����'2<"32>54.!2 >3<5.5!"&'777'7j��PP��jj��PP����
���
@��@� �ZZ� <���P��jj��PP��jj��P���I�@�ۺ @�ii�@ ��������-gu%#".'&632>767&&76&7>'%3>76&'.=4&'.#"267>32326767#"&5463�*elo5J��s2
6x��E.aca/.]1| -
��9 -$i-,YL8
x8#'
5�2:JkNAW3|-#(uBK0 2H-2#
5!z%XJ1 0+�=m*",H7
&$0eK``&4!-$?
2'O-
����,!#".54>327.#"32>54&'
##DkLAtV22VtAKe�!MV_4j��QQ��jo��G �LD03WvCCvW33�2#P��jj��PJ��m)���9!"3!2654&".54>32.#"3267#5!#���(88(@(88�@P�h<<h�PM�2hK82VA%%AV2ra�j5`�S�8(��(88(@(8��<i�PP�i<5/e&&BX22XB&{*�R�c8���="32>54.".54>32.#"3267#5!#j��PP��jj��PP��bP�h<<h�PM�2hK82VA%%AV2ra�j5`�S�P��jj��PP��jj��P��<i�PP�i<5/e&&BX22XB&{*�R�c8�)53#".54>327.#"32>54&'!%#5##3353F�Ra*I7
7I*/@X+mBDvY33YvDFtR-���``````�p$i!7K++K7!!U(-3YvDDvY3/UuF
`````���5A!"3!2654&".54>32.#"3267#53###5#53533���(88(@(88��5]F((F]54V"F3%B]]BLA��#A[7@@@@@@�8(��(88(@(8�(F]55]F($C_CC_SX
7\B%@@@@@���9E"32>54.".54>32.#"3267#53##5#53533j��PP��jj��PP���5]F((F]54V"F3%B]]BLA��#A[7�@@@@@�P��jj��PP��jj��P�(F]55]F($C_CC_SX
7\B%@@@@@@F����%"3>54.##5#53#5#53\�xEIz�We�t>Ex�[@%��@%���Fx�[W�qB�3���U[�xF�(8`��(8`���!'! ��E����(���"@��@@��� ������35#"#3337#546`��.R=#����
��#=R.`���`
���#!"3!#53546;#"3#!2654&���(88(���qO��&�
�
(88�8(��(8��@Oq�&@��@8(@(8����H����2#"&'.'.'.'.'.5467>7>7>7>7>35"3267>7>7>7>7>54&'.'.'.'.'.#1"32>54."&54632#"&54632g?)%,
,%)?gf@)%,
,%)?ghB));,
,;))BhhB));,
,;))Bh6`H))H`66`H))H`6GddGGdd$$$$d
,&(@gf@(&,
,%)@fg@(%,
\
,;))BhhB));,
,;))BhhB));-
�)H`66`H))H`66`H)�NdGGddGGd�$$$$����?�.#"%31812>54.1"&/7'.54>32#.'&"'.'.'&67>7>76&'.'.#&"#"7>7>'.'i$S[b3i��P""H
7{@i��P&7�u9m1�+
!Cr�W+QLE. Cr�W� D
8$$
$/!8N0$(;
+$8%P��iC�:��GP��i3b[S� )�2s<W�sB.ELQ+W�rC<!
" 6 G 2//N-<?
#"���)@V"32>54.'.&'&67>7'.&'&67>7.&'&67>j��QQ��jj��QP���-fq{D
I�}q2
8
4~��<F���<
=���;"D���G
(�Q��jj��QQ��jj��Q�!
&�
)
.%
�%)
"/*
(
���)"32>54./#"&/&67%6j��PP��jj��PP���T�=
,~��P��jj��PP��jj��P���t
_<�'
�@G>7.#".'.'#"&'#"&'32>54&5>7=
!0C$P-+M9!A{n`'
3*1aH
kE6�J
#LQV,�ߘN5�
<%$!9L,"9N066\Lt>R*0#
m��h
7
?����@#".5463207>54.#".'#27>72675�&0T>#)%
CQ9U78Y>
0F,%[1,SF7�nug0HTU ?
�!@\::;66?@&^,;\@!)Hb:8hXFJ16�����aBa{Dz���o!"3!2654&0"'.101#0&'.10&7>1701076&10&'.#&67>3267>106761702���(88(@(88�]0*p="<.e" -
# j
5,*+�8(��(88(@(8�3C:?#_V< 26
^%6:, ;65+G)''
���!2>53.53267.'�Z�rA-CoQ-�Z�rA-CoQ-Y.@N-7|BC|6,O@.�Z��_/ZSL!
g��UCZ��_/ZSL!
g��UC��1[QE!!EQ[1�9:Up}��%.'&>76.7>'&076&'.32>54&'.17616716&.7161676&''.7>'.7>7&676&�?sY8)Nm?@sY7)Nl
~NJ[e1$8'Ky�Ph�zBP,�2�E0c$$�D!
!
�e7.
-
><y.=@�7>/E)*N?+/D**N?+k5#!'>$E0$JIG"?eF&7Uf0;D
68+
((e/B�%
!
F�E ((�556i7::g���*7"32654&234.#234$#�8PP89PP�0\VO""4#�j����-�š����P88PP88P��#5""NV]0���j\ă�ҫ�u����)5!"3!2654&"&546324&'.#52#34.#52���(88(@(88�O$33$$33�.++p=Y�uD~�S��m��g�8(��(88(@(8��2$$33$$2=p+,.}Du�Ym��S}g��X(;?0&'.'."90"1010102>7>7>106=4&1
�;5~kHHk~5;
CtsVHk~6:
�����NNh>N>gO
Og>N>h�� ����
�=e����
Cg�0417#*054&'.1&"#"7>5>=7>7>7>57'./##16?2?57.'.67>7>7>54&''.'.467>%3'4&'.#"3%.#7>7>5.'%.'.'.'&22>72>7263>7>7>76&'%"&'0&4&5'5##54&#"&'.=37>?3&'.#"#33067>76%&'.5467>7>3267>?3X/
E"
5
\
)�
^0
K^�!H"!6
,l
.��
5B.Pk|>k���""0�{T)*szu-OK;
#1(
��5.h25ET
-
T
TG-TT '
b -!.X)"
%A�
VRL$3H22G+�:
"
GM>4M�))
R����
2��خ?
�a(*1JrA"$
BFY/
��
K[U1Q6: �)E^ ��/^a*�RJ"-0
R8@���B9O K/,�YKd@(��.Mf:YX���
C��ƒ7w��
�k,?
"&:m�5a -
%(2mY0#-$ '=I14)
!���� !373#5#!3#3#``���
�������``�``��� ��
`�ࠀ�@���z:#"&'.'.#"'>7>763267>76&#">4M24aXP%,L)1(#0&K%2L<J&0
#"(&7HZ5OJ�%YftADfD"SRL�KSS>"B"+.QX^uON332N,, >\<fd���H!"3!2654&#"&'.'.#"'>7>763267>76&#">���(88(@(88j%8$&F@:
7$#6%6+5
#hM96�8(��(88(@(8��@JT/1I1<;7n6<<-0";@DU98$%%8
YWJH���,!"3!2654&&'.'&67676���(88(@(88���<%XXD#K�$
�8(��(88(@(8��rTQTF/N>m@�N,,&��'4>32#".%4>32#".#=R..R=##=R..R=#@#=R..R=##=R..R=#�.R=##=R..R=##=R..R=##=R..R=##=R��
4"32654&'12#".54>4>32#".
5KK55KK5.R=##=R..R=##=R�#=R..R=##=R..R=#
K55KK55K`#=R..R=##=R..R=#�.R=##=R..R=##=R���'!"3!2654&"&54632!"&54632���(88(@(88�XB^^BB^^~B^^BB^^�8(��(88(@(8�`^BB^^BB^^BB^^BB^���+"32>54."&54632!"&54632j��PP��jj��PP����B^^BB^^~B^^BB^^�Q��jk��QQ��jk��Q�`^BB^^BB^^BB^^BB^���$8Rbq�".54>32#.>7.'*3267%>7>7.'#12>7.'>7.#"64&'1j��QQ��jj��QQ��j�0I^4%>1!��!]�Q&7�L-V(�0Y�T
R�|Q*gGn�L6-.O?+F .6tk:�S4�
;Y=6iT85-@Q��jj��QQ��jj��Q�
;iS7
?KT.��?Wl; YS?+1nH[\&*PJC~
0WD,?O\3P-DX1+j 3;�$29
N�8q�'<R���2#!!267>54&'.'.'.+267>7>7>54&'.+3%3267>73#"&'.'.'.5467>7>7>32!7.#"3.''!!))
+
$)��) ��
$���)!
n
(B'0% $03$���%
����
%(3*v� ���
#
�
); &10&
+30�
$�>���+;?g��>54&'.'.'.+3267.+3267>7>7>54&'!"3!2654&3#+32%!3267>73#"&'.'.'.5467>7>7>32'"3.'.#�
ir
zx
���(88(@(88���Ё
"��"
#���!Z!6'
&)�
�
� xl �
-8(��(88(@(8��3��
)!O' "/
('
#)�
��=�5#!33?!5#'=�X�Ƭ��X:���������r�������!03267>7>7>54&'.'.'.#"1!2654&#!"6?>1>32#"&'5467>32#"&'&32>54.#"5.'&"173267>732676&/76&'.'.#""7>323267>'.'.#1.'&#"&'.'.'.'0&1.13267>706764'�$5A""B5%
$5B""CH�
�
$'d87d&'**&&f7%G44R;*J7
7J*)K� !$ $&%% %%R-[#$M$)O&9B'+[/C A$%P))O%$A,
2
K)+[0/[+)K
6$
$6A""A6$
/�|
%'))'&d77c'&*�03;Q
7J*)J6
E$�#3
8 "#
$%
%%
%%�
% *�,,A#"0
6*J 22
1�@5P\4632#"&7."1'&267>'7>7>4&'"&5<132676&/>32#"&54632�8((88((8�
SVS
�(�E �
'JNJ$�#A!!!!��8OC# @8OO8�B^^BB^^�(88((88�!!!!A#�� { Ez2h'$_/�
SVS
��O84 E2O88O�^BB^^BB^���KWc%2676&/>32#"&'2#!"&=267>'7>7>4&'."1'463!4&#"326%4632#"&0&
B 8OO86NH1GddG�VGdy%JNJ$�#A!!!!
SVS
�/�dG�+^BB^^BB^�8((88((8|E,O88OK60DdG�VGddG�Q0_%$_/�
SVS
!!!!A#��
�Gd��B^^BB^^B(88((88���7!'!'1%''%5��
����@�����
��؈``�������������N��L^��^���+q%.5467>7>5467>7>376"&'1'.'.5467>7>7>5>7667>7>32#"'.&'1_-14$*#*5Fx(%
�� �4
/
B2B (-Ht
-�>(9? c
�E6&
#6 GE;,,*.
)
:\
YI/
%3W:. ���W"65<'&1.1&61167>7.5467.70>32>17>54.#j��P4]�LjB'#'&("]+TB)CJA!!AJC)CS+L�]4P��j�P��jT��^
6 T,2;
"
8^I*E I51 15I E*J]80#4L
_�Tj��P���!##!!�������������U8�">7>76&'.'.'.'.'.#".'.'&67>7>7>7>7>767>7>7>7>76F{iT#/ ;$MNP()RRQ'Cx% J`uD*YWT'8 " $9
,+
)#*
8�E8U5Xo9A�H
'
N=
##E"<yfI
��/ < <
9
++$L'
+$���/!"3!2654&+"&546;2+"&546;2���(88(@(88��&�&&�&�&�&&�&�8(��(88(@(8�&&&&��&&@&&��� DO_s�%4&'.5463:3.#":3261607'.1&603261607>53267.5>54&'"32>54.".54>32�
9O0��$3�K2^REH�T<IH�&�s7"@�
u+F2��j��PP��jj��PP��j]�zFFz�]]�zFFz��8fWE�#L)#1*(.4,>'�k���n}':4��
B(��DT_41Z(MP��jj��PP��jj��P�@Fz�]]�zFFz�]]�zF���7So627'..#"7'&47%4&#"&7627>'>56&/"/732654&'%"'&4?'32676?'
Ee+r8L38Q=..�e��Q84M:y.�e�Fe.2Eu,�e�Fe/z; K29PD2���Ee,-<P91J8s,�e�f+
1BP91K
:z.�e�F�9PD2.�e�Ff.x:N4��8s+�e�Fe./?P94M��Fe,u8J19P=-,�e���9"32>54.#".'&6726323267>323j��PP��jj��PP���<Se77eS<~OO~ �P��jj��PP��jj��P��5Y@$$@Y5
MaaM
���-;#"&'14.+"3!2>=4&%32+"&546!"&5463!2�:(4YyE�Ey[44[yEfEzZ4'�g�&&�&&���&&�&&@&EuU14ZxE��ExZ44ZxE�0�&&&&�&&&&���/?O!"3!2654&#!".54>;2;2'#!"&51463!2+"&5146;2���(88(@(88H'D[3��4[D''D[4~3[C'+�&�&&&�&�&&�&�8(��(88(@(8�x3[C''C[33[C'$AX3$�&&&&&&&&���@�13267#"&'.'.'.5#5>7>7>73!!@
&'9&!:9$0.�?"
���-5
� #5#g�
,A(�����A!"3!2654&#"&'.'.'.=#5>7>7>733#3267���(88(@(88�)(!
`,
d��5�8(��(88(@(8��
%�d
-�~�% pj����(1>7'.'"'9891758*jdS0/>NR""IGA*3**fcS@AsJ���
j��79xun/ ?���'�M�����".'>32<5'"&#.'"῵"#"#=>7465>=.'.'.'.'.'.'./326?8181>7>?3267D��}<=|��DC��|==|���
$)*+)$
z ������" ���� W
)
'&&8'22'8&&'
)
=DFFD=���P~��%'.'&23267>'.%6.3>723267>7>7>7!.7%81&6768140581.81.'##*#.'.'#.'467>7>7>7>323'.'.'>5816&#"81.'<'81&676818>m'-F
V0
*g9CP����+�
<33J
60&�3((>
G'9'#) %
?/@" #%M78Q�
+_�ۍ���?"JNR*#F! (%
*]/&MQV0�>ZT> #.5#
7 �!8
+
.
f
'88'
GhdG
;�����(5467.'&#"&7>327>7>7".'>'67k-u<jY1Aq""
6!
O21<;;;35H %!*3+�
'T#+R�a`B"5.E:;���//U(*N/6Y1O:|!V-+!V,+
���(6esy������%8184018'818!"3!8181!2654&4632#"&5!.'01#".'.7>3267&656&'.+>7>7!"&=4632"#26:3*#7:10":3*%.>7>"#26"#269���&&��&&��
��2b\U%
!JPT, _1!��
��`
7�G*QLH��
�%&��&&�&�
@
�`
@ #3!
,Y|T2_�/�
@
@
��It
0; $!.
�@����
6Yk~"32654&!"32654&31326=3326=265!%.'76&'&'.#"'.!5#%"&5463818123"&546381812#�&&&&��&&&&F8(&&�&&(8��>E5
--
5E>��
�
@&�&&&&�&&&��(8�&&��&&�8(`@Bm#@ @@ @#mB
@
���*?O.#*>32>7.'3267#"&''2.'.#">381%#"&'3267'3�$E! *I
Z.S%=[$
tZr4*_6V,T'Hf
�:X#]A''V0X0U'�,V)Ee!\.d4+X-���&\`TO��4-'�&="���(������%%!%%!�@��@����84��vJ�@@�@Hx��5;��#)/5".#"0:32654%'##'7337'#37'#|'?P.+r�r7MM7�
P � p �+J7
�mJ54K����ࣝ�����@@@@���!<!"3!2654&#'73#'73#'73*1.5467>32>32���(88(@(88��
p p y^p^$Kn
-@@�8(��(88(@(8�@````��������YeJ?--@���z�"&#*'<7.'623''>54&'.'.'.#"812'623.#"465.'3267"&#*#3267>54&'"&5463232654&/.54>32#"&#"#�����u
�5!!M+-_1.E#9i()+4"!M+-_1*
H%9i()+�&�w 7!g58#�]5*CU+(RB+&/$_/2<
q]?=\=��
����,1_-+M!"4+)(i9%F
*1^-+M!"4,()h:$G
�d0i0# &Z/0D+%2W'a3'D1��@0kw���4632#"&%4632#"&6#"&'.7>32674&#".'732654&#"'&.#"32>54&'>2#"&5464632.".54>32.'>32%%%%�%%%%
"a//a"
H''H}K5$;1wAL�
2(88(-
�g@t0;$5K+!Fz�]]�zF!+���&)�M�e::e�MM�e::e�K)&@%%%%%%%%n
5K$"�*$8((80
�!$K5'?&BuW22WuB&?k��&+
�`&CX33XC&&CX33XC&y+&
���!#5373�
@�I��I������H��9����##"&/#"&'.'.'"&'.546323267>32#7'.'.'"&'.546323267>32#7>54&'"&5467>323267>32#>54&'"&546323267>32�
�t��
�_X
;:
Ni�
�
�.���
����
wm ��j
���3!"3!2654'"&54632#4&#"#3>32���(88(@(88����@%%%%�%%��:"<T�8(��(88(@(8���@%%%%�%%��O4^B@�@'33>32#4&#"#!3##"&54632��YCGV0�GH&������8((88((8@[!:)Hb9��1dY7��@���(88((88��K%'0#"&5463232654&/.546327.#"#"&/.#"3269�&TD=N[5NA%,GjLm�OLK&-'*.uiZO�?IO-#><YV&1DY;AbC""A_>ca�fDbUlXY@u+J8
JXGO !"%OFH`<L
%!S@v9O2'LmFCfF#>���U!"3!2654&"&/.#"32610#".54>3232654&/.54632.#"���(88(@(88݆r!9D/OD5<J
TW6S9:V9fr
"KN46'F@7qEO\g(%!'"BBEv�8(��(88(@(8�iKf9MM_JV<Y7=Z:=`B#Sdf9I
C4T?=F!E?LA���!!!!��@�����@���@�@@��
5"#"&=332654632'54&#".=7326=3&qOOq�&&qOOqR.&�qO(F4.R&&��&�OqqO��&&OqmE>>"��Oq6L-||%)&����0E!"3!2654&"#"&=332654632'54&#".=7326=3T�XGeeG�Gee�e&qOOq�&&qOOqR.&�qO(F4.R&&��eG�XGeeG�Ge��&�OqqO��&&OqmE>>"��Oq6L-||%)&����!3!!!77773���@���q��6D6�N�8;@����@�|�}�t��t�f�ID�|^".7>10&5463232654&#"'.54>32#"&'032>54.#\�yF*Kh=
/!
)!;PgR^j*0&JmH9dJ*"=U2"9"
B"\�yFFy�\|Fy�\F�lRI
HL<$/=%O(!/qZPewJ8
$h05aJ-'E]7:dK+ZA
Fx�\\�yF���r"32>54."&'>7>132>54.#"67>76&'.54632#"&7>54&#"10.54>32#j��QQ��jj��QQ��j"B
"9"2U="*Jd9HmJ&0*j^RgP;!)
!/
=hK*Fy�\\�yFFy�\�Q��jj��QQ��jj��Q�D BZ+Kd:7^D'-Ja41h$
8JwePZq/!(O%=.$;MH
ISk�G\�yFFy�\\�yF���1U!"3!2654&#"&'&4?041'&47>;2031#8+"&'0.5>1>;2���(88(@(88�qouKo
K&,$��o
1;1M[K
p�8(��(88(@(8�f ��
�CN@�N�� ZlZ���
O����#F"8;2670>7.1.+%"001;26764'"0764'.#�d�
�0;2& �lczgBNB�
�G
����
UhY7B7
��y�x
}B���
@"17467162311312671!1"#15<51.#1"1!2>51p\�].�5IY"����5IY"�cH\�].�4f�b���Qd�����Qd��c4f�b%�]�*.#!"326?32676&#";#"!T ��%
�"���%%�(�
��f%�!
��%%�
�%b����)?Tj10326170674&1'0&'6170676&1'0&'&10'>10&'&01074&1'0&0617>&1007>170&'a
�g
#� %�# t� j ��2 �$
'�@
� �3$��
NaG
��E+Z- K
(���m �"
8D �!
6$�\����=+#;26?>;2>76&''.#!";>;2>7>56&'�Il�WM6A�<jT;
c$}R����1]ExaC
�OyR*���<aG5Z"�(%��9
EnQ <V%���%1A'>32!"&#"%!>54&'4632#"&.5467326�#Xfr=F�r]"�^.RC0�&O��i�*%��mMMmmMMm�]�uC"
�O#�,H2$B]84H+z+_1i��Rk
K*7`$�MmmMMmm��Y��`D8��CT�����0&'.110&'&*#:1810"0&'&'6.'67021>6'.'.'>7>7<56&'.'8181818181>7>7>746381041>78140504104104581<5<5818#041818181.#89&""&'>76"16&".'.'0"1041006706727:3>7>&1�>KSZ@'<OL
&5qhX\#4$C0%
"k!4":
#!T`k8).��?rL�'=(+o-UH.'|%$8�j"R3
3
$
$
!0+/N`E3#[C)f;:W<"&�Ԥ���M9AKT3>54&'6&'."&#">76732>7##"&'.=!%>32!.'>&67��'CWh8 M�qP1kD5Zv:/�a-d6H�mQ�[77[��~kJJk��%%i?Di��
*aAHoK=o1M'2YzH>\!4Z�./-OmA-99-/tIffI]Z;8W��
RIv'
����3>7!67&'.5&>7!0.#1Gy�mAwgU
�}��>%r��@7\B%"B^:$
k"VUP�rZ!�Y�}L;V9;}Ekcf*,�& K_m7Gx`KJ:CRC.H[0<���#'+/37;?CGK����������37;?CGKPTX\aejnrv{����������������"32>54.'/////:#62>>>><&4.7'.'7'.535#4677'>77'>77'>77'>77'>77'>77'2633523777.'7'.'.'..*37"???0?7'''''"#5#"'.'7'.'7'.'7%7777#3''7''7''7'7'77'7'7'7'7'''7%'7'7!7'%'77'%'7'7''7''7'7'7'7''7'7j��PP��jj��PP��TF=�V�#=JFP P#0/``/0#P P%
%
CD
6
5*`44`+65
���
%
%>�V�#!%
%
CD
6
5*`44`+65
^�
%
%P P#00``00#P P_E�@����%%H%%�s���***+�)YY�YY�-.Y..��^^l^^��^^r^^��..^..��YY6Y�7+�*�����%%W%%������P��jj��PP��jj��P�'�#=JF=�V�
6
5*`44`+65
DD
%
%P P#00``00#P P%
%
�
?JF
DD
%
%P P#00``00#P P%
%
�^
6
5*`44`+65���^^��^^e.-��..KYY��YY"*�*7�LK%%�%%���������%%f%�����*�*�YY<YY��.0-��^^^���!U9.'>54.'>1013267#*'.54>30232.#",?(1]N;0S=""=S0;N]1'@,�W*33+DMV.8h-"NV^1f��LP��j1]VN!-h8.VMD�9kaV#
Bc~GG~cB
#Vak9!2�SS�2#:)
0"T��gj��P"0!):#@����KUbs����.'".'.'>706'4&/.+""3267>73267>7>'4&'>7>72.5063>7>71%#"&'>32.'.'.#!"3!2654&'1'#5#!"&54630:1;J
-#8
/
,8M2;�:,d"
��," #1
O *3Y'�0
Y-3')�!//!�!/�%
�)o �
���
�s
I)�
$lF ?3 9 RX
�8 83f*#40�K#7 5
�3-/!��!//!p)'6)�
%�� ` �
@����
%@I_.6>&1&.>76>7>7.#.'.'.#!"3!2654&'1'#5#!"&54630:1;�-k+4j%$j3+i-4a*)XXS"'G�6>$/h4
K%�-3')�!//!�!/�%
�)o �
���
��')�!
&1!3y3-/!��!//!p)'6)�
%�� ` �
@����*3I3##33#%.'.'.#!"3!2654&'1'#5#!"&54630:1;�,3BkM:oqmLDe��-3')�!//!�!/�%
�)o �
���
���>��>�/��\�3-/!��!//!p)'6)�
%�� ` �
@����)2H#'#35#7377.'.'.#!"3!2654&'1'#5#!"&54630:1;�``����22o����-3')�!//!�!/�%
�)o �
���
�@����\K��3-/!��!//!p)'6)�
%�� ` �
@����*.#!"3!2654&'!!2#"6=4&
��
)�@_R �
�
�
�@
@
������
�
�
=����%!!!/33?!!=RprR�z�O
���r}~
�x6
��ffg���t��@@�Z""�Vq=����%!'5%!/#7!'!7!=RprR�z����F��
}r���d
�
����ffg���RR�9�""Z�@@[tq�����!!!'7#%�"��D"�'����)�Қ��p��^^UϚ�����D &">32>32#"&5467'#"&5467.5467'2764'�A6hO (8� (88((8�$8((8$$N���6���hN8( �8((88( ���
2(88(2
2 O��6�A�6���{$),158 &"3267>54&''7'5'#'%5%777��@�@� ��.����f��@��f�������������P+������+*��ooo���o��o�ަZ�����o��o��Z����p"#76764'&"5>54&#"'6&'&"7#.#"32673&27>'732654&'52764'.'332654&#�%��&P�8((8�P&��%(88(%��&P�8((8�P&��%(88(
�P&��%(88(%��&P�8((8�P&��%(88(%��&P�8((8���
54632#"&5"32>54..54>7E11EE11E�j��PP��jj��PP���9_D%%D_9:_D%%D_:�1EE11EE1P��jj��PP��jj��P�A!_s�HH�s_!!_s�HH�s_!0-��_<��\el�\el��
���
��
���@���@�@@@@@@@@@@""@��@
@@���@@@����@��@8
9@@@��
OD@@@6@@Y@@@���S~��@�@@@@�������@@
���@���S@@
��@.e�@@���PP��@
F?
�r�j�@9@@DO�b\@@@@@==
Bn��>l��6v�V���P�T��
�D� Z � �
*
j
�
�J�B�
4
�
���DVr����l�
x��,��j�0��,\��6X��>�.��(���L��R���:^~�@^~���
b �!H!�"�"�#$#|#�$
$<$�$�%l%�&�'�(J(�)X)�*$*n0B0�11T1�22B2x2�2�2�3^3�3�44v4�5R6R6�6�7
7z7�8868�8�9�9�::p:�;;D;�<"<z<�<�=T=�=�>>B>�>�>�?X?�?�?�@
@t@�@�A.A�A�A�BB0BhB�B�C2C\C�C�C�D�EZE�FF�F�GvG�H�H�H�I�I�J�J�J�J�K(K^K�K�L2L�MMxM�N>N�OO`O�PHQQ�RRtSS�T`U
UvU�VjV�WVW�X
XhX�YnY�ZZ�[[�\|]H]�^�_n`(`�a.a�a�b2bNb�b�cZc�c�ddfd�d�d�eFe�e�ffbf�f�f�f�f�gg&gDgZgpg�h.h�h�i$ifi�i�i�jHj�j�kk$k:kNkdkxk�k�k�l
l@lrl�l�mmBm�m�nn^n�n�o$o�o�pHp�p�p�qhq�q�rr>rbr�r�ssJt&t�u�vvJv�whw�w�w�xxDx\x�x�y*yly�y�z
z~z�z�{{N{�||(|R||}`}�}�}�~~.~\~�~�~�@��8�x�ځ��Ƃ�r����z���փ��,�B����̇4���(�t�Z����D��������Ύ�T���ԏ��������P�ڔl���H�ܖ��엪�T�����l����V�4�h�����H��:�����t�����ޣ������`�¤��x�����B����r�֩����̭��*�>�̰8�����T�v�D��0��<�`6uK
� g = | R
4�icomoonicomoonVersion 1.0Version
1.0icomoonicomoonicomoonicomoonRegularRegularicomoonicomoonFont generated
by IcoMoon.Font generated by
IcoMoon.PK��[�=�9a�a�7Application/Frontend/Assets/icons/icomoon/manifest.jsonnu�[���{
"id": "icomoon",
"label": "Icomoon",
"class": "nicomoon",
"isLigature": 0,
"prefix": "nicomoon-",
"data": {
"home": {
"name": "home",
"kw": "home, house"
},
"home2": {
"name": "home2",
"kw": "home2, house2"
},
"home3": {
"name": "home3",
"kw": "home3, house3"
},
"office": {
"name": "office",
"kw": "office, buildings"
},
"newspaper": {
"name": "newspaper",
"kw": "newspaper, news"
},
"pencil": {
"name": "pencil",
"kw": "pencil, write"
},
"pencil2": {
"name": "pencil2",
"kw": "pencil2, write2"
},
"quill": {
"name": "quill",
"kw": "quill, feather"
},
"pen": {
"name": "pen",
"kw": "pen, write3"
},
"blog": {
"name": "blog",
"kw": "blog, pen2"
},
"eyedropper": {
"name": "eyedropper",
"kw": "eyedropper, color"
},
"droplet": {
"name": "droplet",
"kw": "droplet, color2"
},
"paint-format": {
"name": "paint-format",
"kw": "paint-format, format"
},
"image": {
"name": "image",
"kw": "image, picture"
},
"images": {
"name": "images",
"kw": "images, pictures"
},
"camera": {
"name": "camera",
"kw": "camera, photo"
},
"headphones": {
"name": "headphones",
"kw": "headphones, headset"
},
"music": {
"name": "music",
"kw": "music, song"
},
"play": {
"name": "play",
"kw": "play, video"
},
"film": {
"name": "film",
"kw": "film, video2"
},
"video-camera": {
"name": "video-camera",
"kw": "video-camera, video3"
},
"dice": {
"name": "dice",
"kw": "dice, game"
},
"pacman": {
"name": "pacman",
"kw": "pacman, game2"
},
"spades": {
"name": "spades",
"kw": "spades, cards"
},
"clubs": {
"name": "clubs",
"kw": "clubs, cards2"
},
"diamonds": {
"name": "diamonds",
"kw": "diamonds, cards3"
},
"bullhorn": {
"name": "bullhorn",
"kw": "bullhorn, megaphone"
},
"connection": {
"name": "connection",
"kw": "connection, wifi"
},
"podcast": {
"name": "podcast",
"kw": "podcast, broadcast"
},
"feed": {
"name": "feed",
"kw": "feed, wave"
},
"mic": {
"name": "mic",
"kw": "mic, microphone"
},
"book": {
"name": "book",
"kw": "book, read"
},
"books": {
"name": "books",
"kw": "books, library"
},
"library": {
"name": "library",
"kw": "library2, bank"
},
"file-text": {
"name": "file-text",
"kw": "file-text, file"
},
"profile": {
"name": "profile",
"kw": "profile, file2"
},
"file-empty": {
"name": "file-empty",
"kw": "file-empty, file3"
},
"files-empty": {
"name": "files-empty",
"kw": "files-empty, files"
},
"file-text2": {
"name": "file-text2",
"kw": "file-text2, file4"
},
"file-picture": {
"name": "file-picture",
"kw": "file-picture, file5"
},
"file-music": {
"name": "file-music",
"kw": "file-music, file6"
},
"file-play": {
"name": "file-play",
"kw": "file-play, file7"
},
"file-video": {
"name": "file-video",
"kw": "file-video, file8"
},
"file-zip": {
"name": "file-zip",
"kw": "file-zip, file9"
},
"copy": {
"name": "copy",
"kw": "copy, duplicate"
},
"paste": {
"name": "paste",
"kw": "paste, clipboard-file"
},
"stack": {
"name": "stack",
"kw": "stack, layers"
},
"folder": {
"name": "folder",
"kw": "folder, directory"
},
"folder-open": {
"name": "folder-open",
"kw": "folder-open, directory2"
},
"folder-plus": {
"name": "folder-plus",
"kw": "folder-plus, directory3"
},
"folder-minus": {
"name": "folder-minus",
"kw": "folder-minus, directory4"
},
"folder-download": {
"name": "folder-download",
"kw": "folder-download, directory5"
},
"folder-upload": {
"name": "folder-upload",
"kw": "folder-upload, directory6"
},
"price-tag": {
"name": "price-tag",
"kw": "price-tag"
},
"price-tags": {
"name": "price-tags",
"kw": "price-tags"
},
"barcode": {
"name": "barcode",
"kw": "barcode"
},
"qrcode": {
"name": "qrcode",
"kw": "qrcode"
},
"ticket": {
"name": "ticket",
"kw": "ticket, theater"
},
"cart": {
"name": "cart",
"kw": "cart, purchase"
},
"coin-dollar": {
"name": "coin-dollar",
"kw": "coin-dollar, money"
},
"coin-euro": {
"name": "coin-euro",
"kw": "coin-euro, money2"
},
"coin-pound": {
"name": "coin-pound",
"kw": "coin-pound, money3"
},
"coin-yen": {
"name": "coin-yen",
"kw": "coin-yen, money4"
},
"credit-card": {
"name": "credit-card",
"kw": "credit-card, money5"
},
"calculator": {
"name": "calculator",
"kw": "calculator, compute"
},
"lifebuoy": {
"name": "lifebuoy",
"kw": "lifebuoy, support"
},
"phone": {
"name": "phone",
"kw": "phone, telephone"
},
"phone-hang-up": {
"name": "phone-hang-up",
"kw": "phone-hang-up, telephone2"
},
"address-book": {
"name": "address-book",
"kw": "address-book, contact"
},
"envelop": {
"name": "envelop",
"kw": "envelop, mail"
},
"pushpin": {
"name": "pushpin",
"kw": "pushpin, pin"
},
"location": {
"name": "location",
"kw": "location, map-marker"
},
"location2": {
"name": "location2",
"kw": "location2, map-marker2"
},
"compass": {
"name": "compass",
"kw": "compass, direction"
},
"compass2": {
"name": "compass2",
"kw": "compass2, direction2"
},
"map": {
"name": "map",
"kw": "map, guide"
},
"map2": {
"name": "map2",
"kw": "map2, guide2"
},
"history": {
"name": "history",
"kw": "history, time"
},
"clock": {
"name": "clock",
"kw": "clock, time2"
},
"clock2": {
"name": "clock2",
"kw": "clock2, time3"
},
"alarm": {
"name": "alarm",
"kw": "alarm, time4"
},
"bell": {
"name": "bell",
"kw": "bell, alarm2"
},
"stopwatch": {
"name": "stopwatch",
"kw": "stopwatch, time5"
},
"calendar": {
"name": "calendar",
"kw": "calendar, date"
},
"printer": {
"name": "printer",
"kw": "printer, print"
},
"keyboard": {
"name": "keyboard",
"kw": "keyboard, typing"
},
"display": {
"name": "display",
"kw": "display, screen"
},
"laptop": {
"name": "laptop",
"kw": "laptop, computer"
},
"mobile": {
"name": "mobile",
"kw": "mobile, cell-phone"
},
"mobile2": {
"name": "mobile2",
"kw": "mobile2, cell-phone2"
},
"tablet": {
"name": "tablet",
"kw": "tablet, mobile3"
},
"tv": {
"name": "tv",
"kw": "tv, television"
},
"drawer": {
"name": "drawer",
"kw": "drawer, box"
},
"drawer2": {
"name": "drawer2",
"kw": "drawer2, box2"
},
"box-add": {
"name": "box-add",
"kw": "box-add, box3"
},
"box-remove": {
"name": "box-remove",
"kw": "box-remove, box4"
},
"download": {
"name": "download",
"kw": "download, save"
},
"upload": {
"name": "upload",
"kw": "upload, load"
},
"floppy-disk": {
"name": "floppy-disk",
"kw": "floppy-disk, save2"
},
"drive": {
"name": "drive",
"kw": "drive, save3"
},
"database": {
"name": "database",
"kw": "database, db"
},
"undo": {
"name": "undo",
"kw": "undo, ccw"
},
"redo": {
"name": "redo",
"kw": "redo, cw"
},
"undo2": {
"name": "undo2",
"kw": "undo2, left"
},
"redo2": {
"name": "redo2",
"kw": "redo2, right"
},
"forward": {
"name": "forward",
"kw": "forward, right2"
},
"reply": {
"name": "reply",
"kw": "reply, left2"
},
"bubble": {
"name": "bubble",
"kw": "bubble, comment"
},
"bubbles": {
"name": "bubbles",
"kw": "bubbles, comments"
},
"bubbles2": {
"name": "bubbles2",
"kw": "bubbles2, comments2"
},
"bubble2": {
"name": "bubble2",
"kw": "bubble2, comment2"
},
"bubbles3": {
"name": "bubbles3",
"kw": "bubbles3, comments3"
},
"bubbles4": {
"name": "bubbles4",
"kw": "bubbles4, comments4"
},
"user": {
"name": "user",
"kw": "user, profile2"
},
"users": {
"name": "users",
"kw": "users, group"
},
"user-plus": {
"name": "user-plus",
"kw": "user-plus, user2"
},
"user-minus": {
"name": "user-minus",
"kw": "user-minus, user3"
},
"user-check": {
"name": "user-check",
"kw": "user-check, user4"
},
"user-tie": {
"name": "user-tie",
"kw": "user-tie, user5"
},
"quotes-left": {
"name": "quotes-left",
"kw": "quotes-left, ldquo"
},
"quotes-right": {
"name": "quotes-right",
"kw": "quotes-right, rdquo"
},
"hour-glass": {
"name": "hour-glass",
"kw": "hour-glass, loading"
},
"spinner": {
"name": "spinner",
"kw": "spinner, loading2"
},
"spinner2": {
"name": "spinner2",
"kw": "spinner2, loading3"
},
"spinner3": {
"name": "spinner3",
"kw": "spinner3, loading4"
},
"spinner4": {
"name": "spinner4",
"kw": "spinner4, loading5"
},
"spinner5": {
"name": "spinner5",
"kw": "spinner5, loading6"
},
"spinner6": {
"name": "spinner6",
"kw": "spinner6, loading7"
},
"spinner7": {
"name": "spinner7",
"kw": "spinner7, loading8"
},
"spinner8": {
"name": "spinner8",
"kw": "spinner8, loading9"
},
"spinner9": {
"name": "spinner9",
"kw": "spinner9, loading10"
},
"spinner10": {
"name": "spinner10",
"kw": "spinner10, loading11"
},
"spinner11": {
"name": "spinner11",
"kw": "spinner11, loading12"
},
"binoculars": {
"name": "binoculars",
"kw": "binoculars, lookup"
},
"search": {
"name": "search",
"kw": "search, magnifier"
},
"zoom-in": {
"name": "zoom-in",
"kw": "zoom-in, magnifier2"
},
"zoom-out": {
"name": "zoom-out",
"kw": "zoom-out, magnifier3"
},
"enlarge": {
"name": "enlarge",
"kw": "enlarge, expand"
},
"shrink": {
"name": "shrink",
"kw": "shrink, collapse"
},
"enlarge2": {
"name": "enlarge2",
"kw": "enlarge2, expand2"
},
"shrink2": {
"name": "shrink2",
"kw": "shrink2, collapse2"
},
"key": {
"name": "key",
"kw": "key, password"
},
"key2": {
"name": "key2",
"kw": "key2, password2"
},
"lock": {
"name": "lock",
"kw": "lock, secure"
},
"unlocked": {
"name": "unlocked",
"kw": "unlocked, lock-open"
},
"wrench": {
"name": "wrench",
"kw": "wrench, tool"
},
"equalizer": {
"name": "equalizer",
"kw": "equalizer, sliders"
},
"equalizer2": {
"name": "equalizer2",
"kw": "equalizer2, sliders2"
},
"cog": {
"name": "cog",
"kw": "cog, gear"
},
"cogs": {
"name": "cogs",
"kw": "cogs, gears"
},
"hammer": {
"name": "hammer",
"kw": "hammer, tool2"
},
"magic-wand": {
"name": "magic-wand",
"kw": "magic-wand, wizard"
},
"aid-kit": {
"name": "aid-kit",
"kw": "aid-kit, health"
},
"bug": {
"name": "bug",
"kw": "bug, virus"
},
"pie-chart": {
"name": "pie-chart",
"kw": "pie-chart, stats"
},
"stats-dots": {
"name": "stats-dots",
"kw": "stats-dots, stats2"
},
"stats-bars": {
"name": "stats-bars",
"kw": "stats-bars, stats3"
},
"stats-bars2": {
"name": "stats-bars2",
"kw": "stats-bars2, stats4"
},
"trophy": {
"name": "trophy",
"kw": "trophy, cup"
},
"gift": {
"name": "gift",
"kw": "gift, present"
},
"glass": {
"name": "glass",
"kw": "glass, drink"
},
"glass2": {
"name": "glass2",
"kw": "glass2, drink2"
},
"mug": {
"name": "mug",
"kw": "mug, drink3"
},
"spoon-knife": {
"name": "spoon-knife",
"kw": "spoon-knife, food"
},
"leaf": {
"name": "leaf",
"kw": "leaf, nature"
},
"rocket": {
"name": "rocket",
"kw": "rocket, jet"
},
"meter": {
"name": "meter",
"kw": "meter, gauge"
},
"meter2": {
"name": "meter2",
"kw": "meter2, gauge2"
},
"hammer2": {
"name": "hammer2",
"kw": "hammer2, gavel"
},
"fire": {
"name": "fire",
"kw": "fire, flame"
},
"lab": {
"name": "lab",
"kw": "lab, beta"
},
"magnet": {
"name": "magnet",
"kw": "magnet, attract"
},
"bin": {
"name": "bin",
"kw": "bin, trashcan"
},
"bin2": {
"name": "bin2",
"kw": "bin2, trashcan2"
},
"briefcase": {
"name": "briefcase",
"kw": "briefcase, portfolio"
},
"airplane": {
"name": "airplane",
"kw": "airplane, travel"
},
"truck": {
"name": "truck",
"kw": "truck, transit"
},
"road": {
"name": "road",
"kw": "road, asphalt"
},
"accessibility": {
"name": "accessibility",
"kw": "accessibility"
},
"target": {
"name": "target",
"kw": "target, goal"
},
"shield": {
"name": "shield",
"kw": "shield, security"
},
"power": {
"name": "power",
"kw": "power, lightning"
},
"switch": {
"name": "switch",
"kw": "switch"
},
"power-cord": {
"name": "power-cord",
"kw": "power-cord, plugin"
},
"clipboard": {
"name": "clipboard",
"kw": "clipboard, board"
},
"list-numbered": {
"name": "list-numbered",
"kw": "list-numbered, options"
},
"list": {
"name": "list",
"kw": "list, todo"
},
"list2": {
"name": "list2",
"kw": "list2, todo2"
},
"tree": {
"name": "tree",
"kw": "tree, branches"
},
"menu": {
"name": "menu",
"kw": "menu, list3"
},
"menu2": {
"name": "menu2",
"kw": "menu2, options2"
},
"menu3": {
"name": "menu3",
"kw": "menu3, options3"
},
"menu4": {
"name": "menu4",
"kw": "menu4, options4"
},
"cloud": {
"name": "cloud",
"kw": "cloud, weather"
},
"cloud-download": {
"name": "cloud-download",
"kw": "cloud-download, cloud2"
},
"cloud-upload": {
"name": "cloud-upload",
"kw": "cloud-upload, cloud3"
},
"cloud-check": {
"name": "cloud-check",
"kw": "cloud-check, cloud4"
},
"download2": {
"name": "download2",
"kw": "download2, save4"
},
"upload2": {
"name": "upload2",
"kw": "upload2, load2"
},
"download3": {
"name": "download3",
"kw": "download3, save5"
},
"upload3": {
"name": "upload3",
"kw": "upload3, load3"
},
"sphere": {
"name": "sphere",
"kw": "sphere, globe"
},
"earth": {
"name": "earth",
"kw": "earth, globe2"
},
"link": {
"name": "link",
"kw": "link, chain"
},
"flag": {
"name": "flag",
"kw": "flag, report"
},
"attachment": {
"name": "attachment",
"kw": "attachment, paperclip"
},
"eye": {
"name": "eye",
"kw": "eye, views"
},
"eye-plus": {
"name": "eye-plus",
"kw": "eye-plus, views2"
},
"eye-minus": {
"name": "eye-minus",
"kw": "eye-minus, views3"
},
"eye-blocked": {
"name": "eye-blocked",
"kw": "eye-blocked, views4"
},
"bookmark": {
"name": "bookmark",
"kw": "bookmark, ribbon"
},
"bookmarks": {
"name": "bookmarks",
"kw": "bookmarks, ribbons"
},
"sun": {
"name": "sun",
"kw": "sun, weather2"
},
"contrast": {
"name": "contrast",
"kw": "contrast"
},
"brightness-contrast": {
"name": "brightness-contrast",
"kw": "brightness-contrast"
},
"star-empty": {
"name": "star-empty",
"kw": "star-empty, rate"
},
"star-half": {
"name": "star-half",
"kw": "star-half, rate2"
},
"star-full": {
"name": "star-full",
"kw": "star-full, rate3"
},
"heart": {
"name": "heart",
"kw": "heart, like"
},
"heart-broken": {
"name": "heart-broken",
"kw": "heart-broken, heart2"
},
"man": {
"name": "man",
"kw": "man, male"
},
"woman": {
"name": "woman",
"kw": "woman, female"
},
"man-woman": {
"name": "man-woman",
"kw": "man-woman, toilet"
},
"happy": {
"name": "happy",
"kw": "happy, emoticon"
},
"happy2": {
"name": "happy2",
"kw": "happy2, emoticon2"
},
"smile": {
"name": "smile",
"kw": "smile, emoticon3"
},
"smile2": {
"name": "smile2",
"kw": "smile2, emoticon4"
},
"tongue": {
"name": "tongue",
"kw": "tongue, emoticon5"
},
"tongue2": {
"name": "tongue2",
"kw": "tongue2, emoticon6"
},
"sad": {
"name": "sad",
"kw": "sad, emoticon7"
},
"sad2": {
"name": "sad2",
"kw": "sad2, emoticon8"
},
"wink": {
"name": "wink",
"kw": "wink, emoticon9"
},
"wink2": {
"name": "wink2",
"kw": "wink2, emoticon10"
},
"grin": {
"name": "grin",
"kw": "grin, emoticon11"
},
"grin2": {
"name": "grin2",
"kw": "grin2, emoticon12"
},
"cool": {
"name": "cool",
"kw": "cool, emoticon13"
},
"cool2": {
"name": "cool2",
"kw": "cool2, emoticon14"
},
"angry": {
"name": "angry",
"kw": "angry, emoticon15"
},
"angry2": {
"name": "angry2",
"kw": "angry2, emoticon16"
},
"evil": {
"name": "evil",
"kw": "evil, emoticon17"
},
"evil2": {
"name": "evil2",
"kw": "evil2, emoticon18"
},
"shocked": {
"name": "shocked",
"kw": "shocked, emoticon19"
},
"shocked2": {
"name": "shocked2",
"kw": "shocked2, emoticon20"
},
"baffled": {
"name": "baffled",
"kw": "baffled, emoticon21"
},
"baffled2": {
"name": "baffled2",
"kw": "baffled2, emoticon22"
},
"confused": {
"name": "confused",
"kw": "confused, emoticon23"
},
"confused2": {
"name": "confused2",
"kw": "confused2, emoticon24"
},
"neutral": {
"name": "neutral",
"kw": "neutral, emoticon25"
},
"neutral2": {
"name": "neutral2",
"kw": "neutral2, emoticon26"
},
"hipster": {
"name": "hipster",
"kw": "hipster, emoticon27"
},
"hipster2": {
"name": "hipster2",
"kw": "hipster2, emoticon28"
},
"wondering": {
"name": "wondering",
"kw": "wondering, emoticon29"
},
"wondering2": {
"name": "wondering2",
"kw": "wondering2, emoticon30"
},
"sleepy": {
"name": "sleepy",
"kw": "sleepy, emoticon31"
},
"sleepy2": {
"name": "sleepy2",
"kw": "sleepy2, emoticon32"
},
"frustrated": {
"name": "frustrated",
"kw": "frustrated, emoticon33"
},
"frustrated2": {
"name": "frustrated2",
"kw": "frustrated2, emoticon34"
},
"crying": {
"name": "crying",
"kw": "crying, emoticon35"
},
"crying2": {
"name": "crying2",
"kw": "crying2, emoticon36"
},
"point-up": {
"name": "point-up",
"kw": "point-up, finger"
},
"point-right": {
"name": "point-right",
"kw": "point-right, finger2"
},
"point-down": {
"name": "point-down",
"kw": "point-down, finger3"
},
"point-left": {
"name": "point-left",
"kw": "point-left, finger4"
},
"warning": {
"name": "warning",
"kw": "warning, sign"
},
"notification": {
"name": "notification",
"kw": "notification, warning2"
},
"question": {
"name": "question",
"kw": "question, help"
},
"plus": {
"name": "plus",
"kw": "plus, add"
},
"minus": {
"name": "minus",
"kw": "minus, subtract"
},
"info": {
"name": "info",
"kw": "info, information"
},
"cancel-circle": {
"name": "cancel-circle",
"kw": "cancel-circle, close"
},
"blocked": {
"name": "blocked",
"kw": "blocked, forbidden"
},
"cross": {
"name": "cross",
"kw": "cross, cancel"
},
"checkmark": {
"name": "checkmark",
"kw": "checkmark, tick"
},
"checkmark2": {
"name": "checkmark2",
"kw": "checkmark2, tick2"
},
"spell-check": {
"name": "spell-check",
"kw": "spell-check, spelling"
},
"enter": {
"name": "enter",
"kw": "enter, signin"
},
"exit": {
"name": "exit",
"kw": "exit, signout"
},
"play2": {
"name": "play2",
"kw": "play2, player"
},
"pause": {
"name": "pause",
"kw": "pause, player2"
},
"stop": {
"name": "stop",
"kw": "stop, player3"
},
"previous": {
"name": "previous",
"kw": "previous, player4"
},
"next": {
"name": "next",
"kw": "next, player5"
},
"backward": {
"name": "backward",
"kw": "backward, player6"
},
"forward2": {
"name": "forward2",
"kw": "forward2, player7"
},
"play3": {
"name": "play3",
"kw": "play3, player8"
},
"pause2": {
"name": "pause2",
"kw": "pause2, player9"
},
"stop2": {
"name": "stop2",
"kw": "stop2, player10"
},
"backward2": {
"name": "backward2",
"kw": "backward2, player11"
},
"forward3": {
"name": "forward3",
"kw": "forward3, player12"
},
"first": {
"name": "first",
"kw": "first, player13"
},
"last": {
"name": "last",
"kw": "last, player14"
},
"previous2": {
"name": "previous2",
"kw": "previous2, player15"
},
"next2": {
"name": "next2",
"kw": "next2, player16"
},
"eject": {
"name": "eject",
"kw": "eject, player17"
},
"volume-high": {
"name": "volume-high",
"kw": "volume-high, volume"
},
"volume-medium": {
"name": "volume-medium",
"kw": "volume-medium, volume2"
},
"volume-low": {
"name": "volume-low",
"kw": "volume-low, volume3"
},
"volume-mute": {
"name": "volume-mute",
"kw": "volume-mute, volume4"
},
"volume-mute2": {
"name": "volume-mute2",
"kw": "volume-mute2, volume5"
},
"volume-increase": {
"name": "volume-increase",
"kw": "volume-increase, volume6"
},
"volume-decrease": {
"name": "volume-decrease",
"kw": "volume-decrease, volume7"
},
"loop": {
"name": "loop",
"kw": "loop, repeat"
},
"loop2": {
"name": "loop2",
"kw": "loop2, repeat2"
},
"infinite": {
"name": "infinite",
"kw": "infinite"
},
"shuffle": {
"name": "shuffle",
"kw": "shuffle, random"
},
"arrow-up-left": {
"name": "arrow-up-left",
"kw": "arrow-up-left, up-left"
},
"arrow-up": {
"name": "arrow-up",
"kw": "arrow-up, up"
},
"arrow-up-right": {
"name": "arrow-up-right",
"kw": "arrow-up-right, up-right"
},
"arrow-right": {
"name": "arrow-right",
"kw": "arrow-right, right3"
},
"arrow-down-right": {
"name": "arrow-down-right",
"kw": "arrow-down-right, down-right"
},
"arrow-down": {
"name": "arrow-down",
"kw": "arrow-down, down"
},
"arrow-down-left": {
"name": "arrow-down-left",
"kw": "arrow-down-left, down-left"
},
"arrow-left": {
"name": "arrow-left",
"kw": "arrow-left, left3"
},
"arrow-up-left2": {
"name": "arrow-up-left2",
"kw": "arrow-up-left2, up-left2"
},
"arrow-up2": {
"name": "arrow-up2",
"kw": "arrow-up2, up2"
},
"arrow-up-right2": {
"name": "arrow-up-right2",
"kw": "arrow-up-right2, up-right2"
},
"arrow-right2": {
"name": "arrow-right2",
"kw": "arrow-right2, right4"
},
"arrow-down-right2": {
"name": "arrow-down-right2",
"kw": "arrow-down-right2, down-right2"
},
"arrow-down2": {
"name": "arrow-down2",
"kw": "arrow-down2, down2"
},
"arrow-down-left2": {
"name": "arrow-down-left2",
"kw": "arrow-down-left2, down-left2"
},
"arrow-left2": {
"name": "arrow-left2",
"kw": "arrow-left2, left4"
},
"circle-up": {
"name": "circle-up",
"kw": "circle-up, up3"
},
"circle-right": {
"name": "circle-right",
"kw": "circle-right, right5"
},
"circle-down": {
"name": "circle-down",
"kw": "circle-down, down3"
},
"circle-left": {
"name": "circle-left",
"kw": "circle-left, left5"
},
"tab": {
"name": "tab",
"kw": "tab, arrows"
},
"move-up": {
"name": "move-up",
"kw": "move-up, sort"
},
"move-down": {
"name": "move-down",
"kw": "move-down, sort2"
},
"sort-alpha-asc": {
"name": "sort-alpha-asc",
"kw": "sort-alpha-asc, arrange"
},
"sort-alpha-desc": {
"name": "sort-alpha-desc",
"kw": "sort-alpha-desc, arrange2"
},
"sort-numeric-asc": {
"name": "sort-numeric-asc",
"kw": "sort-numeric-asc, arrange3"
},
"sort-numberic-desc": {
"name": "sort-numberic-desc",
"kw": "sort-numberic-desc, arrange4"
},
"sort-amount-asc": {
"name": "sort-amount-asc",
"kw": "sort-amount-asc, arrange5"
},
"sort-amount-desc": {
"name": "sort-amount-desc",
"kw": "sort-amount-desc, arrange6"
},
"command": {
"name": "command",
"kw": "command, cmd"
},
"shift": {
"name": "shift",
"kw": "shift"
},
"ctrl": {
"name": "ctrl",
"kw": "ctrl, control"
},
"opt": {
"name": "opt",
"kw": "opt, option"
},
"checkbox-checked": {
"name": "checkbox-checked",
"kw": "checkbox-checked, checkbox"
},
"checkbox-unchecked": {
"name": "checkbox-unchecked",
"kw": "checkbox-unchecked, checkbox2"
},
"radio-checked": {
"name": "radio-checked",
"kw": "radio-checked, radio-button"
},
"radio-checked2": {
"name": "radio-checked2",
"kw": "radio-checked2, radio-button2"
},
"radio-unchecked": {
"name": "radio-unchecked",
"kw": "radio-unchecked, radio-button3"
},
"crop": {
"name": "crop",
"kw": "crop, resize"
},
"make-group": {
"name": "make-group",
"kw": "make-group"
},
"ungroup": {
"name": "ungroup",
"kw": "ungroup"
},
"scissors": {
"name": "scissors",
"kw": "scissors, cut"
},
"filter": {
"name": "filter",
"kw": "filter, funnel"
},
"font": {
"name": "font",
"kw": "font, typeface"
},
"ligature": {
"name": "ligature",
"kw": "ligature, typography"
},
"ligature2": {
"name": "ligature2",
"kw": "ligature2, typography2"
},
"text-height": {
"name": "text-height",
"kw": "text-height, wysiwyg"
},
"text-width": {
"name": "text-width",
"kw": "text-width, wysiwyg2"
},
"font-size": {
"name": "font-size",
"kw": "font-size, wysiwyg3"
},
"bold": {
"name": "bold",
"kw": "bold, wysiwyg4"
},
"underline": {
"name": "underline",
"kw": "underline, wysiwyg5"
},
"italic": {
"name": "italic",
"kw": "italic, wysiwyg6"
},
"strikethrough": {
"name": "strikethrough",
"kw": "strikethrough, wysiwyg7"
},
"omega": {
"name": "omega",
"kw": "omega, wysiwyg8"
},
"sigma": {
"name": "sigma",
"kw": "sigma, wysiwyg9"
},
"page-break": {
"name": "page-break",
"kw": "page-break, wysiwyg10"
},
"superscript": {
"name": "superscript",
"kw": "superscript, wysiwyg11"
},
"subscript": {
"name": "subscript",
"kw": "subscript, wysiwyg12"
},
"superscript2": {
"name": "superscript2",
"kw": "superscript2, wysiwyg13"
},
"subscript2": {
"name": "subscript2",
"kw": "subscript2, wysiwyg14"
},
"text-color": {
"name": "text-color",
"kw": "text-color, wysiwyg15"
},
"pagebreak": {
"name": "pagebreak",
"kw": "pagebreak, wysiwyg16"
},
"clear-formatting": {
"name": "clear-formatting",
"kw": "clear-formatting, wysiwyg17"
},
"table": {
"name": "table",
"kw": "table, wysiwyg18"
},
"table2": {
"name": "table2",
"kw": "table2, wysiwyg19"
},
"insert-template": {
"name": "insert-template",
"kw": "insert-template, wysiwyg20"
},
"pilcrow": {
"name": "pilcrow",
"kw": "pilcrow, wysiwyg21"
},
"ltr": {
"name": "ltr",
"kw": "ltr, wysiwyg22"
},
"rtl": {
"name": "rtl",
"kw": "rtl, wysiwyg23"
},
"section": {
"name": "section",
"kw": "section, wysiwyg24"
},
"paragraph-left": {
"name": "paragraph-left",
"kw": "paragraph-left, wysiwyg25"
},
"paragraph-center": {
"name": "paragraph-center",
"kw": "paragraph-center, wysiwyg26"
},
"paragraph-right": {
"name": "paragraph-right",
"kw": "paragraph-right, wysiwyg27"
},
"paragraph-justify": {
"name": "paragraph-justify",
"kw": "paragraph-justify, wysiwyg28"
},
"indent-increase": {
"name": "indent-increase",
"kw": "indent-increase, wysiwyg29"
},
"indent-decrease": {
"name": "indent-decrease",
"kw": "indent-decrease, wysiwyg30"
},
"share": {
"name": "share",
"kw": "share, out"
},
"new-tab": {
"name": "new-tab",
"kw": "new-tab, out2"
},
"embed": {
"name": "embed",
"kw": "embed, code"
},
"embed2": {
"name": "embed2",
"kw": "embed2, code2"
},
"terminal": {
"name": "terminal",
"kw": "terminal, console"
},
"share2": {
"name": "share2",
"kw": "share2, social"
},
"mail": {
"name": "mail",
"kw": "mail2, contact2"
},
"mail2": {
"name": "mail2",
"kw": "mail3, contact3"
},
"mail3": {
"name": "mail3",
"kw": "mail4, contact4"
},
"mail4": {
"name": "mail4",
"kw": "mail5, contact5"
},
"amazon": {
"name": "amazon",
"kw": "amazon, brand"
},
"google": {
"name": "google",
"kw": "google, brand2"
},
"google2": {
"name": "google2",
"kw": "google2, brand3"
},
"google3": {
"name": "google3",
"kw": "google3, brand4"
},
"google-plus": {
"name": "google-plus",
"kw": "google-plus, brand5"
},
"google-plus2": {
"name": "google-plus2",
"kw": "google-plus2, brand6"
},
"google-plus3": {
"name": "google-plus3",
"kw": "google-plus3, brand7"
},
"hangouts": {
"name": "hangouts",
"kw": "hangouts, brand8"
},
"google-drive": {
"name": "google-drive",
"kw": "google-drive, brand9"
},
"facebook": {
"name": "facebook",
"kw": "facebook, brand10"
},
"facebook2": {
"name": "facebook2",
"kw": "facebook2, brand11"
},
"instagram": {
"name": "instagram",
"kw": "instagram, brand12"
},
"whatsapp": {
"name": "whatsapp",
"kw": "whatsapp, brand13"
},
"spotify": {
"name": "spotify",
"kw": "spotify, brand14"
},
"telegram": {
"name": "telegram",
"kw": "telegram, brand15"
},
"twitter": {
"name": "twitter",
"kw": "twitter, brand16"
},
"vine": {
"name": "vine",
"kw": "vine, brand17"
},
"vk": {
"name": "vk",
"kw": "vk, brand18"
},
"renren": {
"name": "renren",
"kw": "renren, brand19"
},
"sina-weibo": {
"name": "sina-weibo",
"kw": "sina-weibo, brand20"
},
"rss": {
"name": "rss",
"kw": "feed2, rss"
},
"rss2": {
"name": "rss2",
"kw": "feed3, rss2"
},
"youtube": {
"name": "youtube",
"kw": "youtube, brand21"
},
"youtube2": {
"name": "youtube2",
"kw": "youtube2, brand22"
},
"twitch": {
"name": "twitch",
"kw": "twitch, brand23"
},
"vimeo": {
"name": "vimeo",
"kw": "vimeo, brand24"
},
"vimeo2": {
"name": "vimeo2",
"kw": "vimeo2, brand25"
},
"lanyrd": {
"name": "lanyrd",
"kw": "lanyrd, brand26"
},
"flickr": {
"name": "flickr",
"kw": "flickr, brand27"
},
"flickr2": {
"name": "flickr2",
"kw": "flickr2, brand28"
},
"flickr3": {
"name": "flickr3",
"kw": "flickr3, brand29"
},
"flickr4": {
"name": "flickr4",
"kw": "flickr4, brand30"
},
"dribbble": {
"name": "dribbble",
"kw": "dribbble, brand31"
},
"behance": {
"name": "behance",
"kw": "behance, brand32"
},
"behance2": {
"name": "behance2",
"kw": "behance2, brand33"
},
"deviantart": {
"name": "deviantart",
"kw": "deviantart, brand34"
},
"500px": {
"name": "500px",
"kw": "500px, brand35"
},
"steam": {
"name": "steam",
"kw": "steam, brand36"
},
"steam2": {
"name": "steam2",
"kw": "steam2, brand37"
},
"dropbox": {
"name": "dropbox",
"kw": "dropbox, brand38"
},
"onedrive": {
"name": "onedrive",
"kw": "onedrive, brand39"
},
"github": {
"name": "github",
"kw": "github, brand40"
},
"npm": {
"name": "npm",
"kw": "npm, brand41"
},
"basecamp": {
"name": "basecamp",
"kw": "basecamp, brand42"
},
"trello": {
"name": "trello",
"kw": "trello, brand43"
},
"wordpress": {
"name": "wordpress",
"kw": "wordpress, brand44"
},
"joomla": {
"name": "joomla",
"kw": "joomla, brand45"
},
"ello": {
"name": "ello",
"kw": "ello, brand46"
},
"blogger": {
"name": "blogger",
"kw": "blogger, brand47"
},
"blogger2": {
"name": "blogger2",
"kw": "blogger2, brand48"
},
"tumblr": {
"name": "tumblr",
"kw": "tumblr, brand49"
},
"tumblr2": {
"name": "tumblr2",
"kw": "tumblr2, brand50"
},
"yahoo": {
"name": "yahoo",
"kw": "yahoo, brand51"
},
"yahoo2": {
"name": "yahoo2",
"kw": "yahoo2"
},
"tux": {
"name": "tux",
"kw": "tux, brand52"
},
"appleinc": {
"name": "appleinc",
"kw": "apple, brand53"
},
"finder": {
"name": "finder",
"kw": "finder, brand54"
},
"android": {
"name": "android",
"kw": "android, brand55"
},
"windows": {
"name": "windows",
"kw": "windows, brand56"
},
"windows8": {
"name": "windows8",
"kw": "windows8, brand57"
},
"soundcloud": {
"name": "soundcloud",
"kw": "soundcloud, brand58"
},
"soundcloud2": {
"name": "soundcloud2",
"kw": "soundcloud2, brand59"
},
"skype": {
"name": "skype",
"kw": "skype, brand60"
},
"reddit": {
"name": "reddit",
"kw": "reddit, brand61"
},
"hackernews": {
"name": "hackernews",
"kw": "hackernews, brand62"
},
"wikipedia": {
"name": "wikipedia",
"kw": "wikipedia, brand63"
},
"linkedin": {
"name": "linkedin",
"kw": "linkedin, brand64"
},
"linkedin2": {
"name": "linkedin2",
"kw": "linkedin2, brand65"
},
"lastfm": {
"name": "lastfm",
"kw": "lastfm, brand66"
},
"lastfm2": {
"name": "lastfm2",
"kw": "lastfm2, brand67"
},
"delicious": {
"name": "delicious",
"kw": "delicious, brand68"
},
"stumbleupon": {
"name": "stumbleupon",
"kw": "stumbleupon, brand69"
},
"stumbleupon2": {
"name": "stumbleupon2",
"kw": "stumbleupon2, brand70"
},
"stackoverflow": {
"name": "stackoverflow",
"kw": "stackoverflow, brand71"
},
"pinterest": {
"name": "pinterest",
"kw": "pinterest, brand72"
},
"pinterest2": {
"name": "pinterest2",
"kw": "pinterest2, brand73"
},
"xing": {
"name": "xing",
"kw": "xing, brand74"
},
"xing2": {
"name": "xing2",
"kw": "xing2, brand75"
},
"flattr": {
"name": "flattr",
"kw": "flattr, brand76"
},
"foursquare": {
"name": "foursquare",
"kw": "foursquare, brand77"
},
"yelp": {
"name": "yelp",
"kw": "yelp, brand78"
},
"paypal": {
"name": "paypal",
"kw": "paypal, brand79"
},
"chrome": {
"name": "chrome",
"kw": "chrome, browser"
},
"firefox": {
"name": "firefox",
"kw": "firefox, browser2"
},
"IE": {
"name": "IE",
"kw": "IE, browser3"
},
"edge": {
"name": "edge",
"kw": "edge, browser4"
},
"safari": {
"name": "safari",
"kw": "safari, browser5"
},
"opera": {
"name": "opera",
"kw": "opera, browser6"
},
"file-pdf": {
"name": "file-pdf",
"kw": "file-pdf, file10"
},
"file-openoffice": {
"name": "file-openoffice",
"kw": "file-openoffice, file11"
},
"file-word": {
"name": "file-word",
"kw": "file-word, file12"
},
"file-excel": {
"name": "file-excel",
"kw": "file-excel, file13"
},
"libreoffice": {
"name": "libreoffice",
"kw": "libreoffice, file14"
},
"html-five": {
"name": "html-five",
"kw": "html-five, w3c"
},
"html-five2": {
"name": "html-five2",
"kw": "html-five2, w3c2"
},
"css3": {
"name": "css3",
"kw": "css3, w3c3"
},
"git": {
"name": "git",
"kw": "git, brand80"
},
"codepen": {
"name": "codepen",
"kw": "codepen, brand81"
},
"svg": {
"name": "svg",
"kw": "svg"
},
"IcoMoon": {
"name": "IcoMoon",
"kw": "IcoMoon, icomoon"
}
}
}PK��[�=�e��4Application/Frontend/Assets/icons/icomoon/readme.txtnu�[���https://raw.githubusercontent.com/Keyamoon/IcoMoon-Free/master/IcoMoon-Free.json
var b = a.selection;
var result = {};
for(var k in b){
result[b[k].name] = {"name": b[k].name, "kw":
b[k].ligatures};
}
console.log(JSON.stringify(result));PK��[`���UUIApplication/Frontend/Assets/icons/linearicons/dist/Linearicons-Free.woff2nu�[���wOF2U�(T�`T
��0��c6$�8�^ �K
��Uz�8�<�bt���c0�V���c�����Ce�5M5dmC��!�6
;ۑ��u{�=���@g}�>(����c�6H���7�&d���6�o�[�I�� �ߘ�$w�H�@��fɵn����(�,��%���/�` b3��
��`��Xk/�nC,�F �M��5\�'� E<4
��b��"�W�_^Q��q�#���\���
[e(
8@PQ@�;@q"��qDžr�a��f�+�4���rd4i��f��f�6GG���H�3t���E]�DG���9��ﰟG,�ع�Ы�j��eH��eN��'�^-�WaZZT����ߙyױ�v�w��re��ן�VF���jl~2���
���e�b+"�:�5^�U�m�.a�d�>�.�t�̩��v9<7��?WI+E�������~�*�0�q�όݫgwMΡfY����Ӊ;�f
���/����I�
�a���}$�,�j��e����X�{�z3��=�-�v���d3�M8g���GuU�ᳪTɉae�zu�O�+3;�4�։���4�����}�1g�gH̚n�5e������r����3���YAC��N�D䑄��}I�R�pw��_�xL$�(��$0B�6G}"�t;Z(�����_.pn�$�к�%�5���ٟי��b�c��H��g�Q(�=t����
q�gh@�V#2ٰ#�ڻ�ΰr��5��M�8i�� �_�G����b��� 1b�m3<n1���x
O?E�A5ތ�,C)U���ڢc��1��CF��"-J����T�g�H�Q��f�V��VX%�s����Ҽ@�}�H����|�?�^��顡5�(���NĂ1Nve��NB�w-��� �s��?�F*�
xG6��k�yW�ݠ�p4~;��^G����I������ΐ�l)C?t%��j���;�^$��E��Ks�i_�X�o �~��"a�j�Knk,���J<��Op�Ι�Wha!7��;
��Fz-�n�v`�Ղ���7��Q�w����|�B#���I"�BZsH+9�jM��;97�dqZ$F��8b
5��ޟ0�2;�rB=
��E!f� �Qt�*.c� >�vk
�\V������z+_�_jlL���T��X�#ێݓ�R�Э0w��g
�A�ώ2
6�z�6�'7��K���d�SaEd���Nr�S���&�;��k�::�tZ�֑%*
]K䀆_e�&�Ϗ[Q)Q��*���NoL#^����L�#�
`&���C+��
!XU��z]�7�ɌC(���g����8�m�P
+^�r��x�$|���"*_�Xe�+�^�����ŧ��6>>�ח��G����^l�]�q8���n�qn���th�H��mcP�r��K �D�S����c?,{�!��{T&�3[G�P����t��>�
Qb$�B�ҫc(�q�P�U�e�ԭ����;=��]���Vk|�ER��-��S�H��3��,bԢ>W�khW\�B���|-`��B��LۡS��t� �i���
�����L�#
�PKC.x�&��h(#g�)�9���h�u}��r��(m�q��pam��D^����.����Ʊ��V�7�+g��6YH-9���7W���ե���3{l�ؕ�#����!���Y��D��~Sq��7{��vN�]t����[��A�����rֿW�g1�~ߑqB��
p��PL�~��T�(�N|�Q
TN���+��S�#P�d7�+>�B���n�:�;���җ�?�-RF��
��ַ�#�税���&8����62�f���g�B�pbj,���^��t�_�OJ��-�����˨�1n8]>.4�k�<�˻
`�C�;�f���`��%<aWP/ʁ=�����w�
q�A�R[�G��?CbX�=A
�EX
���b�-'�a��Ɛ08�J��U� ŅA�R��?A�����߹�y��:^��!�c.]Ye��
�p�W��T���k�4�{��_��wis���]
d�mO���Q��ck�E����?���K�
W��<H�b�}���w��%c�,����m1�QVG
.u�
���������
�X�LN��80���I7>��,�`��ß ����K��cǛ:�-e��5���5�~-��DzO `�[�{�U�������ym0MnN&�n)�;�mĄ4-�.2AJ��hX�h����T1�W{�
]@ŝS�z��ΐ��WŘ�C��0f��!�>��1�g���8D�{0d��8�W ;�� �
�M7$�o��K�ȹI�һa��`H�S��j�-���5�nwc0����H�n�-&�<*#.>?��]��
��2g��Ƨ2ż�R�9hc��?���e
e�XF�D�1-*A*��.�������HҸ�aQ��;}�o��Kf���n�ǘ��|V�B��s��S7�
����N�z�[uLJe�;y\��G�߿���~�+��d'���T��cp+��K[��b����^KLI]_p�Iqѿ1��S9�TbܴNXRe���!qo��G���q«/tұeث�"�#&
�^�_l�7�L��E�
��-�Z7Хt�'N�ʡ�����`[r"�0�d�x���g���:A+k}y�qҰ\V_q��
��q!`��I]��wWs�4]���`���w��Q����j9W�p�9wp�,W�zF��F���R6���Q5T\���h�]����Y�����8����4˗��ڧu��Y��Fc�C��d���o2��l��}d������qf2fR����R|6
;�����h���n���RBQ}�"�����0�V� ��6�nD�G�Gc�T���̝�u䈮�W^�|��C��Xb��c(K�k�ǫ7z�y'KY��H^\q
�>�u�{:˧[HHzAUY��0.��r�i@�ۍ!�Y��0���|�(H�^�1��I�LHr�� �OPͦ��S���! �0W|�I¨�PLGȆ=�����b��Z;K��
$�O~�%��,���/~��{^�}0|�̀1���/}}���S�S�{��oH�$��TF�
0�cߜ��#
���ܕvmŘ��6��溨�Ή�ߎ�N����ѵ3bT�L���$Œ�v����J
�)WLF�^䛓�D�
yB��e�zf���ym�
wL�R����}Tg�f�_"f���3�8�#!���=f��՜�Ϗ�{�F��¿)O)d��_ŷTMɏ���3�Ziu�I<�Ł�Q7��{�}�O��a����R���zR��^Xy�2E��� e�6F�zJ�
d*S�h�M��u^�i1ɷ���:&\
?u_�O
6�����+Umr�
E�#�!m��y�g.��T�ɘݻ_�ժU/��?��+��Ŗ��K���Ń�i{�/|�Mh��Z+^>�N�7:���6Oa
^=
�}DYT����I^S�㲩-c�dH���� Ы�:8�}"����g��&E~☒5�]A�e�t�!�Rs(�D
�Vg�-�ţo�^̆���U�ib����Z($&�g"H�R����ろ���a��̑���ٺ���0bD��W%�Evq�Ҏ31��R�O���{�f��4/E��0S�7H�'�d���EE�r"W!6�t��Q1]C�%�/��Юjy�!9��MϿb���,�D��]&,��J:,
�A�{|G����V�,$V'��3�]���3�v���jt���ƅ��쪛]g��|p�3�r'�DM�U-$��La��%�G�Kͧ��u��V�F�&1�e)�ԟ�2hi�2�~uْ�>О[pV�d�b_f:K�2�ό�F�z~�oz�@�p�F�m���lț��8o���9�#��nNBb!�
,�mT~X&����谈�2P,#��bP�ap#��3~�\^J���2���4���v�=�t���2w�ǁX�.B�t��ꆦ�����<����/���Vz�Ʈ�-�b�g�;�by ��*����ʟ�%Ŵ>����8"�`���紉řZ��/y�'�T�Uo��@R@y�HM� ]7�˘�to���8��g��v0���LX(��)��*�!��l6REc�Z GVa�&���b�����%�ۉ�d��Ep3�+w�PF���B���Ր��i��(�S�>
��O�ίJD�1{���D�"�JK�*_k��֝�v+2Q��D|��U�݆�!�{���
��L�/��,��+�(<�Gy�[�kj�"�*�@0M���6:�f�e�k:29�U·���u�� I�/9����X�v����x5+�!g���-BG�r�m
�M_H�@���\R��}����kP�t���(���I��l��1aV�U�X��:�lO?:eW>��
�S����
K����ʳd��0>����& ���s�qC
i��h�\E�AjKj"h�M���ѽ9��+�/��F��${@OC��T50j������Y�y��S����_̎1�H6�F��^���fF
��xē�f�
�h8h�ƝX^����I�)�k�U�M������lH���gc��؆���Kn��
�q;2o�[RT�s���r���]�آ�<�����f*�ƥ�)&.��V%(j���
y���Z��C��9)r��
��m�_o#9`���|�����MPȷf�D{��L���5fߚ&�]G)=R(
G�SK�.��6�p����Nj�^�������jo���g�v�<v��R������m�c�Q��ԅ��e�ZX⁸j�c
|��
L�O��(3O����.Q�gB@
��5:E80�C�>ߊ�_�֧_�rd})��V�N#Y���Dl��``�R�^zz��
*��֘�.T��{.�$�R�1��-=}�5S��r6�O�v�=�
�
XJ�I��~�"�y(��Q�Q�)B2P�uMc���>����]�#���\��.�9CJ�H��v����)��#�5�q{��C�
�y߀H�#X�{I�K�ٿ������H}R�wY�/l:Uʋ�ҹEæ�8OV�[1i�I%Xs�ٰ�~��(՛B�!�'�|X��c.����/��Uތ(u�j�g�e�4ms�1�T}Qs5C�NJ�ͤ$��,a]�9�N,���'�F�K@��33���ۣ�&�n�V���V���T
��&�]���I�[�2�3��3���%t�`�ؗ��
����z�g^KHM~�f���.���Y�i�OC�uο��&�[6б�@�j|}�$��nؼ�*b*A�̓�&G����Ks���pxx�Lj���4��<^#*���NT��Pl���w��:����"&�K���17�����I��M9Nol�6^w.H���
�lj۵��ȃ
�9���D�vJ7I)�2��H�Y�Z�p�� fx0��y�uB�:vz����6/�QY5��tͮ
,ө*�I�DhO!?�vU�
�Sr_嫆��1�D%F���bn�����F�`[`�
�j�u�Ss}�oo�q���%���
'��!���x�@T"(l�ća�>a��*ߕ��X�%�Ƨ���2���.��cJG,:@���r2z1���B���b��`�IJY�"�V�:ײ�N� [���g�6߸��D"`���|�3��&F�@���]9v҃��A֓S� �dr���lE�S��7*�|�G5���Pop�1���M�)Х��T;H�EuB�Z
k���eГ��jR{�ZQV��e�pj�� �Pv���"&=�e�5V�/b�`��������6h@�������L�x'���MhYź��]��J�d�9��llJO;np�h�5���N�/>%��uu�dHҙ��;��nݧ�T��W�1��;�۳p�4'���z6�;�t'6�Lz��RY��m�+{�&n������A�T�ngo+��w�XGp�[��f�4]��~��������b�m��Ϭt֙�U���!T��+���ߑ&��Z��ho+
�BVr�!=�C.H���q�$�9�4���D"لgℜ>��E�Ñ��\,�,�}�< `��mPQ)n+̧����͋fb��evN�B�|��������Zu�q��nޖ/�n"��z�LЁ����Ѻ���Y�IG���ܢ��}s��\�F�����kín�j$o�]ӫ��И�lt����F�n
��9�: q��� ?
"�#c*:�Ar�&�P�"
V&�H�W&K��0 �:;'_�s�x��zd�q��,R9:zsT�y��l�=m�s{�S��t(��d�U��:皘�g:�e#��J%�u�n��6Up��߬�
j���u�h��o]��F��Y.��'YJm�x�x^� ��D߃�h��5��W����7۫9���wEb^�*$q8�2^x����2)���%�����h��JϤ��<���^0ǝB�V�x�t
u��q�Ӗ��B)T/ᵰ�Q�0Xbw�X�7�#��\��yp�s�e�GC�lG@�,gHތn
����V�Rd:e���
�������F�7Sf��1�v���dN���q0����o��t[|ْ���;�{�N��#��O�e㶥��y{�(x�
>�#�Ϫ`���a�@TϞ�\�?�@6ơ�d�ݶ9Bw.s�=.W�����+�:)�����m�~3?�6r�O.�|f�
�DP��y|�[��A�۶��J�M�Z�ny>|����DDž�ejy�S�ʤD�^U�p;]��(��[e�������>���5Rt�Ɨ�̓�:�qz%��D���C�%p;k��&�#�}��r���I!�5����۲��2i�{j���,�q�'��Y���?&��,3X����r�N����*n*�2.����6,�����yZB�6�s�*
lZ�U�
u\�G���g�9�# V+��,���i���+I� `���,�
_eC�&s�hS���99Z��=ۄݢg���q
-�:1����ЈE;���#\I��;"�"�mW?����'v�p�j���|P
�IO�_��E���l0G���K�*�Z�g���0�":��
�t���:�t��P���҉N���\wce�s�4ۇ2�<�{F2�5%��$^Bo�n2�ɘ��M%�Q��斨��]����u��j��QR���ፘ2T�CX�z뗉�+d�]q�D����u��huƐ0
nr�We�0�<��Z��
8h���'C�
�Y(�-�
At�4��Bs#��El���Հ�vC�rA�-�YD+�"x�\����vv�r�T�b�F�+������g�o+t��w6f�8pwӀ�tΜ��l��Y:I��'��Թ&$7�Q6�e���B����Μ��@Cl�I���4h*��9;�G
Tr�mJ��]g���yv8�c���Eu�af��즇8� �C�Ж8�CM�G(��M�ik�
slL��
+�hU֕��q�Hl���Fjw�|ج��Rv҈����w!�����m\���Wp��Rm:�-����L�[Ⱥ�{*pm>�IjYœ�z��{һz�B�p��қ�A���,�0�I��z;��L�*�8�I=��t�M��$'9T��愩\�&�'���#��k���+9����ո
������զ����cX�k
EP��j��'��H��$"��9�d
L��Y1���A��F��aN�Ա�5^ݢ�-�iyu��QM}�;�Ouw�0�J����!!����x���~^�p��U���8/G)�"Vc��dL�>A�#)m`!�φ��!�t��*��r�l�R��90��>�orx��"6-:���9O�dN�$��v�*M7HE�`�+3d��C�@(BR�#�n�.̦�I��o�!ld��B�2�^�3�+G�.��'VD1K�dX�Q�|e���o���r����E��LQ�n|�Z\
sc�PI���Ep�}���0��w��q�C�f��5�҇ku�#�B��_�I��|�!���E�1^/�M�YP�Y2�YX+�,��@����|s �X�\bgP�l�]n��G<z���_��+��#
�����>���7)G�0V)���pЈ�$��
&����@�Z����sZN<S��^�W�1��*��s�[���R�.<rg�{A�{k�>WP(��{D���PX��r
�E��)�i�c"W� pgc��\��XZ�}����g���M������Y��:7t�|^�9)4y��{·�D/�q��-[� 87)UM��A\D1��W9�H�d.���U��[ղq�c͏Y#��G�����0;h~���Jjm��K�WC;iެ�?�_*�2�\5�Hr�;�R�#���Byl��stƹþ����c~k�����Ψt�C��0
�B����ߜ��g��7
�Js��o
P�Ȍ�C�
��f��3��1G;V]���2�Y(�K~�U��H{R��vX�\�`�]�M��]ra����&?�aK���g�SW;�%/������D��p^�+],�̔_W��ypD��2�e�pu
+��5I�H>�X�oT�*��t���=�)�5~s�^�u�8�tp!����`��������2��>�������\riY���t*�p)$�������&vXb8�/4�'J��,e�D��&0�⨪�M1y��Ҏ�R���ie{�8�Sr^_�/+j?�� �ƦjK�rE��#�19��Q"fYc��(�P��V�|����$����v ��ZKH�U��,��7�+d�},�N��J�!D�4;er�,ri_az��5��*(XD�S���o�Ӊ��nh�UFGhb��D=�QB�"k"��;��P����}$�`��/���>
qi��0A�E��c�6��[���<��
;�l����&���Ύ�ꎀ��p����w��9��i9�d��a���:H$�'���$���t���OZ��D���8%BN6��AQAJ��\p���
����IUYz��*�1�])
�䕉��ӑ�R�x�W:==����v�����C�Qd��E��gD����d�Ql��B����gKj��%��K�-��'?g���<W���Ȫ�)�B�UT�j�K��>�Ƌ+�J�U�wi
tl���iG2�/���4�js�&Xb����-�2�%R.���J�%��J\>Q~¦n��Kվ�¥�%܃Oƽa�]�ݿ��^��M�Y�<�֩�(��xI���:]26MB�[$��&=��C>��5�f]����Cd��@��n�*<|�G��]v]�Xk���P
e%j���fY����e�\�qW��I�|�w(�
8��2�d�?/P�Uw�.r�w��A��4�+_5����sc*��z����9xs�
�%�}��0��}�x������meɟOO���F��l'p-Aw9#���p��K�,�.4U,
�}�&t����")����9uA~[D������Po���2A�˥L��
����7J?�
G��@`hJ���~�LQ���*��C1�.�������n'�p�u�HD�w]���~�e-'W�S��:�dc�71���o���n�S������~���w�/k�2"U�E��G8�/�t����})y�]a��pC�y���!�E.�=ՠ�t�t1�� P��
,�1���dqZ0��M��Q�^���-24Ԇ�n���*k�x�C��o���E�Mq�y�q��уc��������>
C�'eO�9�{������oU���T�w�j����;�R��o���6T�&&��/W�U_n�E�n��R�7G�\�B���'3H�Qd�}�T�Z�w�Z�v)��!
e7'�f���[�ڪ Yp�S)�"���]��u9�
�y%��9�`|��f?�[�Qv�u�y���c�A.͏�ꗇ�"��=�
���yjl�
43�h�K��B��Mr6�Jf�����rH]!i�t@y<����.E@���a�Fα_
�����-X�s��A���
cc��2�P^y����̔V��5%+��K��\様yIY-)��53'���qES���<�t#CP���S���⭩9ɝvkuaQ��붪E�[q����ܙ�*��Ƨv��w(��/���B2������k��y�$tE���_��ҭ��v+�$v���5y"��&l�s1z���- r��i���ń�{q��q��i8�
|� *��>�m��Π]�=Lys�>��@�,�(rȜ
�+�a����`��a�.�`L��h�<��-�HC'a�
\r}G!��6�Ce��W�;�#����[�M���6,�-�J$��6L�{t����q+d���n<�A.�D]�J]<��f�m9�uZ�"��m����}%?�}��\���c�El�x�
�lpqr#-�" T�P�'���e8��*
Fۨ#�@�4��kX4jN!���2[��6�.�_�Ǐ�!��8�:E�>�z��:0|�p,��յ���!��.ER":��
{�("������,S_e��9�}0��˦�xE���QU���j��+GZ�A�֥=�%&�2�Z?K�P�S
>r���WP���D��OW�L�{zտ�o���Ϛ��w��)�i#E�ýT�Ѩ���ƙN�/�}7�L��Di�?qvS�t[,�m����q|w.\�� ��Z�V�)��
.���It�%�]9�79��ڔ�o�B�wL�`����B7p�E�5岖�ֈ�4-�R.[S$�(�!H�7�.O�Ʈ���)+/�+��]�|���"��X!��0D(le���s�
�ճ'C��$7�-��S��o�۟�^��d�Z�c/��o�/?{������4���g������7�N�s_3b�Z3�^Ԃ�szrx�ec��y�b@a:�,��3#k�G��P����#����ۛ�&d����ի���*[��α͚��.��� @nCĞ�����{��S�n;��}�C�s� �Y��|���72�^i�Ū�˝ �=yZ�\��E�м��A�Χz�cc�G�:;�u��,<j�CJ/� ��B�T�wƨ��Vد�ȿ�N�g��K����JCc��7l�TI��KXs"5��q@.'��)uG1V������80T@��E{v�ɻ�7�n
�@��r�,{YD��:sj���,]�w-e�?K��>��7j,K:˖$��#:���<�l6k,�{�Y�!�{7���g�����,Ӑ�@e�B�ܫ�}·��֭Z�z��r�0�)��\���� �<w!|�Kx�Sp7ˑр39�W
�?���{7�ӡ���Ji���K����)B�F`_C �=��O�C/�/mq���rq�,K`�iʞ=�i
zwh_�@��c��`e��!��1�11����M�e�#E�*e�.b�2
Kz�F8#���Ȉ��c�
�Yna�X\h2�Zyt�Y,yLt9Ă˙��$�W�y����0</��sg�LDM�X�6"�*�bN�-��K�ڂ!>�=�F�q�7
HX��H�a�q7'ȓ���D���ho�9��{1��<�
�k94�H���>����v
��P!D��I�w)8��'8[�n�A�@� �`4��0�y(<��g��lgX��0��b
�-�;�G�3t�xӢxY{
���:a3*����}��G��]-;2:��z����gD�xB�����u�ﵜ���錣;��'��Q�؝�v�
W�t�%2B8m��N_f�3[��{a│o��V=�o!{Sӽ�-=A�
س�%ȳ�쾜b���l��l�"�٪g69d�9���Is@:��uV�0�r�~�K�;��7f�
l�TT�?0����;��O�:�z�-�R����������I�,�e�_͐�Y������`�c��R�a2�E���W��6�65oLm�*�J�B�I��~��KR�w*�EJ�D�.�b����[��aI���B�,���<���j�zG���w��I
�W�F��<�O&K`Orw/�V���5�J��l�+�0�y$ɓ������z"H��ID�?x��--ew�v�����}
�]�O����J���h�p�z�
��}�o6 0>ϫL���!ީ$t�ˉ�wy����<ѩo�=]bF���N"�&��_%
LQ�>��to�]��<J�jeǽ(��x�A�Q��d�h�-t=j�h�#�)Xl6P����gg��v2�Jx�0� sP���j6��qxT�����
y�2z�2.�� �GW+�O�7"DM3�'��,W�N\��
���x��/��X�x0�(�>|�A?r����>�k���%�4NX[&(s��E
��`<�����0����:�
p,5�R�aݶ��DfQJ���G���ZI��/�m:Y����D&��?S|��-��O����C��X}KMu��*nl����x5F�m~���^+-�ٜ+K�m��1������u(Bs��+T҇#�ꓨ;��%��ގ%�/155��d��<����y�Z@M*�?������<��XA�=����u6�����_�Hn
�
g�;�t�j"fF��������<��ч�pw|��d�8B�����$�ܑ���7���u�u�] �J�aO(��
`.\R��kx�#]N��2�����8�}�bTW��y]������TZ���`N\n.ό�"�ɺ��N��Ӌ�1v;�zw��� :�uy��HD.�h��\�GZs6�_�sEѨb��&��[�BaF�9�_�/+��P��& R��Z�۹�*xCb��*���5��Жu""f�����%�Y{X�?h��/auM�Dܡ`֬R��w�ٺHw�[��\�⯟LAN���c˻�V�kV1;�>A�tg��O�l5_c�H�B�2�R�����矂���b�J�T8ڐJ��j2
6TƷ�5��Ih/1-�i�IK�����_�Э�>0��`h7�����4��ރۃU�LQf8:5�M����9�#n^S�x��'�V1�|�Z`���X�Yj7͏���82u�^��C(��^�NRq�s��H��
�����0喒��jZ�}��y��H�iWf�&j
�k�EJ�U6�z��7���,.Ga��;��(䞒���M�B�r�CA��#ʃ%'��Y��Q��_�M2�l�j�ͦ���W�x^���a����B#� �����Ygd~���g@�=ܡ�>c�}��ӵ=[���p�v&��$|�3ha#� ���䴄�1e�A��c2�3C��eЅ�m�`���qzR�L��^��Mԙu�P@M��J��BԸ��L�"���4pM�]��0C
$��=ػ��]7e�oBn
�י�@>��^Ÿ@^�3/��{!�|,&J�kH���r�с�sx^��g4��GȆ���#��!}R^��a���M߀G���"��CdAsa0�e8M�"�qu����*�ڋ�N��G�ɂ��<�Б����W����:x@�)t�۪��&79K���e�I}�xu���(��D5�k�r[��}�I��Ңx�gM��^*�0��=�ǵ0�pS�أ0˼�|�e�-#u�p�5Fs��
����z�[��n�*U�3����4�&��~�W�{^��
�y��NK���M�w��e%�*KA���Ǖ��RP�v)�o6YT����q%�R�#jeH���,��lPM���b�% �f�x�$�E���`���2ymGޣ�C�ϭX������}�:�I}��d��+�wv�_�i�P���osO�YA>��t=��Y!�}:�Ds�
h�|�q��
[f�K��������K�/����z�)t:ؖ�������=�T���k����q� B��$vlݺm['���ư���Ӌ��M&��o�E��Ӭ|CJ�N���6�%�����pSP)~���\o.�wv�甙�g:[��T���������,����~\sR��d�mn^�]�G@PŲ�����I
��>��¼�Q.�l����Ł�C��K�`�1���˷�l�E��w��
v�[�(ˍ�2�w?&.J0�@���b����Z� �7���&�$G�v/��r̿��>\`�X>�0G��e@��b��@P!��O�R�b�Ꮋ���� *��;��5.������kYk�.��r�s��J՚��糷z��=��5<q
��ˍ��U|�GD��d&
Ű3�;>��/F�&$z�fKqx������O�P��Ӕ����~M���45�E)ݟ��\��I
sּb�O�
��i~�"��I��s��i���uEƊ�i��������1��P_;EhőpX���{���V���ܱ�A%��o ܦ��+V��+��~�Y��Ģ�/��`��P[5����͋yQQ����3U�6Z��b�K�h�`�%�>-�E���.��z��eshy�:��O���C�#
h�Xw7Q�T�~9i<�O��bO=c�
������Ԩ���oR#��
I�(���k�۞��S�z~g}D����7����{
5o�C���E��T���G���q��#��)���Ա������Q�m�����ސ����'�V�o�0���?�k��T|��*�68� ��ob��o����H���i-���
�w�ޖ������>S�[��)Zci�cv����6Zb�1/[b�+�|�_�F�\�k]:'O"_�(�e�:���n9��`���i�ϚA7���@)������G}�9�i�I�
)�KuHs꠩�T�]�)<=iP8U�J gQReT�]�4��Pc��ҜZMaB
X���Ew��
ª·�c���]箃��Xլs�QIN�q9�d��B��Fp.ѩ*4��Xq�!V��Y�[�=T�g�/jN*��O�_8k��n��
_���.g%w�C��qԿă��(66��NO�0�S�b�sW�V|#`���OiS�ٓYʃ��ۣ��˃M�5NQE�W��Ťn�P#��}F��^�m~�Ĵw�:��5���w���̌�����.���nK�/�2�@��}z��۸{ *V
�~+0ZT�K;r��Z���
T�cN����x��?t˺�癌WMQ��.}i��2��X���T���e!
�
�.~UBd[��^^b\m��@Y�6h�q�?t�u����|��W�G�l/�kQX8�ͯ�ɣ��k�_���6ώa�l�:���~Pj,]�<&��K⬙�*k�uLWcP�U�����v�$Ƨi�E44���4&�*�Ӳ�gTȒ�IH��:��O�i�Ҙ����!ό�l8{���UUz4��r1>�e�.��lu�Ym3��[�l�����Z�����YY��.���u��C.�ڐ���ש�l���n���ͩ%c�ښ��25(Ix
!�I�Ly
Q�A��l�� 1<��0�
w��?Z�H�=�?
r�ye�u
`U��/�V�3�v��:�u���*�3��ė�N%%�D��K�Q���z�p������y
�2j8��,F�|��6�Λ7�C��-?�Nqw��qm�M�W��k�a���,njr0�ϯ�,'�].��I�:�=�RK�-B�d��'�!�[W&&��^ũ�ҋu��Dp���l�Y8ܫ���9YekpA�o�y@�ޒ�[��l|�Dx��]�W��me���<ƹ3�b�-?�:����@�9G�5���P�\W���$w-op�щ.�ʄ�*#�(l�sd��f+��UÔ��6���jǭ�]�9���=�6�dL��o�T��Q�����d@�b���U��;��=S�C�@���rO���*�Q(/}ttx�å�����-�!���J��e���ZӠ�4XaS5$�Y�|,��;E�פo��>��usO�퍔�_7M7��c0�D�VN�6�����0Z���
�7
�x��B{m;��w�.�H#��x���r\� ��TDګ2<����#��i��k�hC+͵Ά�SpA8�U;
�(XTws�S��G��5�X��K9��:�����y]��'*)*^��B;��t��s���;�?H�u;_
�e�y�
�*&���H��4�^6Z��!DX��)�B�'��FDlp=t<���?����4�Ys���!y#�&���gY�~�32X��jEShUԈYrk�z�xE��ֽ�Ţ�U�,ST'423��E}}�=�v���N�ݲ{�k���{�����!������yE�dL 3I��j���R�R�u
}���ӂ�j���k���%�6�oL[CkI�T�=Mq���!EL~8:(���B���T!�@5��}�x���+*�"���3{��JQ�{�W|��Ӌ�9Eɜ�!eε{9ʡ��ѹb�~��~#<r� e�0�C#U.���~���
�@��0�C��k���ʝ��͙^y\���_H��] X)�,���{3ӛ�����>!�ctB��B����]�~��$bhy4{����#'"�I=�qr�?
�Z�
�
|�I�i��i�Z�pS�{�D����i6b��s�Џ���r�8��yt����ř��%ܦ��m�6؆�§�^M}��>��e�����Ď�"=]V�?��R�$�/�-�2�H��L
_�#)/:>qu[�i�t�Y*
1���2j)�9z�o�e�d�@_Y���>U�f�}���f�Y[ɹӖ�"�x�~�'�~��\�ӫWI������?
[����>��w� }+d�
��\�Jp:�8�n���T�p��"N)� �hX�`b٤2Ve� .�mTZ�j�1'W��vSU�cj��_�
P�D��?f��wE�ĕd��i�9��c�x�3�:���s��X�ƭQR�1���>bX��z��c19�^` ��3�w���S������M\��8ȚpE'�s�3T��s��*L[YYە��;-?p�bq���f*k�W�q�\��������ݾ���%�FeYi�r���,�i�xt.��\��=��諒ݟ{[��A�H��%�dx#�� !gf���w�`��B�ʴOn�Y�H�:����B��U�8�'��ϋ�kGƫ��u���(�Ȼ��7���[�j�gO�����b�.�&�.{�G�t�\�-��l�`�aS��I��r8o�O?
c��֝2n�\��^��J&��d�������Ml�?bۙ���[V�/��윘�,��X`��F���o�E���b��n�i;;��aE��]�"E�k��Ԗ�l��S^6�����\�v9�s˞(�xI�S��F���[Hh]��~v�a�5w[?���a)�e��Y�� ;Ypt]ò�⊌F.dT�4���JP�ȎH��:#�2���J��"�Vn^���;8$�8��1�y�m��ҷ�5f�n�`�(G�t��"��'�C�=$'�D��p�:y���Bۘ�䨚֬1j�����w�W�~bP��c��V�GJ��ʗ��2�l�n�ãE�Z�g�\{�@�i�Aa�A�ƨ��H3�/�U�Q��_)������FZ���v$VF)d�l{:�i&~�&M�lVA���=z��pɒg�kte�T&�FRhK�)�����fe���=�~O���S�ۚ{u��o����jj�ޟ�&Q8I�+͐?�^ �n�4g���'s4��1�v��i�ħ]�:���a�oxix�����<�^_�l�e��;27GgN>���
L�#��}��k^��
��85s��^;1v�\?�ݸ��a����H���o��SZd�+/�,|5���7��zݓ�FXS�r�b_K���E��'Kf�c��2�vYpx�IJ�ߒ���KE�5�b�g�<Xx>�H�]O�����E�"�\뢍��U�|���Xyz]�2�ܕ��p
�z�3�^����K�-�LF�j�=���^]p9��#�9���m��c�l����ڷ}��)H�tb������
C�-�X̣<IB(A}�2)�5�3p�lO�kp�.�Ҳk��:{�>:�0��9w���g�
^�ٳ�7�
w�
C����`�y��vA1�e%�c���btӻv��ׂ$]�t��]����kW��!�����n��u1�)��$��@�����r��yP��?"��
�iƠ�Y�I���8@�Ķ��8��}̈�ʶ�����P�؍�7���D`��B����r��J)%ї�u1Kcbse=��w�:�Ɠ�^$t�Ũ/�1�e+
`~_�a���F�'�
�b�Dq�X��e
5T�N}Ur��!�wE-V���T�+���XE��b��[�ޏ^���Iq��&�%��T8K:�R�C+��IZp4?bx�^V�����˵r��s뭯�7
�V~���RrI�E���8���{7|Y�nv��sS߾^�n�V'�|wI�6������^�r���knU�n?��Թ��Z���F�xk2:��H,o�vT�]%IN7�S°ȅw��*�B��0��rO���t��hF
��~A|PV���+�e��ֹ�#]���P.z|S�����^]<�nP�]!�yA��vƁ��F��g�v�+��\l����K�-}��rmݽ�wvW�&j�H=H�{j@��Q
�2�����D"�]�HJwA-��n�_�D$���'��~(%�CQ��
��l$m�@�%�B��
��[�ң�+��Mt\�ծ��ŋ����G`GAǜ�`*�1N린ϧ�c�g��C��]��Q�p�,:�)U�3'^@(?�P�m��sX�w����[d�*�6++�'4V��Z��ʐ7�jDV���!\Ɗ�*j��g42���{1��x�M���k�Qz��o�49d��T�uy�x5����3eY�BGB
l��m��w���&���.�k�ۢzH.8���ޙ��R��N��Ë\ti�N�립������~�G[8\��g;�ʲz1T�(��.�2�˳.BO+v�.�T��h8�p���ș��_��s&mݔ2Y�}�s�^����l�#��Sˇ���
�L(�7K�f��uC����"{��˃����0��9(�k\��D����"ڒ�*2K(Z��!*�����NLY�����Qs/���OGk
�R���I�?<%���\�EP/,3
������rV��7%�����P�$��@~���3���(jWȡ6�}�}�~N�Z�>��
B���$U�V�n���;�!�9{��7� `>��BӪ�~�s�S�n����p������#XØdžU�����X!�p�5�'C�a��cp#cjؤ��w�2պL���o�Ug�n7
��R��i�*�nߋ�1z�q==�Չ�}�eZg�v��P��>֦o��/'!,��\3�Ln��5$t]Xq�`X��F�Ӭ��KU�j�q�si��ܴ��]��篧K�����v�yM��0x5��F�S�
Xj2�N��T�奓t�<
�#�Y���7�3������d�<�����{>��.
w��g�*�"��U
4�����m�ƃ��6�t��4��z�=;F2�ٛ�&d2���c��5�a��+�K����kGc- �bغ��GJj�s7���Qb�q(pWA��8
d8_qzu�{'rv�R�
K@�u��9�Nܨ��}[J��b6!N`G�V%8�<���'����B
~�H���
;c�Lf���T�[���M�g��aC��;^����)��9�@��"7l(�
D��.��\�m��؛N8b�`�s���ӎ��?��@Ϋ������).�GX�^,qJ4==���dnP2x�Z
�L�>YA>�6��X��u���G�{���q�����𬛘�kH�蚩ycbE��*'{�
A�13.�r��#�3^�wq
l�Eĺ]����
��g <���p�B-�'���u�#�w�a��:�STZ�T���=_���
�
Hb#
ߓq�����g��m�H0y��Y�of��G�Wr��H����)�m%x��Zhnm��S�
d��.�<�0E���-́��`$'ޫX;��Q3�2�iWE���ޝ�L�/��bF1���ժ-+�ȣ��n�/����A3�&aԝ��5*��7��{QwmQo�!ޓ���G��@�b���;5�]�ķ�?#KSza�2!,�T���,�K>��S�,�;�xRs�>u}Ǐ3��c�l�� �;f!/��`�ޡW.�w0@q�{�0P�����
��%��NS �w�~��'m��:�ķ��vJBdeN�2{D%�n�kx����p�"f3ei����g�f���+h�V��>�*�%Y-;�+q��S{YC��e�O����S���ҋ�!���IKW�����\�P�a����xƝtv��t�а�q��)?�ob�Ɍ.g.�td;�h��kiy�
iy�P5��"�5��P�p0�����ص��vaX�2"+v�R�i��k+"+.��\"rX?��QZ�㚂��FVYmW�\f����^����X�vZV���H9����I�<�`sY�4?�3��c���m�$C�UA.��Uvr5��y�Z�[7���Yu�k_|�5�w���O|�Ht\^���{���~��p5nVK�_���.e||�2�W�v����d���p�7��e
�� P�r8�y\�U�_��5}�ϗ�_�b?���r�����}+8�c
-A��4%���q�\
F([�n�/��mB{w؝�^UU�j��)�:�꾿�UzX���*s�N5Эg��.����o�ͯ�N{�%��η�0?0����:_݅�m���e��������.hS�ΤB��n�a����Mឪ
ΤC6@W��gH�V��� P�m��H0�v��:O���@�G�E�.�tM��!I���R"�\q��^��H`Q$uB uJ���5���y��;MO۠���T�u1�Ȟ�X�e�a����:7��;��c*�%�M1�]0��O��%wdn1����Ii��)�����k�}Ʀ�����Z�7#v��H����&���Wd��䗓4��bJ$���wU"6�Э�;uI��s$M$�P�)O-���*S|q��`.���ybt�~��4�ˠ$^'.�(�ܶ��RF�Z!����N��z���R�b�q
�$�b����I3(�1��9�U_4�.~x�
e��A5���$Cy�?�����~Vt_���uP+��|PK��[m��33FApplication/Frontend/Assets/icons/linearicons/dist/linearicons.min.cssnu�[���@font-face{font-family:Linearicons-Free;src:url(Linearicons-Free.woff2)
format('woff2');font-weight:400;font-style:normal;font-display:swap}div
.n2i.lnr{display:inline-block;font:1em/1
Linearicons-Free;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lnr-home:before{content:"\e800"}.lnr-apartment:before{content:"\e801"}.lnr-pencil:before{content:"\e802"}.lnr-magic-wand:before{content:"\e803"}.lnr-drop:before{content:"\e804"}.lnr-lighter:before{content:"\e805"}.lnr-poop:before{content:"\e806"}.lnr-sun:before{content:"\e807"}.lnr-moon:before{content:"\e808"}.lnr-cloud:before{content:"\e809"}.lnr-cloud-upload:before{content:"\e80a"}.lnr-cloud-download:before{content:"\e80b"}.lnr-cloud-sync:before{content:"\e80c"}.lnr-cloud-check:before{content:"\e80d"}.lnr-database:before{content:"\e80e"}.lnr-lock:before{content:"\e80f"}.lnr-cog:before{content:"\e810"}.lnr-trash:before{content:"\e811"}.lnr-dice:before{content:"\e812"}.lnr-heart:before{content:"\e813"}.lnr-star:before{content:"\e814"}.lnr-star-half:before{content:"\e815"}.lnr-star-empty:before{content:"\e816"}.lnr-flag:before{content:"\e817"}.lnr-envelope:before{content:"\e818"}.lnr-paperclip:before{content:"\e819"}.lnr-inbox:before{content:"\e81a"}.lnr-eye:before{content:"\e81b"}.lnr-printer:before{content:"\e81c"}.lnr-file-empty:before{content:"\e81d"}.lnr-file-add:before{content:"\e81e"}.lnr-enter:before{content:"\e81f"}.lnr-exit:before{content:"\e820"}.lnr-graduation-hat:before{content:"\e821"}.lnr-license:before{content:"\e822"}.lnr-music-note:before{content:"\e823"}.lnr-film-play:before{content:"\e824"}.lnr-camera-video:before{content:"\e825"}.lnr-camera:before{content:"\e826"}.lnr-picture:before{content:"\e827"}.lnr-book:before{content:"\e828"}.lnr-bookmark:before{content:"\e829"}.lnr-user:before{content:"\e82a"}.lnr-users:before{content:"\e82b"}.lnr-shirt:before{content:"\e82c"}.lnr-store:before{content:"\e82d"}.lnr-cart:before{content:"\e82e"}.lnr-tag:before{content:"\e82f"}.lnr-phone-handset:before{content:"\e830"}.lnr-phone:before{content:"\e831"}.lnr-pushpin:before{content:"\e832"}.lnr-map-marker:before{content:"\e833"}.lnr-map:before{content:"\e834"}.lnr-location:before{content:"\e835"}.lnr-calendar-full:before{content:"\e836"}.lnr-keyboard:before{content:"\e837"}.lnr-spell-check:before{content:"\e838"}.lnr-screen:before{content:"\e839"}.lnr-smartphone:before{content:"\e83a"}.lnr-tablet:before{content:"\e83b"}.lnr-laptop:before{content:"\e83c"}.lnr-laptop-phone:before{content:"\e83d"}.lnr-power-switch:before{content:"\e83e"}.lnr-bubble:before{content:"\e83f"}.lnr-heart-pulse:before{content:"\e840"}.lnr-construction:before{content:"\e841"}.lnr-pie-chart:before{content:"\e842"}.lnr-chart-bars:before{content:"\e843"}.lnr-gift:before{content:"\e844"}.lnr-diamond:before{content:"\e845"}.lnr-linearicons:before{content:"\e846"}.lnr-dinner:before{content:"\e847"}.lnr-coffee-cup:before{content:"\e848"}.lnr-leaf:before{content:"\e849"}.lnr-paw:before{content:"\e84a"}.lnr-rocket:before{content:"\e84b"}.lnr-briefcase:before{content:"\e84c"}.lnr-bus:before{content:"\e84d"}.lnr-car:before{content:"\e84e"}.lnr-train:before{content:"\e84f"}.lnr-bicycle:before{content:"\e850"}.lnr-wheelchair:before{content:"\e851"}.lnr-select:before{content:"\e852"}.lnr-earth:before{content:"\e853"}.lnr-smile:before{content:"\e854"}.lnr-sad:before{content:"\e855"}.lnr-neutral:before{content:"\e856"}.lnr-mustache:before{content:"\e857"}.lnr-alarm:before{content:"\e858"}.lnr-bullhorn:before{content:"\e859"}.lnr-volume-high:before{content:"\e85a"}.lnr-volume-medium:before{content:"\e85b"}.lnr-volume-low:before{content:"\e85c"}.lnr-volume:before{content:"\e85d"}.lnr-mic:before{content:"\e85e"}.lnr-hourglass:before{content:"\e85f"}.lnr-undo:before{content:"\e860"}.lnr-redo:before{content:"\e861"}.lnr-sync:before{content:"\e862"}.lnr-history:before{content:"\e863"}.lnr-clock:before{content:"\e864"}.lnr-download:before{content:"\e865"}.lnr-upload:before{content:"\e866"}.lnr-enter-down:before{content:"\e867"}.lnr-exit-up:before{content:"\e868"}.lnr-bug:before{content:"\e869"}.lnr-code:before{content:"\e86a"}.lnr-link:before{content:"\e86b"}.lnr-unlink:before{content:"\e86c"}.lnr-thumbs-up:before{content:"\e86d"}.lnr-thumbs-down:before{content:"\e86e"}.lnr-magnifier:before{content:"\e86f"}.lnr-cross:before{content:"\e870"}.lnr-menu:before{content:"\e871"}.lnr-list:before{content:"\e872"}.lnr-chevron-up:before{content:"\e873"}.lnr-chevron-down:before{content:"\e874"}.lnr-chevron-left:before{content:"\e875"}.lnr-chevron-right:before{content:"\e876"}.lnr-arrow-up:before{content:"\e877"}.lnr-arrow-down:before{content:"\e878"}.lnr-arrow-left:before{content:"\e879"}.lnr-arrow-right:before{content:"\e87a"}.lnr-move:before{content:"\e87b"}.lnr-warning:before{content:"\e87c"}.lnr-question-circle:before{content:"\e87d"}.lnr-menu-circle:before{content:"\e87e"}.lnr-checkmark-circle:before{content:"\e87f"}.lnr-cross-circle:before{content:"\e880"}.lnr-plus-circle:before{content:"\e881"}.lnr-circle-minus:before{content:"\e882"}.lnr-arrow-up-circle:before{content:"\e883"}.lnr-arrow-down-circle:before{content:"\e884"}.lnr-arrow-left-circle:before{content:"\e885"}.lnr-arrow-right-circle:before{content:"\e886"}.lnr-chevron-up-circle:before{content:"\e887"}.lnr-chevron-down-circle:before{content:"\e888"}.lnr-chevron-left-circle:before{content:"\e889"}.lnr-chevron-right-circle:before{content:"\e88a"}.lnr-crop:before{content:"\e88b"}.lnr-frame-expand:before{content:"\e88c"}.lnr-frame-contract:before{content:"\e88d"}.lnr-layers:before{content:"\e88e"}.lnr-funnel:before{content:"\e88f"}.lnr-text-format:before{content:"\e890"}.lnr-text-format-remove:before{content:"\e891"}.lnr-text-size:before{content:"\e892"}.lnr-bold:before{content:"\e893"}.lnr-italic:before{content:"\e894"}.lnr-underline:before{content:"\e895"}.lnr-strikethrough:before{content:"\e896"}.lnr-highlight:before{content:"\e897"}.lnr-text-align-left:before{content:"\e898"}.lnr-text-align-center:before{content:"\e899"}.lnr-text-align-right:before{content:"\e89a"}.lnr-text-align-justify:before{content:"\e89b"}.lnr-line-spacing:before{content:"\e89c"}.lnr-indent-increase:before{content:"\e89d"}.lnr-indent-decrease:before{content:"\e89e"}.lnr-pilcrow:before{content:"\e89f"}.lnr-direction-ltr:before{content:"\e8a0"}.lnr-direction-rtl:before{content:"\e8a1"}.lnr-page-break:before{content:"\e8a2"}.lnr-sort-alpha-asc:before{content:"\e8a3"}.lnr-sort-amount-asc:before{content:"\e8a4"}.lnr-hand:before{content:"\e8a5"}.lnr-pointer-up:before{content:"\e8a6"}.lnr-pointer-right:before{content:"\e8a7"}.lnr-pointer-down:before{content:"\e8a8"}.lnr-pointer-left:before{content:"\e8a9"}PK��[��n9n8n8;Application/Frontend/Assets/icons/linearicons/manifest.jsonnu�[���{
"id": "lnr",
"label": "Linear icons",
"class": "lnr",
"isLigature": 0,
"prefix": "lnr-",
"data": {
"home": {
"name": "home",
"kw": "home, building"
},
"apartment": {
"name": "apartment",
"kw": "apartment, building2"
},
"pencil": {
"name": "pencil",
"kw": "pencil, write"
},
"magic-wand": {
"name": "magic-wand",
"kw": "magic-wand, tool"
},
"drop": {
"name": "drop",
"kw": "drop, droplet"
},
"lighter": {
"name": "lighter",
"kw": "lighter, fire"
},
"poop": {
"name": "poop",
"kw": "poop, toilet"
},
"sun": {
"name": "sun",
"kw": "sun, brightness"
},
"moon": {
"name": "moon",
"kw": "moon, night"
},
"cloud": {
"name": "cloud",
"kw": "cloud, weather"
},
"cloud-upload": {
"name": "cloud-upload",
"kw": "cloud-upload, cloud2"
},
"cloud-download": {
"name": "cloud-download",
"kw": "cloud-download, cloud3"
},
"cloud-sync": {
"name": "cloud-sync",
"kw": "cloud-sync, cloud4"
},
"cloud-check": {
"name": "cloud-check",
"kw": "cloud-check, cloud5"
},
"database": {
"name": "database",
"kw": "database, storage"
},
"lock": {
"name": "lock",
"kw": "lock, privacy"
},
"cog": {
"name": "cog",
"kw": "cog, gear"
},
"trash": {
"name": "trash",
"kw": "trash, bin"
},
"dice": {
"name": "dice",
"kw": "dice, game"
},
"heart": {
"name": "heart",
"kw": "heart, love"
},
"star": {
"name": "star",
"kw": "star, rating"
},
"star-half": {
"name": "star-half",
"kw": "star-half, rating2"
},
"star-empty": {
"name": "star-empty",
"kw": "star-empty, rating3"
},
"flag": {
"name": "flag",
"kw": "flag, report"
},
"envelope": {
"name": "envelope",
"kw": "envelope, mail"
},
"paperclip": {
"name": "paperclip",
"kw": "paperclip, attachment"
},
"inbox": {
"name": "inbox",
"kw": "inbox, drawer"
},
"eye": {
"name": "eye",
"kw": "eye, vision"
},
"printer": {
"name": "printer",
"kw": "printer, print"
},
"file-empty": {
"name": "file-empty",
"kw": "file-empty, file"
},
"file-add": {
"name": "file-add",
"kw": "file-add, file2"
},
"enter": {
"name": "enter",
"kw": "enter, door"
},
"exit": {
"name": "exit",
"kw": "exit, door2"
},
"graduation-hat": {
"name": "graduation-hat",
"kw": "graduation-hat, education"
},
"license": {
"name": "license",
"kw": "license, certificate"
},
"music-note": {
"name": "music-note",
"kw": "music-note, music"
},
"film-play": {
"name": "film-play",
"kw": "film-play, video"
},
"camera-video": {
"name": "camera-video",
"kw": "camera-video, video2"
},
"camera": {
"name": "camera",
"kw": "camera, photo"
},
"picture": {
"name": "picture",
"kw": "picture, photo2"
},
"book": {
"name": "book",
"kw": "book, read"
},
"bookmark": {
"name": "bookmark",
"kw": "bookmark, ribbon"
},
"user": {
"name": "user",
"kw": "user, persona"
},
"users": {
"name": "users",
"kw": "users, group"
},
"shirt": {
"name": "shirt",
"kw": "shirt, clothing"
},
"store": {
"name": "store",
"kw": "store, shop"
},
"cart": {
"name": "cart",
"kw": "cart, shop2"
},
"tag": {
"name": "tag",
"kw": "tag, price"
},
"phone-handset": {
"name": "phone-handset",
"kw": "phone-handset, telephone"
},
"phone": {
"name": "phone",
"kw": "phone, telephone2"
},
"pushpin": {
"name": "pushpin",
"kw": "pushpin, pin"
},
"map-marker": {
"name": "map-marker",
"kw": "map-marker, pin2"
},
"map": {
"name": "map",
"kw": "map, guide"
},
"location": {
"name": "location",
"kw": "location, compass"
},
"calendar-full": {
"name": "calendar-full",
"kw": "calendar-full, calendar"
},
"keyboard": {
"name": "keyboard",
"kw": "keyboard, type"
},
"spell-check": {
"name": "spell-check",
"kw": "spell-check, spelling"
},
"screen": {
"name": "screen",
"kw": "screen, monitor"
},
"smartphone": {
"name": "smartphone",
"kw": "smartphone, mobile"
},
"tablet": {
"name": "tablet",
"kw": "tablet, mobile2"
},
"laptop": {
"name": "laptop",
"kw": "laptop, computer"
},
"laptop-phone": {
"name": "laptop-phone",
"kw": "laptop-phone, devices"
},
"power-switch": {
"name": "power-switch",
"kw": "power-switch, toggle"
},
"bubble": {
"name": "bubble",
"kw": "bubble, chat"
},
"heart-pulse": {
"name": "heart-pulse",
"kw": "heart-pulse, health"
},
"construction": {
"name": "construction",
"kw": "construction, road-sign"
},
"pie-chart": {
"name": "pie-chart",
"kw": "pie-chart, chart"
},
"chart-bars": {
"name": "chart-bars",
"kw": "chart-bars, chart2"
},
"gift": {
"name": "gift",
"kw": "gift, birthday"
},
"diamond": {
"name": "diamond",
"kw": "diamond, jewelry"
},
"linearicons": {
"name": "linearicons",
"kw": "linearicons, perxis"
},
"dinner": {
"name": "dinner",
"kw": "dinner, food"
},
"coffee-cup": {
"name": "coffee-cup",
"kw": "coffee-cup, drink"
},
"leaf": {
"name": "leaf",
"kw": "leaf, nature"
},
"paw": {
"name": "paw",
"kw": "paw, pet"
},
"rocket": {
"name": "rocket",
"kw": "rocket, spaceship"
},
"briefcase": {
"name": "briefcase",
"kw": "briefcase, suitcase"
},
"bus": {
"name": "bus",
"kw": "bus, travel"
},
"car": {
"name": "car",
"kw": "car, travel2"
},
"train": {
"name": "train",
"kw": "train, travel3"
},
"bicycle": {
"name": "bicycle",
"kw": "bicycle, exercise"
},
"wheelchair": {
"name": "wheelchair",
"kw": "wheelchair, disabled"
},
"select": {
"name": "select",
"kw": "select, cursor"
},
"earth": {
"name": "earth",
"kw": "earth, globe"
},
"smile": {
"name": "smile",
"kw": "smile, emoticon"
},
"sad": {
"name": "sad",
"kw": "sad, emoticon2"
},
"neutral": {
"name": "neutral",
"kw": "neutral, emoticon3"
},
"mustache": {
"name": "mustache",
"kw": "mustache, emoticon4"
},
"alarm": {
"name": "alarm",
"kw": "alarm, bell"
},
"bullhorn": {
"name": "bullhorn",
"kw": "bullhorn, megaphone"
},
"volume-high": {
"name": "volume-high",
"kw": "volume-high, speaker"
},
"volume-medium": {
"name": "volume-medium",
"kw": "volume-medium, speaker2"
},
"volume-low": {
"name": "volume-low",
"kw": "volume-low, speaker3"
},
"volume": {
"name": "volume",
"kw": "volume, speaker4"
},
"mic": {
"name": "mic",
"kw": "mic, voice"
},
"hourglass": {
"name": "hourglass",
"kw": "hourglass, loading"
},
"undo": {
"name": "undo",
"kw": "undo, ccw"
},
"redo": {
"name": "redo",
"kw": "redo, cw"
},
"sync": {
"name": "sync",
"kw": "sync, spinner"
},
"history": {
"name": "history",
"kw": "history, archive"
},
"clock": {
"name": "clock",
"kw": "clock, time"
},
"download": {
"name": "download",
"kw": "download, down"
},
"upload": {
"name": "upload",
"kw": "upload, up"
},
"enter-down": {
"name": "enter-down",
"kw": "enter-down, down2"
},
"exit-up": {
"name": "exit-up",
"kw": "exit-up, up2"
},
"bug": {
"name": "bug",
"kw": "bug, insect"
},
"code": {
"name": "code",
"kw": "code, embed"
},
"link": {
"name": "link",
"kw": "link, url"
},
"unlink": {
"name": "unlink",
"kw": "unlink, url2"
},
"thumbs-up": {
"name": "thumbs-up",
"kw": "thumbs-up, like"
},
"thumbs-down": {
"name": "thumbs-down",
"kw": "thumbs-down, dislike"
},
"magnifier": {
"name": "magnifier",
"kw": "magnifier, search"
},
"cross": {
"name": "cross",
"kw": "cross, cancel"
},
"menu": {
"name": "menu",
"kw": "menu, options"
},
"list": {
"name": "list",
"kw": "list, options2"
},
"chevron-up": {
"name": "chevron-up",
"kw": "chevron-up, up3"
},
"chevron-down": {
"name": "chevron-down",
"kw": "chevron-down, down3"
},
"chevron-left": {
"name": "chevron-left",
"kw": "chevron-left, left"
},
"chevron-right": {
"name": "chevron-right",
"kw": "chevron-right, right"
},
"arrow-up": {
"name": "arrow-up",
"kw": "arrow-up, up4"
},
"arrow-down": {
"name": "arrow-down",
"kw": "arrow-down, down4"
},
"arrow-left": {
"name": "arrow-left",
"kw": "arrow-left, left2"
},
"arrow-right": {
"name": "arrow-right",
"kw": "arrow-right, right2"
},
"move": {
"name": "move",
"kw": "move, arrows"
},
"warning": {
"name": "warning",
"kw": "warning, alert"
},
"question-circle": {
"name": "question-circle",
"kw": "question-circle, help"
},
"menu-circle": {
"name": "menu-circle",
"kw": "menu-circle, menu2"
},
"checkmark-circle": {
"name": "checkmark-circle",
"kw": "checkmark-circle, checkmark"
},
"cross-circle": {
"name": "cross-circle",
"kw": "cross-circle, cross2"
},
"plus-circle": {
"name": "plus-circle",
"kw": "plus-circle, plus"
},
"circle-minus": {
"name": "circle-minus",
"kw": "circle-minus, minus"
},
"arrow-up-circle": {
"name": "arrow-up-circle",
"kw": "arrow-up-circle, up5"
},
"arrow-down-circle": {
"name": "arrow-down-circle",
"kw": "arrow-down-circle, down5"
},
"arrow-left-circle": {
"name": "arrow-left-circle",
"kw": "arrow-left-circle, left3"
},
"arrow-right-circle": {
"name": "arrow-right-circle",
"kw": "arrow-right-circle, right3"
},
"chevron-up-circle": {
"name": "chevron-up-circle",
"kw": "chevron-up-circle, up6"
},
"chevron-down-circle": {
"name": "chevron-down-circle",
"kw": "chevron-down-circle, down6"
},
"chevron-left-circle": {
"name": "chevron-left-circle",
"kw": "chevron-left-circle, left4"
},
"chevron-right-circle": {
"name": "chevron-right-circle",
"kw": "chevron-right-circle, right4"
},
"crop": {
"name": "crop",
"kw": "crop, cut"
},
"frame-expand": {
"name": "frame-expand",
"kw": "frame-expand, maximize"
},
"frame-contract": {
"name": "frame-contract",
"kw": "frame-contract, minimize"
},
"layers": {
"name": "layers",
"kw": "layers, stack"
},
"funnel": {
"name": "funnel",
"kw": "funnel, filter"
},
"text-format": {
"name": "text-format",
"kw": "text-format, typography"
},
"text-format-remove": {
"name": "text-format-remove",
"kw": "text-format-remove, typography2"
},
"text-size": {
"name": "text-size",
"kw": "text-size, typography3"
},
"bold": {
"name": "bold",
"kw": "bold, typography4"
},
"italic": {
"name": "italic",
"kw": "italic, typography5"
},
"underline": {
"name": "underline",
"kw": "underline, typography6"
},
"strikethrough": {
"name": "strikethrough",
"kw": "strikethrough, typography7"
},
"highlight": {
"name": "highlight",
"kw": "highlight, magic-marker"
},
"text-align-left": {
"name": "text-align-left",
"kw": "text-align-left, typography8"
},
"text-align-center": {
"name": "text-align-center",
"kw": "text-align-center, typography9"
},
"text-align-right": {
"name": "text-align-right",
"kw": "text-align-right, typography10"
},
"text-align-justify": {
"name": "text-align-justify",
"kw": "text-align-justify, typography11"
},
"line-spacing": {
"name": "line-spacing",
"kw": "line-spacing, typography12"
},
"indent-increase": {
"name": "indent-increase",
"kw": "indent-increase, typography13"
},
"indent-decrease": {
"name": "indent-decrease",
"kw": "indent-decrease, typography14"
},
"pilcrow": {
"name": "pilcrow",
"kw": "pilcrow, typography15"
},
"direction-ltr": {
"name": "direction-ltr",
"kw": "direction-ltr, typography16"
},
"direction-rtl": {
"name": "direction-rtl",
"kw": "direction-rtl, typography17"
},
"page-break": {
"name": "page-break",
"kw": "page-break"
},
"sort-alpha-asc": {
"name": "sort-alpha-asc",
"kw": "sort-alpha-asc, sort"
},
"sort-amount-asc": {
"name": "sort-amount-asc",
"kw": "sort-amount-asc, sort2"
},
"hand": {
"name": "hand",
"kw": "hand, drag"
},
"pointer-up": {
"name": "pointer-up",
"kw": "pointer-up, hand2"
},
"pointer-right": {
"name": "pointer-right",
"kw": "pointer-right, hand3"
},
"pointer-down": {
"name": "pointer-down",
"kw": "pointer-down, hand4"
},
"pointer-left": {
"name": "pointer-left",
"kw": "pointer-left, hand5"
}
}
}PK��[��bb8Application/Frontend/Assets/icons/linearicons/readme.txtnu�[���https://linearicons.com/free#cheat-sheet
Class: .lnr
.lnr-mustache
https://linearicons.com/free
$('.mtl a span').remove()
var result = {},
glyph = $('.mtl a');
for(var i = 0; i < glyph.length; i++){
var k = glyph.eq(i).html().trim().replace(/lnr\-/, '');
result[k] = {"name": k, "kw":
glyph.eq(i).data('liga')};
}
console.log(JSON.stringify(result));PK��[�uG=��PApplication/Frontend/Assets/icons/materialicons/dist/MaterialIcons-Regular.woff2nu�[���wOF2�����$6��P`�
��D��6$� � �z
[U�Q�l�D���l�֪}*�lD_
�1t3��o�Rr0��@53��Nإ��m�6�Z�(娫coh����\�9�R��uz���P �
Y�jo㐛Zl뮊ciK[�Җ��'G W=^���Zƥ�*�?���F���d����]p�X�C��b�T':"�n�
(���H���K�U�3��jLN�
"(I
DB�ϭ�,?7,y��V�P_U��kL����n��L!� Lp4L�S�W�R)1�/Q�y�A�{�gМJ�ѱ{�sy�X��dkϼ$/���6z�M��]w[�8�8q�7.�ň���꤮=���¶�˕��j��j�t��2��:#�6����E�Q
I�_����ڝo� w�Y�V��v
# <̲��`|�$\��D����n�3/�#!
�{��
�<
�e���J��`9�{�V��ֶ h�����_[��6tL����m�����i�:\v>�ږR��p�,�{�������d�-X�"�w�� �4a�mU�
��H��)�cC8N���TR��f6�j�-�-4F̤���s�W:���j��Ai�� v&H� N���0ڄ�yt�V_���Z-0�d�� Y��$��{�M^6��g�3�Ǵ]Yj�D���=�D�:jV��}�������x����-�N�Ϳ��(��ͦ�}yk,c�h@����RP��7�l�/RW-�����α����E���>>~p�s��h��(��
����ʆ('rD�eP�].J���+���*��\�.k��;ue�n��
���D+b4�
���NOPO���x�\�S��z2��j�(�����]���� ���R��"���lK�8���Z�8s_�Ns�����O� �O&d
� ��
�@PT1 �dw�U�7T���bV��cAP��)ՐTW{Zg�Ԫ1���s����|��qOׅ�m����!bx�2��N��'}�UJ �a�V!�V�73_{��}�{��������"""J�(�(%�ݯ�B�N:��BE}�j^M�Y�Z�j�uo�u��@!��B $<3�#s����;��تUT����N����?+Ą�^��O=���vD�J峣�
���Ћ�j�e���5^të��q�|ع�FF���/��Pi�E�Ž;O,Puhര��P^
:o��8���u�2Nm�5vm��=�{?(a}�8DaxT#�4�\�<�9��u���wZ���)�u��gK�AXeay0���SE�ٚs�W���pfp&Q�D��.����U��R�N}m���:���
9���TCL4N����J�*�<�]��N2�Q���^c��Lm�5y�:��[g�*�UʝӪ�깽N�ڱޱ�.�"
���3�(%�wr����v���a�A�=U�aa�qؘh̨��n�{W��=\�.Q�_^}���2Z��&p�:o(�D����Ȉ-R�-S�fSkë��+��*g��w�E`�XS��8��j��6NO�̓`k�>b�?��Y�ɫ&��
���#y�o�ԌhW�
��=�=R�s��v�pnj�pY9������¿Dm+
�_���/��2v0�6�N�0�r�I��!�4a�O��[u!�!��x�!�uLj��V�����h+���M��ޗae3�qe~�w�KՃ����Tʲ.�I:��!K�o��m�hŪ�O�99Bp'
K��m���Ħ����м���
}�t`T���dTw��t5/��l\���^U(�m=��.�w������j���;��ʎ�rY
�ӽ��������|wUT(��[)%D$�#n�ȼfo������Z*���M9[�ִ��o�$��m�Kb�^�3�}=/<%;�F�<N��wI|��N{�͠b.fx1�Q���%}��F�����ՇG'�E!/A��T�Ց#Y�q��P<-T(&�� ��
T�'",�*�������/X@Ae��:
p�B(�Ig@�=�6�;�ȃ�i�O�H�L��*�%�hl��AM*^��a��$p��a�~KLN����OR�l�������%M�N�@�
���n>Ǯ��fi�hatXG?��D_^��^Q�o^����/���Z'Gn0lb�",�\�H�~�{,#�ӣЁ'��Nw+gx�!��a5���պr�dz2�q��N�Rr>2��#Rt><�U֩h�x�ʨ���ȯ��T7k|����_X�ĵ���:��z�GU�(�5q2[%�*�Rj����1�:�G�m���cav�g�?�I�����8*�Ȋ?1�t�Q�P��N�S�-�7]����i���
�C>��xK���Y;VI(�U�߳|')��8fl��)�v���iV!T\#2�KyZ�&**թ>��Mq�S��h���٩D���TK�TUD$*ޡTPa���-��]=�~;����r��*�I�ŗ�����)_�Ц�ŕkt���iR� �.�LL9��D��Q��:�=��)��ŝ<Z&+8
cň$�wC�Z
9��,�����:x�&V/�nw�ef!z��0��*�l�-�F��NPHƏ<���B�}ۚ�P�P��u�m
+>���\��Q�2���WG��2��!zd��vE����,У�(��F����L�~͜lW]���8��I0�[����Б:��x�mÅ�bMg�G���y!��^w��4���K�V��~��#P�Cw����}*�,l.�U?�dN
ۙ�[MYe�ϲ��x������"
Tu�o�����ț�����ZU3��0����a�F#���NF0[�8N)�D2�(�{G�2�a�ۗ��C
�Y*f���N�5�,�^Q/�}W[�.WqZz~߅$�w�g�f}JݻA��Z�0��Up|Ex�(�ڷA��á����&W_?j��.���i�;���H0n��^/�Ɓ�0�}�����N� W
��=��F�!���L�ѣi'���Qc�6������(u�L�g���٥5[:���h�A4̥�Pi'Gm�<� ����p1g�Cv��L��ߐ�"ڱ������gѥ
tU
��3�u�.���u`�Tt
>���ݛ��S��k�I6��G�(Ɗ'�Y���Eg�/���զ�M{`����}�s��1=�c��Ý�QOt�Q��;)#���
�I�o'm��0�;fxx��
S�Ҫ�_��7W6���u{Z��!�
-���"�b��n����8�$ED�N��>�����~�<�{
i��B<��=�<�:�W~%�^�}z���͕�r�������
��dV��n,�q�����<G%1�:�h�*Ad�mAH��R0e��T#{��yƑ��5���L)QD���z��L����\~J#��d&��@Qj���>}��_:ǣ�`ҁU�[V��V��
:�w�$8�6�D�a�9��q�
��X�V���3D��#h����P��M�T�������ǎ�Ǫ!�d ���.���"�=�+L�C�L'Ax��
T���5z^\Ҥr�f# ��\�Z��
QzitP�*|��^&�ظD���� "-
��d,z��<`�iG�]�V�I�q��컟��<�8KV[���g�b��c��٫yto�[���
CQ>�B�Qs�J8)�����H55|��TQA�yU&�%��x�mv]ȥ�ֲ����F���j�
��@�Hny��tXi��~_��d눁�ؼ֎#d�rN��+�Gxk�4�����?�
{�K?�1�
+"�jZ��
7M�P��7�$G�T
5���0��@�gR8Z���GNl�5F�����
�h�j���[.�^iÑ.���n�K��xh�y&�u�8R�akG��q�Z��B�;+M�ɍ�9e��6�l�N��Su��p��syd`�A���F��f�xD?jG�7�
6��1
1k�x�E�{<�[����9�4�����n��k7��)����3T)#t�(���G���LR1T��(��mD�-��T_�M]��ގТ�B����+�^�&z�4F�R�M$.;�Q?+>�28���&�����e��Q�%�qq�j��g��q=���'>��uS���-��tK��>��С���-�AhB�/�J�;P�SE�,��ܩ����V٬�a�3
_��-^BJ)�M�yF|WB6�۪DD�E|��(p�4£!������JQ>���u����ڛ>jٴ�=0�t�QVu"�[�<�Q]��c��Y�R��1�u.Q�Mo�E���S�_�H-�Z�ZI@;��Q4T@�J�5��o�9�<�h��i��Y0�s�V8�����q��قm�F6�5n����u��MM&��:~a�^8����2���p5����|h/�ʎ*�Sj�0�%���>�_+uYXIe>����'q�l�Hd��t���� �ȴp�~[yP4d�u����3$��>�3'm��9�ax<�~�n�[�#|^��?KT<R�<��B/Ӵ�m̲�~�=�!_[Ģ��<%��eQ����TV���G�)x*�(RU�~��;3Ab�����F�
e;o�\wʢ�]~}�t�
'!)*�e3|F�#}���U�.�[0'�K��6?P����G��
\-�}�)��N����q;8�y����TE?�3�fg=�#�T�s+����"4�����1Rr�ֱH!5��kgy�XQBŌHn¾�`�Y��O�K���"d�����Jl��6�J�
��N�Fۅ]��/h�:&�V�Ԝ�r��N�9��X�<���5}��g��0���ccy�YxN�W�ZǬ�l�qs��Wg���e3R1�ߏ��s�*_��}}�2�|9���O�����+u(84N��=~8c6
����wb���%)��5��ՠr�B�M�O�������{[��SԲF$%��I��۱>��g;.��wB�(e�>F�&�ۓA��]�}bA�k2*���<K�qjD[���c~�
�q��x�����<���<�O4����|��,��v���.K"��{������^��2�<�L�����m��q@������]>�}�e�+���Qu�Ϗ �WO0q�?���Y�Ϩ͵�urF7�43�K�֪թPZ>D�L~��k��`Hf�<]�JIՓb~p���aD�Nekʁ7��\7�̑U�(�FJ�ˀd�s�NH���)JԠ�s�ʪ�=���H*����C�Dj�P�I.�5��b"9i�!@�n�DU?ـ1��8��� �^[n�s1x!U�_�Ǹ�JqAV�N�Q�'�
�$c!c�(�)�PR�u\L2j���Ϲ(ӹ�n��L��"t��BG�:�sz�-��M9��~Ɉ�m@Y�7�����^L��q`
����b_)u�bdV.����H�#N��ja��%�FX�V6wҐ�ۯ�L�%5��������BfT����a��/�}�/էw����L��]���|��E(���yѽ��r��=��Շ*�F�)����~�L(KY
����[��p28U�>W�J]�(-*9nd##�w��C��24g˃)�h�BoO�!ꝃ��5n�
�
�T���C�!:�2�����e�X��7q�f�Vm��L륁f;=p!s�@R�
&q=����i�^��u�vJ�_�i2�)h��n����$�������ᵎW�*A����蓙�{N�����*O���T�xS����&��!�/�!�����P�W`O��ǭqF[{��E�C8Qe�u���0B�
u5�
��<�zP������a�bj�HY��J�Uo�a��䧻�����m�x`��T
G����RS^����²��ZN�h��A�(��3_�g�:�z��ٛ��{a֍i�r2�w�x��OUYB<~�q�!�=7#
�4>�#fm��6���h�,�Q:��lm2��:,��Ae�\f�ڎ���y}��ќ,�KV-G������<�H��u��
z �hP�UV�����%��J��ɈOO$
Z���b�w�i�M�p��/���S)�'�H$t6�bu8hi��p�Z��RV"��r�H�f9��P
~�
C�3�v�}���&!f�T��vAiEo��^��(W�`�5JA��*��'�;�c�J/��l� ��]��>�Cϑ24�ҞUy��(�x��F�
���{.fj����!��&���*�}̿�˖��bR�~jo��_�R%��+u� ��+���B�j� �}����*��r�2�������UP���V~�Z��6���B�ht�X��{G��?��X�"���Y:aN7%�\[0
�
w�Uz^&�m�M�����ׯͭ�dT�A(�ϵ�낰
*�˖��e6��|����ai�u�ns�9Κ�h�P���0M�K�$��2�!��'c{F�M]$F� �(I�b�����붛��b�C#3v��a������a:���6
1�G�4#X=j�*�ڇ����1UhJ�E[
�ۄl��x�P*X��~�8�s@���^YTώ6��
������!�
�x��9?��9�6Yf��Ƨg�+X���N��hZ������� ��S�4yA{�F�A�,�$m��&�-l�[�����'q�ŖG<0�ɓ��@�D��
�x������&t*ycS��>a4�jl�/984(ޭ�I���#
��N��L�"�ߓ'-y��#�.�'��p���*�
�h~;#��UO���9[/7�k��a��J'�|h &b��������떥vHq�ɽ��5��\Q�
��!����8Z��p��Bk�K��g}���t�b�6���n��1y�0!�2n6�p����0���/_$�"I��m��%�q��E��+��R��%̝
=��A{foE�-�~e�M*�uam���0����m=T���`C�O�6�S3�)�D8m0��mt��>O��Ku`y,hK%!%�_8��t`����I�����ł�b�J�g�[�
Yޡ:�K"{��Jin�NPT1�%�w(�)&��C8E"*y�uD��X�$4�uݗ�).��A��Y�#F��� �_ҠM��m�!�'��eT�#�}͐��o2��ݷX!��L�A�n�����������Y~A����2�Њ��O�}��d���P^�S��v/+L���,BR��4j>���y�EU��oa��4���N�d��`�,��r��h��N�_�<b��<_�ڵ(p�#~BO�
�Ԥ��]�����̕7&�������kM���] 0�{/пbI��F;w�uWR�4���6��`�{��P_�&&�&ٗ�4���Z�G!�eɂV%�]+<Ύ�g��cI�
�7��`�q�2�
:���A�Gm{n;�n��3=�\'v1�dQm?�3�1�
�w.G�{
�FÈ�M�ܓ��;"�¬���6�)��?�A�`
r���n٩Ӥ��:5���v�_�OIeK(�_�K٧�dK�O�#z��Ģȣ���C�óɚ�'���M'��>���j���7��._ݬzi�e�F$���ͥ]eJk(G1+Y�P\o;�o�+Y��K+Y��Z�J��b~ʦ�yC�GW�x�3�ر<�����������w/�+��>^|�=��%7���'n�����O}�]>፞������sj{E��]a��uE�
�r�)��f�J�<b5c��9i�ė�IB)���1�\���+Lɼ��P�Q1).s�08�,Y����g��?*��T����c#�-,�8$�bӽ(G/Ay2��+o
c���5G�!gL6��(��;�%�ks��RXi��:?�-���g�=8욵f���%�K;S6����B�`�¼|�4rS�+\<����"��?b$v�c]��qrN�����v'���"-�1���/?[�)�=�oy�C���+)���y�e�ɠ$ �����y
�dM=�5���H£W�م�zi�[�@��"��]:�$A�r��h�n:��#=a�E�Y���Pl3���\h
�FT��2����>�nB����A�f7���0ۈ}�[X�"�n�Zd$����{I(eSi��
},yɆ������'O@�9�_�z�u�p�0�xe��s�v�+'e���z�q�W~�\�FV���U�v�\��J#� t�pd�9��� a�uW�5�F�W*��L�_:|����^/�l�<6�!)��+��*�n��g�v�8ʯ���4v�0���u�'�C/mk<�f��:i�� S�c\��ě�ד�'W�S�d�Պ�Y� �������8m�n'']8.��֍�y�H@9�/�ܔR�����"�9�5�
CW����fx$��D��w;��B0rD��@N����i�-i<u�\~������^�lNN��XKn��I�>n��vոX�ZgOS��M�6=���W�KS587�&�������
��q�O���hW��2��9������j����}{Wp:h?l37�I�ֹ]��N�2V�c#�+!b�y���}|�:;��b�W��O��S[�[+wI,�6X��;]�.�_��������S�B���렴�f�
^���{s��jl_�����=�7*������]���]��E̱>������WƝk����n��8��>8��3�|���P��D�#���OM��ҋf��
(�p��s���s߭j��"˞$@Q$z������;8��vߝ��=����ɐN�<o#�
F���A�
-R/��-j`�Et[��ё��,�(���j�@��.�3)]{O��C�3]�@U���
|�9V��t�P撟�k7��*q}��/�Nm�
��%�}ܜ����hO�;i�\_����kg�y�ѝ��X1!��$���GL�NI9ܑ�o���
�����bC���m^ZZǡ'o�����5�T�x0�\�&��H���\R0[Q_����v��?<瓶X49�j��Ғ��.Tk�%bhRN�mD�-`
arR��t�y-�Mۚ���w��x�$r���F
'u�b33�H����*�κH]�j$�>�E����9^�B�K�=6
��0W6!d,J�j�[5+
��)�
h�gcC�=&�7�����[��n=�n�.�nLә�y=v�_�H�pr�\���d3���.bJU��H�Ի�?�M�&Ҙ�!�[i��ˋ��M�a�Hg"DY����Hˈ#������{��g���W�M��D"Gg�
$j��{���S�����m�k���^�8��)�B�#Zk��1!�a����L�:��xCF��� �/��r���(��Lݕ�S��TZ3{��yc���6~:>- a���?X��yJ�� �K�Qr�'졹W���҈ւ˒�ռ���Ub�_��"V-�l��[�y~�+'���H���*�H
'�+���+�v�N��#֎���֬���UEC���J/�X��ۯ*�E���P�a�Uc4|I�#:~Q>���&
C���P��b�KW��4�ƆhB�l��9�B"�4t䱆&B�A����֥����'�0ί�
��|͵���|}�fߒ.��}ΧbVA�a���)JC�2��B��f_��/�8���R�$�|�!�b������=�ƆL�s�8�U������-����Y��߆�9��$
�\�KA��,�Hf�U��b����_�A���Q�Ԕ:J��P���TWT�U��UU�RU�j�*_�Se&�|<�������n$1����e�b��|1-+1�����YC����+�mhAP�T��-I/=\��<1h���
�z�|��0&�!�)|��!N�$4�u�f�d!��~3�͙�eيk��yx�!�S�Թ5�j��
�ۍ$\��Gu(�<rn�
�5����e5�1n�:m���G�Y���2��_���<&e�
-T�ew�-xF"���I�ÊU���K�o�=,�2��\�z�Cz�xA�ğ���!���'3a�c�����H/At��uї.��;�=/���_P^N�?%������N\QI�ݕ�`��oy^m�i��&�=���P-;cך�K��E�M�ۊ��b�}��jf���ͿF�u�b�)�,� 8�E���5H���š��Ɛ����5b�>�9�ɫ�&���̛Qb2!J�Y���95>�Ÿh�pjd�mMe��C��*Q�떾&����G��S�7�a;�@��P*�-�6il)%^8"@��ۖ찪��s�rM�F���7V-������~��p!ibT>�+_����B��r����x���L
٧�KMd6QMΦZ<F��ۘh30������%Ͽ�[keȝr�a��LpVh�4'�����Ag�`}j�:��D�R�`+���%
"���{J�3��v����7�M�1�HWj�,m��rK����E4H-�n`��_+Vaj}��Ef
M��sU*�ӕvȖ3�f�h{�j��'��"<�A��D���Q�gq�����̘�#%gh�9̽G����i�0P(ѕG�9F�Pd�D_�#��y�ٗ�Q�Ȫdg�6�{b�F)/�
^Dm#\ȁT�F#��!80$/fe͒��I��
��f�H/,e���u�{翳�9��2��ͼ��,$* 6dH>K�z�u���J�~��b}��k�ś�5���x(�l����c���SE��|?%+\��P�?��K�cܹ��>��
��"�.m�DzDɀ��O��
�<�ݷ���?=�2>SϮUQ� 5�/�$��3�
k�u�m�醭��S2�R�ӛ
��m��^J�ј�S`����DSm�K~#���eg�]�d��J�
�Q���݇Sbh�k
��&�:�/ףb���.��sO��[
�&*+,���[�����\�3��`3
�#)�VZ3��R����� ���
l����;����}�u����1:@����Ԥ�6�����H4����*�Wh�&ԌbP��v|�9L�e-8��D���S�����S�Bg�m��dx�ՓS��$DT�>~7���+�"�]� Ġr�d�P����MԊ�^�6�$��x��{q��+�K[v�KA�
>�oև{Gj�;��*m��U�1V���jy��Yɷ0V���Qƙ�i�f�sDE��]D
i�I���b�C��2Ň5��I����K��斌x�-|)醕��u�T��g�D�;��f=\{F���U�{��*N�5~�_?���M��r�z��F:~�U
GCR���n�{t�[���p���Y�*w�k�
t���!�W o�Z���S�o�Y�W 6�;��3]��6M�G`r~�J|�#
�g�CwAm)�kOR�� �-Z
��^kcᠢ^xE=ٳP
�~ug\)W�_�^�]�Y0��<��7����Z
K���Ѓ�`gK6��)Hm,�u�Z�P�s�Ef|�~yv���:�۟� O�o���|93�r�d�y+�6}�^�(;��vǾG=��[<����������yoV1A���"0�[>Ft���0'�s��/�q%��8�ޭaeZ��st^Q�2�������<8p>`!I"<��dB};->�#�a�E߉^�����ֈ��T�:�:moػ�3����V�I&�#˗���$F��u�J�ԨБo
�vn�e�u*��C^�Ĭ2bG�K�D|Ç�Vl��,����1Ϻ���W���(ц�:��h���J��Yϒ���R��-t^�h���w����q/�����ƀ�fq�)>��B�bPC��Nk�L�.�4sb|����B��Ц����0M1��o�q��x
�T��ɦI&U��-��:��P|��c[74�-�ջXc!^�A��'%��{W����!��ߏk%��r�#���z|�r
!9�n6}��ad-�����/?9+�n�hK�/��?�-V>����8W���S��N�j|�M�)���9�'�%W����� �����iV�V`K��8g
$-��j"|ru
�F+��Nө��Pp�f7~r*µ=K:�֑�a�U
da����}N�8jdg@� ������_GyX�.�*�*�;�ˡ���W�Ԯ��@U�I��H+����A��PU�+d�}C�3@�3u¼�@�P��P�l�G��X|��Dh�1�Sg�����B�u�т�CS'�^L�&2\_�r`�^�������*���Dmc�U��h��%p(W��|?0uS��E��9��?�助�ٮ�N���V�=���R�3�pV淢0T�P�cs��eϷ���`��@��t�[H0�����D)�9���U���MsWW��<^&���Ͳa�e�U��#�A¶�\c��O��n;
�CuD���A��
����n�]�G\=�����9�/���յ�b-�\8
a"ǀ1jb��*�+y�U��r%#J��9�9
���9!�}�|KY���W��uhڜ!=Y�>�$4����鎺�p]s�%"�ga%
S�K!6dA��a#��b�Dg���s�f��v�h
�tC騃$�5�
��O -0�]���b��s6����~xwsF�����ڶ��V�Uy�I�xx���TP2I}a
�F�e�f�2"Ad=�����V:E��5ST3�A����}���{�H���L�@9�&崁�UZ95��A�42��ux�i'$��I1KA�%����k�D��o���
��p���L@)��vF�ÂF��*B��B�շ{�R=��6�,���J��
T�,G`��/%�42�Z
*�&(�t�y�40�n���ש���<P�i��y�+p:➹��u�1P۵�|7����L�Z���d��ДT��0d6M yl�����y�߽,�.���
�
��:�P�P��EM,��ܣW���HL�C;V�ÃJ�R�rZ���BD��}G�������X��q��
���0�0��|K;�����ka��ò����K%�xN�읯h�.���]v
C�&�Cd(q��;W�*g#6=T�
q�E0x��[�J%랃�����Zc`��X�ku]��
��$�@��2W���s�(��)���nij����Ш�����vbL�6�:�!b|���(p��퇋BC�[ު]��d}�l?ۉ<��R@!�G��z�0��[?��_W]F1�.jF��*U�j%�Ɉ�녘�#��=���G
@{�ٮh��ʹ��F�G�ҌYLj�`m� �f��h'@�5"[j+^#�.��w#v�ȱ���#k��4��]�h��#��^Zx)���]&W������b���f���5���պ�F�{7���6"��:����ʟN�;�K�Ȏ0�t7�7���Hۏ.�諅�q�/�m��ӫ!^_o���sَ�cM�{s=�X
E��ڀ߱w�E?�K��y�5�t@����ө\�
��Kc@���ݷ�����hZ��9F-T�"~D�ߊ2�.=��&���RLsE�D_��Є]���r)��
7ݢ�I�vN����͵7����dZ�GP'�YǟH�M���Y?+�q���o`]�V*{]|�W.�Cg�O���[z�����*9ꗲ_wؖ�Uu�P"Nbmi��J��<H�Zo�"���Ҽ=�u霪N��w�tɃ�A\�l�O�矐;J�����
c1j���v;n��m�"�P=�%��uS��q&���Ð�̆�����78�8��C']��qp�[�2�Ꮴ驹y,��\{KW�0Iv��+�Y�]�s�r��\f����JT��0S�mDz%U 3��E��%�϶����F���hV�nW.خ�8�f�����g&ZL���QgJ�OW!w��&��S�u�c!�]A@U�P ���=�b�C���7�6������!�����v��oL��֔�G��-��601�=5L)U�C�NJ�4�0&��C�mt4A"@����!q3@�cU0���L�%���N��9͆]!J
B�m�b)��vdC�K�ܯ�ڵ���
.���Xԗk�n�i���آ�d�� �^⬴_���糇߳c�\%�_L��Y����|t-��Ձ"X�dbjZʝRw�f�Ֆ��$,���ͱ���J
��HzB>���H��r3� gj��[���6@�ʾ8$��:��Q�YJ9�E����kIHo� ��7�~0�;�,F�� އ��j��W_�M�
L��]�腓E�V������B���jF�V
U�f�B(��6�bj�H�b�s��t*��o)�T�ĵ������m�K���H�J�*0�As��Y\/8�r���
3�-^�A}�G�y��m��r�T<{F=Ͼ�s92����D��6���^�%0c���w�h�F
�a�mI�N`:jrd��u�0S��+�d1J�τ��l��^��s���w/��U4��T�2��4h���AQ���6vX1�b0*�a����ji���-ZPdL�ƴ�5[L����9 (t@�1
� r�МR&ڰ��"�:'�@���cN�$��w��D70�U�,�"}[���{'z�(��i�Cg07��(/y����|F�Z�G�>X�qtЇ���N����EQ�Q�
���r%(����3��b>?vX2�gXݵ����";�W�]��}�D�5��T������3���ܯ�CX@����=0
P����Z*��.�5�{�yqcU���L?
���O�ut�]o�OW��@��p4�f+^
�5jQt��^���s�F�;�:�>�Ǻ�"�&��vp~ M�Kx��eCn>���
4���x
]w�Κr����E6|~���� sՍ���_������:l���(�
�|�9����UTo�<�MB8�nV��N�1�D���r+�#��rŕ%ouyV>�Sy�30��a^�x=��͔�D|�|��&+TK.!�])o�$מke&� I��98�0��\gp�hr�1PP[H��pO���*��rBɢa$)�GO��s!��3`�ޡ݉$��<�k12!7��g�w�=}�Me�21�H�!�q�[��ڊy���l���y�S���/��pl?��
`�^�O�89��|���$��������0
�$t2�K�oE���
ň@����I�q�x��@���/�v�ù``��^�-��pZm p�v
�@7�HH�l�nh�e��7]%,���n"��'���d;0�q��ل1�#e����}
u����%4фx��cK�Z=���<Hm���1�R2/��ڊ!P����x,y
�f���T�<t�,w�xf���OSv��f.eLR�4�-![c�+=ms���2`;��]%��{V�� �Mv�M�"�!A���M�H�VFD&G13����o%Sii"l�c�q��Z�Q�rD�z0/Í ���9�f�_{ V�
�2��0�ʀ'�y):r�C��|�
(Pv�Mؑ��Ch�Z�������N;��d��q�%�LpT���Ҡ�>��2�+�ZQ�q�VgY��D�3��`��9�c� O�$�q��X����;�{1�v���4��zMR�!Ĭu
hG!��N�b���O��.2�{�"J�'�
Ċ�
U��s� |H9�(���
��蕌��)���k�+�I�^�:�����-��8��eLz���J��:�0>���咔��kb����N��A�Y�@gI��M��^H�pz4\��
LPA�����B5;�ь)�@q���� �'4ї�i�v)@�M=M%A�V9P'\�P�.�>�!�[��!u���=�G�K_n�oح��N�+����1�\��a��?d�w��L�M�Ϟ[�q/Y�A��rs�f��L�-�N�D��BC�=,U�)����^չWr:k��r��+UhID
YƁ��R
>Z/�7��η�JES���_8P��x�Mp�0��y9'+��!�=��Ԅ�`�$�m��l,�1㰰(z�.�&����G�aL��kW2
�N��%�/��_U�늪pG�y��LDufq�-ik���
�[�(N��h�E�"_����H�$��}(�:�wx�j'�Â�X�".2���\����ЂIB�+��N�Fžu��V�e'w��`~r��wX�b7�o��m鍀�^�?��W�r�F�@UF~Oс��_��_�'P��C�����L|��ٙ��W+Βg�,%�&d2t9�lɲVjaiN�O�'�Cƺ���G���v�y�>c�p1�d\3����p�
����1�W�E������[L��T������l�����@<1u�yj���@4K
a�j�?�=
�h������yDm��k�!.��L��y�o���
��ْ�1H����ʒY˚ڃ "�z�0�e\f��f1
��qO%/���V;N
Z�
��^�L2䊼<���T���|m�<�'Ȓ�����wej��W�U3qC2���9����=8e�DJ���V��ƹ��2dU��*S_g���Wf���.�G�l�q~NT������"Ӗ1!:�#`�d&z�Y�GB��w5�'V�M0����(�he h'�M#��Ӈj��^h��* �$�9�P�5��h�m��C�jvK�����HR���}�(��$�B��uT[~��C�͖r�;^L�T'�����u
*���H�1�G���.P�2�ٺk=Kn�r���r���*6����Zh�z���:���3�o��G��K;�]3Փ\���x��1#:u?�:����5������j��}��?��^��i�X��*�۽�
�@ѐ�ʷ���ky�L��3L�3�J��(͝w�v�� #���ߐ�ĩ
��g!<����#U��� ��(=L��Q��p�Zh�G�=b��I��II��>
�er|7����'Q�t�
�m����4<�|�8e�H^�p�Oj�O�=��$�%dqɒT8��z���q2+щ����Z!�1��P�v�S;�J�AԔ�&c�.9r�����Q��
D"G��Q����y�9ʖ$���<Y=�P$�-��$��� 4eK蘾|�!8"m����IM�=]��6Y�7��Y�F/}=>!��v$�"��`�9�^���;V�M`�9L��0�K1��^-�,��c�]'�������h���/=��M
(�Q����2i����0��)
Tė���#���IF�O��p,Iy;Li�ٞ�k��ڹҗ��(�
�1�=q����:r���v1`�X�k��i���4�>����
*��3��b_Ћ���q�%��/�ѷ�+�1��[��V�/���SO\���$:H�n+�8��Dݤ!�f}m�%"��5�7/i�m?�qy��1�����9l����?�m��0(��&� 8f�Fþ��'�#�=*�ڇ眖�ɾ!���y�<��9�Y�U
���Z6��J@Hg�ܮ�h�RV�|H<zppG8�{G�h��~aİW�z�H�
�A��y��R��W��b�������9vbijXIQ�������[&r��'Wj�`�L�1�md�B�y�.m
�š&�+:�-g���k.�y��<Aq�7��v�|B-�[�5
�e��fL�#Ng��02��դ�*���
�bk��[��F���¨E�(�|s2n]+͇:�vk�z��@3'��lm�����d��6qE�7XX<�9C���v4݂B�D>� �B��LC�Gh&�|/e5
�D�e��B,&w���]����j�}���!��*��lD��0L�1�ޔ&7�
jGi�<,�)q"4?�
��I6I-R�_�@���E��tV@�E2(S�I@�W�s������j���P-�@�S�hm�d)&�{UOg֒��m�t!g�ɬ!o�g�j|^��Z������v]�y��cF�����8C��^����X�"S+��o�A�-y�h�&�E��)�w|trj�>��7�?qK�^f��?6���|��S��{g&Ʀ&�$T /��=�k�+4�ۍ��t\l
���X7֫F�
�H
�4��z�N�I���H��Q��б����'��[��(�Q��o�a��U�m9��SU9��_�u�gH�E??�m��m����D通� Q�M�C���)HDY]ڠ4�/ͲOcz�"�3��X8�i��.�#Ɩ�.�0(M�6۷mG�A0��|��#v�m��s��d��ZW칹8ɘ�&f�QaA;���1�MmpV|,깍��t���n3�%��"�wa>�!T9Lv���0{ߞ�����4���D�Rh���:rz�ގ]"��p�/���ʶ�ZCp5��!��c�"״�~�ͺAE�q
ɥ�?m����C���7��3�]Ls'���<����ֽ�����2?l��`�����"��f����_�RFɠ;�UrM�,�ck1h�lyv�aȫ�;�KK�cL��K-�K
��x��(:豇�����c������C����@v�B��wu�+��Ă��ټ��^~'w$��t�Sj[VNIr¢�'�-�䌣�7�)�M_�i��+d4�x��"&/o�յ�]�� ��$���������f���M�I">�RO��`��f{�����.W��硇j
�.\d`����C��v;���X�"�G��.s�R�v�(���H�>uM����G1[�����S&2�c�q��,�a�N�m�BO>��}�
��Hf�p�Y�r}&j�a�� +�r�@�>��=�/T��ʼ~��S��vA��K�u|�)��a� ���mw�p�Fq��vԇT;�ŖC�U/78P�>�76K����������{_|a�8��{/����p.�$��|�f�ױ��J�ݴ��4�s4.�P#
d;s�ŝv�2K3��"��[��y4�1�c�'6�g;��j&(�e<{L���{!4�p�{P�(o��eũp���f��쓘�'��q����
U%ʊ7%��Cۖ䫀v/�w�@�t�\&��xj��i���$����6u��4��7qq�|��
d��N�˚6�:p�OZ,��b6���Y��,gʂ�0���Z�yF�ӧC5a����BL��z-��'����$�@v7{f�g&��cc�ͅ���C��\�]$_~yO��V[�i��o�6�� A�T�f
�A!s�!M�U�Oj�^�VV����`�d%�U�J
�@͟�y_�wSN�
!��O�j`y&���7n�Gִ:'���K�'��$�\r���rSk7|P�J$�$���6�>�s.A[���LD��sx����xq��i�}��E�r���>p���>x���>��u�a~ق�ѷH���ef���a3)���8ܹ�W�,G�+Fޯ<7�D,�����)��cjd�8f���t��k�ɷ6X}Dv�����5��wi�繯� �k��~�t#��F�?D�����U���l��.)����<�͚
i���$��2�rɝ�J��ǝ�gy�y���_`�;6e
6
c�-���/��O��Ӯ��Lw�-�����e��A��^�x�U���cm7n������T�+k�T�0�)u�a1�Ի�PsJƥ����.&-��w��>i�Dѐ��ےVG>#��Vh~>��?[�����'��uX
b�����#F�����w0�by��lM��A�^^K��:.ֻ(gu�x��t�x.��3�N���Kw������|gzhF뇰J%|v����W�x��ՎX��6ޙ��oo�m[��؟��n�&�M�����Lh�̷�}���7ѴaUg�W%�ek��r����5���/�a#�#��mJ㎆2M�J�=E}.�_ϔ�w�L��>�8�M�����9�F�W�@*��f#ˬs��K
����?��M8�]@X�����7�{@t!-���X�
��ZG�m�ɸ�t��Ѣ%*�*x=`��X��Y�I�6�WC��L�ճ<+�Pt=�7~�~
vJ?����'N��i���Qz�/x=��A=Q�z�M�������d"i3�G,=�[ p�*5�x����6��$bf]7��#.�Jx
�=rMm.���Py�P'�̾F_"2,��D�ڹ���!�ƈ��BV]��U�L��:����U&Qb�{%J�-jn�M�A�q`�ڏ�}<�μ����K�yY;|��GD8*������X�GI�O }�\�p�ԫïD�>"�]�n��|�T��H�L��{[����������º�w0�\�U���7�T+ʨKG���8��U��a`���@ؒ�ŠPx(�:\��m���*,
��/��}���8biD�ś�T�#-bf�~2
_�
�x �P�zs;��RųY�1�*�@GS�s7����bă���E�ù4W�:�t&_�R���5�
�6� ִ�~��rYh/6���bJS�-��H��
�� "���&z��$k
�vTq�5
hq�X}K�d��/���e���XU�q�F{��lâ��Xb0pU�>�օ���m<hr#Q�]��U���2S(�!���@�b�_8d�[g�mڇ����)e<��������d���{�
w���1f�?�v���ߔ�+Qk�Zeva2O{N��,�<ֶ'0����7��0B�
�J�z��#�[P�t�ǯ�����!Rw=5ݡ��~y\u��;�����M�c�M���,9�A��[�օO�.���+9���%�ܐ�n�NS��u!��x>��$�^�
����KA\M�Nj5�y�NU�rL�S�+��Be� �U�n�|w>l�hS�o��mc��
շG�E��/O��o
/[GO����{�o�_�
���� ���\4�|@5����#�pǨB�����P��W&4O��!���ĭVa�.o����@�Gy�ɍu#���-pf�sWf.�he��ȧ�q����]B�jp � �D=(���Q�� �L�K-�Xmv�o�{4Ip��NZ�U�ݣ��V�6a�}B��2����N��-xhu+*=�i�a�cg�:��/1R���%����i�Ys�E��-�j�ޅ�.���,���K��֒�_�H6Zd�|X遻w4��B��ƿd��{9��&
�Y�cC��/��2�IE/e^؎�>��mf�B<��Sh����r$��v����}���g�w�P}b]��z��W�$����2Y'��T�[=�vO�»5�\�*w�=��5W����R�直�WĘ~eU�C<�۪Z\y������*�x��)}!n$�r�N�Ǘb�
���"�(f&)B7��C��[��m���h[�p�J��i�]h\���A���>����3��� a��
��9�������B%�M�p��5����t^l�?h�l����/$�i�\'HI�+W.����'�~Y���~�Wn��<ܠ�,0N�d,>���R9��p>1�ӣ�?ddC��ljqi
��j���>*LJ����,��#�v �5
Ԁ� ��^�K�j�g�����і�i��{H�,?Tr����M�"����B%:��=HEѨ�y�+��H�|I�h��AR_Tۊ�2
�'D�@��äL���}=�AVS��}�����s����eWu/��0�M)��5qA7�-|I$�?!�����y�
���M:Qd�>�Uhr%g��>6����;�;��O.e�KyӘ��6]&�
Q}PV�� ��Vp�a�Y�n{����g_t^c�b�X�{����F��e�g�d��0�aE��ٿ�4��v�����
A�+Y�G�O�������O?
�w�P�w3��!<%N+�z�#�"�SS�Z��s
���9���ȕ4�̏�>�[�ƙ��������j@=Xt|���/�:��m�.��Fp��qmᣛ�0�Z�%r��ǂT�>�h�wb��w���J�
�@�_77�m*����v��0�t���N-�3�*H��d�Z�ja�mղ#�>��qSan|�^�d����u���m�,
�u�f�先�]Q&L:V<�I|WS�n��oh/Y�V!`Ԛ��y�T�F~�:5�0��;���]m+v��c�h�;�i����g�q�+�S��S�䇣}��}�9�,���[Һ9��X_C�N'��l�+�+�=$nf�&a�`�GQa�O���ӷ=˷�����R+G)�y��eJ�D��
�b�c��bt��<#��𭜻�>�+{j�k��N+�P���4o�x���� ����p����t��n�$�ٌ�gAJ���bs9���V��~vH�6��a�'5�Ѹ�Щa����ӱ�:-=��a�hr���6���{wSy�\?�ڕ�����aO?��s��j�섊d��Wr�ܢ�?#��<K�'Vqr_��-+������������8��P�#���|f�k},���&�����Sq�_i������xlK������
��!N����uۏR�\�oߙ=��^��^�}q��f�PY��Rw�v����vPm�f��������!�]�R]B��B���Վ�U ��Fg&�-�[=�C�ᖾGw
����_ç1�+�5�`�`/���
�[ƃ$7�צ�&֣��^�S¶%^_��<�o����w
O�Bиn���r��'��,�~~tj23[�g��"���@:����
I|B�D�2xM�V���D�6l�&��_��b���K�Dz;�t�ՙ(�&�
@�cn��Q�������9���u�C�ls�D���o���4@���C!�$��O�5y�[�{� G�
�7����[�vzձJnͥ�����ձ�����!E�>c;�h)���U���&\;����w�Lm��
�Q��k��t6�壹I�dg2��U��KVS��ѯ�3s��(��xrp뇳�F�e)�g��9S�g���W
�m��㫈�I(u�q��[Xz_e؍����x��4mŁ)=O!mK��j�<�W>�Y0��J;�c
6S�n��:�h����6�2P�ͅĊ��D�te�*��Ȃ��t=1��������MW�kɝ�{����/rm�$�vw).�
�m��M^]���5Gg��M��j���@��}W�?���"cdXڗ����z:
H��p���_^�{zZ��%.F����8-�u���k�0����_�b��â������//�Ըf~ֲ��Wȶ֏���Z��?yi�?�T>&��?ߣ����'Nx���8��V�45k�5�e�ŬP+$�F2/�@c�|�:38|HqϹ�hPɇj�N#�xx���,w���UN�qX��� &��>���h|�HÏ�o�v��vH��A���/��J��
�]�+w]9=�5�ޢ�_���)�J�ʿ9��}�����ȑ��q֕6o�:��E��yj�0����ܘT�VK�K{���c�ZPc�?\��ϒ
ò,a*{z*W>�[Jћ���v��:��\_U�*�|QaZNY�F��I�RP���t�^:���K����/�-|O��Ҳ)h�sv�>ͮ`%QJy�(0(�,�B=}_,
L�SK�Uh C�"LmHcB�V5�A�gͤ�1_@1�CnċX��,v�hI�K5+Gd��2��L�����X�h:�]Q�ZiFyu2f3�j��tQq�:�@y������
:[��<6o�ڶR<�oi�
�D�e�H��jèX��Q�s�`��G
,��/V7ؘS3�l0�)�D8�v�,�Dv
Br�C+f�~a��?�ȉX>��YG
Ip�X@>:GDn��ʟe�2�B��(�Pe�REi| �)���M_��:^gp<0�6j����# ���a��V��D�x�&bX����ʪ���Ta��lM�9��������Ά�Ǻ�����e�;�P�ҽ�G(�{�"�5�k[�a!����:�5��(�o�v���Nv������:="(�8`v���h�m���9�L@�h�>bOe��|���t��Jʡ��j�Z���8B
<�Z��\����Z0z|V����{����Y�)��_>��F��%V+G]�j�p�9
�[?��m#�==�l��Hg[ۉ�A�w���u7uLd�VSn��Zɲ��0�<��T����lj}ϙ��5��Ի�7'��d�A�â�6�{8��y (�{��>I��C�W�y�����m��Lm�F�����4��J[/��h�f%i�O�p�9���-�
bqL��e���@��;2fcoPཁ�<i��p|t��m�F����yeE�e�)+����k�+����:��,�PbH��bs����SrGZ���6��m֮��
*((�?vA��CvD��':$&0((�tX�j�������JA�3Ke���{
��
�E�Ϗ^!P�j�Q5��[#u�#�>��:�
���c#cLy��GT�6����m[�8�h�
R�l&.x5$<(��1���A8�����U����)�OxsdK�˾�^+m��cjR��lX�6��Sd�3te�8^��e�A��W���ju_�b�R"-�%2E~S6&k
Th(J���Naˍ�Ɛ6eG�%�ב`��K�d�ޒ@������8}�����J������Tu��~#�[FӘ]DV��b+��;_w��)
z�o?�f��=��/"��^���{�6�Q��6f����H�y����(C�|؆� %[�#�l�炻6���Nj��8�$�6cxsP�K�~ƈh$"��} AUN��33ha"KM�D,
�3��b�r�|.��Oo�[��%�ׇ���|��f_���C�kﹰo>�p��o���i���B7rkU:�j7���`)0'����G������-�#�P#�U{'� .�ȵo����Cs�E����ǜ�w9[=<�=����Ye"bP�
���Z�K�/�ʅc�F�#d��\)>F�o�"fj�/��W�2Jb�U�(���sr6n��M](Δ�J,<:��8q�C��%c
��jY�G���Djk����M�U�On7z���@��l�y��#|Hu�W�9��e�wa�w
?>Gqv��o��lO��'pT @ۈy��6����9̲¥�Ƙݤ?EEM�u(�߰)F0��
p���N2QY����3gw�q�g��9�Up��eoؔ�{�8�B�03ƴ�("X���6(F�Ċ�=�����}���z����O��$(,Z�X�]}�7t"���Y�5Z�ь0,{�L���z� d�;�� ��h�����n������Gp���o�q��*�j�{E!�]���*���"
�ʅ�c)�Hs,�wk�gXj���E�~"_ߓ1���V^.VU�Y;=���U�*\��~�������_gg�M5ծ��S����!B�a�]T�u��ܗ��j�p;�父~\CU""�����}%�3U�����&R�-៛�==�������W�7i�C�醫���Y�L�̯]^���-����n����'��e�T*U��iQ0?`%����ԟ�_��ձ_�4��
K'5��7�%�S�q�u���s�}j!�Q��
����?�S����^�X��"�_�,fo��_p�������� ���b�7�f��}]
Ӹ�L&�����go��|C�5=蠛�j��HI�^�>(��.���]�Y�8R�J*�uC�������c��C���.Rw��
N�h�d��
�^YDz�*/��)O��Y�T���w��y0>4�gל-�r�����l�
Ő�E,�g3�97�L��@3q?k�gM{d���9ʜ��0?�%,:|(�?�����l���W2�'�,l��D�++�bKK�l�������5�^Oi�/�ʧLTХ���M80T�����<(f�b��k��t������k�|�A��
�-1:A��Ha.���?�I�R��ҌtU�UA}Aˤ��-5�7��A�Ak�[��σh���[���Ö=��#u�[��g�c/����Q�[��c2�6@��p���~Z��/��Cyb����oR��Y���:*���a
�}�3g����O��pu��-k
--�W��zk�d�ɓ���3�2��}~-pq\[~q��}t�ۮZ��"?7zR��\48h�6���K?���E�1�M�Z�y)Vj��ڄ@���v�É?�A��RVr���;�o���64��#��K�����p�3x7
n�[{��;D�Y�P��f2m���oNk�J�Ch�n�v�b������fC
��a�$o�,�éI�c��ݶv�Aw����}uu}DF("�ݸ�dYQ�o?�g2����d�_<�S��\k�`_���p�=�wԁls
���(rN�uA���#�']?�?>"�b�T�_}��*T�%y�5�H�^_���MINH)��Y^ۻ�XT��H�����P�T�wc7g�+��I�U^6*C
��:�Ֆ�:N�%��%p�~�(
������f��ڹ�u�w�[�e*�|������7d����2�@�[�v
T[��v���7
W�`�^�d���@˦2:��<���ɾ�n�-�l�����V���I"��)��Y��5%F�"F��},�
Uh���{�~����8c�~�a��r����X�tȰ�o\a�,�)�3|؊�OD���C�e-�jÝu�ss��o�сY���mt?�C5�!���x�0,y+��~+�)
7��A_�|���O6�����q`�f��0�!��"��E��f��ێ�I*;��upM��}7կ��l�$��w�3�����
D��-/~T�',�&`v�_cA�̑���p���Ec*;}|H���:��Gʝl�O=�BY�j��G%����]�JI�Z����^�W��]M.�Xw���y�\ȥ9�Ж>^t撩�w�}J����;�6�k��SC3�`�U)ZQ���g�Gj��H8`���C��P��!�
:ؐm��F��S�"�#�`�*uJE��)<,��_��=t?�o��G���Ku�,Q��Ϗ�H��m��Syv�%�
�
�k7�i{G鳝�R[��YȈ�tֆ����ƠG����Z兖-�+|�Z1m���1�W��EKv;��ec5-5��̳�'�֚\����Mc�**+���z�5��kq�0G�+Tg��s5h��BS��5��ת�6nW}q��ۦooִc�>�i�iZm�ƭJ.]M����+��@ϴѧJ B�zo��y��_��Aɇh���S���&Ȅ�%���%�%�d!t���膇�n�g$�mS��h �]&�'jBu�-���s��F�����/}e�r�����&rC���~���Vn�F����p��ݦP������'��[��
��&��\>w�(��<�R��33���5�����Q��(��T�
Q��
����!����/�K����� ޱs��V�yr@��x�C�q��F�����G��&�����>�I��g�ύ�@�S����I��X�Q�����yX�h��3� ���w��!t.�ׄG��Y锡_�+f�x�ݻv{���ӞG��t��LL&L=2���']���������GF}^XP{>j��OeG����}�$(!_����+�
y8}�D^����h|�Q���j��\I���v���E
�Χ^5#~��p�yhN����!�"_����_�|��`���ԾS��{
�͛~гMlz�nQ�;����}`�M��i��x��#XCͅ^ %��6�H��c��>�~|V_U#VV6��){۹ж���P�h�k�D�u��SbR���G���fJ�L�qf:c�,e>������K��u����H��
�BH.[�
��5�>j�OwW���yuk�]~v�U��-��¿t`k��p�/{}vew����ʜ�uև��lK*�3M捚�}�Γ'�4�v�\[T?�]�d�K�T�R�ȩb^=/���J���t��;�QN�oGK�:��������N�wT�&M�������ײ$
-�~FHjg���앚�.vaľ1��IZ��o)��j{��5v[44
b<�DZ_����f�,���̙z�F�@iY���z
�L0�@���*U/�������Lnw}=;@6�W+�gg����td��C
y$���$gD��D��Œ��$ w����{N��%�6Z i�CQQ}��_����UZ�j>���*ҙ�
�"2���|�Mrb���@sI�|��Eq@�W�*ʡ��]��)�&���� w}�XU���?q�,���y�NPd|�%�A�%��H�.n�n �| ���0% ��zX��z��e���@|�5"��ϊ\���2�����!z���^���)eQf�a�?ǫ�4k~���Tf����?��_
����1��{R�*ʼ�HMiƩ��Ǖ�+}��M)'�"#��'�S۷knB��V����2?��W*+��hݫט�=S��J��G��
�8��!U*F�F�N�<_�ˊ����E?v?�,k۞�ɔT�9̷ a�G�c����Ԙk�R��d"LB�W�HAw^"�)SSؒm?e�"^AQ�O�ܖ�ޛ
��@�֥`8F��hȌ�9gNWx�nBӒ��Lڸ���0��!7Щ�X!Á]�"�X!�z(C�1V��n��xd� �rL�v։�
�!e��ٔ%���e�C�Y�8���%�%�3B)S�~�<�@Rͣ�!1,�x�O��[�-��P�����<�ӧ�1��������И�촚��4ܻI���ucڪF�6��]6�{Jq������bA]��B� <-��u���
�ah�� �����BC^��JH@i^�,ঀ4hW��LV/�g�a��F��ӞY��O�]+Į�)6O��Z�a�/��%��4�8�˲,�!�_{N��W�t��e�窷e ��T��oe�*�:�k���yɊ?�k㊫�_VǸ}yU���'<�ּ3���
i�,�S�]�U.M�u�vj!�g�t�,_�t��R��]���G��l�C�������>1|R͋����{��ef�D9ø�
ƶ��s����µ��{���ˊEq/�5�ݲ��-�)�=��U(�,
�Z/V�1C�S,�;F��}�*��R_Q���O�Zr�����P�.���|̭8��t���!���v�%'����rI焧�R�߱�G���*�|лc���������0V�3��R�>����є��y[RPU�������_@��(��y��y�mw�����ϼ�tt�e%f?f"c��'�p�.;�;Lc�n���I�d_���s�S^�97��A�H�l��1�^Q3���[��J
��F~2�4?m:��;q�:lh�X��a%Q2�b�i�@3Gr�}��=�孞Q��R�#P���L<�����g:N�"}ʱ�xNb���O
���M»m����0�7�8�_�0�U���;dx�F��E�L�fI_X�p�{}<=��n�"'��ea8��5Q�H�<��4yl��}�owgj 1��)��a��(sn�fV�̼k�&�-�/,�{���y��-�o��(*|!��^��x#|�y�VhYx��.��Ez�VdSmr��Ճ��/\Uʁ��b7�v��E�A9�`X�6�
��#��nzc�#i�[���+$�]�����](
�pd&��ӗ��u^�����;@�jf��k�Ԅ#�nʵ�۲�t�
�OC[J�䘸���F��.:����J��4��eE�
�L���u���V��#L�Ծ�.я��W/���.i5F��Xnő,8r��&����]�6�ѫ�����[�9�����&r|���[��"B�GbP�o�Up�]g���9.�K����AM OAl�w�+���FH��4��LD�O��c��>�V�l\3.늓��Fu��������ȩWt�kn�|�O*�JY����f2�:��].��K{�/K���I��c!��H�َ�wI�/.J�[Jr�z�lJ^��§�`���@$�d�0��p�zS=D�d�l�Z�يkYO3��"
0yϣs%8&6[)ۊ��4BXS:o���|�I�pl�{w��w`xtg�b���Po�zE�.��s��LoJHlJ'�eI�e�<iBpP.`xF���A�o�q�%�7=.�
Z�m�s����%�5{�7��P��m�D�O}�"�zCn�ׯ�~)���K���r�l
���k��4j)�����9�Y�eق�߃f�������6S3�͏�^[����p#�Z�{Hm��W��)$$�̂A�v��3,�ɍk�P��\��,��i�
�;�����l�U�j&��h��-d�q]!e�5Q"߱�w=,��]�����B$�U�""5��=3�D�R��?���T�V��)�|���z�dE�k\����Cy�� �dyd93���9g�{`W�hj��!o
L��,����_r*��U
^���S.�bke�9lS6Ca�x�ۡd��p7:p�l��7�oy�"�f��j��sqk�/�ú�,���[Ѣ�kiL���B�M�p�C��u��x��&p:m4�%~�N��,!��ue��L`%�<���o����hʿ
�2�J-�~6F ��/\w�lݑ��O����Ru�v��ʸ�g2�izϷM�}����"��=$�/�`Lw�T��I��ꑏQ��ŊC�]o��ߏ�Ȋ�{k��@GSdA�J�1��{5���!Fl������Z�օ1����kM! U($2���)
'I���YB�"�Z��b=a�C�a����~1�(D����D#iw�7��W��tQrPgq������_���]���[%�������sN�����y�o����^�XY���A�\?O[11
��7ZK�տ�v�I�X�ߝ�Ԗ����=U�hbOv�/�~;�XD�v�?�\������8*�\������)�h��"A�ϯHǑ�9+��M �^Ų�Zdu��@9}�+~3�,��<�LY�Xo�,�r���瘄z�_�T�Xd���qd�<�UHp��Mc���H@.�]j�܇���Wߧu�y'r��"�g8KTQ�>����O{M��A�k�Fʧ���FƀǸ_�[KrX���1X�^�5DK_|BN{�8�z��
�|U��&M��\�yZ��Vt;�3>�N��}��[J#�u��-~����}F�z�<
E�\j�J�[ޒJ\�����^�ˎʰl�A�H��$�2r�`�ȯu�&��h<�E
�T���^1�t�(2?�OD������h�,%D����0���Sj���'&k_���b��"Ab�@ =O��Բ�f�����{C��d�p�n��)<e!��ab��D�i���&)3q������%c��5�`��E��>�J�=����Z�J��
L:���{'5fkwb2��s�Ǫt�=�����s�C[�I�u��}]|3��]�W6�M�zN�d�[�_���۵����GG7��#�}�{��u&K�gʔ۷�N
NEss(58i������L�ݨV7vK�*!j O^k<��������lW�O?�Y��F@Х�ʸu5&�vɴ�5���u��gB/\����������CsL]�(x��x<Lv�\����+[�=��sE�P-�"2%�`$_�#z}
�l��SZ6�,81U1���+Ub�a��b��c�
f����&�d���4Ϛ9-?J���`Go���?E35F�E6�ȁ�V�Ӫ���`�u���i�ӵ�ϯV��K�r�̙����C����"5�Z�PӨ=t��RnEǦ��(t
�m;h�5?c���a���6�R�Uh2F��.I�To$l�Ý�眵Ϊ���~;U[�.i/�W��Ej�2�.i�v��gY"#6Iib�"
1�&�8�����l�]` ���J��-��CËD�l�lj��i���j����ݾ9oe�j���߀l��#~aB����}Ý��s�����"���8_k�K ���\@��O�0���T���f��Hs��9Y�P�\�\{�Z6Fq�;%@s����(I^�f����}`uڈUu��}�͇k72�%n�Y
�T� /��&��'�!<�ǀe�V,�Az�0��0v�w2�q[c`��q���3��Z����;����Y��y��G���G,}.I�F5�S�=��6��W��x�����`U���+��ٖ��U���\�a�� z�D�R�FKL>o��A�Js��K9�qƾ��^�l|���d+����B�b�e�Bg��#���"��5��ʼ���^]���1����V_��w��/I�k(3A֘��M�{�3� 6���hM#UzD6jVO���A����~
\��<����1�tֵ;�Zm-�o[[?O7�d�Y��{�����f5R�Պ:&R��Q2k�"R�Ԉ�Լr��Č�VJ�#�X����/3�j��lq�I�9�
-�y�K��o��Ȗ����K1̊����V�U�*���/�<6z�\�!8�[����͟��4ul��g��c����;�����Ex����uxӅ]�b�����^��o^�*�y�z������[�,��bK�p�"�h�lq��h���|$ʞ��'�ݒę~fh��̡Є���
���7�c�B�{[��ʞ��AǸ��\��a���EہC�h��{����^��H��HqJ2�Z[�^k�t�ۼ���D��!4�b�Zc���VJ?/L;�#6l��}\\�_�ߐ��r{�6c��Ʀ ɱ˂d�<iW�}'�]������o�,[l �&����4�3v_�Ŧ?�2��d�c��ꚞ�`H�}�.V�.[���l�O8C�kO��1��ћ����U��WJ�~��p:�Z����˟��B��ʔx�yxz�����
��X5�>�.�˺�u��/�^����T��v��yZ�|/ٷO$��=k���ݖdT���"��{�^���Ǘ3d��7(����V�Ɨ�x���s
��~ب��^X+7\�YטW,��ZEb�`
l��''<(��p�̲���ӂ_���;�sQ[�y$H@҄�����ҥ~�p.�C�%r+�qs(;�K���Ӧ-Up�3�]�w^����{�Cz��!?����A��U�9�#�#���62n]�:������x�2���7�MF�5U;�EXra����F����+Fd�����|N�Iff$�p���O�}�^���Y���f�Q�\���T�"�3
Ag��]�V`��ދ��Y#
�q�X$�2�V7P71�P�pk��H٧��J63T\7у��Zp��P�x�Ŕ����l�@s���6[ ^�Zo���{z�x�S��[�弣{� �s�p[��|�0�~M��qJ�f܂��g�
�'�S=__�l�������1Yb�TR�
o�Y�wOX�g$�6YF6F�%^�����`�ꑢ�հ��(_��������t/c�;��k�-@���Mm�\\�=�3�8-ΈD�T�bN���y,o�;==3s̪-^�64G:^w�!����Mf�phN�-`������9c�x�
ܘ��:��,ZN5j�m�ۀ�b�pOE]�އ���G�c�d�58
��m���L��8����
���~E̍1�`ۿ
����%튑e~��I�n��A�]<�e�
�u�7�<KS��Ħt�BT��~��&p�ڗ>W�Y�x<�M�;�T1������l�R<
^��&X��Pw���ƍ#��0!�|ewe,
����DaFgef1�g=\����T�zI�`�)���=����@�?l0�h��z;��"~��͚��G��E�7��,�e���|��O�������,ۑ݃�7�W��u�$U�Kդ�a��sΉb����#'vnt�ѽ�ၓO�C�k!�=X���o��3yߌ��I��j���{�ڳrߡ��y����s�q��V`D�B;����RpkZ��Mx����5
Β+Vh�)RE�����^����֨*�eUoi]X����i3�ڻ3#�a&U�*�jR��b~��閇f�%���2gh(���2���ϦUj"%���{��l�%�&-Ͳ�"��X
#�g�g���/��q��`�
��Cɶ�D���g��J�\@�U�R�tPe�r}:�^���(���׃��[�����9qWA}�(K}@I1�U�
�H�T���Fb��5�*XW�b��N�ԧ=��5���d%�E��U�%-�BsԨ���vT�)�\�,O���J�|�����wj��z9��#�_��%
4h�k)@h%�I��.�BnSa��ʋGFǪ�J8V�4�3�\���:K;aOl��Ðb�Oh�Xl|m��s����+g�鸿��8D��@WW����M�u8\�嚕��d�p�v�8EUpF�x+�@�4!����O-�N&��2ɢ�~��,0W}S˺���%�a�L���Z�@�G����R�迾G����䓋�c>K�7��7�N��:V9氳|V����L�9�����̤y��ڮ"F���1�l����r�s�Ҙ�}�K�J�Bm[��lf�o�����e��F2���.�b ��0*�N���_���dc"�
6}������\�9�!�C��#�d�ϷA}��
9�lkT�ـuWu�R%���-�U�D
F�ֱ��<��VNn�����7��m�8%;�D�;�f5S�̝��/m�c+���%����y�ȳ�/'3qK$�bUDJ�`w{⾭�s;jPώ�eg��*}ˈ�?��4>��n1HA��ƙۤq��
������GE��h�ޟ��U�<����o�����>wo�Iͤ��Z��,A�#�+���V�|�dz��d��z����@ͧԜ~��T�5UxC`d��ƞ�����b�]�#���Ӆ6:��j]tWU2)K�*��h�5�����M����YCB�������)Y�ʳ�ĸ,?��鳗�n��ѺxdA6!@������C6bӲ�!��� ^�D�L���\ZfÄ��*��Ƕ�=ѿ
��U� �T�Tn������3�}j���%��`xe�.+M�����~�^J��6�xI�@V�j都-;��+L�C�Vֆ�a��["=�� �(\���(hx�+ژ7�(���j ,gb�αh�p�ix�Z�6�s��_~���N�L��:�w�]�2d�"�1���.���8��/�j͙뽗��(�(`�&
��bCѸ�ҿ?
�Yԫ�˿��C�� ��8����/����U�������3�>S
#\�;���a�����a}��0D�xǃ�����
��n%p\���OR�P�}��/�:Vza� ��`Q �eaA
r��<'�
b��Z���x�`>�B�ِ�"�D�|M��w{����W���{�B��\P˾(�"Iv<X^�eK���P_~>�p��`�@��7�۱�h�VT-O,Cy�
����]���]N��OuW���ӹ�<�B%��
��2iPx�1={?�D����fe�0u]����=s$3�,�Q8ov�`+
|)3?f@�dm�9�>x8��.�5���m3J�ʹD��"�ɘ.Fn^�f�,�&��amƺ,�b�u�u/�9���ˏY��'������&��c��6)b�ڢz��'t�"�����^�� m"k�q�7ȝ�&�ME��ݛI�'����=C�݇��y&,��Mnp�:�B�>3Ctɨ�b?�n�7�X�|s�u^2�~d+��Vd%�����i6^#IJi�p,���z�K�cc]�n��:��>AX���B^r�����s��6�`��ҳߎ+���ɖ����*�K�9�V����WqpT�-���b�$��I.K0B�weh�o���]Q,�Z��"�J�L�K���H�"f�-̥�`�
߫��|��[�#�Hш9˾
٬}�4�W��ǃ'8�ዧlS��O��;�D�K�sU�}�>�cwr]AwU7�
��)�)��Ԧ�di�_����C�`2�<��������oZkO�Ȇ�~_���h��2�ԁԀ���;��\�'2��i?E�
q�ˍ���{W1�>�y��(��,��wU�֙ߐo����A�#�����)j�;c2��!o����sӨ�>(?[Q�cm��W��u�ݾi�I�R'���͌�q�P��hY����Ҏ��q���џy!90�S`��j[ �y��ԧ����/L���j��KK�1b�/�L��E|�^&߬@�E��,�g��������<��#3}˜�8�G��^9��p悌˗d퉖���kv�ɀ�Q�W��V�?��&�?|���-�ئFv�t��]����8S�fS͋&�+�Keh��`84�B���<��t��%')ws^9�DN���f��[�,�,x��fZ�4(��l��,�"�^^+]�
�>d��g��@WM46��]�i���������
�u�l���r�����6����
�G�����
�`��U��!����:Œ��"�y�[el�\_R�
�Č��<K��(S�1ͬ�;�:{ōhƨ��F6�p��$+J��~�?�.]l2��3L}�ש)*�j0XéqW��AL,����';��:E�˰>v�Țz�TE��
�s�&�7k�0$D&W��֜�ZR�L�!dB��.!��M%���}X���J23�[�ܦ ��_T�桐��L�VY4�)��\Y�Q4 3�����_�I�����H�z͎�������Ҁƀ��e���i�ٯ�~�I�(��E�6���&m�"2�5��'�H�Jo�1�o�Xe^�9��Zץ[Ӌ��G���h��.�&��D�0+�����=�!��@H�Ӆ$e�
����аQ�ܰ<c�����t������N+�*Ҕ�E*՟�j��D�=]U�)R��q����Q�6���9�~���J�a��|����'�O��-j"c��+�Q^��Ljn)��B��A�;�H�J�č�֨v�����
�Q]�գ��\_D�'n��d^������M⛫�{{�e���J�K��][}���p�����RY�4�4)ÖM4��Òx���_�����s4LJ��Y�9,b��+���O.;���e�������z��A�|��L|���w����sNCs�Q������`;o�>��{d�)��া^L��^[��e��z�|鐺a��HW���}�����r%��r]U�q��Q�Z�Ct�`Gl�������}uǞ�Ɉ�Q��(ہ�P�#o�\�)$�,�}�;<�Rd)�G�����s��<z$�Km6)U�����59�1i�(��}�E�n"�ybn�İ�
�7���~3"�P%UH�V*�c)߯�Կ�������joH���i)��?�bֲ���g̒?��%�Nf����[4�<)d�A�e�8H4�7�\{�����p�JX�l�)�y�o��������63�U�l�*�U���'�G���J�U%?�f��V�o ��������7�?k��x=�ѵ�K\�I��RUW~��^�}Vr������Pؘ.#�h��'�?�������$�̮Vl�g�J,)hǿ��T��-�fG~��?�J~�?���L*5���eJ�#��M�7ݰWP�,_,
b��!��# Hpq�A<��fy٬�et�0����aƑ9ȩ��Cm��Dģl]��
���b
��`�L8*�]��An��a��O�g��ceB�)�
j��=��^D�D��}ޱ�rO�x~%o�bX²�S.�����)K��u�X2��R�nDF���imͶJC�}# � �8�AYI�4ƘI��%g+�F�`s
$��B%���xo�3��7������;p��7�4�K��3���6�7lhh��ߕ�(�V�p�1ߋ�r�/�{� ]t�o�f{E�"�[p��ͅ�d�ڄz�Kt�,��3���K�.#]��yQ��yG��)8a�j�
,��(��r�5�V�##(����t����=4ֵ�Y�:���M��^ɬD�\�p� ��fat��7ǹ� �˾�'x=v���o�mM�闑�--G�>r�K�{�i%D
�F���"�|�>����Y��ܒ���G�|�G5���B��9�A'͕Ʃ&_�
85$���\W���T�%�0����k�GTv�%�F�]�����n@�ݨ����K�++_Y�qc�J������+��pҞ���a�B=��we9�J�n�?~����L�.e�������3VrY~g3R�NmCC�JwS���:��7m~.ꚁ{����k}[|[��fg���2�ǟ�85���jV�]t,�
s�+@%�E3a�����ƒN��}��_�mz��S;d}�
�nk-���n����PHI����61�oR��{�>��Sp�n-��u%*e����N�<7���h'�]lY?Qt&<���oSP��u?��Y<�s�4}Ó#Wg�����8C������V'��қ1N���dX�"Zf\�E�<Ņ��Y�����u)MV%>v0���ᢀ��DҸh9m>�[�]!2�A�ey�vT@4�Ü�8�;Hk}k+�X,�~�"�g=D��q1�b�@��d��G^�D�\�y�P�!yCu�.���w���k�FZw�;��|�j���k�@��v����J�_�-F�����W�\��^J�k�fGM�|��]XN'~�Y�~��ԫC�>�e�V�kc譛� W� ���S}^�o��>� _�b����΅k�$]��
%8 YH���%b����w1,a$0�+_��n�r���26g<�Ա�2��(�2r�IV��:��z�S��%`�H��Á�ǭ���G��Y��ĩ��貉���V���RqΚy?k"K����oB"���MI��L�=�С�1��Mk�)
F�A%{ӥrS��# $(8���ĔN_l,(������
�g�6m*M�#���.W-I�}O��0�
zJ���Ⱥf�9q��T�����z�`?���^�Aг!B��-^����6���VJx+��c�Л��z.�L���g�״��ַ��*WNOm���֍�Z@uzb��B����<S����8�|ga�|��۷��e�oH?��֞�q I��ʖ�s��JR�_|�8E�Y{s�ƴu�q�=��pSޱk����t��/(������/*XN�x�0���u�[=ը��i��#q�\h�HF��P!���y+818�7Z��<�N���i
�?����K��7�pd}��O��;A��V|,�H�go��.�e�}9�%zvR,���!�34�>RR?�vCۆ
{�J�{G��~״4X��j�ŀڣ��6w@,�;�z�����^��=�q��q
�fx�аȅ�w�/�J�#���^�xg��W߂b�k'�� ����m��$�o1B�4���BZ"j���z4��5��b
}����rf!V2�i��3"��4�-�=D���"oy�/�&�6�5>��z�t�9⟕�(&J6����y�%�3ϰ<g.@f3��3�x1t{s��=��������o�c-k�n5��.Ջ�F7r�ät���7x�(T�=0���NkHR+g#�$H0
����l������M�ҍ_��)�)Vn��覤��lD��>@�
;h�a�EےlL��Ê�F䈑�A���
(��=�O�M;6�I�%��8Qv\�PT~;��@K\���F��mΜ������v��?ޏ>�m�[?�Zb�=<�gm�g��4�ؾ:����̎�!u�ؾV}sr�\��������E�A��]�����v�FO��:�2w)W)mo�͡"�_�x{�8�Ϳ���'���/�!�z���l>��x����y=N.����?d��,3�����$�{V�u֬����U����^�qŔ$�q������w�&��mh�J�h&�sI>�_�J�%�|
j�+t�d=<
��$,���y�����XN�G�n.P��I���U�Y�l��B�ۇ�<~C��e͵N�0}����D�ҝ�Y��y�)Ǽ�2�c�/u>(��(x�*4[�������KK���m����?m��'B�_g]���Ozy�e�ƨ
���J#%��,�N>d١�S�@�
�w��p ��'�uq�m;#=G���`�=
���|���0d�mP�@����"k�J�'�pe���A����O���)���A�����79�nL@����!�N�
�7�Gj۲p\ɑM�E���9�{��i�����eJ�:��b�Χ��7��&8vbBܻW4�{Ϭ����C�Y�g���캃��>�w�|��-(�p.�Ȼ�\6"�Z���ڍ-l�3frq���Y�X�V�a�4����
��_��u������V)�/H��!g��knfX����5E��E�
B-&s)��8=%�Sӕu-���r�8���/<&8��Tj�(6��>���LR(5�G1�K�[�$
���>��=#c��Em���OYm�$q\���]_(<c�0�Rw���Z�0���E��r���~#�2�'0��i�4(���w|�ן�ұ"�Τ��ӕlxkK���=MZ�}{���ޙo�m��TB��G�v%�}�˥��;��o���o7�E��{G;��p3�>�q�ӆ^���$?���q�Νc^��e0��������p����@39@.i��s0(��ϔ�E�E�ѹ���ə�P��p_z�Ɣ�������f�?�h��-�QRG�G��&ے��Zj�V����������B�]ؤ�&�Ǩ�#��BBl��+z���I)�>*�QMQxx��A�-9��=�s��˘h���My���f<
�U�����vT?����߿���`m��M�G��OU�����p���{������YY�c�(��k�H�U�?ݙ���5x�����:�1��B��^aA~����k+�V�ֹX�̆l�Q�'����Jk']���
-��[!�qxfM�<(zgxr�#�c���%����Z*5G���ڙ�,������Q�,�Oe輺���t�;i%Q�!�O���E�(\�V���;oYm��7\А�7�B�0�3�����W�E�����'��E��@����j� �۲�.��>P]�Ci]Ȗ-!u�Ʈ#�֑�RM#�o���>���j[�q�uq�˫�'�3��|$x2 �Xt���F�KB`���:A6�=�*%�����BP�b�S0煠\�,'�oDr��C�q��mY�1u���7vG�E��M[7�n$?VQ�U<����*?��ަ���t&ufKG�$1(�Qұe&uM���W�-��`�孠���ӕ�>�A`�:�[���"�X�D����L;�6�6���Z��M��}��������3:I�%�,VlU�|Z�����n,>�%�R������_���'Fe���3/̷߯X�r�_]o�:�/'�\��Y�C�g&��.����kk���!����Pj\��@���1���>Ȱm5��m��E�#��}���Q�|`V\��GN�?90pr�qh�,�}̀Z(�b+�Յ�)��O�='��4nȿk�=E%RQ�������e��;I���U�ʂK��K�eUW��\O:�3J3��x<)*i律L��J.��"V�N�0���IM�8!�u�t����
}u_���"<�M�Mr�*�J�,H'�GR�4՚��^���q�M��r`<2Gg�8�r�����6q�`yZ\x'xR���)���lvצM"�|-7uE�qB��V]2̪2�W\.����}��
D��n��N�=�d����س����cY���YR�.{P�+\�^����n��Q��t�����N���:��}5x�|��F�q�9�i��n��F��5:'�<o-,�lh$�QeQ��e�iV��/�Iɔ���rm�X�ׅ~t�JR-~�;�
����S�|/�**:CꗏL^����
S�~P�^��#H$"�]���t m"��6~��u���˳�ɱS����Y���[_�q@n7���ǹ��f5��ݷy�a�&�澠U��������^S�qm�cI�R�/��F[�����9��*5IQ��D{QV��D�%��W�)��V����t�o_]�꽹p�[,��*g�_�;���H���F;��K�좔2�Yi��
,����Po\��P-6��M�C�9��3[�e&�!�t$�
��~ɏ��o���b����͂��Ѵ1���ϙZ��w�қ��-�[+) �.�����&S�_�;ڤ~?"���+7�/m��lT���P������r�`d��P,�iq��l�oұ�HVοׄ4������Dp�}F}[�t�T��b�T�4%��D�:A~�*n�֤�Ժ��4���R'���f�u����i�U�;܌�+T�$�����1����WI�U�Ȕ���Ǔ��Y��5��&��߉��e�8��4P�L��-��˪@��?_��1�Oe'~�n�O�wO�
��u�RܜW@��S,�ώ"ܓ[8T�ߥ��¡9���=���h��Bd���OAcέ
�_-9x�7�;|��t�9�Z�.
�E���/ ͓e5����h�
��s�g[�q����t
��B���i�Ԡ��A��y`]��Č^#r�!��s�%Q`�
��7xy�]��_�
6`_�P�5��
�õ�X�A�!�!d~=vئ���"�0R9o�fxW�>��%���p}�C�7��C���"P[����KL="�ê�EY��5�|�i�amA�W��D�l^�9<�$�'�܍��z6-�J��Fb��ۚ�G��A��<�5��:��|��IAQ�^��손����&��d��}�3��XAY
z�g��
������NP��˯�.�w�Eh�!Cږ/�\a�p�9����YH��9�r�#l�zkг`��8�a�Q75�`*T��
f�fw�V�`l�m��2q��D���8L���`��(X�5��5$�d'Ϲ��ԮH�`ȸ��~M�R.uh#pI����6s���fjE>�ݸ�4y���0w�F/��m6��eL�i�ᴎIi��aT(Ɇ���_,{��[��R��z!l�,�>@�
�x�Z�,B��,�iYv�,l�S^�Ms��1T?]u���
�O���z뭳:�M�K{���z衶-��u��;�g����lm
]���t��K0�v6���:�*<��ܑ��'�hD�(x�:L�����x�o�S���=��c��^^��PK��[-�
���JApplication/Frontend/Assets/icons/materialicons/dist/materialicons.min.cssnu�[���@font-face{font-family:'Material
Icons';src:url(MaterialIcons-Regular.woff2)
format('woff2');font-weight:400;font-style:normal;font-display:swap}div
.n2i.material-icons{font-family:'Material
Icons';font-weight:400;font-style:normal;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga'}PK��[�(��<<>Application/Frontend/Assets/icons/materialicons/dist/README.mdnu�[���The
recommended way to use the Material Icons font is by linking to the web
font hosted on Google Fonts:
```html
<link
href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
```
Read more in our full usage guide:
http://google.github.io/material-design-icons/#icon-font-for-the-web
PK��[m�䱚M�M=Application/Frontend/Assets/icons/materialicons/manifest.jsonnu�[���{
"id": "materialicons",
"label": "Material icons",
"class": "material-icons",
"isLigature": 1,
"prefix": 0,
"data": {
"3d_rotation": {
"name": "3d_rotation",
"kw": "action,3d,rotation"
},
"accessibility": {
"name": "accessibility",
"kw": "action,accessibility"
},
"accessible": {
"name": "accessible",
"kw": "action,accessible"
},
"account_balance": {
"name": "account_balance",
"kw": "action,account,balance"
},
"account_balance_wallet": {
"name": "account_balance_wallet",
"kw": "action,account,balance,wallet"
},
"account_box": {
"name": "account_box",
"kw": "action,account,box"
},
"account_circle": {
"name": "account_circle",
"kw": "action,account,circle"
},
"add_shopping_cart": {
"name": "add_shopping_cart",
"kw": "action,add,shopping,cart"
},
"alarm": {
"name": "alarm",
"kw": "action,alarm"
},
"alarm_add": {
"name": "alarm_add",
"kw": "action,alarm,add"
},
"alarm_off": {
"name": "alarm_off",
"kw": "action,alarm,off"
},
"alarm_on": {
"name": "alarm_on",
"kw": "action,alarm,on"
},
"all_out": {
"name": "all_out",
"kw": "action,all,out"
},
"android": {
"name": "android",
"kw": "action,android"
},
"announcement": {
"name": "announcement",
"kw": "action,announcement"
},
"aspect_ratio": {
"name": "aspect_ratio",
"kw": "action,aspect,ratio"
},
"assessment": {
"name": "assessment",
"kw": "action,assessment"
},
"assignment": {
"name": "assignment",
"kw": "action,assignment"
},
"assignment_ind": {
"name": "assignment_ind",
"kw": "action,assignment,ind"
},
"assignment_late": {
"name": "assignment_late",
"kw": "action,assignment,late"
},
"assignment_return": {
"name": "assignment_return",
"kw": "action,assignment,return"
},
"assignment_returned": {
"name": "assignment_returned",
"kw": "action,assignment,returned"
},
"assignment_turned_in": {
"name": "assignment_turned_in",
"kw": "action,assignment,turned,in"
},
"autorenew": {
"name": "autorenew",
"kw": "action,autorenew"
},
"backup": {
"name": "backup",
"kw": "action,backup"
},
"book": {
"name": "book",
"kw": "action,book"
},
"bookmark": {
"name": "bookmark",
"kw": "action,bookmark"
},
"bookmark_border": {
"name": "bookmark_border",
"kw": "action,bookmark,border"
},
"bug_report": {
"name": "bug_report",
"kw": "action,bug,report"
},
"build": {
"name": "build",
"kw": "action,build"
},
"cached": {
"name": "cached",
"kw": "action,cached"
},
"camera_enhance": {
"name": "camera_enhance",
"kw": "action,camera,enhance"
},
"card_giftcard": {
"name": "card_giftcard",
"kw": "action,card,giftcard"
},
"card_membership": {
"name": "card_membership",
"kw": "action,card,membership"
},
"card_travel": {
"name": "card_travel",
"kw": "action,card,travel"
},
"change_history": {
"name": "change_history",
"kw": "action,change,history"
},
"check_circle": {
"name": "check_circle",
"kw": "action,check,circle"
},
"chrome_reader_mode": {
"name": "chrome_reader_mode",
"kw": "action,chrome,reader,mode"
},
"class": {
"name": "class",
"kw": "action,class"
},
"code": {
"name": "code",
"kw": "action,code"
},
"compare_arrows": {
"name": "compare_arrows",
"kw": "action,compare,arrows"
},
"copyright": {
"name": "copyright",
"kw": "action,copyright"
},
"credit_card": {
"name": "credit_card",
"kw": "action,credit,card"
},
"dashboard": {
"name": "dashboard",
"kw": "action,dashboard"
},
"date_range": {
"name": "date_range",
"kw": "action,date,range"
},
"delete": {
"name": "delete",
"kw": "action,delete"
},
"delete_forever": {
"name": "delete_forever",
"kw": "action,delete,forever"
},
"description": {
"name": "description",
"kw": "action,description"
},
"dns": {
"name": "dns",
"kw": "action,dns"
},
"done": {
"name": "done",
"kw": "action,done"
},
"done_all": {
"name": "done_all",
"kw": "action,done,all"
},
"donut_large": {
"name": "donut_large",
"kw": "action,donut,large"
},
"donut_small": {
"name": "donut_small",
"kw": "action,donut,small"
},
"eject": {
"name": "eject",
"kw": "action,eject"
},
"euro_symbol": {
"name": "euro_symbol",
"kw": "action,euro,symbol"
},
"event": {
"name": "event",
"kw": "action,event"
},
"event_seat": {
"name": "event_seat",
"kw": "action,event,seat"
},
"exit_to_app": {
"name": "exit_to_app",
"kw": "action,exit,to,app"
},
"explore": {
"name": "explore",
"kw": "action,explore"
},
"extension": {
"name": "extension",
"kw": "action,extension"
},
"face": {
"name": "face",
"kw": "action,face"
},
"favorite": {
"name": "favorite",
"kw": "action,favorite"
},
"favorite_border": {
"name": "favorite_border",
"kw": "action,favorite,border"
},
"feedback": {
"name": "feedback",
"kw": "action,feedback"
},
"find_in_page": {
"name": "find_in_page",
"kw": "action,find,in,page"
},
"find_replace": {
"name": "find_replace",
"kw": "action,find,replace"
},
"fingerprint": {
"name": "fingerprint",
"kw": "action,fingerprint"
},
"flight_land": {
"name": "flight_land",
"kw": "action,flight,land"
},
"flight_takeoff": {
"name": "flight_takeoff",
"kw": "action,flight,takeoff"
},
"flip_to_back": {
"name": "flip_to_back",
"kw": "action,flip,to,back"
},
"flip_to_front": {
"name": "flip_to_front",
"kw": "action,flip,to,front"
},
"g_translate": {
"name": "g_translate",
"kw": "action,translate"
},
"gavel": {
"name": "gavel",
"kw": "action,gavel"
},
"get_app": {
"name": "get_app",
"kw": "action,get,app"
},
"gif": {
"name": "gif",
"kw": "action,gif"
},
"grade": {
"name": "grade",
"kw": "action,grade"
},
"group_work": {
"name": "group_work",
"kw": "action,group,work"
},
"help": {
"name": "help",
"kw": "action,help"
},
"help_outline": {
"name": "help_outline",
"kw": "action,help,outline"
},
"highlight_off": {
"name": "highlight_off",
"kw": "action,highlight,off"
},
"history": {
"name": "history",
"kw": "action,history"
},
"home": {
"name": "home",
"kw": "action,home"
},
"hourglass_empty": {
"name": "hourglass_empty",
"kw": "action,hourglass,empty"
},
"hourglass_full": {
"name": "hourglass_full",
"kw": "action,hourglass,full"
},
"http": {
"name": "http",
"kw": "action,http"
},
"https": {
"name": "https",
"kw": "action,https"
},
"important_devices": {
"name": "important_devices",
"kw": "action,important,devices"
},
"info": {
"name": "info",
"kw": "action,info"
},
"info_outline": {
"name": "info_outline",
"kw": "action,info,outline"
},
"input": {
"name": "input",
"kw": "action,input"
},
"invert_colors": {
"name": "invert_colors",
"kw": "action,invert,colors"
},
"label": {
"name": "label",
"kw": "action,label"
},
"label_outline": {
"name": "label_outline",
"kw": "action,label,outline"
},
"language": {
"name": "language",
"kw": "action,language"
},
"launch": {
"name": "launch",
"kw": "action,launch"
},
"lightbulb_outline": {
"name": "lightbulb_outline",
"kw": "action,lightbulb,outline"
},
"line_style": {
"name": "line_style",
"kw": "action,line,style"
},
"line_weight": {
"name": "line_weight",
"kw": "action,line,weight"
},
"list": {
"name": "list",
"kw": "action,list"
},
"lock": {
"name": "lock",
"kw": "action,lock"
},
"lock_open": {
"name": "lock_open",
"kw": "action,lock,open"
},
"lock_outline": {
"name": "lock_outline",
"kw": "action,lock,outline"
},
"loyalty": {
"name": "loyalty",
"kw": "action,loyalty"
},
"markunread_mailbox": {
"name": "markunread_mailbox",
"kw": "action,markunread,mailbox"
},
"motorcycle": {
"name": "motorcycle",
"kw": "action,motorcycle"
},
"note_add": {
"name": "note_add",
"kw": "action,note,add"
},
"offline_pin": {
"name": "offline_pin",
"kw": "action,offline,pin"
},
"opacity": {
"name": "opacity",
"kw": "action,opacity"
},
"open_in_browser": {
"name": "open_in_browser",
"kw": "action,open,in,browser"
},
"open_in_new": {
"name": "open_in_new",
"kw": "action,open,in,new"
},
"open_with": {
"name": "open_with",
"kw": "action,open,with"
},
"pageview": {
"name": "pageview",
"kw": "action,pageview"
},
"pan_tool": {
"name": "pan_tool",
"kw": "action,pan,tool"
},
"payment": {
"name": "payment",
"kw": "action,payment"
},
"perm_camera_mic": {
"name": "perm_camera_mic",
"kw": "action,perm,camera,mic"
},
"perm_contact_calendar": {
"name": "perm_contact_calendar",
"kw": "action,perm,contact,calendar"
},
"perm_data_setting": {
"name": "perm_data_setting",
"kw": "action,perm,data,setting"
},
"perm_device_information": {
"name": "perm_device_information",
"kw": "action,perm,device,information"
},
"perm_identity": {
"name": "perm_identity",
"kw": "action,perm,identity"
},
"perm_media": {
"name": "perm_media",
"kw": "action,perm,media"
},
"perm_phone_msg": {
"name": "perm_phone_msg",
"kw": "action,perm,phone,msg"
},
"perm_scan_wifi": {
"name": "perm_scan_wifi",
"kw": "action,perm,scan,wifi"
},
"pets": {
"name": "pets",
"kw": "action,pets"
},
"picture_in_picture": {
"name": "picture_in_picture",
"kw": "action,picture,in,picture"
},
"picture_in_picture_alt": {
"name": "picture_in_picture_alt",
"kw": "action,picture,in,picture,alt"
},
"play_for_work": {
"name": "play_for_work",
"kw": "action,play,work"
},
"polymer": {
"name": "polymer",
"kw": "action,polymer"
},
"power_settings_new": {
"name": "power_settings_new",
"kw": "action,power,settings,new"
},
"pregnant_woman": {
"name": "pregnant_woman",
"kw": "action,pregnant,woman"
},
"print": {
"name": "print",
"kw": "action,print"
},
"query_builder": {
"name": "query_builder",
"kw": "action,query,builder"
},
"question_answer": {
"name": "question_answer",
"kw": "action,question,answer"
},
"receipt": {
"name": "receipt",
"kw": "action,receipt"
},
"record_voice_over": {
"name": "record_voice_over",
"kw": "action,record,voice,over"
},
"redeem": {
"name": "redeem",
"kw": "action,redeem"
},
"remove_shopping_cart": {
"name": "remove_shopping_cart",
"kw": "action,remove,shopping,cart"
},
"reorder": {
"name": "reorder",
"kw": "action,reorder"
},
"report_problem": {
"name": "report_problem",
"kw": "action,report,problem"
},
"restore": {
"name": "restore",
"kw": "action,restore"
},
"restore_page": {
"name": "restore_page",
"kw": "action,restore,page"
},
"room": {
"name": "room",
"kw": "action,room"
},
"rounded_corner": {
"name": "rounded_corner",
"kw": "action,rounded,corner"
},
"rowing": {
"name": "rowing",
"kw": "action,rowing"
},
"schedule": {
"name": "schedule",
"kw": "action,schedule"
},
"search": {
"name": "search",
"kw": "action,search"
},
"settings": {
"name": "settings",
"kw": "action,settings"
},
"settings_applications": {
"name": "settings_applications",
"kw": "action,settings,applications"
},
"settings_backup_restore": {
"name": "settings_backup_restore",
"kw": "action,settings,backup,restore"
},
"settings_bluetooth": {
"name": "settings_bluetooth",
"kw": "action,settings,bluetooth"
},
"settings_brightness": {
"name": "settings_brightness",
"kw": "action,settings,brightness"
},
"settings_cell": {
"name": "settings_cell",
"kw": "action,settings,cell"
},
"settings_ethernet": {
"name": "settings_ethernet",
"kw": "action,settings,ethernet"
},
"settings_input_antenna": {
"name": "settings_input_antenna",
"kw": "action,settings,input,antenna"
},
"settings_input_component": {
"name": "settings_input_component",
"kw": "action,settings,input,component"
},
"settings_input_composite": {
"name": "settings_input_composite",
"kw": "action,settings,input,composite"
},
"settings_input_hdmi": {
"name": "settings_input_hdmi",
"kw": "action,settings,input,hdmi"
},
"settings_input_svideo": {
"name": "settings_input_svideo",
"kw": "action,settings,input,svideo"
},
"settings_overscan": {
"name": "settings_overscan",
"kw": "action,settings,overscan"
},
"settings_phone": {
"name": "settings_phone",
"kw": "action,settings,phone"
},
"settings_power": {
"name": "settings_power",
"kw": "action,settings,power"
},
"settings_remote": {
"name": "settings_remote",
"kw": "action,settings,remote"
},
"settings_voice": {
"name": "settings_voice",
"kw": "action,settings,voice"
},
"shop": {
"name": "shop",
"kw": "action,shop"
},
"shop_two": {
"name": "shop_two",
"kw": "action,shop,two"
},
"shopping_basket": {
"name": "shopping_basket",
"kw": "action,shopping,basket"
},
"shopping_cart": {
"name": "shopping_cart",
"kw": "action,shopping,cart"
},
"speaker_notes": {
"name": "speaker_notes",
"kw": "action,speaker,notes"
},
"speaker_notes_off": {
"name": "speaker_notes_off",
"kw": "action,speaker,notes,off"
},
"spellcheck": {
"name": "spellcheck",
"kw": "action,spellcheck"
},
"star_rate": {
"name": "star_rate",
"kw": "action,star,rate"
},
"stars": {
"name": "stars",
"kw": "action,stars"
},
"store": {
"name": "store",
"kw": "action,store"
},
"subject": {
"name": "subject",
"kw": "action,subject"
},
"supervisor_account": {
"name": "supervisor_account",
"kw": "action,supervisor,account"
},
"swap_horiz": {
"name": "swap_horiz",
"kw": "action,swap,horiz"
},
"swap_vert": {
"name": "swap_vert",
"kw": "action,swap,vert"
},
"swap_vertical_circle": {
"name": "swap_vertical_circle",
"kw": "action,swap,vertical,circle"
},
"system_update_alt": {
"name": "system_update_alt",
"kw": "action,system,update,alt"
},
"tab": {
"name": "tab",
"kw": "action,tab"
},
"tab_unselected": {
"name": "tab_unselected",
"kw": "action,tab,unselected"
},
"theaters": {
"name": "theaters",
"kw": "action,theaters"
},
"thumb_down": {
"name": "thumb_down",
"kw": "action,thumb,down"
},
"thumb_up": {
"name": "thumb_up",
"kw": "action,thumb,up"
},
"thumbs_up_down": {
"name": "thumbs_up_down",
"kw": "action,thumbs,up,down"
},
"timeline": {
"name": "timeline",
"kw": "action,timeline"
},
"toc": {
"name": "toc",
"kw": "action,toc"
},
"today": {
"name": "today",
"kw": "action,today"
},
"toll": {
"name": "toll",
"kw": "action,toll"
},
"touch_app": {
"name": "touch_app",
"kw": "action,touch,app"
},
"track_changes": {
"name": "track_changes",
"kw": "action,track,changes"
},
"translate": {
"name": "translate",
"kw": "action,translate"
},
"trending_down": {
"name": "trending_down",
"kw": "action,trending,down"
},
"trending_flat": {
"name": "trending_flat",
"kw": "action,trending,flat"
},
"trending_up": {
"name": "trending_up",
"kw": "action,trending,up"
},
"turned_in": {
"name": "turned_in",
"kw": "action,turned,in"
},
"turned_in_not": {
"name": "turned_in_not",
"kw": "action,turned,in,not"
},
"update": {
"name": "update",
"kw": "action,update"
},
"verified_user": {
"name": "verified_user",
"kw": "action,verified,user"
},
"view_agenda": {
"name": "view_agenda",
"kw": "action,view,agenda"
},
"view_array": {
"name": "view_array",
"kw": "action,view,array"
},
"view_carousel": {
"name": "view_carousel",
"kw": "action,view,carousel"
},
"view_column": {
"name": "view_column",
"kw": "action,view,column"
},
"view_day": {
"name": "view_day",
"kw": "action,view,day"
},
"view_headline": {
"name": "view_headline",
"kw": "action,view,headline"
},
"view_list": {
"name": "view_list",
"kw": "action,view,list"
},
"view_module": {
"name": "view_module",
"kw": "action,view,module"
},
"view_quilt": {
"name": "view_quilt",
"kw": "action,view,quilt"
},
"view_stream": {
"name": "view_stream",
"kw": "action,view,stream"
},
"view_week": {
"name": "view_week",
"kw": "action,view,week"
},
"visibility": {
"name": "visibility",
"kw": "action,visibility"
},
"visibility_off": {
"name": "visibility_off",
"kw": "action,visibility,off"
},
"watch_later": {
"name": "watch_later",
"kw": "action,watch,later"
},
"work": {
"name": "work",
"kw": "action,work"
},
"youtube_searched_for": {
"name": "youtube_searched_for",
"kw": "action,youtube,searched"
},
"zoom_in": {
"name": "zoom_in",
"kw": "action,zoom,in"
},
"zoom_out": {
"name": "zoom_out",
"kw": "action,zoom,out"
},
"add_alert": {
"name": "add_alert",
"kw": "alert,add,alert"
},
"error": {
"name": "error",
"kw": "alert,error"
},
"error_outline": {
"name": "error_outline",
"kw": "alert,error,outline"
},
"warning": {
"name": "warning",
"kw": "alert,warning"
},
"add_to_queue": {
"name": "add_to_queue",
"kw": "av,add,to,queue"
},
"airplay": {
"name": "airplay",
"kw": "av,airplay"
},
"album": {
"name": "album",
"kw": "av,album"
},
"art_track": {
"name": "art_track",
"kw": "av,art,track"
},
"av_timer": {
"name": "av_timer",
"kw": "av,av,timer"
},
"branding_watermark": {
"name": "branding_watermark",
"kw": "av,branding,watermark"
},
"call_to_action": {
"name": "call_to_action",
"kw": "av,call,to,action"
},
"closed_caption": {
"name": "closed_caption",
"kw": "av,closed,caption"
},
"equalizer": {
"name": "equalizer",
"kw": "av,equalizer"
},
"explicit": {
"name": "explicit",
"kw": "av,explicit"
},
"fast_forward": {
"name": "fast_forward",
"kw": "av,fast,forward"
},
"fast_rewind": {
"name": "fast_rewind",
"kw": "av,fast,rewind"
},
"featured_play_list": {
"name": "featured_play_list",
"kw": "av,featured,play,list"
},
"featured_video": {
"name": "featured_video",
"kw": "av,featured,video"
},
"fiber_dvr": {
"name": "fiber_dvr",
"kw": "av,fiber,dvr"
},
"fiber_manual_record": {
"name": "fiber_manual_record",
"kw": "av,fiber,manual,record"
},
"fiber_new": {
"name": "fiber_new",
"kw": "av,fiber,new"
},
"fiber_pin": {
"name": "fiber_pin",
"kw": "av,fiber,pin"
},
"fiber_smart_record": {
"name": "fiber_smart_record",
"kw": "av,fiber,smart,record"
},
"forward_10": {
"name": "forward_10",
"kw": "av,forward,10"
},
"forward_30": {
"name": "forward_30",
"kw": "av,forward,30"
},
"forward_5": {
"name": "forward_5",
"kw": "av,forward"
},
"games": {
"name": "games",
"kw": "av,games"
},
"hd": {
"name": "hd",
"kw": "av,hd"
},
"hearing": {
"name": "hearing",
"kw": "av,hearing"
},
"high_quality": {
"name": "high_quality",
"kw": "av,high,quality"
},
"library_add": {
"name": "library_add",
"kw": "av,library,add"
},
"library_books": {
"name": "library_books",
"kw": "av,library,books"
},
"library_music": {
"name": "library_music",
"kw": "av,library,music"
},
"loop": {
"name": "loop",
"kw": "av,loop"
},
"mic": {
"name": "mic",
"kw": "av,mic"
},
"mic_none": {
"name": "mic_none",
"kw": "av,mic,none"
},
"mic_off": {
"name": "mic_off",
"kw": "av,mic,off"
},
"movie": {
"name": "movie",
"kw": "av,movie"
},
"music_video": {
"name": "music_video",
"kw": "av,music,video"
},
"new_releases": {
"name": "new_releases",
"kw": "av,new,releases"
},
"not_interested": {
"name": "not_interested",
"kw": "av,not,interested"
},
"note": {
"name": "note",
"kw": "av,note"
},
"pause": {
"name": "pause",
"kw": "av,pause"
},
"pause_circle_filled": {
"name": "pause_circle_filled",
"kw": "av,pause,circle,filled"
},
"pause_circle_outline": {
"name": "pause_circle_outline",
"kw": "av,pause,circle,outline"
},
"play_arrow": {
"name": "play_arrow",
"kw": "av,play,arrow"
},
"play_circle_filled": {
"name": "play_circle_filled",
"kw": "av,play,circle,filled"
},
"play_circle_outline": {
"name": "play_circle_outline",
"kw": "av,play,circle,outline"
},
"playlist_add": {
"name": "playlist_add",
"kw": "av,playlist,add"
},
"playlist_add_check": {
"name": "playlist_add_check",
"kw": "av,playlist,add,check"
},
"playlist_play": {
"name": "playlist_play",
"kw": "av,playlist,play"
},
"queue": {
"name": "queue",
"kw": "av,queue"
},
"queue_music": {
"name": "queue_music",
"kw": "av,queue,music"
},
"queue_play_next": {
"name": "queue_play_next",
"kw": "av,queue,play,next"
},
"radio": {
"name": "radio",
"kw": "av,radio"
},
"recent_actors": {
"name": "recent_actors",
"kw": "av,recent,actors"
},
"remove_from_queue": {
"name": "remove_from_queue",
"kw": "av,remove,from,queue"
},
"repeat": {
"name": "repeat",
"kw": "av,repeat"
},
"repeat_one": {
"name": "repeat_one",
"kw": "av,repeat,one"
},
"replay": {
"name": "replay",
"kw": "av,replay"
},
"replay_10": {
"name": "replay_10",
"kw": "av,replay,10"
},
"replay_30": {
"name": "replay_30",
"kw": "av,replay,30"
},
"replay_5": {
"name": "replay_5",
"kw": "av,replay"
},
"shuffle": {
"name": "shuffle",
"kw": "av,shuffle"
},
"skip_next": {
"name": "skip_next",
"kw": "av,skip,next"
},
"skip_previous": {
"name": "skip_previous",
"kw": "av,skip,previous"
},
"slow_motion_video": {
"name": "slow_motion_video",
"kw": "av,slow,motion,video"
},
"snooze": {
"name": "snooze",
"kw": "av,snooze"
},
"sort_by_alpha": {
"name": "sort_by_alpha",
"kw": "av,sort,by,alpha"
},
"stop": {
"name": "stop",
"kw": "av,stop"
},
"subscriptions": {
"name": "subscriptions",
"kw": "av,subscriptions"
},
"subtitles": {
"name": "subtitles",
"kw": "av,subtitles"
},
"surround_sound": {
"name": "surround_sound",
"kw": "av,surround,sound"
},
"video_call": {
"name": "video_call",
"kw": "av,video,call"
},
"video_label": {
"name": "video_label",
"kw": "av,video,label"
},
"video_library": {
"name": "video_library",
"kw": "av,video,library"
},
"videocam": {
"name": "videocam",
"kw": "av,videocam"
},
"videocam_off": {
"name": "videocam_off",
"kw": "av,videocam,off"
},
"volume_down": {
"name": "volume_down",
"kw": "av,volume,down"
},
"volume_mute": {
"name": "volume_mute",
"kw": "av,volume,mute"
},
"volume_off": {
"name": "volume_off",
"kw": "av,volume,off"
},
"volume_up": {
"name": "volume_up",
"kw": "av,volume,up"
},
"web": {
"name": "web",
"kw": "av,web"
},
"web_asset": {
"name": "web_asset",
"kw": "av,web,asset"
},
"business": {
"name": "business",
"kw": "communication,business"
},
"call": {
"name": "call",
"kw": "communication,call"
},
"call_end": {
"name": "call_end",
"kw": "communication,call,end"
},
"call_made": {
"name": "call_made",
"kw": "communication,call,made"
},
"call_merge": {
"name": "call_merge",
"kw": "communication,call,merge"
},
"call_missed": {
"name": "call_missed",
"kw": "communication,call,missed"
},
"call_missed_outgoing": {
"name": "call_missed_outgoing",
"kw": "communication,call,missed,outgoing"
},
"call_received": {
"name": "call_received",
"kw": "communication,call,received"
},
"call_split": {
"name": "call_split",
"kw": "communication,call,split"
},
"chat": {
"name": "chat",
"kw": "communication,chat"
},
"chat_bubble": {
"name": "chat_bubble",
"kw": "communication,chat,bubble"
},
"chat_bubble_outline": {
"name": "chat_bubble_outline",
"kw": "communication,chat,bubble,outline"
},
"clear_all": {
"name": "clear_all",
"kw": "communication,clear,all"
},
"comment": {
"name": "comment",
"kw": "communication,comment"
},
"contact_mail": {
"name": "contact_mail",
"kw": "communication,contact,mail"
},
"contact_phone": {
"name": "contact_phone",
"kw": "communication,contact,phone"
},
"contacts": {
"name": "contacts",
"kw": "communication,contacts"
},
"dialer_sip": {
"name": "dialer_sip",
"kw": "communication,dialer,sip"
},
"dialpad": {
"name": "dialpad",
"kw": "communication,dialpad"
},
"email": {
"name": "email",
"kw": "communication,email"
},
"forum": {
"name": "forum",
"kw": "communication,forum"
},
"import_contacts": {
"name": "import_contacts",
"kw": "communication,import,contacts"
},
"import_export": {
"name": "import_export",
"kw": "communication,import,export"
},
"invert_colors_off": {
"name": "invert_colors_off",
"kw": "communication,invert,colors,off"
},
"live_help": {
"name": "live_help",
"kw": "communication,live,help"
},
"location_off": {
"name": "location_off",
"kw": "communication,location,off"
},
"location_on": {
"name": "location_on",
"kw": "communication,location,on"
},
"mail_outline": {
"name": "mail_outline",
"kw": "communication,mail,outline"
},
"message": {
"name": "message",
"kw": "communication,message"
},
"no_sim": {
"name": "no_sim",
"kw": "communication,no,sim"
},
"phone": {
"name": "phone",
"kw": "communication,phone"
},
"phonelink_erase": {
"name": "phonelink_erase",
"kw": "communication,phonelink,erase"
},
"phonelink_lock": {
"name": "phonelink_lock",
"kw": "communication,phonelink,lock"
},
"phonelink_ring": {
"name": "phonelink_ring",
"kw": "communication,phonelink,ring"
},
"phonelink_setup": {
"name": "phonelink_setup",
"kw": "communication,phonelink,setup"
},
"portable_wifi_off": {
"name": "portable_wifi_off",
"kw": "communication,portable,wifi,off"
},
"present_to_all": {
"name": "present_to_all",
"kw": "communication,present,to,all"
},
"ring_volume": {
"name": "ring_volume",
"kw": "communication,ring,volume"
},
"rss_feed": {
"name": "rss_feed",
"kw": "communication,rss,feed"
},
"screen_share": {
"name": "screen_share",
"kw": "communication,screen,share"
},
"speaker_phone": {
"name": "speaker_phone",
"kw": "communication,speaker,phone"
},
"stay_current_landscape": {
"name": "stay_current_landscape",
"kw": "communication,stay,current,landscape"
},
"stay_current_portrait": {
"name": "stay_current_portrait",
"kw": "communication,stay,current,portrait"
},
"stay_primary_landscape": {
"name": "stay_primary_landscape",
"kw": "communication,stay,primary,landscape"
},
"stay_primary_portrait": {
"name": "stay_primary_portrait",
"kw": "communication,stay,primary,portrait"
},
"stop_screen_share": {
"name": "stop_screen_share",
"kw": "communication,stop,screen,share"
},
"swap_calls": {
"name": "swap_calls",
"kw": "communication,swap,calls"
},
"textsms": {
"name": "textsms",
"kw": "communication,textsms"
},
"voicemail": {
"name": "voicemail",
"kw": "communication,voicemail"
},
"vpn_key": {
"name": "vpn_key",
"kw": "communication,vpn,key"
},
"add": {
"name": "add",
"kw": "content,add"
},
"add_box": {
"name": "add_box",
"kw": "content,add,box"
},
"add_circle": {
"name": "add_circle",
"kw": "content,add,circle"
},
"add_circle_outline": {
"name": "add_circle_outline",
"kw": "content,add,circle,outline"
},
"archive": {
"name": "archive",
"kw": "content,archive"
},
"backspace": {
"name": "backspace",
"kw": "content,backspace"
},
"block": {
"name": "block",
"kw": "content,block"
},
"clear": {
"name": "clear",
"kw": "content,clear"
},
"content_copy": {
"name": "content_copy",
"kw": "content,content,copy"
},
"content_cut": {
"name": "content_cut",
"kw": "content,content,cut"
},
"content_paste": {
"name": "content_paste",
"kw": "content,content,paste"
},
"create": {
"name": "create",
"kw": "content,create"
},
"delete_sweep": {
"name": "delete_sweep",
"kw": "content,delete,sweep"
},
"drafts": {
"name": "drafts",
"kw": "content,drafts"
},
"filter_list": {
"name": "filter_list",
"kw": "content,filter,list"
},
"flag": {
"name": "flag",
"kw": "content,flag"
},
"font_download": {
"name": "font_download",
"kw": "content,font,download"
},
"forward": {
"name": "forward",
"kw": "content,forward"
},
"gesture": {
"name": "gesture",
"kw": "content,gesture"
},
"inbox": {
"name": "inbox",
"kw": "content,inbox"
},
"link": {
"name": "link",
"kw": "content,link"
},
"low_priority": {
"name": "low_priority",
"kw": "content,low,priority"
},
"mail": {
"name": "mail",
"kw": "content,mail"
},
"markunread": {
"name": "markunread",
"kw": "content,markunread"
},
"move_to_inbox": {
"name": "move_to_inbox",
"kw": "content,move,to,inbox"
},
"next_week": {
"name": "next_week",
"kw": "content,next,week"
},
"redo": {
"name": "redo",
"kw": "content,redo"
},
"remove": {
"name": "remove",
"kw": "content,remove"
},
"remove_circle": {
"name": "remove_circle",
"kw": "content,remove,circle"
},
"remove_circle_outline": {
"name": "remove_circle_outline",
"kw": "content,remove,circle,outline"
},
"reply": {
"name": "reply",
"kw": "content,reply"
},
"reply_all": {
"name": "reply_all",
"kw": "content,reply,all"
},
"report": {
"name": "report",
"kw": "content,report"
},
"save": {
"name": "save",
"kw": "content,save"
},
"select_all": {
"name": "select_all",
"kw": "content,select,all"
},
"send": {
"name": "send",
"kw": "content,send"
},
"sort": {
"name": "sort",
"kw": "content,sort"
},
"text_format": {
"name": "text_format",
"kw": "content,text,format"
},
"unarchive": {
"name": "unarchive",
"kw": "content,unarchive"
},
"undo": {
"name": "undo",
"kw": "content,undo"
},
"weekend": {
"name": "weekend",
"kw": "content,weekend"
},
"access_alarm": {
"name": "access_alarm",
"kw": "device,access,alarm"
},
"access_alarms": {
"name": "access_alarms",
"kw": "device,access,alarms"
},
"access_time": {
"name": "access_time",
"kw": "device,access,time"
},
"add_alarm": {
"name": "add_alarm",
"kw": "device,add,alarm"
},
"airplanemode_active": {
"name": "airplanemode_active",
"kw": "device,airplanemode,active"
},
"airplanemode_inactive": {
"name": "airplanemode_inactive",
"kw": "device,airplanemode,inactive"
},
"battery_alert": {
"name": "battery_alert",
"kw": "device,battery,alert"
},
"battery_charging_full": {
"name": "battery_charging_full",
"kw": "device,battery,charging,full"
},
"battery_full": {
"name": "battery_full",
"kw": "device,battery,full"
},
"battery_std": {
"name": "battery_std",
"kw": "device,battery,std"
},
"battery_unknown": {
"name": "battery_unknown",
"kw": "device,battery,unknown"
},
"bluetooth": {
"name": "bluetooth",
"kw": "device,bluetooth"
},
"bluetooth_connected": {
"name": "bluetooth_connected",
"kw": "device,bluetooth,connected"
},
"bluetooth_disabled": {
"name": "bluetooth_disabled",
"kw": "device,bluetooth,disabled"
},
"bluetooth_searching": {
"name": "bluetooth_searching",
"kw": "device,bluetooth,searching"
},
"brightness_auto": {
"name": "brightness_auto",
"kw": "device,brightness,auto"
},
"brightness_high": {
"name": "brightness_high",
"kw": "device,brightness,high"
},
"brightness_low": {
"name": "brightness_low",
"kw": "device,brightness,low"
},
"brightness_medium": {
"name": "brightness_medium",
"kw": "device,brightness,medium"
},
"data_usage": {
"name": "data_usage",
"kw": "device,data,usage"
},
"developer_mode": {
"name": "developer_mode",
"kw": "device,developer,mode"
},
"devices": {
"name": "devices",
"kw": "device,devices"
},
"dvr": {
"name": "dvr",
"kw": "device,dvr"
},
"gps_fixed": {
"name": "gps_fixed",
"kw": "device,gps,fixed"
},
"gps_not_fixed": {
"name": "gps_not_fixed",
"kw": "device,gps,not,fixed"
},
"gps_off": {
"name": "gps_off",
"kw": "device,gps,off"
},
"graphic_eq": {
"name": "graphic_eq",
"kw": "device,graphic,eq"
},
"location_disabled": {
"name": "location_disabled",
"kw": "device,location,disabled"
},
"location_searching": {
"name": "location_searching",
"kw": "device,location,searching"
},
"network_cell": {
"name": "network_cell",
"kw": "device,network,cell"
},
"network_wifi": {
"name": "network_wifi",
"kw": "device,network,wifi"
},
"nfc": {
"name": "nfc",
"kw": "device,nfc"
},
"screen_lock_landscape": {
"name": "screen_lock_landscape",
"kw": "device,screen,lock,landscape"
},
"screen_lock_portrait": {
"name": "screen_lock_portrait",
"kw": "device,screen,lock,portrait"
},
"screen_lock_rotation": {
"name": "screen_lock_rotation",
"kw": "device,screen,lock,rotation"
},
"screen_rotation": {
"name": "screen_rotation",
"kw": "device,screen,rotation"
},
"sd_storage": {
"name": "sd_storage",
"kw": "device,sd,storage"
},
"settings_system_daydream": {
"name": "settings_system_daydream",
"kw": "device,settings,system,daydream"
},
"signal_cellular_4_bar": {
"name": "signal_cellular_4_bar",
"kw": "device,signal,cellular,bar"
},
"signal_cellular_connected_no_internet_4_bar": {
"name":
"signal_cellular_connected_no_internet_4_bar",
"kw":
"device,signal,cellular,connected,no,internet,bar"
},
"signal_cellular_no_sim": {
"name": "signal_cellular_no_sim",
"kw": "device,signal,cellular,no,sim"
},
"signal_cellular_null": {
"name": "signal_cellular_null",
"kw": "device,signal,cellular,null"
},
"signal_cellular_off": {
"name": "signal_cellular_off",
"kw": "device,signal,cellular,off"
},
"signal_wifi_4_bar": {
"name": "signal_wifi_4_bar",
"kw": "device,signal,wifi,bar"
},
"signal_wifi_4_bar_lock": {
"name": "signal_wifi_4_bar_lock",
"kw": "device,signal,wifi,bar,lock"
},
"signal_wifi_off": {
"name": "signal_wifi_off",
"kw": "device,signal,wifi,off"
},
"storage": {
"name": "storage",
"kw": "device,storage"
},
"usb": {
"name": "usb",
"kw": "device,usb"
},
"wallpaper": {
"name": "wallpaper",
"kw": "device,wallpaper"
},
"widgets": {
"name": "widgets",
"kw": "device,widgets"
},
"wifi_lock": {
"name": "wifi_lock",
"kw": "device,wifi,lock"
},
"wifi_tethering": {
"name": "wifi_tethering",
"kw": "device,wifi,tethering"
},
"attach_file": {
"name": "attach_file",
"kw": "editor,attach,file"
},
"attach_money": {
"name": "attach_money",
"kw": "editor,attach,money"
},
"border_all": {
"name": "border_all",
"kw": "editor,border,all"
},
"border_bottom": {
"name": "border_bottom",
"kw": "editor,border,bottom"
},
"border_clear": {
"name": "border_clear",
"kw": "editor,border,clear"
},
"border_color": {
"name": "border_color",
"kw": "editor,border,color"
},
"border_horizontal": {
"name": "border_horizontal",
"kw": "editor,border,horizontal"
},
"border_inner": {
"name": "border_inner",
"kw": "editor,border,inner"
},
"border_left": {
"name": "border_left",
"kw": "editor,border,left"
},
"border_outer": {
"name": "border_outer",
"kw": "editor,border,outer"
},
"border_right": {
"name": "border_right",
"kw": "editor,border,right"
},
"border_style": {
"name": "border_style",
"kw": "editor,border,style"
},
"border_top": {
"name": "border_top",
"kw": "editor,border,top"
},
"border_vertical": {
"name": "border_vertical",
"kw": "editor,border,vertical"
},
"bubble_chart": {
"name": "bubble_chart",
"kw": "editor,bubble,chart"
},
"drag_handle": {
"name": "drag_handle",
"kw": "editor,drag,handle"
},
"format_align_center": {
"name": "format_align_center",
"kw": "editor,format,align,center"
},
"format_align_justify": {
"name": "format_align_justify",
"kw": "editor,format,align,justify"
},
"format_align_left": {
"name": "format_align_left",
"kw": "editor,format,align,left"
},
"format_align_right": {
"name": "format_align_right",
"kw": "editor,format,align,right"
},
"format_bold": {
"name": "format_bold",
"kw": "editor,format,bold"
},
"format_clear": {
"name": "format_clear",
"kw": "editor,format,clear"
},
"format_color_fill": {
"name": "format_color_fill",
"kw": "editor,format,color,fill"
},
"format_color_reset": {
"name": "format_color_reset",
"kw": "editor,format,color,reset"
},
"format_color_text": {
"name": "format_color_text",
"kw": "editor,format,color,text"
},
"format_indent_decrease": {
"name": "format_indent_decrease",
"kw": "editor,format,indent,decrease"
},
"format_indent_increase": {
"name": "format_indent_increase",
"kw": "editor,format,indent,increase"
},
"format_italic": {
"name": "format_italic",
"kw": "editor,format,italic"
},
"format_line_spacing": {
"name": "format_line_spacing",
"kw": "editor,format,line,spacing"
},
"format_list_bulleted": {
"name": "format_list_bulleted",
"kw": "editor,format,list,bulleted"
},
"format_list_numbered": {
"name": "format_list_numbered",
"kw": "editor,format,list,numbered"
},
"format_paint": {
"name": "format_paint",
"kw": "editor,format,paint"
},
"format_quote": {
"name": "format_quote",
"kw": "editor,format,quote"
},
"format_shapes": {
"name": "format_shapes",
"kw": "editor,format,shapes"
},
"format_size": {
"name": "format_size",
"kw": "editor,format,size"
},
"format_strikethrough": {
"name": "format_strikethrough",
"kw": "editor,format,strikethrough"
},
"format_textdirection_l_to_r": {
"name": "format_textdirection_l_to_r",
"kw": "editor,format,textdirection,to"
},
"format_textdirection_r_to_l": {
"name": "format_textdirection_r_to_l",
"kw": "editor,format,textdirection,to"
},
"format_underlined": {
"name": "format_underlined",
"kw": "editor,format,underlined"
},
"functions": {
"name": "functions",
"kw": "editor,functions"
},
"highlight": {
"name": "highlight",
"kw": "editor,highlight"
},
"insert_chart": {
"name": "insert_chart",
"kw": "editor,insert,chart"
},
"insert_comment": {
"name": "insert_comment",
"kw": "editor,insert,comment"
},
"insert_drive_file": {
"name": "insert_drive_file",
"kw": "editor,insert,drive,file"
},
"insert_emoticon": {
"name": "insert_emoticon",
"kw": "editor,insert,emoticon"
},
"insert_invitation": {
"name": "insert_invitation",
"kw": "editor,insert,invitation"
},
"insert_link": {
"name": "insert_link",
"kw": "editor,insert,link"
},
"insert_photo": {
"name": "insert_photo",
"kw": "editor,insert,photo"
},
"linear_scale": {
"name": "linear_scale",
"kw": "editor,linear,scale"
},
"merge_type": {
"name": "merge_type",
"kw": "editor,merge,type"
},
"mode_comment": {
"name": "mode_comment",
"kw": "editor,mode,comment"
},
"mode_edit": {
"name": "mode_edit",
"kw": "editor,mode,edit"
},
"monetization_on": {
"name": "monetization_on",
"kw": "editor,monetization,on"
},
"money_off": {
"name": "money_off",
"kw": "editor,money,off"
},
"multiline_chart": {
"name": "multiline_chart",
"kw": "editor,multiline,chart"
},
"pie_chart": {
"name": "pie_chart",
"kw": "editor,pie,chart"
},
"pie_chart_outlined": {
"name": "pie_chart_outlined",
"kw": "editor,pie,chart,outlined"
},
"publish": {
"name": "publish",
"kw": "editor,publish"
},
"short_text": {
"name": "short_text",
"kw": "editor,short,text"
},
"show_chart": {
"name": "show_chart",
"kw": "editor,show,chart"
},
"space_bar": {
"name": "space_bar",
"kw": "editor,space,bar"
},
"strikethrough_s": {
"name": "strikethrough_s",
"kw": "editor,strikethrough"
},
"text_fields": {
"name": "text_fields",
"kw": "editor,text,fields"
},
"title": {
"name": "title",
"kw": "editor,title"
},
"vertical_align_bottom": {
"name": "vertical_align_bottom",
"kw": "editor,vertical,align,bottom"
},
"vertical_align_center": {
"name": "vertical_align_center",
"kw": "editor,vertical,align,center"
},
"vertical_align_top": {
"name": "vertical_align_top",
"kw": "editor,vertical,align,top"
},
"wrap_text": {
"name": "wrap_text",
"kw": "editor,wrap,text"
},
"attachment": {
"name": "attachment",
"kw": "file,attachment"
},
"cloud": {
"name": "cloud",
"kw": "file,cloud"
},
"cloud_circle": {
"name": "cloud_circle",
"kw": "file,cloud,circle"
},
"cloud_done": {
"name": "cloud_done",
"kw": "file,cloud,done"
},
"cloud_download": {
"name": "cloud_download",
"kw": "file,cloud,download"
},
"cloud_off": {
"name": "cloud_off",
"kw": "file,cloud,off"
},
"cloud_queue": {
"name": "cloud_queue",
"kw": "file,cloud,queue"
},
"cloud_upload": {
"name": "cloud_upload",
"kw": "file,cloud,upload"
},
"create_new_folder": {
"name": "create_new_folder",
"kw": "file,create,new,folder"
},
"file_download": {
"name": "file_download",
"kw": "file,file,download"
},
"file_upload": {
"name": "file_upload",
"kw": "file,file,upload"
},
"folder": {
"name": "folder",
"kw": "file,folder"
},
"folder_open": {
"name": "folder_open",
"kw": "file,folder,open"
},
"folder_shared": {
"name": "folder_shared",
"kw": "file,folder,shared"
},
"cast": {
"name": "cast",
"kw": "hardware,cast"
},
"cast_connected": {
"name": "cast_connected",
"kw": "hardware,cast,connected"
},
"computer": {
"name": "computer",
"kw": "hardware,computer"
},
"desktop_mac": {
"name": "desktop_mac",
"kw": "hardware,desktop,mac"
},
"desktop_windows": {
"name": "desktop_windows",
"kw": "hardware,desktop,windows"
},
"developer_board": {
"name": "developer_board",
"kw": "hardware,developer,board"
},
"device_hub": {
"name": "device_hub",
"kw": "hardware,device,hub"
},
"devices_other": {
"name": "devices_other",
"kw": "hardware,devices,other"
},
"dock": {
"name": "dock",
"kw": "hardware,dock"
},
"gamepad": {
"name": "gamepad",
"kw": "hardware,gamepad"
},
"headset": {
"name": "headset",
"kw": "hardware,headset"
},
"headset_mic": {
"name": "headset_mic",
"kw": "hardware,headset,mic"
},
"keyboard": {
"name": "keyboard",
"kw": "hardware,keyboard"
},
"keyboard_arrow_down": {
"name": "keyboard_arrow_down",
"kw": "hardware,keyboard,arrow,down"
},
"keyboard_arrow_left": {
"name": "keyboard_arrow_left",
"kw": "hardware,keyboard,arrow,left"
},
"keyboard_arrow_right": {
"name": "keyboard_arrow_right",
"kw": "hardware,keyboard,arrow,right"
},
"keyboard_arrow_up": {
"name": "keyboard_arrow_up",
"kw": "hardware,keyboard,arrow,up"
},
"keyboard_backspace": {
"name": "keyboard_backspace",
"kw": "hardware,keyboard,backspace"
},
"keyboard_capslock": {
"name": "keyboard_capslock",
"kw": "hardware,keyboard,capslock"
},
"keyboard_hide": {
"name": "keyboard_hide",
"kw": "hardware,keyboard,hide"
},
"keyboard_return": {
"name": "keyboard_return",
"kw": "hardware,keyboard,return"
},
"keyboard_tab": {
"name": "keyboard_tab",
"kw": "hardware,keyboard,tab"
},
"keyboard_voice": {
"name": "keyboard_voice",
"kw": "hardware,keyboard,voice"
},
"laptop": {
"name": "laptop",
"kw": "hardware,laptop"
},
"laptop_chromebook": {
"name": "laptop_chromebook",
"kw": "hardware,laptop,chromebook"
},
"laptop_mac": {
"name": "laptop_mac",
"kw": "hardware,laptop,mac"
},
"laptop_windows": {
"name": "laptop_windows",
"kw": "hardware,laptop,windows"
},
"memory": {
"name": "memory",
"kw": "hardware,memory"
},
"mouse": {
"name": "mouse",
"kw": "hardware,mouse"
},
"phone_android": {
"name": "phone_android",
"kw": "hardware,phone,android"
},
"phone_iphone": {
"name": "phone_iphone",
"kw": "hardware,phone,iphone"
},
"phonelink": {
"name": "phonelink",
"kw": "hardware,phonelink"
},
"phonelink_off": {
"name": "phonelink_off",
"kw": "hardware,phonelink,off"
},
"power_input": {
"name": "power_input",
"kw": "hardware,power,input"
},
"router": {
"name": "router",
"kw": "hardware,router"
},
"scanner": {
"name": "scanner",
"kw": "hardware,scanner"
},
"security": {
"name": "security",
"kw": "hardware,security"
},
"sim_card": {
"name": "sim_card",
"kw": "hardware,sim,card"
},
"smartphone": {
"name": "smartphone",
"kw": "hardware,smartphone"
},
"speaker": {
"name": "speaker",
"kw": "hardware,speaker"
},
"speaker_group": {
"name": "speaker_group",
"kw": "hardware,speaker,group"
},
"tablet": {
"name": "tablet",
"kw": "hardware,tablet"
},
"tablet_android": {
"name": "tablet_android",
"kw": "hardware,tablet,android"
},
"tablet_mac": {
"name": "tablet_mac",
"kw": "hardware,tablet,mac"
},
"toys": {
"name": "toys",
"kw": "hardware,toys"
},
"tv": {
"name": "tv",
"kw": "hardware,tv"
},
"videogame_asset": {
"name": "videogame_asset",
"kw": "hardware,videogame,asset"
},
"watch": {
"name": "watch",
"kw": "hardware,watch"
},
"add_a_photo": {
"name": "add_a_photo",
"kw": "image,add,photo"
},
"add_to_photos": {
"name": "add_to_photos",
"kw": "image,add,to,photos"
},
"adjust": {
"name": "adjust",
"kw": "image,adjust"
},
"assistant": {
"name": "assistant",
"kw": "image,assistant"
},
"assistant_photo": {
"name": "assistant_photo",
"kw": "image,assistant,photo"
},
"audiotrack": {
"name": "audiotrack",
"kw": "image,audiotrack"
},
"blur_circular": {
"name": "blur_circular",
"kw": "image,blur,circular"
},
"blur_linear": {
"name": "blur_linear",
"kw": "image,blur,linear"
},
"blur_off": {
"name": "blur_off",
"kw": "image,blur,off"
},
"blur_on": {
"name": "blur_on",
"kw": "image,blur,on"
},
"brightness_1": {
"name": "brightness_1",
"kw": "image,brightness"
},
"brightness_2": {
"name": "brightness_2",
"kw": "image,brightness"
},
"brightness_3": {
"name": "brightness_3",
"kw": "image,brightness"
},
"brightness_4": {
"name": "brightness_4",
"kw": "image,brightness"
},
"brightness_5": {
"name": "brightness_5",
"kw": "image,brightness"
},
"brightness_6": {
"name": "brightness_6",
"kw": "image,brightness"
},
"brightness_7": {
"name": "brightness_7",
"kw": "image,brightness"
},
"broken_image": {
"name": "broken_image",
"kw": "image,broken,image"
},
"brush": {
"name": "brush",
"kw": "image,brush"
},
"burst_mode": {
"name": "burst_mode",
"kw": "image,burst,mode"
},
"camera": {
"name": "camera",
"kw": "image,camera"
},
"camera_alt": {
"name": "camera_alt",
"kw": "image,camera,alt"
},
"camera_front": {
"name": "camera_front",
"kw": "image,camera,front"
},
"camera_rear": {
"name": "camera_rear",
"kw": "image,camera,rear"
},
"camera_roll": {
"name": "camera_roll",
"kw": "image,camera,roll"
},
"center_focus_strong": {
"name": "center_focus_strong",
"kw": "image,center,focus,strong"
},
"center_focus_weak": {
"name": "center_focus_weak",
"kw": "image,center,focus,weak"
},
"collections": {
"name": "collections",
"kw": "image,collections"
},
"collections_bookmark": {
"name": "collections_bookmark",
"kw": "image,collections,bookmark"
},
"color_lens": {
"name": "color_lens",
"kw": "image,color,lens"
},
"colorize": {
"name": "colorize",
"kw": "image,colorize"
},
"compare": {
"name": "compare",
"kw": "image,compare"
},
"control_point": {
"name": "control_point",
"kw": "image,control,point"
},
"control_point_duplicate": {
"name": "control_point_duplicate",
"kw": "image,control,point,duplicate"
},
"crop": {
"name": "crop",
"kw": "image,crop"
},
"crop_16_9": {
"name": "crop_16_9",
"kw": "image,crop,16"
},
"crop_3_2": {
"name": "crop_3_2",
"kw": "image,crop"
},
"crop_5_4": {
"name": "crop_5_4",
"kw": "image,crop"
},
"crop_7_5": {
"name": "crop_7_5",
"kw": "image,crop"
},
"crop_din": {
"name": "crop_din",
"kw": "image,crop,din"
},
"crop_free": {
"name": "crop_free",
"kw": "image,crop,free"
},
"crop_landscape": {
"name": "crop_landscape",
"kw": "image,crop,landscape"
},
"crop_original": {
"name": "crop_original",
"kw": "image,crop,original"
},
"crop_portrait": {
"name": "crop_portrait",
"kw": "image,crop,portrait"
},
"crop_rotate": {
"name": "crop_rotate",
"kw": "image,crop,rotate"
},
"crop_square": {
"name": "crop_square",
"kw": "image,crop,square"
},
"dehaze": {
"name": "dehaze",
"kw": "image,dehaze"
},
"details": {
"name": "details",
"kw": "image,details"
},
"edit": {
"name": "edit",
"kw": "image,edit"
},
"exposure": {
"name": "exposure",
"kw": "image,exposure"
},
"exposure_neg_1": {
"name": "exposure_neg_1",
"kw": "image,exposure,neg"
},
"exposure_neg_2": {
"name": "exposure_neg_2",
"kw": "image,exposure,neg"
},
"exposure_plus_1": {
"name": "exposure_plus_1",
"kw": "image,exposure,plus"
},
"exposure_plus_2": {
"name": "exposure_plus_2",
"kw": "image,exposure,plus"
},
"exposure_zero": {
"name": "exposure_zero",
"kw": "image,exposure,zero"
},
"filter": {
"name": "filter",
"kw": "image,filter"
},
"filter_1": {
"name": "filter_1",
"kw": "image,filter"
},
"filter_2": {
"name": "filter_2",
"kw": "image,filter"
},
"filter_3": {
"name": "filter_3",
"kw": "image,filter"
},
"filter_4": {
"name": "filter_4",
"kw": "image,filter"
},
"filter_5": {
"name": "filter_5",
"kw": "image,filter"
},
"filter_6": {
"name": "filter_6",
"kw": "image,filter"
},
"filter_7": {
"name": "filter_7",
"kw": "image,filter"
},
"filter_8": {
"name": "filter_8",
"kw": "image,filter"
},
"filter_9": {
"name": "filter_9",
"kw": "image,filter"
},
"filter_9_plus": {
"name": "filter_9_plus",
"kw": "image,filter,plus"
},
"filter_b_and_w": {
"name": "filter_b_and_w",
"kw": "image,filter"
},
"filter_center_focus": {
"name": "filter_center_focus",
"kw": "image,filter,center,focus"
},
"filter_drama": {
"name": "filter_drama",
"kw": "image,filter,drama"
},
"filter_frames": {
"name": "filter_frames",
"kw": "image,filter,frames"
},
"filter_hdr": {
"name": "filter_hdr",
"kw": "image,filter,hdr"
},
"filter_none": {
"name": "filter_none",
"kw": "image,filter,none"
},
"filter_tilt_shift": {
"name": "filter_tilt_shift",
"kw": "image,filter,tilt,shift"
},
"filter_vintage": {
"name": "filter_vintage",
"kw": "image,filter,vintage"
},
"flare": {
"name": "flare",
"kw": "image,flare"
},
"flash_auto": {
"name": "flash_auto",
"kw": "image,flash,auto"
},
"flash_off": {
"name": "flash_off",
"kw": "image,flash,off"
},
"flash_on": {
"name": "flash_on",
"kw": "image,flash,on"
},
"flip": {
"name": "flip",
"kw": "image,flip"
},
"gradient": {
"name": "gradient",
"kw": "image,gradient"
},
"grain": {
"name": "grain",
"kw": "image,grain"
},
"grid_off": {
"name": "grid_off",
"kw": "image,grid,off"
},
"grid_on": {
"name": "grid_on",
"kw": "image,grid,on"
},
"hdr_off": {
"name": "hdr_off",
"kw": "image,hdr,off"
},
"hdr_on": {
"name": "hdr_on",
"kw": "image,hdr,on"
},
"hdr_strong": {
"name": "hdr_strong",
"kw": "image,hdr,strong"
},
"hdr_weak": {
"name": "hdr_weak",
"kw": "image,hdr,weak"
},
"healing": {
"name": "healing",
"kw": "image,healing"
},
"image": {
"name": "image",
"kw": "image,image"
},
"image_aspect_ratio": {
"name": "image_aspect_ratio",
"kw": "image,image,aspect,ratio"
},
"iso": {
"name": "iso",
"kw": "image,iso"
},
"landscape": {
"name": "landscape",
"kw": "image,landscape"
},
"leak_add": {
"name": "leak_add",
"kw": "image,leak,add"
},
"leak_remove": {
"name": "leak_remove",
"kw": "image,leak,remove"
},
"lens": {
"name": "lens",
"kw": "image,lens"
},
"linked_camera": {
"name": "linked_camera",
"kw": "image,linked,camera"
},
"looks": {
"name": "looks",
"kw": "image,looks"
},
"looks_3": {
"name": "looks_3",
"kw": "image,looks"
},
"looks_4": {
"name": "looks_4",
"kw": "image,looks"
},
"looks_5": {
"name": "looks_5",
"kw": "image,looks"
},
"looks_6": {
"name": "looks_6",
"kw": "image,looks"
},
"looks_one": {
"name": "looks_one",
"kw": "image,looks,one"
},
"looks_two": {
"name": "looks_two",
"kw": "image,looks,two"
},
"loupe": {
"name": "loupe",
"kw": "image,loupe"
},
"monochrome_photos": {
"name": "monochrome_photos",
"kw": "image,monochrome,photos"
},
"movie_creation": {
"name": "movie_creation",
"kw": "image,movie,creation"
},
"movie_filter": {
"name": "movie_filter",
"kw": "image,movie,filter"
},
"music_note": {
"name": "music_note",
"kw": "image,music,note"
},
"nature": {
"name": "nature",
"kw": "image,nature"
},
"nature_people": {
"name": "nature_people",
"kw": "image,nature,people"
},
"navigate_before": {
"name": "navigate_before",
"kw": "image,navigate,before"
},
"navigate_next": {
"name": "navigate_next",
"kw": "image,navigate,next"
},
"palette": {
"name": "palette",
"kw": "image,palette"
},
"panorama": {
"name": "panorama",
"kw": "image,panorama"
},
"panorama_fish_eye": {
"name": "panorama_fish_eye",
"kw": "image,panorama,fish,eye"
},
"panorama_horizontal": {
"name": "panorama_horizontal",
"kw": "image,panorama,horizontal"
},
"panorama_vertical": {
"name": "panorama_vertical",
"kw": "image,panorama,vertical"
},
"panorama_wide_angle": {
"name": "panorama_wide_angle",
"kw": "image,panorama,wide,angle"
},
"photo": {
"name": "photo",
"kw": "image,photo"
},
"photo_album": {
"name": "photo_album",
"kw": "image,photo,album"
},
"photo_camera": {
"name": "photo_camera",
"kw": "image,photo,camera"
},
"photo_filter": {
"name": "photo_filter",
"kw": "image,photo,filter"
},
"photo_library": {
"name": "photo_library",
"kw": "image,photo,library"
},
"photo_size_select_actual": {
"name": "photo_size_select_actual",
"kw": "image,photo,size,select,actual"
},
"photo_size_select_large": {
"name": "photo_size_select_large",
"kw": "image,photo,size,select,large"
},
"photo_size_select_small": {
"name": "photo_size_select_small",
"kw": "image,photo,size,select,small"
},
"picture_as_pdf": {
"name": "picture_as_pdf",
"kw": "image,picture,as,pdf"
},
"portrait": {
"name": "portrait",
"kw": "image,portrait"
},
"remove_red_eye": {
"name": "remove_red_eye",
"kw": "image,remove,red,eye"
},
"rotate_90_degrees_ccw": {
"name": "rotate_90_degrees_ccw",
"kw": "image,rotate,90,degrees,ccw"
},
"rotate_left": {
"name": "rotate_left",
"kw": "image,rotate,left"
},
"rotate_right": {
"name": "rotate_right",
"kw": "image,rotate,right"
},
"slideshow": {
"name": "slideshow",
"kw": "image,slideshow"
},
"straighten": {
"name": "straighten",
"kw": "image,straighten"
},
"style": {
"name": "style",
"kw": "image,style"
},
"switch_camera": {
"name": "switch_camera",
"kw": "image,switch,camera"
},
"switch_video": {
"name": "switch_video",
"kw": "image,switch,video"
},
"tag_faces": {
"name": "tag_faces",
"kw": "image,tag,faces"
},
"texture": {
"name": "texture",
"kw": "image,texture"
},
"timelapse": {
"name": "timelapse",
"kw": "image,timelapse"
},
"timer": {
"name": "timer",
"kw": "image,timer"
},
"timer_10": {
"name": "timer_10",
"kw": "image,timer,10"
},
"timer_3": {
"name": "timer_3",
"kw": "image,timer"
},
"timer_off": {
"name": "timer_off",
"kw": "image,timer,off"
},
"tonality": {
"name": "tonality",
"kw": "image,tonality"
},
"transform": {
"name": "transform",
"kw": "image,transform"
},
"tune": {
"name": "tune",
"kw": "image,tune"
},
"view_comfy": {
"name": "view_comfy",
"kw": "image,view,comfy"
},
"view_compact": {
"name": "view_compact",
"kw": "image,view,compact"
},
"vignette": {
"name": "vignette",
"kw": "image,vignette"
},
"wb_auto": {
"name": "wb_auto",
"kw": "image,wb,auto"
},
"wb_cloudy": {
"name": "wb_cloudy",
"kw": "image,wb,cloudy"
},
"wb_incandescent": {
"name": "wb_incandescent",
"kw": "image,wb,incandescent"
},
"wb_iridescent": {
"name": "wb_iridescent",
"kw": "image,wb,iridescent"
},
"wb_sunny": {
"name": "wb_sunny",
"kw": "image,wb,sunny"
},
"add_location": {
"name": "add_location",
"kw": "maps,add,location"
},
"beenhere": {
"name": "beenhere",
"kw": "maps,beenhere"
},
"directions": {
"name": "directions",
"kw": "maps,directions"
},
"directions_bike": {
"name": "directions_bike",
"kw": "maps,directions,bike"
},
"directions_boat": {
"name": "directions_boat",
"kw": "maps,directions,boat"
},
"directions_bus": {
"name": "directions_bus",
"kw": "maps,directions,bus"
},
"directions_car": {
"name": "directions_car",
"kw": "maps,directions,car"
},
"directions_railway": {
"name": "directions_railway",
"kw": "maps,directions,railway"
},
"directions_run": {
"name": "directions_run",
"kw": "maps,directions,run"
},
"directions_subway": {
"name": "directions_subway",
"kw": "maps,directions,subway"
},
"directions_transit": {
"name": "directions_transit",
"kw": "maps,directions,transit"
},
"directions_walk": {
"name": "directions_walk",
"kw": "maps,directions,walk"
},
"edit_location": {
"name": "edit_location",
"kw": "maps,edit,location"
},
"ev_station": {
"name": "ev_station",
"kw": "maps,ev,station"
},
"flight": {
"name": "flight",
"kw": "maps,flight"
},
"hotel": {
"name": "hotel",
"kw": "maps,hotel"
},
"layers": {
"name": "layers",
"kw": "maps,layers"
},
"layers_clear": {
"name": "layers_clear",
"kw": "maps,layers,clear"
},
"local_activity": {
"name": "local_activity",
"kw": "maps,local,activity"
},
"local_airport": {
"name": "local_airport",
"kw": "maps,local,airport"
},
"local_atm": {
"name": "local_atm",
"kw": "maps,local,atm"
},
"local_bar": {
"name": "local_bar",
"kw": "maps,local,bar"
},
"local_cafe": {
"name": "local_cafe",
"kw": "maps,local,cafe"
},
"local_car_wash": {
"name": "local_car_wash",
"kw": "maps,local,car,wash"
},
"local_convenience_store": {
"name": "local_convenience_store",
"kw": "maps,local,convenience,store"
},
"local_dining": {
"name": "local_dining",
"kw": "maps,local,dining"
},
"local_drink": {
"name": "local_drink",
"kw": "maps,local,drink"
},
"local_florist": {
"name": "local_florist",
"kw": "maps,local,florist"
},
"local_gas_station": {
"name": "local_gas_station",
"kw": "maps,local,gas,station"
},
"local_grocery_store": {
"name": "local_grocery_store",
"kw": "maps,local,grocery,store"
},
"local_hospital": {
"name": "local_hospital",
"kw": "maps,local,hospital"
},
"local_hotel": {
"name": "local_hotel",
"kw": "maps,local,hotel"
},
"local_laundry_service": {
"name": "local_laundry_service",
"kw": "maps,local,laundry,service"
},
"local_library": {
"name": "local_library",
"kw": "maps,local,library"
},
"local_mall": {
"name": "local_mall",
"kw": "maps,local,mall"
},
"local_movies": {
"name": "local_movies",
"kw": "maps,local,movies"
},
"local_offer": {
"name": "local_offer",
"kw": "maps,local,offer"
},
"local_parking": {
"name": "local_parking",
"kw": "maps,local,parking"
},
"local_pharmacy": {
"name": "local_pharmacy",
"kw": "maps,local,pharmacy"
},
"local_phone": {
"name": "local_phone",
"kw": "maps,local,phone"
},
"local_pizza": {
"name": "local_pizza",
"kw": "maps,local,pizza"
},
"local_play": {
"name": "local_play",
"kw": "maps,local,play"
},
"local_post_office": {
"name": "local_post_office",
"kw": "maps,local,post,office"
},
"local_printshop": {
"name": "local_printshop",
"kw": "maps,local,printshop"
},
"local_see": {
"name": "local_see",
"kw": "maps,local,see"
},
"local_shipping": {
"name": "local_shipping",
"kw": "maps,local,shipping"
},
"local_taxi": {
"name": "local_taxi",
"kw": "maps,local,taxi"
},
"map": {
"name": "map",
"kw": "maps,map"
},
"my_location": {
"name": "my_location",
"kw": "maps,my,location"
},
"navigation": {
"name": "navigation",
"kw": "maps,navigation"
},
"near_me": {
"name": "near_me",
"kw": "maps,near,me"
},
"person_pin": {
"name": "person_pin",
"kw": "maps,person,pin"
},
"person_pin_circle": {
"name": "person_pin_circle",
"kw": "maps,person,pin,circle"
},
"pin_drop": {
"name": "pin_drop",
"kw": "maps,pin,drop"
},
"place": {
"name": "place",
"kw": "maps,place"
},
"rate_review": {
"name": "rate_review",
"kw": "maps,rate,review"
},
"restaurant": {
"name": "restaurant",
"kw": "maps,restaurant"
},
"restaurant_menu": {
"name": "restaurant_menu",
"kw": "maps,restaurant,menu"
},
"satellite": {
"name": "satellite",
"kw": "maps,satellite"
},
"store_mall_directory": {
"name": "store_mall_directory",
"kw": "maps,store,mall,directory"
},
"streetview": {
"name": "streetview",
"kw": "maps,streetview"
},
"subway": {
"name": "subway",
"kw": "maps,subway"
},
"terrain": {
"name": "terrain",
"kw": "maps,terrain"
},
"traffic": {
"name": "traffic",
"kw": "maps,traffic"
},
"train": {
"name": "train",
"kw": "maps,train"
},
"tram": {
"name": "tram",
"kw": "maps,tram"
},
"transfer_within_a_station": {
"name": "transfer_within_a_station",
"kw": "maps,transfer,within,station"
},
"zoom_out_map": {
"name": "zoom_out_map",
"kw": "maps,zoom,out,map"
},
"apps": {
"name": "apps",
"kw": "navigation,apps"
},
"arrow_back": {
"name": "arrow_back",
"kw": "navigation,arrow,back"
},
"arrow_downward": {
"name": "arrow_downward",
"kw": "navigation,arrow,downward"
},
"arrow_drop_down": {
"name": "arrow_drop_down",
"kw": "navigation,arrow,drop,down"
},
"arrow_drop_down_circle": {
"name": "arrow_drop_down_circle",
"kw": "navigation,arrow,drop,down,circle"
},
"arrow_drop_up": {
"name": "arrow_drop_up",
"kw": "navigation,arrow,drop,up"
},
"arrow_forward": {
"name": "arrow_forward",
"kw": "navigation,arrow,forward"
},
"arrow_upward": {
"name": "arrow_upward",
"kw": "navigation,arrow,upward"
},
"cancel": {
"name": "cancel",
"kw": "navigation,cancel"
},
"check": {
"name": "check",
"kw": "navigation,check"
},
"chevron_left": {
"name": "chevron_left",
"kw": "navigation,chevron,left"
},
"chevron_right": {
"name": "chevron_right",
"kw": "navigation,chevron,right"
},
"close": {
"name": "close",
"kw": "navigation,close"
},
"expand_less": {
"name": "expand_less",
"kw": "navigation,expand,less"
},
"expand_more": {
"name": "expand_more",
"kw": "navigation,expand,more"
},
"first_page": {
"name": "first_page",
"kw": "navigation,first,page"
},
"fullscreen": {
"name": "fullscreen",
"kw": "navigation,fullscreen"
},
"fullscreen_exit": {
"name": "fullscreen_exit",
"kw": "navigation,fullscreen,exit"
},
"last_page": {
"name": "last_page",
"kw": "navigation,last,page"
},
"menu": {
"name": "menu",
"kw": "navigation,menu"
},
"more_horiz": {
"name": "more_horiz",
"kw": "navigation,more,horiz"
},
"more_vert": {
"name": "more_vert",
"kw": "navigation,more,vert"
},
"refresh": {
"name": "refresh",
"kw": "navigation,refresh"
},
"subdirectory_arrow_left": {
"name": "subdirectory_arrow_left",
"kw": "navigation,subdirectory,arrow,left"
},
"subdirectory_arrow_right": {
"name": "subdirectory_arrow_right",
"kw": "navigation,subdirectory,arrow,right"
},
"adb": {
"name": "adb",
"kw": "notification,adb"
},
"airline_seat_flat": {
"name": "airline_seat_flat",
"kw": "notification,airline,seat,flat"
},
"airline_seat_flat_angled": {
"name": "airline_seat_flat_angled",
"kw": "notification,airline,seat,flat,angled"
},
"airline_seat_individual_suite": {
"name": "airline_seat_individual_suite",
"kw":
"notification,airline,seat,individual,suite"
},
"airline_seat_legroom_extra": {
"name": "airline_seat_legroom_extra",
"kw": "notification,airline,seat,legroom,extra"
},
"airline_seat_legroom_normal": {
"name": "airline_seat_legroom_normal",
"kw": "notification,airline,seat,legroom,normal"
},
"airline_seat_legroom_reduced": {
"name": "airline_seat_legroom_reduced",
"kw": "notification,airline,seat,legroom,reduced"
},
"airline_seat_recline_extra": {
"name": "airline_seat_recline_extra",
"kw": "notification,airline,seat,recline,extra"
},
"airline_seat_recline_normal": {
"name": "airline_seat_recline_normal",
"kw": "notification,airline,seat,recline,normal"
},
"bluetooth_audio": {
"name": "bluetooth_audio",
"kw": "notification,bluetooth,audio"
},
"confirmation_number": {
"name": "confirmation_number",
"kw": "notification,confirmation,number"
},
"disc_full": {
"name": "disc_full",
"kw": "notification,disc,full"
},
"do_not_disturb": {
"name": "do_not_disturb",
"kw": "notification,do,not,disturb"
},
"do_not_disturb_alt": {
"name": "do_not_disturb_alt",
"kw": "notification,do,not,disturb,alt"
},
"do_not_disturb_off": {
"name": "do_not_disturb_off",
"kw": "notification,do,not,disturb,off"
},
"do_not_disturb_on": {
"name": "do_not_disturb_on",
"kw": "notification,do,not,disturb,on"
},
"drive_eta": {
"name": "drive_eta",
"kw": "notification,drive,eta"
},
"enhanced_encryption": {
"name": "enhanced_encryption",
"kw": "notification,enhanced,encryption"
},
"event_available": {
"name": "event_available",
"kw": "notification,event,available"
},
"event_busy": {
"name": "event_busy",
"kw": "notification,event,busy"
},
"event_note": {
"name": "event_note",
"kw": "notification,event,note"
},
"folder_special": {
"name": "folder_special",
"kw": "notification,folder,special"
},
"live_tv": {
"name": "live_tv",
"kw": "notification,live,tv"
},
"mms": {
"name": "mms",
"kw": "notification,mms"
},
"more": {
"name": "more",
"kw": "notification,more"
},
"network_check": {
"name": "network_check",
"kw": "notification,network,check"
},
"network_locked": {
"name": "network_locked",
"kw": "notification,network,locked"
},
"no_encryption": {
"name": "no_encryption",
"kw": "notification,no,encryption"
},
"ondemand_video": {
"name": "ondemand_video",
"kw": "notification,ondemand,video"
},
"personal_video": {
"name": "personal_video",
"kw": "notification,personal,video"
},
"phone_bluetooth_speaker": {
"name": "phone_bluetooth_speaker",
"kw": "notification,phone,bluetooth,speaker"
},
"phone_forwarded": {
"name": "phone_forwarded",
"kw": "notification,phone,forwarded"
},
"phone_in_talk": {
"name": "phone_in_talk",
"kw": "notification,phone,in,talk"
},
"phone_locked": {
"name": "phone_locked",
"kw": "notification,phone,locked"
},
"phone_missed": {
"name": "phone_missed",
"kw": "notification,phone,missed"
},
"phone_paused": {
"name": "phone_paused",
"kw": "notification,phone,paused"
},
"power": {
"name": "power",
"kw": "notification,power"
},
"priority_high": {
"name": "priority_high",
"kw": "notification,priority,high"
},
"sd_card": {
"name": "sd_card",
"kw": "notification,sd,card"
},
"sim_card_alert": {
"name": "sim_card_alert",
"kw": "notification,sim,card,alert"
},
"sms": {
"name": "sms",
"kw": "notification,sms"
},
"sms_failed": {
"name": "sms_failed",
"kw": "notification,sms,failed"
},
"sync": {
"name": "sync",
"kw": "notification,sync"
},
"sync_disabled": {
"name": "sync_disabled",
"kw": "notification,sync,disabled"
},
"sync_problem": {
"name": "sync_problem",
"kw": "notification,sync,problem"
},
"system_update": {
"name": "system_update",
"kw": "notification,system,update"
},
"tap_and_play": {
"name": "tap_and_play",
"kw": "notification,tap,play"
},
"time_to_leave": {
"name": "time_to_leave",
"kw": "notification,time,to,leave"
},
"vibration": {
"name": "vibration",
"kw": "notification,vibration"
},
"voice_chat": {
"name": "voice_chat",
"kw": "notification,voice,chat"
},
"vpn_lock": {
"name": "vpn_lock",
"kw": "notification,vpn,lock"
},
"wc": {
"name": "wc",
"kw": "notification,wc"
},
"wifi": {
"name": "wifi",
"kw": "notification,wifi"
},
"ac_unit": {
"name": "ac_unit",
"kw": "places,ac,unit"
},
"airport_shuttle": {
"name": "airport_shuttle",
"kw": "places,airport,shuttle"
},
"all_inclusive": {
"name": "all_inclusive",
"kw": "places,all,inclusive"
},
"beach_access": {
"name": "beach_access",
"kw": "places,beach,access"
},
"business_center": {
"name": "business_center",
"kw": "places,business,center"
},
"casino": {
"name": "casino",
"kw": "places,casino"
},
"child_care": {
"name": "child_care",
"kw": "places,child,care"
},
"child_friendly": {
"name": "child_friendly",
"kw": "places,child,friendly"
},
"fitness_center": {
"name": "fitness_center",
"kw": "places,fitness,center"
},
"free_breakfast": {
"name": "free_breakfast",
"kw": "places,free,breakfast"
},
"golf_course": {
"name": "golf_course",
"kw": "places,golf,course"
},
"hot_tub": {
"name": "hot_tub",
"kw": "places,hot,tub"
},
"kitchen": {
"name": "kitchen",
"kw": "places,kitchen"
},
"pool": {
"name": "pool",
"kw": "places,pool"
},
"room_service": {
"name": "room_service",
"kw": "places,room,service"
},
"rv_hookup": {
"name": "rv_hookup",
"kw": "places,rv,hookup"
},
"smoke_free": {
"name": "smoke_free",
"kw": "places,smoke,free"
},
"smoking_rooms": {
"name": "smoking_rooms",
"kw": "places,smoking,rooms"
},
"spa": {
"name": "spa",
"kw": "places,spa"
},
"cake": {
"name": "cake",
"kw": "social,cake"
},
"domain": {
"name": "domain",
"kw": "social,domain"
},
"group": {
"name": "group",
"kw": "social,group"
},
"group_add": {
"name": "group_add",
"kw": "social,group,add"
},
"location_city": {
"name": "location_city",
"kw": "social,location,city"
},
"mood": {
"name": "mood",
"kw": "social,mood"
},
"mood_bad": {
"name": "mood_bad",
"kw": "social,mood,bad"
},
"notifications": {
"name": "notifications",
"kw": "social,notifications"
},
"notifications_active": {
"name": "notifications_active",
"kw": "social,notifications,active"
},
"notifications_none": {
"name": "notifications_none",
"kw": "social,notifications,none"
},
"notifications_off": {
"name": "notifications_off",
"kw": "social,notifications,off"
},
"notifications_paused": {
"name": "notifications_paused",
"kw": "social,notifications,paused"
},
"pages": {
"name": "pages",
"kw": "social,pages"
},
"party_mode": {
"name": "party_mode",
"kw": "social,party,mode"
},
"people": {
"name": "people",
"kw": "social,people"
},
"people_outline": {
"name": "people_outline",
"kw": "social,people,outline"
},
"person": {
"name": "person",
"kw": "social,person"
},
"person_add": {
"name": "person_add",
"kw": "social,person,add"
},
"person_outline": {
"name": "person_outline",
"kw": "social,person,outline"
},
"plus_one": {
"name": "plus_one",
"kw": "social,plus,one"
},
"poll": {
"name": "poll",
"kw": "social,poll"
},
"public": {
"name": "public",
"kw": "social,public"
},
"school": {
"name": "school",
"kw": "social,school"
},
"sentiment_dissatisfied": {
"name": "sentiment_dissatisfied",
"kw": "social,sentiment,dissatisfied"
},
"sentiment_neutral": {
"name": "sentiment_neutral",
"kw": "social,sentiment,neutral"
},
"sentiment_satisfied": {
"name": "sentiment_satisfied",
"kw": "social,sentiment,satisfied"
},
"sentiment_very_dissatisfied": {
"name": "sentiment_very_dissatisfied",
"kw": "social,sentiment,very,dissatisfied"
},
"sentiment_very_satisfied": {
"name": "sentiment_very_satisfied",
"kw": "social,sentiment,very,satisfied"
},
"share": {
"name": "share",
"kw": "social,share"
},
"whatshot": {
"name": "whatshot",
"kw": "social,whatshot"
},
"check_box": {
"name": "check_box",
"kw": "toggle,check,box"
},
"check_box_outline_blank": {
"name": "check_box_outline_blank",
"kw": "toggle,check,box,outline,blank"
},
"indeterminate_check_box": {
"name": "indeterminate_check_box",
"kw": "toggle,indeterminate,check,box"
},
"radio_button_checked": {
"name": "radio_button_checked",
"kw": "toggle,radio,button,checked"
},
"radio_button_unchecked": {
"name": "radio_button_unchecked",
"kw": "toggle,radio,button,unchecked"
},
"star": {
"name": "star",
"kw": "toggle,star"
},
"star_border": {
"name": "star_border",
"kw": "toggle,star,border"
},
"star_half": {
"name": "star_half",
"kw": "toggle,star,half"
}
}
}PK��[�Ը��:Application/Frontend/Assets/icons/materialicons/readme.txtnu�[���https://fonts.googleapis.com/icon?family=Material+Icons
class: .material-icons
var a = <---- https://material.io/icons/data/grid.json;
var b = a.icons;
var result = {};
for(var k in b){
result[b[k].ligature] = b[k].ligature;
result[b[k].ligature] = {"name": b[k].ligature,
"kw": b[k].keywords.join(',')};
}
console.log(JSON.stringify(result));
Usage: <i
class="material-icons">alarm</i>PK��[l��9�9@Application/Frontend/Assets/icons/typicons/dist/typicons.min.cssnu�[���@charset
"UTF-8";@font-face{font-family:'typicons';src:url(typicons.woff)
format('woff');font-weight:400;font-style:normal;font-display:swap}div
.n2i.typcn{display:inline-block;font:1em/1
typicons;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.typcn-adjust-brightness:before{content:'\e000'}.typcn-adjust-contrast:before{content:'\e001'}.typcn-anchor-outline:before{content:'\e002'}.typcn-anchor:before{content:'\e003'}.typcn-archive:before{content:'\e004'}.typcn-arrow-back-outline:before{content:'\e005'}.typcn-arrow-back:before{content:'\e006'}.typcn-arrow-down-outline:before{content:'\e007'}.typcn-arrow-down-thick:before{content:'\e008'}.typcn-arrow-down:before{content:'\e009'}.typcn-arrow-forward-outline:before{content:'\e00a'}.typcn-arrow-forward:before{content:'\e00b'}.typcn-arrow-left-outline:before{content:'\e00c'}.typcn-arrow-left-thick:before{content:'\e00d'}.typcn-arrow-left:before{content:'\e00e'}.typcn-arrow-loop-outline:before{content:'\e00f'}.typcn-arrow-loop:before{content:'\e010'}.typcn-arrow-maximise-outline:before{content:'\e011'}.typcn-arrow-maximise:before{content:'\e012'}.typcn-arrow-minimise-outline:before{content:'\e013'}.typcn-arrow-minimise:before{content:'\e014'}.typcn-arrow-move-outline:before{content:'\e015'}.typcn-arrow-move:before{content:'\e016'}.typcn-arrow-repeat-outline:before{content:'\e017'}.typcn-arrow-repeat:before{content:'\e018'}.typcn-arrow-right-outline:before{content:'\e019'}.typcn-arrow-right-thick:before{content:'\e01a'}.typcn-arrow-right:before{content:'\e01b'}.typcn-arrow-shuffle:before{content:'\e01c'}.typcn-arrow-sorted-down:before{content:'\e01d'}.typcn-arrow-sorted-up:before{content:'\e01e'}.typcn-arrow-sync-outline:before{content:'\e01f'}.typcn-arrow-sync:before{content:'\e020'}.typcn-arrow-unsorted:before{content:'\e021'}.typcn-arrow-up-outline:before{content:'\e022'}.typcn-arrow-up-thick:before{content:'\e023'}.typcn-arrow-up:before{content:'\e024'}.typcn-at:before{content:'\e025'}.typcn-attachment-outline:before{content:'\e026'}.typcn-attachment:before{content:'\e027'}.typcn-backspace-outline:before{content:'\e028'}.typcn-backspace:before{content:'\e029'}.typcn-battery-charge:before{content:'\e02a'}.typcn-battery-full:before{content:'\e02b'}.typcn-battery-high:before{content:'\e02c'}.typcn-battery-low:before{content:'\e02d'}.typcn-battery-mid:before{content:'\e02e'}.typcn-beaker:before{content:'\e02f'}.typcn-beer:before{content:'\e030'}.typcn-bell:before{content:'\e031'}.typcn-book:before{content:'\e032'}.typcn-bookmark:before{content:'\e033'}.typcn-briefcase:before{content:'\e034'}.typcn-brush:before{content:'\e035'}.typcn-business-card:before{content:'\e036'}.typcn-calculator:before{content:'\e037'}.typcn-calendar-outline:before{content:'\e038'}.typcn-calendar:before{content:'\e039'}.typcn-camera-outline:before{content:'\e03a'}.typcn-camera:before{content:'\e03b'}.typcn-cancel-outline:before{content:'\e03c'}.typcn-cancel:before{content:'\e03d'}.typcn-chart-area-outline:before{content:'\e03e'}.typcn-chart-area:before{content:'\e03f'}.typcn-chart-bar-outline:before{content:'\e040'}.typcn-chart-bar:before{content:'\e041'}.typcn-chart-line-outline:before{content:'\e042'}.typcn-chart-line:before{content:'\e043'}.typcn-chart-pie-outline:before{content:'\e044'}.typcn-chart-pie:before{content:'\e045'}.typcn-chevron-left-outline:before{content:'\e046'}.typcn-chevron-left:before{content:'\e047'}.typcn-chevron-right-outline:before{content:'\e048'}.typcn-chevron-right:before{content:'\e049'}.typcn-clipboard:before{content:'\e04a'}.typcn-cloud-storage:before{content:'\e04b'}.typcn-cloud-storage-outline:before{content:'\e054'}.typcn-code-outline:before{content:'\e04c'}.typcn-code:before{content:'\e04d'}.typcn-coffee:before{content:'\e04e'}.typcn-cog-outline:before{content:'\e04f'}.typcn-cog:before{content:'\e050'}.typcn-compass:before{content:'\e051'}.typcn-contacts:before{content:'\e052'}.typcn-credit-card:before{content:'\e053'}.typcn-css3:before{content:'\e055'}.typcn-database:before{content:'\e056'}.typcn-delete-outline:before{content:'\e057'}.typcn-delete:before{content:'\e058'}.typcn-device-desktop:before{content:'\e059'}.typcn-device-laptop:before{content:'\e05a'}.typcn-device-phone:before{content:'\e05b'}.typcn-device-tablet:before{content:'\e05c'}.typcn-directions:before{content:'\e05d'}.typcn-divide-outline:before{content:'\e05e'}.typcn-divide:before{content:'\e05f'}.typcn-document-add:before{content:'\e060'}.typcn-document-delete:before{content:'\e061'}.typcn-document-text:before{content:'\e062'}.typcn-document:before{content:'\e063'}.typcn-download-outline:before{content:'\e064'}.typcn-download:before{content:'\e065'}.typcn-dropbox:before{content:'\e066'}.typcn-edit:before{content:'\e067'}.typcn-eject-outline:before{content:'\e068'}.typcn-eject:before{content:'\e069'}.typcn-equals-outline:before{content:'\e06a'}.typcn-equals:before{content:'\e06b'}.typcn-export-outline:before{content:'\e06c'}.typcn-export:before{content:'\e06d'}.typcn-eye-outline:before{content:'\e06e'}.typcn-eye:before{content:'\e06f'}.typcn-feather:before{content:'\e070'}.typcn-film:before{content:'\e071'}.typcn-filter:before{content:'\e072'}.typcn-flag-outline:before{content:'\e073'}.typcn-flag:before{content:'\e074'}.typcn-flash-outline:before{content:'\e075'}.typcn-flash:before{content:'\e076'}.typcn-flow-children:before{content:'\e077'}.typcn-flow-merge:before{content:'\e078'}.typcn-flow-parallel:before{content:'\e079'}.typcn-flow-switch:before{content:'\e07a'}.typcn-folder-add:before{content:'\e07b'}.typcn-folder-delete:before{content:'\e07c'}.typcn-folder-open:before{content:'\e07d'}.typcn-folder:before{content:'\e07e'}.typcn-gift:before{content:'\e07f'}.typcn-globe-outline:before{content:'\e080'}.typcn-globe:before{content:'\e081'}.typcn-group-outline:before{content:'\e082'}.typcn-group:before{content:'\e083'}.typcn-headphones:before{content:'\e084'}.typcn-heart-full-outline:before{content:'\e085'}.typcn-heart-half-outline:before{content:'\e086'}.typcn-heart-outline:before{content:'\e087'}.typcn-heart:before{content:'\e088'}.typcn-home-outline:before{content:'\e089'}.typcn-home:before{content:'\e08a'}.typcn-html5:before{content:'\e08b'}.typcn-image-outline:before{content:'\e08c'}.typcn-image:before{content:'\e08d'}.typcn-infinity-outline:before{content:'\e08e'}.typcn-infinity:before{content:'\e08f'}.typcn-info-large-outline:before{content:'\e090'}.typcn-info-large:before{content:'\e091'}.typcn-info-outline:before{content:'\e092'}.typcn-info:before{content:'\e093'}.typcn-input-checked-outline:before{content:'\e094'}.typcn-input-checked:before{content:'\e095'}.typcn-key-outline:before{content:'\e096'}.typcn-key:before{content:'\e097'}.typcn-keyboard:before{content:'\e098'}.typcn-leaf:before{content:'\e099'}.typcn-lightbulb:before{content:'\e09a'}.typcn-link-outline:before{content:'\e09b'}.typcn-link:before{content:'\e09c'}.typcn-location-arrow-outline:before{content:'\e09d'}.typcn-location-arrow:before{content:'\e09e'}.typcn-location-outline:before{content:'\e09f'}.typcn-location:before{content:'\e0a0'}.typcn-lock-closed-outline:before{content:'\e0a1'}.typcn-lock-closed:before{content:'\e0a2'}.typcn-lock-open-outline:before{content:'\e0a3'}.typcn-lock-open:before{content:'\e0a4'}.typcn-mail:before{content:'\e0a5'}.typcn-map:before{content:'\e0a6'}.typcn-media-eject-outline:before{content:'\e0a7'}.typcn-media-eject:before{content:'\e0a8'}.typcn-media-fast-forward-outline:before{content:'\e0a9'}.typcn-media-fast-forward:before{content:'\e0aa'}.typcn-media-pause-outline:before{content:'\e0ab'}.typcn-media-pause:before{content:'\e0ac'}.typcn-media-play-outline:before{content:'\e0ad'}.typcn-media-play-reverse-outline:before{content:'\e0ae'}.typcn-media-play-reverse:before{content:'\e0af'}.typcn-media-play:before{content:'\e0b0'}.typcn-media-record-outline:before{content:'\e0b1'}.typcn-media-record:before{content:'\e0b2'}.typcn-media-rewind-outline:before{content:'\e0b3'}.typcn-media-rewind:before{content:'\e0b4'}.typcn-media-stop-outline:before{content:'\e0b5'}.typcn-media-stop:before{content:'\e0b6'}.typcn-message-typing:before{content:'\e0b7'}.typcn-message:before{content:'\e0b8'}.typcn-messages:before{content:'\e0b9'}.typcn-microphone-outline:before{content:'\e0ba'}.typcn-microphone:before{content:'\e0bb'}.typcn-minus-outline:before{content:'\e0bc'}.typcn-minus:before{content:'\e0bd'}.typcn-mortar-board:before{content:'\e0be'}.typcn-news:before{content:'\e0bf'}.typcn-notes-outline:before{content:'\e0c0'}.typcn-notes:before{content:'\e0c1'}.typcn-pen:before{content:'\e0c2'}.typcn-pencil:before{content:'\e0c3'}.typcn-phone-outline:before{content:'\e0c4'}.typcn-phone:before{content:'\e0c5'}.typcn-pi-outline:before{content:'\e0c6'}.typcn-pi:before{content:'\e0c7'}.typcn-pin-outline:before{content:'\e0c8'}.typcn-pin:before{content:'\e0c9'}.typcn-pipette:before{content:'\e0ca'}.typcn-plane-outline:before{content:'\e0cb'}.typcn-plane:before{content:'\e0cc'}.typcn-plug:before{content:'\e0cd'}.typcn-plus-outline:before{content:'\e0ce'}.typcn-plus:before{content:'\e0cf'}.typcn-point-of-interest-outline:before{content:'\e0d0'}.typcn-point-of-interest:before{content:'\e0d1'}.typcn-power-outline:before{content:'\e0d2'}.typcn-power:before{content:'\e0d3'}.typcn-printer:before{content:'\e0d4'}.typcn-puzzle-outline:before{content:'\e0d5'}.typcn-puzzle:before{content:'\e0d6'}.typcn-radar-outline:before{content:'\e0d7'}.typcn-radar:before{content:'\e0d8'}.typcn-refresh-outline:before{content:'\e0d9'}.typcn-refresh:before{content:'\e0da'}.typcn-rss-outline:before{content:'\e0db'}.typcn-rss:before{content:'\e0dc'}.typcn-scissors-outline:before{content:'\e0dd'}.typcn-scissors:before{content:'\e0de'}.typcn-shopping-bag:before{content:'\e0df'}.typcn-shopping-cart:before{content:'\e0e0'}.typcn-social-at-circular:before{content:'\e0e1'}.typcn-social-dribbble-circular:before{content:'\e0e2'}.typcn-social-dribbble:before{content:'\e0e3'}.typcn-social-facebook-circular:before{content:'\e0e4'}.typcn-social-facebook:before{content:'\e0e5'}.typcn-social-flickr-circular:before{content:'\e0e6'}.typcn-social-flickr:before{content:'\e0e7'}.typcn-social-github-circular:before{content:'\e0e8'}.typcn-social-github:before{content:'\e0e9'}.typcn-social-google-plus-circular:before{content:'\e0ea'}.typcn-social-google-plus:before{content:'\e0eb'}.typcn-social-instagram-circular:before{content:'\e0ec'}.typcn-social-instagram:before{content:'\e0ed'}.typcn-social-last-fm-circular:before{content:'\e0ee'}.typcn-social-last-fm:before{content:'\e0ef'}.typcn-social-linkedin-circular:before{content:'\e0f0'}.typcn-social-linkedin:before{content:'\e0f1'}.typcn-social-pinterest-circular:before{content:'\e0f2'}.typcn-social-pinterest:before{content:'\e0f3'}.typcn-social-skype-outline:before{content:'\e0f4'}.typcn-social-skype:before{content:'\e0f5'}.typcn-social-tumbler-circular:before{content:'\e0f6'}.typcn-social-tumbler:before{content:'\e0f7'}.typcn-social-twitter-circular:before{content:'\e0f8'}.typcn-social-twitter:before{content:'\e0f9'}.typcn-social-vimeo-circular:before{content:'\e0fa'}.typcn-social-vimeo:before{content:'\e0fb'}.typcn-social-youtube-circular:before{content:'\e0fc'}.typcn-social-youtube:before{content:'\e0fd'}.typcn-sort-alphabetically-outline:before{content:'\e0fe'}.typcn-sort-alphabetically:before{content:'\e0ff'}.typcn-sort-numerically-outline:before{content:'\e100'}.typcn-sort-numerically:before{content:'\e101'}.typcn-spanner-outline:before{content:'\e102'}.typcn-spanner:before{content:'\e103'}.typcn-spiral:before{content:'\e104'}.typcn-star-full-outline:before{content:'\e105'}.typcn-star-half-outline:before{content:'\e106'}.typcn-star-half:before{content:'\e107'}.typcn-star-outline:before{content:'\e108'}.typcn-star:before{content:'\e109'}.typcn-starburst-outline:before{content:'\e10a'}.typcn-starburst:before{content:'\e10b'}.typcn-stopwatch:before{content:'\e10c'}.typcn-support:before{content:'\e10d'}.typcn-tabs-outline:before{content:'\e10e'}.typcn-tag:before{content:'\e10f'}.typcn-tags:before{content:'\e110'}.typcn-th-large-outline:before{content:'\e111'}.typcn-th-large:before{content:'\e112'}.typcn-th-list-outline:before{content:'\e113'}.typcn-th-list:before{content:'\e114'}.typcn-th-menu-outline:before{content:'\e115'}.typcn-th-menu:before{content:'\e116'}.typcn-th-small-outline:before{content:'\e117'}.typcn-th-small:before{content:'\e118'}.typcn-thermometer:before{content:'\e119'}.typcn-thumbs-down:before{content:'\e11a'}.typcn-thumbs-ok:before{content:'\e11b'}.typcn-thumbs-up:before{content:'\e11c'}.typcn-tick-outline:before{content:'\e11d'}.typcn-tick:before{content:'\e11e'}.typcn-ticket:before{content:'\e11f'}.typcn-time:before{content:'\e120'}.typcn-times-outline:before{content:'\e121'}.typcn-times:before{content:'\e122'}.typcn-trash:before{content:'\e123'}.typcn-tree:before{content:'\e124'}.typcn-upload-outline:before{content:'\e125'}.typcn-upload:before{content:'\e126'}.typcn-user-add-outline:before{content:'\e127'}.typcn-user-add:before{content:'\e128'}.typcn-user-delete-outline:before{content:'\e129'}.typcn-user-delete:before{content:'\e12a'}.typcn-user-outline:before{content:'\e12b'}.typcn-user:before{content:'\e12c'}.typcn-vendor-android:before{content:'\e12d'}.typcn-vendor-apple:before{content:'\e12e'}.typcn-vendor-microsoft:before{content:'\e12f'}.typcn-video-outline:before{content:'\e130'}.typcn-video:before{content:'\e131'}.typcn-volume-down:before{content:'\e132'}.typcn-volume-mute:before{content:'\e133'}.typcn-volume-up:before{content:'\e134'}.typcn-volume:before{content:'\e135'}.typcn-warning-outline:before{content:'\e136'}.typcn-warning:before{content:'\e137'}.typcn-watch:before{content:'\e138'}.typcn-waves-outline:before{content:'\e139'}.typcn-waves:before{content:'\e13a'}.typcn-weather-cloudy:before{content:'\e13b'}.typcn-weather-downpour:before{content:'\e13c'}.typcn-weather-night:before{content:'\e13d'}.typcn-weather-partly-sunny:before{content:'\e13e'}.typcn-weather-shower:before{content:'\e13f'}.typcn-weather-snow:before{content:'\e140'}.typcn-weather-stormy:before{content:'\e141'}.typcn-weather-sunny:before{content:'\e142'}.typcn-weather-windy-cloudy:before{content:'\e143'}.typcn-weather-windy:before{content:'\e144'}.typcn-wi-fi-outline:before{content:'\e145'}.typcn-wi-fi:before{content:'\e146'}.typcn-wine:before{content:'\e147'}.typcn-world-outline:before{content:'\e148'}.typcn-world:before{content:'\e149'}.typcn-zoom-in-outline:before{content:'\e14a'}.typcn-zoom-in:before{content:'\e14b'}.typcn-zoom-out-outline:before{content:'\e14c'}.typcn-zoom-out:before{content:'\e14d'}.typcn-zoom-outline:before{content:'\e14e'}.typcn-zoom:before{content:'\e14f'}PK��[�������=Application/Frontend/Assets/icons/typicons/dist/typicons.woffnu�[���wOFF����FFTMll3�GDEF�
~OS/2�J`6mQ�cmap�4�NRY!cvt (s�Nfpgm<� ��
x;gasp 8glyf @Թ]̺0head�469Ohhea�0$dBhmtx�P�:��loca�P��;\maxp��
K�name���"v�wpost��&-�Aprep�VV����x�c```d�3����~�hU[@x�c`d``�b `b`d`d�,`��x�c`a:�8�������iC�f|�`��e`ef��!
�5������
�-��>���(00��x���S�����g��m۶�Mm�L��Im۶�Զ����H��M��:�̙937�E5������pY��JK�^Vd�WTV�*-|٪�(Su�j����ꨫ��h��ƚh���Zh����w�i���:鬋��鮇�z魏���o��l���n��Fm���o��&�l����n��f�m��景�kX�Zֶ�u�g}��F6��Mmfs[��V���mmg{;��Nv��]�fw{��^���>�����@Y�`�8�aw�#�h�8�q���'8�INv�S��tg8�Y�v�s��|��E.v�K]�rW��U�v�k]�z7��Mnv�[��vw��]�v�{��~x�C�z�#���=�IOy�3�����E/y�+^���Moy�;�{�A���>�O|�3�������|�?���~������V�Ge$)�Z�R=婑���ک�����i��i��i��i��i��i��i��i��鐎��钮��鑞��链������������������ə����陑���ٙ������Ȃ�r���B�T��F���_�&��x�c`@FF�
��@
��x��U�v�V�<dp:d����8P�ʄ)0i*�v!��t��>�k�B�V���}=$�t��,�ϾG[g�:�F#*}�kԡ����=�J�I\�u/��q]�OI���$Jj��P.�X�*Y'X'��
VOU�g��eIDD��&I��'�g%I
%����PB5�RաL�Ы�q�@�F�uXT�C�'�5�ԬF*W9���F��/{��:����1x�~�*�����?vJN���TqԡV��0�_��L*�@��bE��t�1=t:�.J�F����(����(��������ST�]q��@f
\J�lt�D&R��N5���G�����\��<U2�z�3;{q1�n'��p��2ovv㝇C�W��L��G��b~>B�Pj~"N$�FX��qW
B�1���S�9tE��f]�1���J�a= ��~
�N$+gQ��H��c�u��gPK��;2�C�"���3�a�U_���4��g�@�4�K��)J�o��L�h�
�T�]6��)�iϚb��S�Ҟ32������]�}�i�Gn���V!7m�i/
7�Fn�U�:viRA�4��a�V��@4|i`�.b��DG�����u�ri���"��.��><��Fݰ�Ƒ�0Fz��Y����M�.��2�2�L
�e�@�:� ������`\�x�JC�T�;����y_��9����.�\wy Y�
rc���Rd���-�T'G�+'�UkC*�(����{���(���^���瓐�=�B[��a�#Li�%^S�(=�R��C,o)�<�Z�ĸujk��z!����pH)]ߴ�w��k�����zr��*�Q�T�F��ڼf�2�)U����O���QYi����T�4�9�O�k�to8h�=T|4A#U5���(c4�5��t1V~�h�b�=�O��U��K���഻�*���[F���m䊟#1�-
�;b�d
�;���Y��&w��m�m�?&��߆�ErW;�y��ՓQ%w���MvYף6G�N��-7���r,��`A����1�wiQ���e���t�������m8Wvͱ�tz.A���� ���#�.�}rv�!����ȹ�99_�C0
�`��;�!xH�9��������!��!Hȹ
��'�|M�7F�Nd�����@���8dF�M�<X��EdZDꑑ��S,�{�H��"R4rcB��K��"R���gƗ�#)������^��x���|\�y/���ϙ�����#i�y�iF�y[�k,[�d[F�@��lcdalS�!@�H�HR�mRܴ�״iOh�r���4i/iz����-��KsN|�p�o�id��`���{�� #1Bh�=L���j�"0",F)�&��}"l�qBY�2A�<ق��=�����M���r�]���Ə�#�<�M$[�ģp�"��Di�?y�<K�>��#�ގ�G�Hy��r1���|�/'�N��?_��÷z��]����yv��pN�~��>x�n9��yBd��i�
��E'9@���$�~�7=��,m0����������/ٮ���M��K�ˇ��J��W���E�2��m̾�6���d�k�(���E�f��H-�1�����?d��[YY\$d����7_^<�xx��5{''��m-�z3]�v���T��@��%ż_*�i�T,��R�C��?Y��^V*VR���������o��Fh�X0H���T�cx@��ӕD
~�N��.�*�:�Yד��?��c3�ɫ���3���7��?���d�oje�?a�q��=��o�uu��>7�daW�g�����T��5�'��Ϗ�of���5��<s���-�p�9�)NM�F��pܨ���={��\�}�ہ��qen�ao\��w8߅H;I�>R!�d�l�V���P�;�j��T�a��=I�
p�f�����۪����Y�N�+�BC���m
iS��(�0{q�N�Ty�*.jF)��즕*"�SE�����{�w�1YMГ]��E5�v��[�Cw�β6p��B��qƮ:P���O�~�}�<D[퇙���Cj?����D<�E5��]������l���g>s�aN�y�16��
92@�T��m=F #6UTm�
�T t�Pz3��j��E���
�Jf*���#��~���&�1�u
��P����Ə�J��T�R9�!#�2g<�ԫO,M^��a���l�g^D�8��'_1�sO?}��~o�a���0��üw�N�4�z�A���0�D5<�#�Vgl��ȄE;�DeA��e�_�%I�����*K]�FةQ��ݙ��E�i#��h!gP���5��=���N���խ���ϕK�G��}��i�U\�DZ1kC�d���b�Bq����Q+�uڭy5�G��Eƪ��.a{�4\�&j?ԍz����1�
-�V��_� ݔjWK(hHFD���f`%�f�D�-oKGӡp\�fMx�x���Aŀ0�T�BG@
�h��`���ђ*�W�ހ�u���~�iTM����vߥ��ϝ0_~Y�þ]�䡸�!АI��
�����M������=$~R��"�!��F�(X�"P�X6��%��N��/�l��ű6Z�I�q�W?��x��*kl��Ox���̑�nh�|A���7�~?C��.���u�"@5| �Pi�C
3�"¬(�%�D0`&ۣ�L0�oVB��8߷�2(k�b���E�:W�z:E�k?0�MI��r�4k�7���Nh���Ӯ�]�:^���C����4\�k�чPfj����o���O�$�w�D�->�(|szB`о#�� �aQ�x%�g9�N�C�a+e����f�wc�D<7f�Uخ�;u;����r��wƐ�����1�:�~���'�@��ܠc�g��pX{�yl�a���� �]Kt���%m3w���xLa"��N��A�c��I�iQ�"h+�}��{���S,���4i���;���i�\�}D�"��8KE6+�J:U��3��W?n�'B�?Z�硝acn��I�d^~�8�����|��&8��j����!y�.��)�8�>z�\�{3y%�sQ:�\�i�K��wi9��{o^4�Q9n��V�Nq�*
yq��կ��t`��ZmM3�a���Ǿ�i�/&ۋ8
y;(1I�c�x�Q��%&/���g�(�Y�
�Dҟ0�^5���V>T"���f5y�!�H�*�(��k٬}�v%N$����^ͷ���.�v
��K�,$�-�����y���y�G�Y�y��令"�r��"��DT�Hd:I�`�"�
I\=�V��,�7x���'��A��-F7��y��q#����qc��S�<��p����=�]I�����*
�E߂����]�y�K�i ����/�;@��"y��>��T�)�`P��'���,ڨB4Y�:;���
qUp��n��7LA(H�k���R�ugRf��5m�56ó�m
�7H�J�gκ��3Ea�0�U�4�Ӣ���>@�B�c�t��V�u�O��]@�ߕ��K�?z����#�h�V�.;lL�hA��_�����#�LKW"���;�h����*(������T����w>s��t}�a�k�����+�\��p���%�}�n�9��3��[_N":��~E'��"2
"�0S��T�~��/�E�*҉��_r��]���z������҅�*tZ:��FB~ݭ��diֶ�m��MN����(��
�O�9?_{1;R�C��ũ��|IӜ�:��w�|@)`N�pe-�9�?��SFE��#���%yM����/�����
��}��q]�=ڍT��S�$��M�9�����BD-
j�D��E_!�ϣ�����[^���@�DS�C�-��j`!�e��zͳH|Dr���!x.�0��1��\l�0�\:45�L�q��z���c�n_����ܵ{�L�0u������-�B2����v���`��-b���]UPZ�Ā���1M��U�zl�����F-��1��!KH����(�g��$@x��Ç8���$J�������:'�j/���Ɲ�/^XŎ����'t�e����
��a<��:0���Nɾ����f��>�D�%�R��>��-�6{��.>��d��w��_{�@��ta��no���t.�y�����&.�q�E�wW?��眥��j��VS�L]&�î:��C�;�e�vQ�p��2�9����S�h�S;�]�f��9�k2h���Ց���R��|:���C^����n���^�)�ө�(�ދ` �e�X��eu��x����Eto�$/��X�x2�/"�V�r<�;g��[�$��V[։�%]km��)�2�M��}�89C�
���^���I)j�SE��jJXu9oke!�Q���(s�7)t[i�
�]����AUET��Sn7"^�
[���%;}�EBWh���t����!�Z{na�na��[WVzz(�����/����[�=+gVΜ:�|��C��?�ofϮ���F{�����������F�iw���ܔG;��i��%
�����z�#m�3�\L7�R="����%ޟJ(�{�¯Xb�
��G��^gj0�0�H�uIk6oj
O��*p�,v= �ң;7���a�C��Q�.�wk�t�.ۧ�',��������K��
E3��-�yM�iO�y�e.wr�[�2d�K��w���C��@
s��ݡ|2np�z�.{s�C����Z�e'8�*Um
{v��qJ���L�R�0
;$�
�f�xPq�u�SU����9��T��c��[�}=�N3k��$h����2�kBZ���7��l7�mD�\Yd:�!zH"�.{Æ>qC���E\���͂Gd��T�����2�>�������S�'
�]\9��;�$�Y
�ZZ�s#+!�#�����o1`^��v�x�I�!���vׂ��5�`n�"b�Y���z��{�n}�{�s���'��|����G�,����kwM����s���x{�yo�ݐ6
=��x���QtD�P���ٺ$*
y�S�x��rQ*���`:({�P)](� ��*���Qè�a��4(�2f|���A��_+s4��#����7��>E\�:_)���+Z�_*�Tr�%9X�v~���x�ڧ8Q,��E@#
�ca��=7W���ғ%������~4���O�>���DdžK��Z��4��Z��FUY=ᠲ�ȇ$�OPrX�
5v��*ӰR赀���{��&�n��]Ϳ"�����wl�/�$�pÚ�\�u�W��K ����BI��l6��@�_��t\�
������,���sM]N�o�s�p�Sa�s���p��T�1r�Md����Ti�;o���mN���R��}(Ԗ*H`�T�Eb'�b��͡\px�Mt��&���y�=�
L��X%>t�]�t��������C����35�}lV_6�JvTc����R;m6;H���-V��B���p�����N��W9L�Ժ3ōY����=��;��O�5��]��U�'�֫ʠ��]h�R�D59V����3�ו]�b��Хo�\g����G��=�q�-]/@L�Nw��
w��;e���و �#Q2L���C�c���U�p��I�1�AqY�i#��:(�Q���9�_�-�N�u��w
2�I���|�B5J�
��1~��a�?J�Ά;fyc
��Q벗��
B�Z��q�l��j���=�U��Ϝsg���/�o5�n�����e[�$�����T���`�Ő�g�,�Œ�D{����3��F��c�eEDk#B�Α�"F��!��Q�@�q���)���.&KN����3�%�,�8��]������A���ݻ
6��nؠ6î�l�d"��^�C�@�y�r�Ȧ8RW5%R&@�u'P��$<rH%_`�Iӯ��,�߸��4G!;t��hȿ3lc��$�sq�;f0���x,�Fƌ�z�t=~�.~?�L��{-ΰ
�����_�¥h1מ�:�ѿ[�Q=f�eE#y��|��O�\-p�wPA����rC)ȍ�|����"6�lKh`@dJ���{:0�:��)�
r�oG^��2�j;��wr��'`p����2�Q#��("@r�k��d%�)\��I�\C�m��������J�_ǕۃS�H����[���Ȥ���ĞR�!J)��|�i���H��I��pV�5����kN��-�3'�������7����9-���(�.�
U[>
@��`�1K?Xa�}M7������F:���
㍸;�"<�u��Y���8�vg+<R`��=2V��9
����Q�v��i�V�:�����A��Q*ۖ�A�}�$S�s�e�8X`�.1��#�D� 6̦�6�tEd���$�C�`��ޤ�Q�Cw���50���P�NX�V�
����I��+w�o�7��#})�7��w��>ˈZ�rYi��T�S��|e�U[
7��.j@]
��]}�g�˕��m4�p���1?���p�ߣ�'�����8�_�p[��;�[���o�>4[���k�߱��<ߊ�l�-m��m�~�V��Q�(�~�T[��a���b���o/�����u��ʭi���>�,�ֽ�}H.nX�����]��՞����&�[��ӡT�&s�Ѯ#FO�Z�N�d����8�ncN:�v�ѪV�0A
K\$�Z=DI�eNZ+��t ̈�$�
�y4#�L�T��9�w��|�����?��'}j(K�7�
��Nqu
J�_<Uh�C��z��v�o�P�+Ы8;��5�t�_�1n@���G5�����v���ubeC'��K���xd�}����:�_���j�yx{#gâ� �A���@[T=��b^�����8�Z��hiɺ���T�hR)�a+w��0挺v�=F�wa�'~҅�Ă�O��X�(��V�[*��@&Pď�=":�XDa�(�t�/�4E�]n�+��Mq��~L3��|�ưR�������q�?��B�7���۸�{� p���Kl�}lk�p+�^U�^�Q �~�����9+�oUh�:��'7�;��L��y�sè�y+@c�������o�B뿱���G�v��a|aV�Y�&�
mi�Z����
�hx�]���cc��҈�t�`_tؘ��
ST�Wa(FQ'�-�`a�@<7=�z;�%����6�c<h�K������(�x
cq�Tq$�Sڿ�/moӱ*�o?��8t���}�NGL3b�&;���ũ|~��|[���b*����ڕָ}��-3o&�I��G��
)��[�]0����e)T$"�'�H�e
�He?A�0`CE�l��EP&ʥ����Nyl�,�B��ZΌJťJu&��{�����@�������u�h�F8���`�pXl��ޗ������?l�d���C���T�.?8E�S4�Tlp'�s��ZL�c����h:w�(ܘɎ�_Nč��\9>U��)\�ݍ����l�a[u$���ف�(@���v��ޔtu&���T��9����zt �Y��<���x(����!�n�r;Ə�bQ1��á�ʚW~�0��~v8�
WI�JX�ri1����Õ^
��nj��z��d5�m�g��x�%"e��A���n(zS����ݛJD[<N`h���V�M#��jp���s�:��2"�P���h�G(���
���R�R��截<Yꡏ��6�z��5���$�Rx�>D?sƮaO�VT�f?}ڦ`�js��7�O����o��T��T��ө��gRO����O�#xg�~��-(��>�}� U��$ak�ғl��pǰ�)�E
f�`�H�Q�����%`�O}��������t=���}#bP��d�������G�v
Ah��n[Z�WY�[��K��k���pw�߸\�䎞���XԱ�%B,-�]K��&�a������6�T,7�y]�A�y�
�5�jM�Zg���R)���X
6J��R1�^��%�B��nTo���Z����T�WO�av���s�/�f
�V�z�ݠ�r���w�w5�M��+��}�
ϮX9�z[��,m'���
��i�U�-"���IA:�v�s�8��Y�O���3�c��@����q��I�V���ŷ9^yWm�%^C�I��KM;Wޑ��U��K��~��=����4@�x�f=g'K�@�����!�:KT�:19^�=^����� ��h��41ށ���i=�W�FV�����V��V/75��1�sVO��.�//n�2��yD!*U�E���l��6Y��
y�:ybh�T�9^�6����m��U��s����gI�f��"��,"�
��Q�XG:ّ�e�z�`�f�Aނ
x����X���v��x����]-ՖJU�q&��<�k�>��*Y�N��V%�ȵK��SZ��gf��T�U�x�ҟ�~E������=~�%_Cd7��Md�z~u�s�m��^?�d��@0;��1Y�.���`����X����%�ǫ,���(8J�G�6�ǎY:p��kf�N�kj�:P�vg�C��no
��ltr
�6�u1�ҦB�3�H,,��Bɠ 9��U���R��)�_�<N�G�s��9k��`h~~���Rq�?A�H�j%3��*nW�F_G!��������HļU�4���t���[_��<4��âX��Ɍf�S`n�+��c�BW&P�z������2#�����'&�'%��{[C�
�Tˀ�eS%��u���,A��*AF�.Ӊ|.��
�Xȕ��l�?��{��-K]
�[eDĂ�4���q���sJ�^J�W�t,����_(r��{\wG�~��yn�E�w�خC_�^���#"�/ݑ=�M�;���Y�L
_ٹ�R����
�}wE\H
W�}����SG�s�l����tu���%�;bP+I%f�{�h�{�bl���\�E���M[ǰX�V��tg�D��[C�N�*��k�@)Q�!D�BAO�����2|K����V��nun��2mU�f2s}��K���z"C��S�͞�@\���ǵ���D�[mI72�ݨ��cXɝ��.�,\��l��H�I�d�zMOg�UdJo�avB�\�I���%�@V0�l��?�\aF��|6�
�F�����
�7�F��c8�'�E���6�B%���B5�n�G�HvO�v�s���ݫ�ˆ���;v�}6Y*���*�=ו�ޫi���h(�&�Ss�zo<��u�~V��϶��"�},��a�������k�����h��Nl�Nj�nw`�������`���:��@9?\����L%:�#F�-Ԛ�<._3����ߠm�Ak}�X��ЌխG@j*��>�.�p��@�
��`"֞3�^{�MB�kx��Kp�:��Cnhp�Ԕ�(�r��(��,4��/���O�0�N���j_Oڒ����֏a���wS���U�0b�Xw���{�I�@��T��{M�A`��"�-����
�~���N�su��;l����E�v{k_�FΎL��F�����?5�_�fw�����ٓ�m���q�K��S�ڱ�JV9����ޱ�������Z� ���u[��w����$�I�HXЦ�د6I�2"�����7bE�`��How�C�02�}djtjxh�@1�]�t��x�z��]!n��-a�S��^�EV_�uB���+�|�Y��<k#��n�t�r|��#�[���SO>9�38��70x�����H�^;��c�
,���?77�H�5�W'���@s��4Vi�\G����3�Տ�B��l� ���菰
/�2m�vQZti��v2�h�2O��t��7�7��{��ԙSg�h���7�xd�Ņ��jz����m�Ã�R!��6�f���b�K�7�\�V���}�@����=�T��,�iX�~�
��4.k�2]]��ŕw��\��U����>���&�#��?�5_�
^T��}�m�鳫�\�Y��z�����.� ��O�.*�D��Ǝ��I9��-��@7Qmnu��E�F&FFF����;�{����1�}��^�Q��Y,hRrk�T�/��@�ԴM�U������%"h���k)�^sjej�.Z�Z���
�#�d~��:��V}5����Tq�x����������`˦��4���Vf
����
%�&��&[K5�KL\yW/T�Mt��g������
�8i�L�kɉ�q���)��f�"���>;Q�i�iӜ���ͱ�0+Ff]8\ib�TK����S��vk��V�g;�RKя�
1�Ѥa1T�ʳ��R��%(�D�>�/��aMk
$З=��l�Xƻ%r12��C�{/ 4p�.����}}~dd~�7����O?�h���@�;]��xC!/X�)���wZ7�~�ynx~xx���a���G;z�;�����:M���LUwx�^NO a�@$Y�mV`͆��9�M��.�v�L�!ɖd��q�dbP���4QMX�L֣�?{ q59������������6ז�A��a�#=BAn�_�M�_eFNvv� ��Eq�3&���ب�R����
+o��a�ӝI%��F�'��p��ݗ;R�rG���iƕO�Y��bE�+ij�<}�����4y�տ}�ѿ}��o��6?4}��V�?(�y��(�/�W]����xi�=�z��3g��}�F����g��j��{KW�3�L5U6����i�y���`�D}�y��&�%|{0D���������\�`��χi����~�XsS�c:Ic�>*XaY�Rf!��"AqV��'�]��z���bg:���P7���Wc�9de"\$L�j��Pl#����זu��b����M��y��õ�L�/��d��z���ypS�ڼ'�b��VzOߪ'�K�O�E���u���kDܠ���)�Ӫ��j��`�]
�$���]�#+5��D��'����[�o�hi��]��KՖV��#���[�`x�+�%u����{$8⼥z�KU�1�O�A��$!V�G��lN<*��q��<�h�uS��>�L���/�Af2��v�[��c����H|��M���c��>\���zEx�>�sS�D�Sk7M��`Ώ�ó���A_����}e]�kp�8
�o�����}A�����ї�4�M��`%�~�`u�US���e c7�DT^V�#U�����H,1[�>_�m豄5�3�ؐ ����B��
�|��Ֆ����_�l5�\M�@\��j�ҽ�\�c/���jk��F�Q��
����){�A���q$6fx0��y<���E^,��d�,�.Y��GJ����ٮ����siDԎ �^Zn�O!���(�
�F��%+��M�j�Ia.J������ؾܹs1u���1�~�}媾i�+k�aװIX���^N�����t_��-z��r���;7�|�Ɨ���~|��=�
#u��|��Uk~�
����[� #
���^�.bMU�јD;�QC��j�I�|_��չao�/����d����qy�=ξ�{� 4]o�W�=��;⥠��j(a�"bq�0#���֖�dk2��K|��
��+���*�݅�/|4���qIS5W�B� �:��y�o���>�ޙ�;�x��>Cm���]�x���TK��zo�my�;��e�ߠ�Ǐ��4�P�gm��7��7���'�gA��������n��
G�ԓ5qB�W0C�w4��?=��k��bZ�?�>r�鏝���1�3.��?=~�-�.A��_m}���ϻ�?��zP�V�1+�Ok�,Hn�<�u˖�O�m�mZ������·�b9e[*b-Kc|m���lO&�ɳg�����.a��`aW�v��d��g?�
�c��XtT�#S��������� �Xև
�Ì'p[ժ���]���O���ᝬb�;�uP�A���v��!��quLʚa�ȝVJ�m�~���.bn�^,
�ߪ�ʱ��j���<{�4'xqh27��>˫h^y%�kO�&/�~�v���%�D�Wx��U��YH>�wc��_������+��a��^��S4��;�P������o��3Jv��{�6����HN��K5�S[$��m;`zU��$ۻg�Z.z<����s���&ǫ��v
Gˣ��L�oo�#����&�Z����V�:���O�⥺��O�W؆�����b�����jX��'.�s���ݳ�K�F�mZ�v tv��*��S��.����v+g�q��*��֪�W�_���J�^�&[�Hcܐ�l,�,��<�]E^�-�ZmJ���m�^���Yu}:����^�����K#�,��n�q��VEު#��Z�����;+����g�Z�3䪃�XRW����.y�v7�k�O�7�I�!CX����M�<Ae���e�U�b8�W@}����X�������������pgM��-��t��(�����Mh�Xٴ�h~�{�^L3�4w��a��s8$�����Y�'~XS��e"a���㻮<�QBP;��8�S��_~Ϥ���x�\}��L�]/3��h�!�����P2�+�&"?���&*�U��*�~�9cK����wַ���s�����`aOcˀs���i�7�$s�}v�|J
H�F>��ɛza҆���u��:5F�fGg����li8�h-�U"��f.�5��E
�nr��(�5���u��K�}�v�~˯FT+U�&����b0��Q����<��Y���P�`�v��_$wTo������j�mmS�2s�
͡*���4d@P]���U{m�LA��ZT��4��ѡ҄ϻp���}�L��^)��t�@�v�v�=N0+ %���P%T��*�JZI�]��v���ձ��-���4�"~)ַx7��TL�����'F-����ĉ���=�{Ps�G\J��ۯ�F�mХ��ɭxr�qrOnu��#;��w�>�ǻ�k�ey�T�w�Z^���lj�A]Ȝ2�����.�3ؚh�g2��TF��h��s;��y�w
����ه�X��}J������05�w�侩}�c���1!�~,JX���zM<2�
Z�����{i�3���n�����T���hZ�ST�jEE�ջ���<�8)\&�6\�i�s�5S�q���=^�+��IwJ���ܦ�%�׃c6�Q�\ppイ�-yE�>��B:�1�#�ڜK�8@0E���hG�0g���+�=��Pq�/*Ld0�!����"�zd�,�.nʫ���������O��tm-��R텗���
���Iv��1v��xM
O�Dˆ�u�/�0���_>������4h����i���� R�76��U��L�0u�%>��[�S)�d�_
�'���ܔ���C�Q��\�.:1�7���d��ޅ����6:�u`K���ݛ���ug3]�X����}�Kd����Ua�ƈ۫נ��@�ǒ%�R�_J i=�J��<ϯk��5;G�r��.�/�w�6̽
T�]����m�[6�A�U�/�)N�f�gg/��^֍����3�Ԧ�Kc�����aaOu
g��IW֖*[
�����U�f&# �d��D�D�l��T�7c��b�vE�A
� 6�ia����
�S�jV�~��߿9�X;��|�E�3�.���>pXT�k,��1ULUQVWlTDtð<p%4�Ңbg�y�n40�,�z�;S��H�_
T;�wcʐ&���dA�&,��!N`�z
e�,��ĩXj�'��?�r�GWqj������G�`G_��d�S���ݫv�i�8X�qG�W>�С]�� Jfh�ȸד��x��s�}�f[�G���jc�:�A�c�լ�&K"��QA�".��i��݇���5�/&ȂdV
Jh��*�엷�R���V�K��j�`D��`�Z���g�>1�]W�� �M�$a�a�I��TQC:�t��T�����̔7
���Oz�~���E� V��6T',�&�z�i*}�_�}�÷�̟�s��j��y�3�k?��i߾��ϊ��q*��?�x�uא��=C���x�ڏ��]�Xs|uk����D4�7��6f��*ؚL�ͬ���E�e����j�qMK����4�3g\Q��Ӱ`O�lm�NC��9�O�Is�����jwG�c�5���Kf�]��w�~Aml#dL_�(m�x���Y:�}��O��DZ6ި��[�͏/���L�_����8��
����5�][Щ�8lN�I�2]t+����Y,w�(;:(�1�cb�����x��DG"3�.�M� �oS�L`��L�ĺ&K�z�t���v�H�����OKbA��+VAޓ��Y���+�����-��Y�p���V ���|C-���,������[{��@;�'H�+�$�fE$s���`G��l�
�3�RQ�T21��Xڲ}`�X)V|E_!2X҂Ys}F+T~��o�E��~��('GZX�$b�\?�H�g_9;ܟ�SE���k>�ie��a�M�4�!�.{�e\ޭ�X}m�rT�wp�qA����.�Z%,4�!ټ�Ȩ�E<�j��m`�h�ƠDȯ�R��"K�$ƚ+.
�z�tAB%�&�����Zp����m�/�q�|y�<���ד�t�:J�b���p���|kF�R+�]�ʧ't^�ϋ�0?��q�%�0Ϧ�H�s}\�TX{�JlseRQ��,,�ZBZ�i���~F���iȨ�����.��
b��)�p�MQx�c�6�Ӑ�e[���4l��dT[�OJtD�Z:�F���NG����$��h�l���ˢ(P��}���ǚ�Is-;�D�}��\� }
�������6
���XkX��ܖ|���q��!�`U� U=�)�����<��Kn
l�9e�}�=��"۔E�Uqk����@�^�C<�oX�((�R��DO���S�@�
E�D�
�O�PO��!�.�|�YI[T�Dd?}����-����ON�z�L�s��i�4��7��~���.܁�Yt�釃���lyh��E�G�����Y��,&������c`��[��b��\s�Ԇ����8��C���P�� 7W��t�;
�ݕ��U`��B8@
�O�����JSh�ܘ?.A����)���Mۗ7�oj��`.����7����9ēwY�]�L�l�=��j��D�#B�'_��Y�D��; �����+�����z�7Ηd=W���
���K� ��JԴ��W�ZӾ�UZޑ�s=��gC
7U��Q��F!Uq,:���%վ(jU"N���&�E�%�j�ė���)��K;z���d,�{�N;�![h�{=Y�)i���ћE<�o����3x}C�-k:˧6�rF��-�ll�W�{ʌ��Hv��M��/��T�wz�7@wjϟ�1�Z u�pv�Ҫ��N:Ϊh_u�U7�X��e�T�����?�u�#�t)u��]
w�ސ7X*90�n�m6��߹��8@��K���b#��۷ds;�!���k"�FM$w�҆��w`@C����.�ܹc�FY䞩3;g��[�o�v���_\���M_ټ�ү��m-ۈ��[�����]�{n��#
h�
�ʦ ���b��U<T�o�
�Z�Wc� �Ц�w3è���EL�9����W��!��$ك�>b�<\fL��<
�!xb�WD�2�-;��e]F�* 2
Ee�8�!�4�4l�F&���Ʀ�L�ٽklrlr���f"I_�Κ�n-` <���9�q5��i�D�rkگX:��1����Z���9{[��d�sllVk��>G�5O2��=�8۾s��襵��I_��WZ��e��8�~��m�WD���о�<w��
��oK�W/_��~���9�?6���<4>��{/�|�+=�!-�֫t���X��+8K�x��d��뾤�h:��1�U�y�B�w5��D'���+�dl�j���y���D6E�2��Ʒ���
�C��u>��8��Î��b�2�ͥ����j�"6�������=���2�kә�+!E)阒���UJ�z���?������p;��]����ܹ��p��3w���7�c��a�-b�V��^�z{���Ά�F#�7��
cX�s��]-`�,�"ښVm͡B�lkk˴ef�kVԀE�M�g%q�Tig%����+iE�|�O=b��O����|�vE&~x�g<�+^�=WX��Xfcp�X��d�n|�� ��ĸ�+�%6湷V�?���x�k��t�A�F�(m� �ژ���\�D��F��C>�%�<�B��"�hTB8�B�T�V6�(/��;��r)��%�`��z}*���9�Ge,5f�f��Y3(x�P�Ҙ�`)}m�u��g[{���x�v�[<��_�D?���3���G�'y�묍~��G�^|�"���s������-�H�8����3g='y�쬱u�!�����LWw�0�:�'R���éY��d��&C�p*Ih?�5݃Y�+{��'�L���D�xoSc«��H�a���Y���<|��4��Xh�[��_}��7��8'0q��3ОG��s��ON���(���*�@#��
K����B�o�@��\([¹�6�j�X[�
qS{��d����ND�'"���Pz��qv�۠��ݛ�s���k��|*{�����j��a�D9��U#��_���Z���p!o�@�1��U�7Q�M��x����~�I�������� Z�F���@����l&%I��Q���l��o�ފ,au�M�8H�``�
t�"��U�<�K�QuNl��@ͧ2^s���Y 4k>ߋP�`�0���T{
$�J�T���8GY�4M+
5
��tqW������f�+5����Nuɵ��k��+�oy��,/l�=K?:�4�z��*�kY�-��~�~#�9P��V��Kz�����ɞ���K�ƴ�M�6)�V��^�
~�3�!�9C��!�p2�uD�Y#�3�/[��Ռ����i�0��+�+H���-���翹�j٪E��K�w
o��W���
�V+.Z���i���9�,��s<��1a~�(�\rv�"+��S�***w�l���ͳ�o�߹]C�h���]ҩ�e�͠��Y�B�|�wm>�����&}t�U�z>8���ֿ�D��3�#;wT?3Xݱs����P�;�?s�$n�l��gp�:��j�37�B�{�LO&�3��{u
~��ݙ=�ز�����a��'в��#a+�>R�T�c��E`�2I�(��ychX[k?�:kM����
�h!K�*�D��(��V}3������Tت�r�X�g�ee]����x�b�Xw���2���@P�-iڿ�x�ZM�b����m��-�u�BSv�s�y��g����/�]�,twƠ Ca��р�2~&U����B�d��`fCz��mݒ�3�C��M�R�~{-�����x"!�^�靸iX߈��ƃ������}�o����d���p7O0|�ֲ�7�N�}��Q�{Xl�}�o|PX=��?k��O�'f�g����>�O�t-�x���r���������喣���X��#,�}��Q^��u˵�����߰�D;/�p��v�Rq�0S�܄-�Qw+��n�b�#�+����� t���0�}�E$r
(/�h@�3�
H��\����*��;����C7\��������~��Ď��ё�[p�U��'әN��h[k$�����nkE��v��r0K��z���!�B)dդ�pF�6�T�i�X��g�+KW//���DW�sS�Ջ���I�wf�d�g�tFc�4����^�\�L_�*���85;�C��Sss���Yx����@o��R6�Y��`]��@Vu�zm*ۘ�O�k�>,�hÏ��2�{o�m|1�3�h�,������ĵp$ֈ��x���-8"����"��U5�^���ġ)�
�zTT�z*����)7S�6�7�l`���U8�Q/UꈉP�
)c-k�$��Uº4#��V�r�\��V��Ny�;}�g�lg;���L����ԞյjՔ;����(�u�`)��NkmG�'��ߚv��y����jF��ܔ�P�8��(��X��o���V��{����O�?�㳑tQ�0;e^���Xб���T%�S�jT���ѐB�|Z(^�d͞�K�p~��־��
�ry%�Sw}<�h�}ˈ���{>��������չ+��,ݛK��Ks��h��=��7翶�v�8�}���1R�������'w�X�{�����?�J��7z�P|I�>�t놸@�����G��eآ�C��I�����d+#�ȝճa'��,��2F4���$��CM��B�8/ڑ�@>���Nu�ą�ɜ*`'�|�L9qz�I�u�Q��f:S�X{[��kW�H�i��Κ��q-��q�<F�ߐ���֡ƨ���8�:[E��ۜ���ɿOؗ�*�����8�}+�౼���8k<0Ͻ��s��iv�z�����d7_�8�YA�_���";��UK&�uJ�x�AD"`��+U�/Ue�j��|b=U�/�qgV�-��0d����>_g��3��s��2��5��\�s��z�\����D���jP���g���dd4�1�z��"f���_3-�98�>ŗ��A�i���6��#C�1��?j��C�̉�>����:��m�X���Jw6�9�*�_����vP�%�~�D`%�Y�@}L��mi��|�����j�|�Hv�:!�~�[\+_u���ʴB�[9E�4�Z++92ȗMĢ7�m&[�#�Ͽ�J�ռ���̋��5��`u��l�E�I]�m�<��\-`��$$6��6xNrR��fQ��l5^e+�֛�9|�����B鰯
�\�le�U�!9
���T�\*��&4݅�D�tӵQ���b���i�d�>^'�h�k?f�~8ҝt�0t�����C�V�o��&���tx����H�q�57��IT����iۺ�D����K��V�c�{BX��G��Z�����������Y���8��2��:4�cѭ2�h��-���qmnj�����v��V�\���<~����H�_�t�ꣾ7W�c$Јw�.����Z�[��1y�|S��+�q�뻒迸�g�(�:��FӀ�NJS�x
�M8=N������X^ys�i�~Ϣ%��˨O s�������&*� Ue�
��'��6&����cH�B��SN��L�+�b�����\oM;N�X�j�ܔaz}p�
O�c���6e��
|x�.H���Sc��I���*8t���H����G?�'`��:X<HTБ3DU�*�u�-�h���{�aJJ��L�LtD[>N�
YC�a}��^X+h�>�}q�ը-�c��^�G8�\,������d�U�����6��!r�/�nٽ���mFD��f����<|z��J��xO���Je_���C�#�- ��4�
�d�"�LWwf�8Gm�8�n1�}�a,vykFys��;1�/d�_���<�$���yR%{A�,��1��o�S����d�VF��X�;��Np���O}+2�<��i���n�M4$�;N����"�2?U��P�M�1曱�|8���&����l:MɍG[:>���s��D`{Ʒ��j>�ߗ���t�3�LWgx&�=N�"�M��?����zձ5��q���&p4��`��/����ZE�"��0!8��=qL�'|�v:�S�ZS���Q������y����sss#��� j�������ش�G����_\]�h����9�]>��E��|0ѡ���hVwu���d��BS4�TV��_��ެ�>�Wj?l��|��9��؊1�B7�>T�^b���
����*v"�(���"���L��v�Z���4�{�zA8������V���|����������y!`
���9r��ګ�C��3����GNc�`���O��k�0�Z�==��RG�/�t��^����:���O�;��m?�ֺ|�#��C�zni�~�W��0��Qw+x_
h:u�L�C�y]�M�(���8<���
��=��}Mu��C�r�ަiOn�~�7/vU��Z[�]V��'�p���:�:���x���2��|��{�C̭.�O�]��{����rY�?qo'�U����������{z_���z���g�,�h$�h��h�l�#Y���cc����l0���1
��f1��{�%��O Iއ1/�{$���$�!<=�|�ܪ�E� �۴tUuWݪ:w;��s���6|�q!���d���Z1��A�"�+��5�TE'�ߩE] ��Îl.�m��$ɵ�7.@uIӫ7�]�>7>���}�n���[������=�k�\s{szjlv|�>24P)�te3�F��b��1���U#�2�g���T��a&X䅤�G�*WE���sEҍyAO�{��Mng����8�a�����#'�mRN��=��x={ۙ��Ύ�ݻ�rHZ�]�Ro\
�w ��I�J}�6��2�*��G/}k�����*�l����[|�8l[BEN$�b��դ;��c�bL��d�sl����8z}�d���u:�'��6��#A�HY���j��ޮ\��rl�q$ٖF���Ur��`����Q�Y
N�v���U�}�|6���:��[��U�Vpw7���ߨ�d�?L��y��#
��[J��'��p���?����$���:(��S�퇰%�H�؉m�w�ȶ<5\`9����Јxn|q��Xl�J
gC+
�����j)��Rw��{�Oo3����l�
�� z75kR���e�l�:�-�K�Z�c�7��Q��"�Z�?dq~3=���~��3K�)��#G�T7�G��/]�C|ojx��Z�p+C{N
m���s�S��7��T��S�d4!��ٳ�9~�иs{�ylHܩs��~.�]N-����H&�M�4�{�Y\��9�`k�L$;��?�^����g��טN��kx9X�G�����'�;O
�b��w�8��L���ۦ����j������rϓ�&:{�G
��?،�ڋl6z�p�Zn�+C�7*�8Ёh�ޔB@�'�I���Zp
�2�4���O�R�V�;b��z��b�=w5��?��f��5�C���`
��xm+�c�&�:���*
���^-�
b�w�L#��;���]*��?n>i�7
y�n��d��X��E�z6���C�MF��z���٣��͑���ё=�C�`c�����Å�C����}\��=C+#��>::�2�g�XPCm~������g,c�q���)A�����N�x��,J���ɳ'�-;N��q��kg�go���^��kT��S=Զ�D:@s
Vu(����e�
1�l1Ov���H� �X#L&"q�7QJڵ����
���uza�P �xJj�R�j�]��D��u�x_.�}�q�D�����h~���_][���N�:��
���@�3w!�@w}�5z��?��O�k�|�"�ӗ�1�WG!�7X�g
ڤ�H��R�Ϭa>���(o�̛�u
=�Г.0`�5�g�?�蘭��3���A���Q%P�w����[�.9�>�x��-2�bGO�W�}Y�3�E+6$(����xŵL�N�!�O�<u�[W��~�S^M�.S�ǣ�S���MaC`*���`~p:AKOR�Y1�`���w�}��VU
>0l&*%�V��H@5pvN+�#dP-fĜ�%"x��eО\�?�˅~��`�����r�\n��.��O�'��c^D��Ev���3��OE���Zw�Z�۵��m��o-�[�6/}jb����Q�g�\���q)�ˆ�<je�@�B9hű�֢U���ʀϚ�KxF���� "���ۖ��)��y�q�MJv�ӓ���6Sj�Gk��]yl��`���=�մ�K#���ʠ�tm-�M�e�x�A"n����T�ө�Q�:����4('����L"�@�9Ύ�ǟ�D��(��J�@�(�==��◮���\��y�z�](
Y� ���?�'���u�w~m�.��d6ӓ���/��ğ�~����J'v�̸�A;L}��S1,z$�a���hl�Xms�B�<ެ�@�n�!R�S���"�[�F,��k\��܈e2�֧Lk4��X�&�:��ԣ*
^��`�
��h�{ժ���ZRY1\K�/\������*��T~��g�;�K�:�����o�X�p!�7�@.�'b/�]
#�q�d�ȡ���
�v�*S�����YD�<�I��
���MEv1��ύ.�%�Zq" ��(���@vZ���
;g�rM��i����0?739��bwWg�q#��%ɸ��\`�"�$�V���>ЌI�DTF��g�ѓpBrOV�d�Td�n��^�l����+o����y���O���M۷�^�����tԻ"Q���E�˚�e�×#�HL������N��k��O�M�F�����w�رs��g�o�_A��3�c�.�R��59*蕊n�]��{�k�F�p�lԒAG�P�Dy�Yh�n��y���p8NՓH�mz~�D�����q�i�`ٰm&ϓOW�s�s�����'�]��^���BaT��<}�R�/�47���_Ы�
��d��K��xn��$����h��)��v��d^���`��T{1���8�a)�!<��f
�x�0��'��m�"iIͧ��ś�WQ����&�����0��ge�BKp�H@�:u���{{o����~i&p��kj]Q><g�r(_���%�3���a<�%����}7t���#�3u��T����:�~���c\z�k�l�Ls��W�l�ts��_����'�֙��B+����6��$��-0K����μ'�ͤO>U��S
Ռ�v<���wI#��x�@�SS؎���h0��=�b�
<���Oė#�;Ɓ�{��6.$�n���f�����eN��q�+�����8~�
R���klχ�S^���E��'�o`�P��P>T>��u���`ow<�{���Ed$��6�[���äQ�4���8hH#�uڄ�0�j���ѳ��O >Lt�4�ˉC��������_�
��H@Ve]�b����G�kU,��B��h���-\zێFW/:�wo�ss�ge
�}�RRf��GE|d�G(T�U�����e3�icxR��A��F����l�(�Q8��5�_��uB>�;�mqHdjC�J0ӹVM�|H{Ϥ�:Jǽ���s9�غ
:��;ҙ@G*]�e�#�IU�I7�v�<vĒ�/�c��ǔA�/����@:]δ>*�q}�Rv�F���u8Dk.�G���<n��'`\�ֈ0X�0���Y�+0
pV�����@�(�u��l'�F��k}����pȧ�NI���m��[��*UCh����H֪��3`P,���zқS;��uwG���R�5Y��㺊zv�ؓ��5�s��#`��Xw�Ʌ;˳��&>�5��P�#��(��|���$�����3lb%`�z��*��Ѕ�=ܕxl��v�ql��s�~٢�834�ϥ���l*A'D���7���6�&"�jт��]���M��6x-6�f_0\7��ݮ�ػ:e��������Mb0�ʳ/�nV������Q�.O�+����N�BP���p3�n�s� |1k�[ֱY˰�Q
`!�R���"�M@><����44���H�=0@m�h4�,�UR�:�f�
o.�ӝ-氶kh1UU�K��ea�9��#lVTJ�/A|k;� �,�\]����O=�:�<��|j
�N�E4G|�93Hq�W>��ι��&x�������BV��_q�oC��mf�F�n�[�xPuAf!d@�!~o���z�Ժ��0bj��{�q�z
*׃���@�O��qi����٥Oh/ᇄ�˥%po6��s���~*�#`a���j�h�AP�d��V�5F�����ʠ�`c����%�<�����[�n�� ���9�<�J��(�C����PO��:Љ��xro��&OƧ����Ly��={��g�wO��0���@y��Vŕ��۶�3�M&e�ɏ�I�+�#�]�1
`U�-�_�e[r��%�U��\D���kM�gm
ۍ�,��箲��r���M
��4��b���
�M��w��ˢdo���3��:B0 6��
��p�'�g����աҨq9�"V�h�p_�
@�uH��`L��L���b����z�!���F�����m�z���u��~��@Hw�Z���'L�^<v�r| -]ۊ����N|�{���}��ӟO�} h��>s6�$��I�葎=C�h�;�J�������~aڌcX1���}�`�ƃ�˫��d!�n��( HdYqoD�.�ȶM��M�v���-Oc��k����dW��m�Z���7�|6�T�C�x�R�bf�Z�=��aM�Bb�Il(�.lQ���uw
0����U�_���roܓ��A��T~�_�&|�b�<r�=r����у��n��-Ae�7wiDǮ�gvrG���z�=��x
Q���Pqd���6��9d�\��χ�?���:C�����/ Z�Q�rv���]��1�4ֹ�g�A��v�(%+�"c߁(�S�
^�;%*v����6+�KC���>yR�i��9R�pm�����Y�r#�g7�n>}�����g��!t�` g���S(p�&�!����U#����:�h�{i�db�AкQLF����w���&��wjʌ��)�R:-O+�í9��t��~)�Rf��urG�c�_Y.��j�F_�/��=�/�x�H;�J��y��b��dw��PZX����tn��KV�
�o3J���%�(�͗�iOwq����˵���o��KuÃv�b|��/B��l�
�Njv����K�1��?�w�*A�Q�z�^}Y�S�#@e
m��^&דX�[Hxb=�nC�����Fq�%�*A:���\���(jv�Q�����d���STd[��lU
1��tܦ�ϴIbM��5Y*b�0蘖���|g@�
x*�R�t
�{Z���<Z��Kv��v�%I�i���i���PM�Z5Eځ�[IuA��-U��2,�-����.Q.<�
̓M�
Nx W�N(���
t���|���!�@��J���_����Zow�:%o�����]�F�6���_�w:I��_VDԙO�`
���4�>��:/z-j8�����O���m���˚;����s�A��
�W��Q!��:|,��G�rX�g�i���f�T2�%� ��4`�3ת
�t�ʢ:��j���{`7j�C��07;��/��̭��?]��ط��#�|!��pfi���kf���ӟ���7l�i~���G���"�7X� �#{�%8ъg����{����狁�j���� ��Ӓ
��<�l�s�h=�V�Ytˆ��O��q��`����w���l�i<v3T�h����_1�S1G툖��%�[
��<�QO�6����
�M�Ur���օˍTgg4�V���D$�`s�)�l���Õ�����Y�,�
�z��g�X�{�Tu�An�+דLw'����:�>u�n�\Ŀ�N|��x�b�v��싯�%z/�5���4����Hm���ߐ�G�S�_&��Cج֛
���v�����1)@��߮x|0iŭj��B���~l��R�F���@lyzl�L-��G��Z�tʵ
��o�:<�g�.��c�i�!�x�p)ʎ�J�@�Eio$
q�D\�rͯq�r#��MQ&�d������J��EVfTei�g�s�ţ�Ʃ�'{k���cX����7z��2��}ٵڂ��4ma̦zǵ�Ρ��nX��͘$�Uș�!����S�����y"gF��T%��l�<�K��������5�?=�� R��=�L]��ὦZRߛ��f�A�-��������QE�
�HR(�ƒ�@ģ�(��H��5� �%\ ��e�XF��\-�j%���b-E��'����ױ��|vL+�~��3��\�
r������z�����z��ٳ��z��o����{��(���R���Fwg�4
I��ݱN��IƜ���,;��S��Q�����jM"Hͨ)�Ԝ�'�b��/����|��_~N��ˬ}�7ϣ�{��߅�S����s_�uT�g����u�}�AT{g����n}wӘ
y�!*h$a�6
Q�3 �r{�����dG`s�h�\-ݛq"X'ԍ���Z�Y,@��ֽE�'��E����F�lb��[r��'��$�8����O�,���>��F[�r"�P���̬o���c>rjӓ��2�c
���M�_Y�F�'���z/���Ҩ5Ш�[� f��9�eȓ���_P�M�2��'��m��uA"�Zc�Zff0C�.�}��/�����Z=)Z��|��������O�=�"��H���_X����*�=ӈ:���T*�jydlܿT����� �>��OS7�z�τ ָ�G������-�7&eB�[4�y_��i�-I@�������P�ƁH�,�2�S�jBm���K���~i㶣o[X
���6��6U+~R�e2G"�\�M�����-�v/�ƍ��>�ٲ��Ү'������%J����~SҮ^�y��f�y
b�
I�)�f��䟰 �^?y��`������?��k��܍���X�o��G!'m��r��Tbl����xU����?�`1��G?�p}�_���Ɓ0�u.��B%1]F�a6;�mxPv���%��A��S�."��j�Y١F@��l�J���6�/��>3q�s�f����bc��F����}�e��<���c�k���Ϣ���/�K�y�v�F�s��5~R�U��):m^�u�q��.��[u)�1�*
3�KiЛ�ޠָ֭ˎQ���:��A���-G_>�)�R!�z,R�q���z�il���5$���ƛ"�|���P6n��]ڻq�M�[��0�/,2+k�T�Feq�"�����v*�����iS��.>~n�_�jo�T���S"�TK��
�>�Q8��Z�H��|�\7�
T��Sۨ��uccՆm.�
�>��h� I���iQ�ln�c�-�{�~�h�ZI&��ܵ�c���:4P�W�U��$
�B,��e��t#��l<�� |s+�fj˦"m\�~Y�����Z�`kN��Km%.�̨ܳ�$��)kA]%�� 5���䓼^�][�Cu�<�:|�k��|��@����΄i��/;�&.8�LJ��#��x������V@z��6!V���h4 u���'��m��"��!��:s���\)C�!J��b��˦4��M�WA0!_��e�F:��u�q��pCr
�9m45��(��)���%8�"Nj��"Z�p#"���q�
i�D.(~�W�j��\D
��:S�h�+���UiC�c3o���� �M0~�����Xc�q�������k@��G��i!�1Y��L��6�<�-aJ��:����&J��T��������ƨ���Y���Z�&3�DlD��3�G)$YЇ�Q��L�Up+�!Sc��Q�r�Q��e�
�"���K�|6���=nٯ�����4㹉�Ƙa�%���,�lE��F����Z/:�5���B��1�v㓸S��3��χ�M]����S詾�E�l��ǝ]���i3���Ȟ�2�X��r�I�:���8ܛ8
���Ga���� �Ɏf���[NƖ��[��ܐ�^#Q��p��j��\�~qL�r ����خ}��=��\�̧ͦ���WB�z�2,2}�>�����6}ddg�[�6�\aSw�\��3��w�1�~*�g��S63�˦�:G��[1ب_5k�@ՀG��f���X!^����+�t�\DM��X��U�����tl�ztT-g����A/��E<NT�5C�1LM�v��<��#�=�ˊ��U5ד���r_���w��+J��������,{6$�o�B���a�D��3��1�D~_qT����[�^���ҝ�<�}wV��n^��� �ecC� �;�#�8���+�!u�����z�z�:G������x�dC4c���r�m��A��.�x5�Fy�g�R�H�C�J
��H|�q��BR��F�v����t
θ:T��]�J���?�m�ȇ?��<������559���������O���{�}�o��ɇ�x���}���O�v�у7:�oq����g&�v����Rw>�wx��]�Kk�d�Tg���M�$kf�H�cc#�8!�ž�
9�ޠm���M��6����1hٗܦr�>����dn����k��?��W�?.Z�)�΅�[wXG�û���>�{����M
5��r�(�"|����?�{��p�Msc����,���d�]���ͧ�7�𥞣
��*��1�U�F
��8݈�b�gl���q�ȝ�EܗyXwB4VyܞxR}�����z���x"���-wg�AWK1�#*�Z]� ռf�m�JONj7��U|���7o��"�����]l=��#���!��4��������96U٧��=l�%�lf�_@�+�/�DULP��<Oc����u�o���3y���c,j��ȅv��4�
eZ�j:�BU�.�&��������E�i�bk�������%O�^
#�O��,�?O���z�Aj��'G�
y�g��>ҩd<�id���!���
�DM��4�n��(�[����aX,���T���:�jF��_>��j��[%��i^���"x��.0�i��#���C�3�����y��Ӊ{��Ȑ׳�����> s��ذ�")&[�ҟ�e^ֻ^ �;�Ct܃)@s�v��A��U�~�]�2��>�q_��O"���#&� �ϗ�z^�p��7*�ȚHЀ���1'f4N�z�zTO���S@�j
�D��Q�u�=����+�����WG��t��Uw��ʔ�r��v����B�^t��$z���*��~���:��n�J�+���5���\�ϣ��;+���� ����A��`�
$�1�y��ة��,���C4�]����\�z5�m��g�FF��Q�v�����dA<�\�����I�iX�ߴ�������7^�ql.�OO
�4�w�A�+�ܵ�%�n��^���~6���{�k�,�~��:g�E?�:q��s��܀KI
�8;�䚜
�ȗ��l��Dz��.(!�����;���[�W(<Ry����l�q�Ee`)^R�Lx�;�:��L["6��Mº�(2Ӣ�v���*�ּ�Y
�+����ŅO?���y����w<����6��g��>�vw�hR�=��§��DǏx��w�k�Ӂ��}}_c�����a<�Hb$��ckP����� A�H6
S���F"6�����rw�ۭ�=��������ì�XO[�`5�-�>��i�>uC7���[����R颩1��R�?[v�w�z�*��2�/6
��ƺm��=�7�tp�TNe�A����7w<���tޅkPQ2�F�}��N�͆U����7BO��c�z�1f�h��9R�y�1,)�4���7�%���.!E��=��M��ׅ0�˝J|�miT���=���n_�/�H��:e�/!�?c��'���F����͉�?��bX�4�)��xXΫN���X����A�'���!�od�0���%ګ��jeV%ñ��B.tJT�_���p�'�����>���ڝ�l��o�(�o�xmI:�
�G��7�W��Оۓ=�G?��8�:ʝ\�����ޥ��3�u�^~�ʑ|��
:>�'^~�����U���<b�?�W$���m�U�џ�QM�w�`�O(�?����dW��S���������w���� �E?��u/�OU��ͱ����
)��L�@���|5-$�u�
wfA�a��D3y����S��=�t,,�%>��N*�n�
P��k�4�Z��C�"��3��=��d�g/}M[�^�T������{>��e'����ȩ����h�I^����[:˗���i�\��_3C��S9�2:�ݽ�>R��%��
3&�?�",�[?��"$ﻲ�o��T��I�d(D�=�kX;f�F����2xk!�]��[��
T�^�%Ns\�u'z�����QM��}K*�
�{e?���T���t${a��ޗe�q1UL_T$9�|mRa]QG�d�$�u���k�ַ����B>�D���l@Y����#�P"�d�w�
ޯ�~�O��b~�� :�W�R,
.G�bR��u����1�!���闱f��H2���x�M��ʂ�����B�q�>��̒�+@.��gS]�X4��!
�O�T۔mW�h�q��~$��_�4�AQ\���"/�Y���^�t�i���L�C���pl��@�ݒk�4רj���q��Ҋ�%ВL^�mS�b�e�gi֒Nʱ��LEv*�ظ�체�!;B�y����hG��roo��(�p�H����Ro��W�)�twu��p�OW$���X85�5i�VXYh�
�K�{T��J.Vk1=l�F�J�5ݶ�/ь�m[�
-khM�h�ϵf���Z3�7�;4�`��βt��>��mчA�8z�g�ahk�'��4�l~}Oct�� I���SS�X*��Ǔ-8�$D�Ad;-�J�p%zh0�����DBO$�]��Y�L2C<B����c͞$D?��cf!����f���{_ ϐo�a���U�_�An���}ƽp�����K��z�X�92^�6����o"��@��Jm%�����%�,{:c����'��ļ��L�6ʙ�c^�����8{�n�����������I���2G�`ƽ�σ��ZQ��}vR�W���at�&$
X��.��q��-�
�5=H��;�ؽkz[���y��w�}ם7����C+�n�}���m�㍑�jq�4����[ȧp�iZ�B>Xo�UB��x�-3W�т�
�Oh�Y�
<�o�Lq�Q;!Т)X7nI�:��MT�g��7<::Qt�A�>�t����t����R�98M�C�-wu�=<p,�v��#����#G��F�-7�{�B�{��YZă�惷��P
���G[�%�f*tjԟ�����?
n=j=����%'�]���sW�vL������{�R#R+��1�p��`GC
M+x��M��zz�ܶm�È2!u��n�����l�TJ��l2����\N���J^e|��&���3����=��o�J+a*m��jd�%�2�D6�vEe��6jV��:�
��6HD�BW{��Qx�fSبi�����(��i�>�c��ҩ8���G��7A�d� �ē�D]��xY�!2�07R�č;��y��$��7����nPݤ�� d���h�j��I��n ���D�Oá���w��je�Iѩ֛���������,�Z�G��\ui�[n���@5:q����
��{j��;�8pH.�Ɇ�?>�9�g��,���Enh�q������]���08j;�-�y��v�T���;la@���œ�R~#���ͳ�T���!�G�H����$����iu9w\�R7&q!���Io���v��#�D��
,�c�ju
0_���v2Z�$�p`+�݅�]�2�=H�VV��mk��S��rPN���}�X��a�hzy����J��;t`�5�Gw��۹435�cb��@y������R�P��������O�f�⼱
g-$�I}�6V�
�%<R��\"�� ��»�ú�����iBfR�1X�3h��-�!|ր�s�N?���=��!���NP�\y�,��.\X�'��P}k���1��7��7��7=^�\�#�Ü�-�һ�_!�g�Ǩs���7>��к�KӚ��{h�F���\��]���ݤ+W��G^]FrчtM�WB�9�k�Jy��2]�L]�\�p�.�q-��E�s\�������?��S�y��s�:�أ?����O�:~�C+�K�{v혝�'b��`ܝ ���Zn
F6��R� <c±�@=�-&��#��:tVp!i_�����!�q��U3��w�'��ke���Q�."��*W�|�jui8�]��\dx n�o^�ouJAO8��`s��)v�U�Y�;$�m��Kp9��E~v�;��%����솗dM�y��r4�I�]���zsB���B����slvx���X_����ͧ����8�l
�T5=�˅U�WMf�v��o�yo��T�K��tMu��}�v�\�s���p!�;�!4o-�!KG��a�h��#;����N�T"6eE�&V3S���Jw!�����h���mW��uHZæ�i/\^�fJn�HVU�n��,�X����=�$Rh��ݒ�*��m�4�m�Z��<^�[���nV`~��l���2�d��sב8���͍S���\���Z��4g�9�<ͱ㸻+ �*�X��ڏ��@����>)��sWPq�\;��G\%W)��z
�����
��m*x��b���C��j^s�<��P�@ˋSV�A��=�z%/\h�~�' �K�\.%ϗm��9��%�e[L����z
�~�P-�~5��䠃�J�%��~�y���*��+�h�R9�
e��.a�8�y@�ǸB�X5��ϊ���^�b ��@#XU�&�3'ya�`@O��?
V�Y+
�>9�N���c��v#˖@Z�Z/�)0�.(�G�<9����뾸?�����}u�c}��G���n�K�T��4O���xV��h���Q��)n��BLH�edx1�����&H0s"D�ۡm�p25٨C�[OWg&
u�
M��Ձ&���_7��B�M�9pw�!��t2S����@��Q��3�3�)tW~W��>>7�i}~i�;>�w%�,��z���m��i����Dj�0��ED���c�+/�����w��
]�F[�ܵ����)h���m��6=��e=�~*?5�ˤ�?��&��T�:Ґt��Q���ퟳ��߈P�-�x�H��F�j;N���/'Ӊ�8�ɻ�j
��g�)d�2�i�k��R㚔u���Ц_}���z��?O8�#�.,ٻ�Ra��nO��6�īO�z��ğ'�#�:.iN�I=H�5��Z�Q$��d����3+
�l7�j�bo>p���:9����&�,w�=��m!�*�<�F_����]�P��c��$��_�ɏ�H&�KXN�w��_�w-��n*�����K_�x��R�[>��B*���wbc��q���L� Y�7��5*kU�i��mb* �;�^��}6���|���Ud������ͩ��،<n~)��7__���»Ǧ��N�>��|�_��q؟:�G
�nu
s�>Kձ��H��Aw6�,��`m��s�m9�fD )�;Oe
֩��F�,X�@{|2����ïk;�"�캑�rx��:�ʃ�
+X/3$�`�U����U,�2c
V$3E�lj;.|���(���~�r�_z����������z�}�~�ч�rxǍ'?s����&���m������ J]ylD;x������y
�YlCK3k�GP�3�NR��j�X-�p߅/�nD�����07���M�ȲZ���1��n�>B��C�G�b�N�o�=6�=>�=��N�U���~�iF��H���
v���vZ��r���5F@���܁�[S$��w6�
!���a���w9|Ũ��?_4����_6?��9v�vۮ�Š����9CO�%ݏ�������NvD�Ba�j�#��gz��w���.D��e��_Nc-�
��KOX\6�0��5#��ng�Kɥ�y5Ng<K��Υ��
{��n�g�zͷK�C���p�@���> l1-�9-���2�q<Ɖ�
�5!x�8������-���|�8��s���&��@V'��S
?����n*,�n3�f3<�㑼͒�����6���$�#�3�k}鎮h�ѻ ��w�xFe��:��:�}����x�Up�t�$#v����$,�u����o�Q��r�W�xgm>�W���w�6$�����]]�-C��M�C��q�GpA�wHt�'e�C�v���W <gP���A���o�:���xɆc8���8�984�L"���ە�&��t<���ce��W �VՀ'�+L��VjV
kۤ6 z,k�ۚ>�tf﨡�Dӭ��,�ߋM�#m�i������琯�;���[�ݕ��H�iF�q�6K�y*F��wQE�j1���l��DG�,Ұ��`�[5��d�e���p���z��5ͽ�7n��E�[�.�57�mr@��k�*(�ž�8(���:�&C1�&���E�)�3�:�Dq o)�����`�*F��h/T��-�3w��
W�S@�I�fգ2h�
�r�h��ӿ
K�|�ɯ�9n�� ��������I�
�[�;=@�f�X[��
=���f��k^XD9@Ti�Y���V����5DMP��^Cc��h�(�������8F���^�#\��@�v�c�r8싔�a�������@?n1ɔ'���\�\L�p�&`=Z�
�[1�,�n�S7���i�E�ij'��n���=��rܻ��v/
Ғ����o~����k}�uqn���i�w7�"9?$y�ʲwF��8<���~A�����w�!��ֳp��o��4\k�I"3x��r�4`xU�@�
>Y�I��D�O�qu�*)A�ƣ"LjW���
�
&N�Mϳ��};���OM$$����<x��A�$Y����C'��"���o?��o?�>F����L��ۯF;ý�՚�車CG�il���7�f���nS����B9��+�>�ʁ�J1�9������=��]��� ή���ǥ�DdW~�.���_�rtP:�$�jM֙��Y"�D���+
����c@����� �M�s���DB��'����s]B�0�"���u���c˾ŝ����ޟ�*O�����#��Oޒ麶y�T�
ϼ9��Y�6G?��)۵��{K������n�<�9��S{�=�3����jg�|Ǽ;p˦���z�*�)XK��ڍ
#B�L,^��ϋP�[��jdT-�H'm���KE�,���x��Y�u����~���>t��ӧ>�߫�J�f����g�������&]��C�^���>|�t�k}S�Ni��yz ��½g����4)�ݍ�)/UhdIԟEs��y�T���DM�R<J��~.���I���z/�uQ�m�>��Xk�%�*�{|�5��Sg�,@� ���
;"<���$yƢbvsߒHl�ˉ�ޞB�3c.��g�� `@���"I�]����r}ڹ?�nK���P�x>�o���[����i�+}���eٺ��
�H�
�m�Ӈ�o��ZcM���ˣ�9�F�H�{����m9�=Ix��GAXA&�zg�Id��g��l;�e�h�P��(����� �c�K��
������r+$� C�ц����J�̶��C�<�Ӹbx���5�T��(����Z�x�A&�Q�'EҮ3i3b�\�X�l�s�v�÷�s;=�{l*�2������Řdg��M�A�m���h:��;�v��/�~/hA�S���:?��#�.�q ��G��R�z�E`�'B%��6|�4���
=M'�҅�ޝ�H�:$8�r�i��
�I0�mP� k,�tó�P�{�g<�H".i�d��7�0�t����W3�l`����U�舡�
í�f���ΐ���N��1�9�/\,�R����؟��TQǽH�t;b�ҍ�ܺ��|>틅D��@By���n�X����t��)��aQ�*�t�u���/�9�g�$�����'ȥm
�m��L���O�VQ�QAv�9�q$��e��S.Je\*n��{eX�P���l�
hG��Ձ�eܜ����x^r��u;����v6)��ٶ�w\�P���q�X�2��2�~Flm�����W�e�
^lZ��F���bo�V����7��Sa�ZD��>��!$$p�#�cd,��=�A2�Ctnj������YF�$lpn*UR�D�w���B���p(J���\*��c�?,��,�����'헋�^���Q������y�`��Z6���F:;�j,�:�>Q�|�!������!�H�4ω����_�s�����^E�|��^x�mg�7�����N���
����8�)p�� ���8�(63QV�>��ð���܊�(?�xhG"���I�@��9��+���U�r#:8�˚5�}nvflt`zp�؛����\Ʃ�e6�v��%�Wn[+
��Z�~Y��zkf��1���v�u�+��[�������bq�����J���v�m�@�@#Q�6����nG$���(6�~�R\���Bw���5T�K�N���+]�R±�kZ� uf�3]�G����j��"/j����3)�I~�@�B�F*A�y
�!�p�:-\G�ϲW�k�J2��6#������j�5+B#��X� ӂ�X���Y����P$y�'�^�S�����F>kN�z�jE_������&�T�>+k�G�D�x��M6<;���e�����_��F8GTW!D/֘^��zK"1��L�x �0�ā�����ə�%����x�sg
�~~��7+3g�s��.���]��������� wQ'7�eҌ�5���4�U�Uن�UB�aDЂ툓���?z7X!���&�Zh#�r���Ve�K�E�����h��n%4�7m�
c���JWS%��J@��Ynl�;�WT���uB(�.{>�v�^��o�b���#s���c�Cy�U����E��T
K���d��~�V�������!ԉ�A����>��D/� z����$�H�2�@.������Bu�onʎ���>ܓ�23���+���xtv�X����ݹZ$��i���|�kw�M�ĕ�9�M�eVf�C���=�]��zb���z�������*X�=�rc)
~��(;-��m-�y
��"�:hJFX�m6y��e[��ɶiE�*z],
+�^�LrD���ˁ�`<xf�R���~��h
�Lɨ^1_�&&�������ɘ�D��q��7�7���cz9��{z
�O�+�D�|�������p��g�
'㔀UF���m��b.�%X��#j7��p3��Xpbޯ˩�M�
�k �ĭ���&�uJն'끵54�mvm�ϹF�t���X�1&��;��/����7�;��v��h}S��1}���X��)��@��Q�u� p!�<K�9F��3Y�מQ]@uו7��u�����E��SxN�ӕ�EY �ou]�Pv"�!\nF�xx~���A��`W�4c�:�Ri֫�3���!'�8Z�j^f5t�{]x|U�~��tםN�/��7ћ��UNp��{��H��?CobղB�C�AG�R���JR�諦�S�O8��*�;��$�.���Np��G��y�PY�r�O�J���v7+$å�ݳ{���xPu�x�^����%�`��������">g~@
���3�pb6���K�ܴ�=�!R�!�ϟ��n�WA��C��ͱA�H7"ōS�������D�8�r6�;�Bv�Fv<��d⓴��"��]b8 X�
���q�{�I)�2}`Q7�:�z���g���U���Y���%*�B*��ť
},��0=cF(�*�t�b¶&0�2�gЁ-�0<kh�I"��h�L�CFEtq�����u����8l�{v��H�/jHfwW��ӡ��\�#�|[.�s�]��:}^u'7�V�Ws�p�G��9y�uL�\ߗu���x�Ѷͨ�N$3��M.p�dO:�q��E����`���?�d8���k�X,��K69�u�T��ho�m�?���>�J�r�g�T���^�P=>3G|[��u�9<��D�x��2َu}�A;���&�&��H(�a�Zوn�E�w��{�c�xʎګʮ�.[��po'��Y/a�
5��$B��e�[�/Ad݅u����
,��3�+9���T����W�"��]�Dn��T0�S8����r+�=�i�_r�f����g
��GG
�/���NyX�C����"J~W4���v��A�ĝ��g�+Xr���
��
�
JV
�1-�J1"-B�it��mXG(�U��$Q��x�@��L9c��5�j`���.o�_�J������bV�e5͝�U��*v�b��#�TIT�\[jw��'���d
vǎ.��R�����o��)��(���D���w�Z�x�_]6��d�9����Z��U�
�"N4Z�/8���4yr�K��<;��v�iF\[����)g4�1Y�,5�����9�w|c8�Tl��mkfS5��а<G%b��r@��Wq�`
�)B+$�����M�0%`Ӓ2�x��F7Ճ��&���+
Y�\Jc�-���]n���B~ltpjh�\�:j��-{��lTk���D�dS�
�'��:��sУ{E�ϩ��]����'m$��!�F��H�%��R!G��^��SQSm'�B��R��.�$#��]U�|�?�y��c'`,q�.��Hץ�ԥ Z�r��f|P)�qA3��&���
�����H�J�^iL�{��R�"��~�I�~c�<zy[�s�{�79��)P��ZO\;}�ߘ��P���싃.�ww:�A^�j��.���CC��g�<.�r���F��
hl7�H��]���Dd;n!_m`�am��D
8<8��GQ�7F�RQ���|�0R!`�3�aI�&�Cx!S�֊a�īƓ�*��\)X��bw�l�P�.�I=v�ѓu�y�v�aIT�3[W/��z&FGjA>!>ò�]U�\G4/�
���ޫ�e%z���zQ���P
Ȋ
V--0��;!SfVC��jZg���.��E#niAJ6#Y���L�B�
��'&�v�B_���>l0$5��-�� �rx�3yϩ�F���r_��I�ױ�KMQ;�uu�^�}m#v�x�
��C�p9����bQ�"��[M����G����7�xë~.Y�����=.�2I��;^ Z�u�I������1�)��uB���8��=&�k�b�THUCT(�.RX�o��(���Ց���
w�m���-Ϡ%���`ǏǟN��y�����gX��3��y�ƭ�[FV�?��2�k�=�����3(��3O�{߹�>��;��}���z�M'V�]s����ۛ��u�w����/�pq��q�;���)R�BJ\,�Ծ��d-�lG��q[�c�ō��8M�,V�Sgsݙ�o�Ӧ�q#7�$�q^������o��T��w�s/HJVR{ޛ'���q���;����w�^8�s�m[�&'�=]��q��h���_S�t9�0��R�ܧ���zL�f�X'B�h�����r�G�ؼ�eC3�(u��3i��l.Vȁ�I@S�����������M�D����*{Y�"K�����;�7�B�(�
{Tу�hT�t�S�9�,j�H.�"�����}_�S)2���QV��m�&;��EE!�p[��LYE��U�E4�����W�ߝ�U�xrң,��ԫS9q��'M#QeE�H0�3̜��C�w���^��x�B�� �U��ɳ;w��\���+!�&�j���iuZQ��:�+�i<C���h$��
ϴ��� �Q�$�+X�.����Sɳ��2i�x����^I�6��t1n�߹v
��MOn��i�H��гC����W���O�5!��?c����t2��v"�>]�Ta/O�i��~�W��J�ؑ��!��@��S�V!��w��`��5Q_&�
�^�T�����%�9��
M�L�o,v1��K��g���2�q�����`��5Z�lk.d�>�&�b[��a�@N��Й
C4ʨ�O�x
>E�v*O)���0*Y������l��~?��o�w���~]�'���a�_�&�-��&7w_�����u��pX��v�W+U�W�!���Bg��]=�����g�S�Nz�I����@��l�_h����vr�
���6�vӬ}#�d
XW��pH
4]��V+�Sd?�~����Pf���D2�F������C���W�,ڽ�(2�p8��[á��J{�)�I�B-�ğ�4�>�T6�Z��)��P�j���RG��z
(���ڈ�A\L�*]Q�ʾ�}��k�]ڵ�U��C�C>N����]P��l�Z-�_����ܪ��C�����61���s�gX$0e$�>��BO�'�)�A#�(벨Q��=��B,��0�K��G�/1:c���A��PyUbYi�%v����I�<���=w}���wܾo��Ź�[�&Ɔ���[����u�P�����@�BS=���ʸ`'[k94�^���xt`���|
豕�:L=�����Ѓ�u�`N��J�oۃ����*�߽��i�;�y�+0�[���Ȏ�_V6�vP�2T����+�p�R���_(����=��[����mo9��=pQ(o��p.�P��c�v��7,ݗJ%�z-��8`%<��(=��k?w��S��J���
}�|��}�toS��
B�?�'�$Z����Kuo��X0���9T��!w#�L)��-�dnX�
�+��⦗HĮe�i��3��A�Dп��sfۖ�MG�7�v�7�ө�)Xҁ�<=ul
0�;l�=n*��f�:�I�(�G��\7d����E|9�x:b�)QR��Pm�
����
c��tWS��������3�S�h��$�⪔��X$�h�1�a����y�N��o_���з���<�o
}��ӽ�FL�C��
���|Ccv=&�
�7���1�6X��G��m���h_o�3UEX��%Q�ŕU|$��qC4%���ŲԽp�;Q�e��L.���-�:Y����V}+y
��"
���w�U�&��
�ၞ�������������6k���~�T��.T��1s�I��xt�)�at`�
�ZΨ��� x�m�g�ѓ��{G6�觧gz����JSmS�tj[(~�\9'��f�BŶb�i��*kt-�g��8�*U;S��H�6R,�-����Y�D[�,\�n��C�X�/�%
x%�zL����`doS�Ɓ�R�G���DB�S�̝rM�Y�XG.p�{;��6�5�F��
k�'��crm�
\�V�cb���L+�T^n�a�14s�YM��9,��B�fIKā?HV��d����
w�N��S�fg�BN:BR%i���Ù�Pc���K�3{���]_�(���z��ӓ�7�=��ϷuF�_�:�dΞ�����ny9�P��j6����!,<:�|[,�k{.�Ԗ�i=�ڡ_���=:��rfۿ�w�^�ܑ�wǶT��]m
b�gq.`���]M��X��/Q�Z�b�m3kr��@�4�)l[�L��D�;�kD��-QhԹק�@ƈ����\:Ѡ5f�noALFl�8�z�bm�Zu�
~�K�&�MS����ԭ���{���9��o}���S�>@k�#oZ.�4p�Hc֤;Gޝc9Z��VZ�}�"�];��;��D���
U<�[���,ބ|[z���<�LY���6�-���Z
z��а5��
Ш�%���=P&��&4��-^Uj۷Q��e|�v�?�6�*g�h�OQY%r��\�/���$�W����j+�1��\�. L�I�$KYː�r��J�VaS��t}D��RN��[g@Dl��|��\,%5��U��{;ͬ��z���>��gk�#���z��?�/������)���i5���g���-�VH�ڱ���H��-�%Tu�K�;�������� �����L�W=!]e�aX3�#�%@y�CT䐷�%�:��K|#���.MQ�؊�ګg�i&n;8�(��4�{D�
+���f�w�������9��8`����D���-wn�*��[��9A�
Y:s�h�4��H�� ��0,�yĊH�X`��
�Nb�¢�>wl���Ͳb�V!T�r� >��HQ��]�<�@[��%0)2�؛�B��>���T�9�G�eM�È���hpY���l��yJ����=��Z�������lI�P�g���Q��$J��ޘ/�Q!n
iڶ��PH�eO��Er�D���X�m�q/==���v��?C^��i%��b�g�ƺ7|����/��
��l�s�^��Ig�x���0��-�X�f�@���>U!��#0,�I3�#a5J�<��h�o�d��PﯝD��eEY�<�)��CCBH:���tR�
�=���(x���
'�S�G@�ĠX���;��IŽX 8w��՟qc,���
���hH��kU_T��!�h>����@J%eT����=�(�fD&*�O=��I&�(�m��
V7Cӛ��x�����A�Qxi����Ū�mk=y�� ��L)�I
���Yg�
SY��I����a���.{�
®'��Ga�����>
��oL��զ����4
`�ӑ�폞zꏞ�ҋ.�x���y�g��S[p1mX�h���{ᝯ}�/�cP@�KO�ݵ�^��I;)����_'���c�4��B��D���ގF�����HXQX�
xUbN�UzJ�d��SD��ZNs�ȏ2��Қ��,�'�n��X�-;�%c-��(�D���A��p��l1@tX���)�6��3�
�mX�`CH����
�Ԙ�A�q0dO�?�����tNX����?e���T����g#ϓ�H6�w�~@��Vs�w�y��3y;4�_�A0?�rg8���
�_�����Q���_�8�"dv,0�tH����QFNB�"D�H"�L6��PcLY����j�q �M���T
1�B���f��xC�$�& L��|71��%��I1Y�H�����.j~sW��G�j���}�)�Lg�K�5��:(y���.�џ���A�8�
���_q�|
o0�7�NhF�0��0���f��q3����ɁI�Y�LC����
���] ���C��.�S����o��,܆�p��VxS�G�ti~��v\�4A������Z��[�]���X�\�/^�g�
��}5G�]/��N�P���g���a��Sl�����^�FAF���m�"X�1
g
�I�$:T��Q�
����樼6cCA�9'�����D�VŁv�q�J`�p�?!���|��{�����(S���RC�H�~پma��7>���=#�Gơ���^�?�s�c����7���ARg��_��F63���XI�*�pd(�@?����W/�9�tk�\��`Y!�EK!-�J^����h�LV�eu�P�Y�Uyb�����BS6kR���[��o�28����߷����R(g�j��E�3��?�bC�I��>��>�"Ȯ�0\�|?;W3]��ի�d�M� [=�.ve�^�o�Oh�BG��}z#�_�g��O��L}?��sC�p��a�#��u�F�Ӱ�Ҭ���_Q�Z�:�S���}�Ϝ��=���=��]�w��8�n���}�]?��o�z�dn������)�>�A淫�Jc�jĒ�HK�&RY]J�
��b���T�����",��1%8K�0�8�oĒn�Y����{�w��<9H�?;
����G8���|�ĩ�N�y����=�v-�Zڽ�c��m�6V&7��t��[��v{2�D3�yP��e��$����go�x����@��M?��ٙv�eB��=77���sѓsE��e��~�QXܽ�β���w����,to2�<?;��G�M?��͡OO�K��κ9Aϲ,ѵ5"��,�.�l����}^b�@D��K���A�I2$̋�4�
�.� �"u&�ۛ�s�h��A.Ons[s[kK��+4�S��
O�k�6Ր�D�kЛh]#��'��b�^��o��plwe��
j�¿e��2VD����4�m��ׯR���9R�3�>��Ff�!�*�$��c�,ѷd�[?�O����������M���qh�>���o�g�-.όT�$�QD�,�Б�m��`#��5D��<���r���I}x�&��=���P��g`�moWO�Q��vW��+pv��sc�����t����(�3�2�0�g~��&��?v'ۃM��a:�d:���L,s��Tll�s<�c�W_,%�y^���~�3ܬey&��t
�jh��<͆t7Y4�`X�}���g?��#����sG�߿c��9��o���o|���?�[���~�����o|�S�=���<��#�~������?�`��y���#�h���f���A����B��<���u�!pA/�g���#O�.?;Be."�W�v���~���ھ�US�gM�
Q��*FqQ�ޯ+������JG|!9��q�QVf��H
{L��k�l<��IG�l!۔��x:��
���P�O�y=�*��̉�(�0�Ao ����K�`����|�~�ޱ�r���M�_���u��(z��m�f�����|�_*#�c%���P�8���mh,+l
fK��?�Rd՝s�aS��A���`ڐ%�M�A�=��/�xah�����y����/��1�W�V�����s/.����r�K��7�����7u;>K�_z��Ҍ���"_�d�
��4<�BkK��,B�h@�y���*P��[�l�.&�>/�s�(+����cT/����@e�X
>�q��L�ࢩ��eۅDw��`"̥S�C�GC�4����ޙѧ�����̘�>\l�yj���kfE�U֙��Z��bzco�n�I�`��%��
a)y�K-�*
f,zUq!`]�G�e�X�?8Cj��]���kD�#�.�?�������<�<Y�䮙�
cH�/��#
��Yi�x�ZaX�gգd��U|�Q0��x�,bY<�J��P�B�9���QB��@դ�{�����=pߥ{�}��GΜ:~���٭S#�
�.沩��4D8-X1���&:�o`X���`ڂO�l����|N$�lOy
�P��9��4fb����2��zXW�ݶM�'u;�D�,E#c��}�I�r|s�_؊��l��'*�T2����4�=(������Æ�M����~���:뗃|L5\�-E�1I3�H<�/��<��E�r���D̆��z��b\�Frls���3��8�x�S�i6D��c���o�+]vm!�������!_��b���m=�?;��krYP�/�s����Yi;%�#Y6d�Ç��'f�1���{Dfd�Nf'�g"d���ϋܱ&`VX����30
` [&�o4C!;[�L��t��Jr9�;v�a[CL=���
�R��Xq�g1�JC_��VGԧ��挷o��G�_wܶ��0�<A��c�G��P����Ձ�?&��`r�Zf��24Բe���Yg�}P��Uta�sk9�$:T�ڙS���Қ���o֓C�
�,1AR\���AP/H �`n���r%�x��<�d���̱L�~�?�iK�j�����rUV��������mg2ſ�gΏ�.WѶ��{��?�ǟ%�[������p�̑�j@G�.9pb������0�$[�v�!��.0�Z:r%R�,~FÍ�X�v9+���bd
Ń�������0:�Nq�6W7���&�ٞR��L9��Y��*�V1����2��l˲!���r�lQ�9Y�2�
B;v���
4�W�&�|��J�-�_{0W��l�K��/kZOd�Ye�L5�a�z�����Z��G~�at5{G���3�MT'b�H^��:G#=�V���ð��{^���R��U����<���n�9��sΊ/��H��Q�X�z�$�%F�6�&�0*+����4���j�yZ��}�b�����lk
�&,'��@�U��G�:LL���6��o��q�A>L'
r�{��cO�R�D����w��"jn�hܨ�$ޤ��/9l����Τ�1Ⱥ(�d��e�(��T2������U��`�!��K�<QY��J˯��z��-4ց)�Cy'^)�
"��<1u��>M�mo�NG��vҙ����l�'��Cs�28Z.�����e��l<T�"�g20H�}�%2Ta?�ݓݾ=[�L��ȝ~�>@���K��F9�`����<��x�Ơ���8!F����W�MK�Zh�V$r�D$�>q�|ܰ���1���a?\ߣ�at�!};Ft͖U��#Ճ@�(p~���V�AK�Wc��aU2�e�i��i2���s��-S�ct[ks>����d"
d/^U�9H���^w��p�3l���TO�Hһ�+����Wo;k��?@=o]d�g�j�Q��v�.��^�4��)��y�!(��ҵo:��0u~4��2�V�&1hP��Ъ^
�_���1���%ss�)1���R S�S�cV!��V
z���i ���eFQ
HA�0��#kf2�����)�H.qy���1�u��ϑ�TU��Ԉ�k?�۟��ƙ��9�5����?x����O��
ξA��jw���O6[�9�#m��|�P;j��q{豫.o4��8�kR��|ugȋy25u4����)"QK���(w��ɋ�;d�wHg����@gg/��u�4��D���-�嬤�F:�@x2Q@�-a6�܈|D
�b*�q+�M���C�Q#�g��b�e�M ��0���>��}��@���8���x�+�m/]3${����[2�q�>�z������x����WMPm���Kn��C��idz���Xg>ɊUY�"��хX �8��fi%�%7@>�XO�'eF6PRC�5��]�(�f��CapY"/\rA��r�ʑ��#4�Į\�2^�S��*-���뚦>D[���]�;��l�v���F�Qh��j��;�:�M�~?O�%4�g���r{
u�p�!v?/����`�,{��!F=��V�\QgUV�,Y��8�|���bW� 3�宁�@[kSg�����{4g-��0�h�4anr�҂H3��<{�x�U9#�Kt��=E�@�ʫ�s����}w~��?�;k��V5U�
�,��p}mO6Blx{��h�XL���UҺ��Hb��#=DR)F
����Dї�$XA�le����(��X4�0;|)
~�M��ɱ�U������
f��=����Iy�e
�
��
�.-��xy(�V^i|�~]�77��W��X]H'��@cF1"Z��(���D%�
�Ή�L���C�'rv�3��vg�3�l�Ʋ�0�����sC�
�Mk�5Ѷ�݆P����7I������ԏǀ�b�!L����H7�f7��/���k���:���R#��c/��^
`&+XU�N�1c��%��HU|q�yq"J�d<���jo����Q���g�����IU�}g@&C�i����D��D�����^O^� �i�=��&�
���N?.���3�%"݊D�M2s�I�O���8Ԃ>'F6;Jl��#���4ܔ��{Ҷh��|^���DD*�_��\����Q��!�++��(��Y��������S�ه,Vs���ڿoy�m3�S��6
n
slG[��+�N���
���ԝ�%0��ø��2�E �h\zZ����R��)b�u�Թu�eM���s�$q9�-�Ӂ�-s��l���W���2oDlУ5C�f\OF"�(>��F�Q��=՛ɁY�WУ��`�>�hDy-�19{8�n�9��)e�M��z�_4H���W���7@�ӣ�`������O��g����f֊28AFY�ժ.�cV��x��s_�es,a��`C�`��}Vb�Y�h,��n-4��OY\�j��m-��h$lA�!QCb
rR hJ3,��ބ�G�*����`Oү7r���C%1���xؘ��WIC �'��`̎�����C��R.=�6n�I�@|���pׄ���x�@g����`֫��#3T'�3��X&-��N]��M�aBdb-����J,���U_�q�,G.�92U���_r��~.�����
�z�Myb��|1#V(�o��S�*���f�C,e
��g�r�bӔ2���j�5�����@�k�M��\̄C����D�Ur�Ƒ�����9���o�Z�U�1π���^�gG�����U�q��T�GU��G�XR��X�� ReD���"�IB��_%BTf���,�=��J⢆��:i�YR}���nV>���4�k�4>�W���-E����K��FK��<SY.�T隮\�ћN�E�3��B�ׁ���,Ҥ�l�?A�eN�:g����JSS�kzt[���2�5����B�Ќ��6K���p[��85^�
7�����爚s%�/��xd�Y̓=N9�m�Zl@<�(�G,��C�*�8�餵��ADƅM�# `8�k`|D�_���k)2�?�+��ǥ�Ѩ/b��oa�G��ç���ޡŎ>�C�k��z�;�����Rs���6�/�1���&"s�Q "�(�S��
R0/��I�����P*���|C�x5�Qn(���K͐|
m@
m>ހ!#��k�tE�;�C�'::�����F(Pl�u���w��Lf�M9����>B���ga&�p[GKm_Kg`J��$K�
�>�$ee+����e[��^7���Z��H]
UC�3�~��-#ǴQ�w�9P�ۖ��c���Lt%�q���|��T�L�i�M�O�tx
h����$��@�1��ݰq���-u�_�e�sy)d�>��X.O]#ݐz�Vq��d�Y��)"�U� �V�M/��3��b�;4�֪�f��;�#�Ӥ��j߈f�ݴ?є��M��pZ;S�T[P����{�sn�5W�{H��+_!���}�T���Wx�9�B����C�>ҿ�D�,33�^�v�\�́����c$��s;�A��>2��I���8�"�te+Vh0�X���*�]��a
�g����m;��ܻuj�5fzg��H.j{�tS/"�N�N�y�z�R��E��vX|d]�g���A뻷vΝ��%���L������
1���s;�%z��K7��/��.}�%rZ�ݼ�!ѩ�2`[uʑ
��ۣ�V%x�0��Һ�D�m"�6��_5�ٵ�b�z��rtu�İ�=�Tʭ���26����'�c
?�h�
�x�-��<�
�[����%�'����^!E֖I%b�����@c�
&9�)���/Z�C�H�(���9�}&�y4Ӎ~֝&���?��5�PKs���J�\��ߐ�x"�q_k�hk�ڊ>�:7_;2�ejjj=3�*�2�T�'6hjԶi[�� l6�Um�5��൰~��K
w0xm~��W�ޝH��3���/�
��
��ᅏ��_(�v9��<��q���)�=�k9�+#]�����(>Q�>�y�i"v�XZ߬�ښ��'
��X�̆2e��->����(j���x
݀ �WHiT�%|�+�,.14㝑$h: ��
p�����w�ڈHw譔:[[r��Ei�t��ܵ�$'a�
���Q�b:�)��e=rC�G�����s�e!A$�L]+�����tov�j���@ĸb����0وP�"�ώ�#?�{~��]�����V��\��n��$��c���b��K�ߌ����ؒ�5F�Zp��{C^h�1R��V�R,A�Z4x�}��a|P����K�� z=�%��7�Dz�d��ԶQ�Dpxa�T�
�Y$�ˌ��Q�ĉ�w�=r`��=K��gw��:� ���ފ�o�ciLSpё������ph����{�0r��u*j�t˫��ѩ$�gﺶ����v�����Hv�����oUa��tS�[5��y����&z{����]�s�ԙ�tu���k�ϗ�:Ҡd/.�|�AX~��U�nj���R�=�n��=Wu��c�N`��C3�<[�
��y|�g����WU5U\a$�U$(s�A"�
�c<�ϳ��A���>JQ�q�ȅ
%��e�%
^�0y��K��=l!�:<8зx���:�
M9;����V[��o�����eBd����N���iJ���@��sKզSMP�o�n�~��jS�t��Wn}
�
߫�?�`�fQ�M���*^���c��D*�$P�X���xC8�j�j
��F�փ�`�,�R��hA4y��h
gj��*O�>�@t����J�����n_�MT��r�tp�o�+�|j������*�um^�,x���k�����n��\]�B���Hi���
�t�ڪ"��e@��"]�$�x�yn���Z�9�e��hG[v�^2��1��uuQ~�vhݶ�ޚp,*�rSU���X�tQ��6�:��ĩ��G�>6��Hp�_/�6w���j��#���Z�8�
�Z���O-o�]�t*@d�9ucs�fj��*Bto8qcRЏ)�h��Z��":�D�`0M`w�+֦i��!&�X��}-V<�z����U��P��r�b��a�S���Ӣw����)��v�C�+��o�!��:�3�'~�}��UN�b�d�~��@LD&o7�$n�3ip�ԆD�-! ��X��*ʳ�H�r�QxIቝ�"Nm�H�DT_�kG�x�z�hr�����e���1�}���'�&6�&n�q�aEh�r���y� ���r��Z�u��*�,g�7O��h�@�>V(���t�<F�Xh�*���~)�GpۥKFJ�����nC�<e��ԅgd����֓Be~��ݚܕ1���3������gW{����g����szj�h.�a5��Si#�k_��]���bkhH�C�'��J'v8d��R00Q�o+Fth���q
��
�=�
�G�>o'2;���aL����rt��X�����R�
��t���l:�X~����|_���K�X�C3U�d7!g��y������b��F��3ʹe�?���ߺߐ @��=�놑�p�������~;c�
�:�:�E�`"��N"Ӟx�#�=�<'y�_߂E�3�X�8Rio��k�(�HI!�G�<�Q��$jGAc4�o�1�(��
"z�� ��E�/!2�ɀ���W����?������۬�?�on�Zl��@N>���;�"X97�2t��@���.�H�&�C0&����A"DC T��`1�U���E.�`�:�2�����Lg�#�����?��ec��C��8#iw�abJKr�� �=5��W��>��/���AÐ��0����!�G�'��$�m[�yZ�m�a�4�յG
�'���ȍ�k��8�U.���u���aSn��Rl���1���es�k`.nM{��e�
k|<I�����ɝ�~�t6=���v�y֡���t����=�<�<�>�-��dUb�W��~X{[�e2v+�n߆^��_7��r�"��[�Wu��gC�~w��ͣ��zx^���W>5��\vLd����5N�7�}��Z��І�X2�\WC6
��f���&n.��T���6�
�Q�+��M[���+�y:
rw��=}���n��w���R*܌p�\��
��D�qn���>s��gN>�04D���j�R��U�to��o~���ڱS��o�sx��'x��}���^B�����ꊇX&�J��w��_%Ʋ�#�2%哨{b�Ei���2�o�29>:<ط���]ͻ���QA��k��H�zs���:�LNpB�1����<fu�8ڗ��[w�R{���>6h��ڔ�`%�A�]�6w_�Fv��e��*�`�s�I68[�y����^"���ц{�b:RP�|�
��vo&7��d���lS\?�y����v�xuR�%(~�a�f>0`���j1ˑa���d����5(d�v�ō�s��R7ԆS7��U/l��)�3r�ZO90���x�bv�E�eq=�����$����z��9`oX�D̳P�00݁}��
�Fb|�:Sgg"�9�隄��D�?h̨Mf?�@tg��������:�P�
Fy�H�������H��b��(��Q�������Y���џ��'���Y���+��n�̟O��j�ы��t�#�]w)J���Y��$�l���� ��d��Yؙ��������1Ƚ`bL;��PdyN�X��
Z�0���nC�T
bJ�&�d,h�F/�#ǔ
��`�f9rD��L1�i��@�=<^���#�IE.Ԟ�@�>O�V�v:R���X1R}��*��w}�K��Nrm$� uEΟ��pdc����������%ն�*D�wu9q,�*�oa��\��!f�ƩH�Xq�A9�_�N%�SA�gФ���gJ�d�h��h*4��̻�h<}��\�\I��\>#��w�Se�A�%S<*]�Ճ��89+��"}���ޱп����QF9�������#��>Q.����P�Mq���W?v�$v�Q$��Q��Ř���-D�/��*�v���ԉ�DT�0���T����a��\мJ@�%���Dpz�L3ԊM�ۻ0�cz|��P�˄3�ݻFB���琎�)�G���i��86���J��8�\%�&kuS�}����+��:�&%6댸���xC�ͷ�}��}����yO4�B��JHR���~Ckִ8JMJ�aau�����;/��*5��z8x�&���*ĵ�Iߐ�{�ٹY$�}�Қ�vsa��5=�G�S3Zl�`��l��N{��^8���h�u-o��VwT�F-c�R_�`E6F$��!V�"�B;°d&b� JZN�J
')��8�"#p���mx`�&I[�ưo
��{h����߬�Y��Z��k.ly�#��*�i���j
>�P�*�ዿ�ތ�j�rd�W����L�<�]}����hA]X��:%�Q�%u��
B�q:��G�i�(+�:P�Y�'��&����l*�xn��5xV�[�
�!����ME��k�8�ai��M�i�g6f=���涖��;�Ix�k����@��{�����Y���~�Ķ�!d%�o��*4�x����x���u�~"T�\�.t���"ࠉ�q���R,q�
�#C�ȢHk\��HjVXZ��v:i���������IƩ�n'½��e�=�"fWk�@悲6�ir%��J������B��[��5���YS�g�ge͜}BiQI�:���z�����"��W��qV`�a�"�H�S��k��MZ3f
��DA!�9����Z��~��*�|
��4u����y]�v�ޢy�ʤH9'�cq2��1����&¤���eYZ@p����oN�D�QP��i����@���
LGF��kCv���|��k-G���
�%g��- ���
)�����;��2�ڈE$�q�d�v����>PS�EB�<�����0�Ea�T�7e2Q�����L�퐆9�$�,�@��CfX���ޠᚯQ��w����y8�U�ioc���qE���n~�PP�N���k�<������P�I+kf��{��\ƭ�9�M�@�$��h�=��D&�)�Jo���Ȳ�/��e!��4�8�"����ڡzْNY4��[�f3�#Z��ha�҂��P��m'�3IZ��2-�/h)_�%f��m�x�c`d```b`xv��3���+�<���_��`���_0+�
��{Wx�c`d``V�����?0�`�
F���x�uT=KC1�IZ��PP��Ђ7W?Aqtrrp��D�N:��T'�?P�Cq|�$7��>���&7�;O�ѐ����%�-�d��`�D�f{f|���%>�|�$�O��;�N9�믳,}9��
�
0I���ޤ�n���ήe�_dLM�.�j�ׯg�i�q���_�(r������v�O�Jk�fٖ�l�f��������1;�w���U"�Sw�� ��גRm��6k��~��UگQ��7p�kg�:��p��k��`�����m`����h�c�e�܌t���k�k/m�^��b3�
��
?������}���m4D�چs�k��7��칏��
ꜥ��:�t�w����>��lRX�W�*�߮��Y��"�c~ ����q/{W\
=����4��B���,.����K�}vq�Ї�q�C����B�i���*7��9����;�=��]���&�̊(fdx�P��*^��`���6D�
��\
h�����
,�r��N�H�B�<����:�,���:�z�\�
T �!8!�""�"�#
#8#�#�$j$�%T%�&&�'`'�(x(�)j)�**l*�+b+�,�-4-�.V.�/./�0P0�1X1�22|3
3�3�4>4�565�6(6�7�7�8B8�8�99�:T:�;�<X<�=v=�>�?F?�@�A:A�B0B�B�CC�C�DhEE�F|F�GlG�H\H�IvI�J�J�K�L(MN2N�O$OFO�O�P|P�QpQ�R8R�R�S:S�S�T0TfT�T�T�U(UVUtU�U�V6VbWWpXX�Y>Y~Y�Z6[�[�\<\�]@]�^6^�_"_�_�`:`�aNa�b^b�c�d:d�e4fg0g�hlh�iri�jRj�lFl�mtn$n�obo�pHp�p�q.q�r|s�t|t�u�v.v�wwfw�xfyTzz�z�{�|J}}`d��������Z���D����B����ЇN�"�ЉV�ƊX��t�������z���b������B�Ɣj��4��Z��Z��r��:���̚Л��&��B�؞r�D���*���>�2��R���H�"������:��R��N�����
���,����~��Q�lyn
cx�}��n�@�s�4u�J�Z�@��@�G�+ȋ�r)/�.o���{�N�:E~/K�"�v��ٙ�c\���
�{�"r\@ {�E���q�>?�˘zo�+�z���JW�:6*g5<8.0v�)^���希W�츂���kjB0�A�
V�)�)v�D��Kli�E�FԔ��7�8���D�$]n%Z<{ĉ�$���p�$�NI�4i<��[c��)b��g����Mgk��]�r8��N�Xg�XB?��\2Þ�)���'��hJ�ѥ
m���_`nG��H�
>b�7@�Q�}Ke��0q�;kGʼ��u���2/(ζ�N�~���Ę�|g4�l���A�)j-}Q�tQ��QZQ�O��x��۵�t�N1l�x�m�U�Uu���Y
҈E�
R�Y��( �
"v����݉����������9��g����f_���Z�{����-��0���hC[����td:љ.�KW�ѝ����|�e~`Aba�џd�(��8��e��HZi�$2r
J*jF�$K1�1�ei�1�e��D&�,˱<���
LeE���Y�UX��X�5X��X�uX��X�
ؐ�ؘMؔ��d�d+f�5۰-�َ�فى�م]ٍ�ك=ً�ه}ُ����A�!�a��Q�1�q� ��I��)��i����Y��9��y��\�E\�%\�e\�\�U\�5\�u\�
��M��-��m����]��=��}��<�C<�#<�c<�<�S<�3<�s<���K��+��k����[��;��{��|�G|�'|�g|�|�W|�7|�w|���O��/��o����_�m-�����6�����涎6�u����浮�ͺ[�i���������o��-l���
����
�Em1[��[�0n#l��Z�ܒe�[a�UV�([Җ��6����6���26�&�$[֖��m�M�l��h�l%��nƬ�f�l4Ǜ�ڜԜ�9ys��ͩ�S�o*���X�M�Yl[Ė�Ulx����yx����yx����K��Rx)�^
/���K�e�e�e�e�e�e�e�e�e�e����������������������������������������T�T�T�T�Tr�{��*��
�
�����������;��UGC��H:2��BG���!�!�!�!�!�!�!�!�!�!�!�%�d��]�Kv�.�%��$9IN���$9IN���$9I�$g�3ə�Lr&9��I�$g�sɹ�\r.9��K�%�sɹ�Br!��\H.$�Ʌ�Br!��\J.%��Kɥ�Rr)��\J�$W�+ɕ�Jr%��\I�$W�kɵ�Zr-��\K�%גk�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW��]
�t5�j�ՠ�AW���Lj0����Lj0����Lj0����Lj0����Lj0����Lj0����Lj0����Lj0����Lj0�������K��RX��Y�c
�#D�#p�( ERD�
*�D�$�QX�@�X�D�&�QX��X�DYYYY������DPK��[�kCww8Application/Frontend/Assets/icons/typicons/manifest.jsonnu�[���{
"id": "typcn",
"label": "Typicons",
"class": "typcn",
"isLigature": 0,
"prefix": "typcn-",
"data": {
"adjust-brightness": {
"name": "adjust-brightness",
"kw": "sun adjust brightness"
},
"adjust-contrast": {
"name": "adjust-contrast",
"kw": "half adjust contrast"
},
"anchor-outline": {
"name": "anchor-outline",
"kw": "anchor outline"
},
"anchor": {
"name": "anchor",
"kw": "anchor"
},
"archive": {
"name": "archive",
"kw": "archive"
},
"arrow-back-outline": {
"name": "arrow-back-outline",
"kw": "arrow back outline"
},
"arrow-back": {
"name": "arrow-back",
"kw": "arrow back"
},
"arrow-down-outline": {
"name": "arrow-down-outline",
"kw": "arrow down outline"
},
"arrow-down-thick": {
"name": "arrow-down-thick",
"kw": "arrow down thick"
},
"arrow-down": {
"name": "arrow-down",
"kw": "arrow down"
},
"arrow-forward-outline": {
"name": "arrow-forward-outline",
"kw": "arrow forward outline"
},
"arrow-forward": {
"name": "arrow-forward",
"kw": "arrow forward"
},
"arrow-left-outline": {
"name": "arrow-left-outline",
"kw": "arrow left outline"
},
"arrow-left-thick": {
"name": "arrow-left-thick",
"kw": "arrow left thick"
},
"arrow-left": {
"name": "arrow-left",
"kw": "arrow left"
},
"arrow-loop-outline": {
"name": "arrow-loop-outline",
"kw": "arrow loop outline"
},
"arrow-loop": {
"name": "arrow-loop",
"kw": "arrow loop"
},
"arrow-maximise-outline": {
"name": "arrow-maximise-outline",
"kw": "arrow maximise outline"
},
"arrow-maximise": {
"name": "arrow-maximise",
"kw": "arrow maximise"
},
"arrow-minimise-outline": {
"name": "arrow-minimise-outline",
"kw": "arrow minimise outline"
},
"arrow-minimise": {
"name": "arrow-minimise",
"kw": "arrow minimise"
},
"arrow-move-outline": {
"name": "arrow-move-outline",
"kw": "arrow move outline"
},
"arrow-move": {
"name": "arrow-move",
"kw": "arrow move"
},
"arrow-repeat-outline": {
"name": "arrow-repeat-outline",
"kw": "arrow repeat outline"
},
"arrow-repeat": {
"name": "arrow-repeat",
"kw": "arrow repeat"
},
"arrow-right-outline": {
"name": "arrow-right-outline",
"kw": "arrow right outline"
},
"arrow-right-thick": {
"name": "arrow-right-thick",
"kw": "arrow right thick"
},
"arrow-right": {
"name": "arrow-right",
"kw": "arrow right"
},
"arrow-shuffle": {
"name": "arrow-shuffle",
"kw": "arrow shuffle"
},
"arrow-sorted-down": {
"name": "arrow-sorted-down",
"kw": "arrow sorted down"
},
"arrow-sorted-up": {
"name": "arrow-sorted-up",
"kw": "arrow sorted up"
},
"arrow-sync-outline": {
"name": "arrow-sync-outline",
"kw": "arrow sync outline"
},
"arrow-sync": {
"name": "arrow-sync",
"kw": "arrow sync"
},
"arrow-unsorted": {
"name": "arrow-unsorted",
"kw": "arrow unsorted"
},
"arrow-up-outline": {
"name": "arrow-up-outline",
"kw": "arrow up outline"
},
"arrow-up-thick": {
"name": "arrow-up-thick",
"kw": "arrow up thick"
},
"arrow-up": {
"name": "arrow-up",
"kw": "arrow up"
},
"at": {
"name": "at",
"kw": "at"
},
"attachment-outline": {
"name": "attachment-outline",
"kw": "attachment outline"
},
"attachment": {
"name": "attachment",
"kw": "attachment"
},
"backspace-outline": {
"name": "backspace-outline",
"kw": "delete backspace outline"
},
"backspace": {
"name": "backspace",
"kw": "delete backspace"
},
"battery-charge": {
"name": "battery-charge",
"kw": "power battery charge"
},
"battery-full": {
"name": "battery-full",
"kw": "power battery full"
},
"battery-high": {
"name": "battery-high",
"kw": "power battery high"
},
"battery-low": {
"name": "battery-low",
"kw": "power battery low"
},
"battery-mid": {
"name": "battery-mid",
"kw": "power battery mid"
},
"beaker": {
"name": "beaker",
"kw": "lab,beta,experiment beaker"
},
"beer": {
"name": "beer",
"kw": "ale,lager beer"
},
"bell": {
"name": "bell",
"kw": "tone,alarm bell"
},
"book": {
"name": "book",
"kw": "book"
},
"bookmark": {
"name": "bookmark",
"kw": "banner,flag bookmark"
},
"briefcase": {
"name": "briefcase",
"kw": "briefcase"
},
"brush": {
"name": "brush",
"kw": "brush"
},
"business-card": {
"name": "business-card",
"kw": "id business card"
},
"calculator": {
"name": "calculator",
"kw": "calculator"
},
"calendar-outline": {
"name": "calendar-outline",
"kw": "calendar outline"
},
"calendar": {
"name": "calendar",
"kw": "calendar"
},
"camera-outline": {
"name": "camera-outline",
"kw": "camera outline"
},
"camera": {
"name": "camera",
"kw": "photo camera"
},
"cancel-outline": {
"name": "cancel-outline",
"kw": "photo cancel outline"
},
"cancel": {
"name": "cancel",
"kw": "cancel"
},
"chart-area-outline": {
"name": "chart-area-outline",
"kw": "graph chart area outline"
},
"chart-area": {
"name": "chart-area",
"kw": "graph chart area"
},
"chart-bar-outline": {
"name": "chart-bar-outline",
"kw": "graph chart bar outline"
},
"chart-bar": {
"name": "chart-bar",
"kw": "graph chart bar"
},
"chart-line-outline": {
"name": "chart-line-outline",
"kw": "graph chart line outline"
},
"chart-line": {
"name": "chart-line",
"kw": "graph chart line"
},
"chart-pie-outline": {
"name": "chart-pie-outline",
"kw": "graph chart pie outline"
},
"chart-pie": {
"name": "chart-pie",
"kw": "graph chart pie"
},
"chevron-left-outline": {
"name": "chevron-left-outline",
"kw": "less than chevron left outline"
},
"chevron-left": {
"name": "chevron-left",
"kw": "less than chevron left"
},
"chevron-right-outline": {
"name": "chevron-right-outline",
"kw": "greater than chevron right outline"
},
"chevron-right": {
"name": "chevron-right",
"kw": "greater than chevron right"
},
"clipboard": {
"name": "clipboard",
"kw": "copy clipboard"
},
"cloud-storage": {
"name": "cloud-storage",
"kw": "data,upload cloud storage"
},
"cloud-storage-outline": {
"name": "cloud-storage-outline",
"kw": "data,upload cloud storage outline"
},
"code-outline": {
"name": "code-outline",
"kw": "tag code outline"
},
"code": {
"name": "code",
"kw": "tag code"
},
"coffee": {
"name": "coffee",
"kw": "beverage coffee"
},
"cog-outline": {
"name": "cog-outline",
"kw": "settings cog outline"
},
"cog": {
"name": "cog",
"kw": "settings cog"
},
"compass": {
"name": "compass",
"kw": "safari compass"
},
"contacts": {
"name": "contacts",
"kw": "address,book contacts"
},
"credit-card": {
"name": "credit-card",
"kw": "payment credit card"
},
"css3": {
"name": "css3",
"kw": "css3"
},
"database": {
"name": "database",
"kw": "db database"
},
"delete-outline": {
"name": "delete-outline",
"kw": "cross,close delete outline"
},
"delete": {
"name": "delete",
"kw": "cross,close delete"
},
"device-desktop": {
"name": "device-desktop",
"kw": "pc,mac device desktop"
},
"device-laptop": {
"name": "device-laptop",
"kw": "notebook,macbook device laptop"
},
"device-phone": {
"name": "device-phone",
"kw": "iphone device phone"
},
"device-tablet": {
"name": "device-tablet",
"kw": "ipad device tablet"
},
"directions": {
"name": "directions",
"kw": "directions"
},
"divide-outline": {
"name": "divide-outline",
"kw": "division divide outline"
},
"divide": {
"name": "divide",
"kw": "division divide"
},
"document-add": {
"name": "document-add",
"kw": "file document add"
},
"document-delete": {
"name": "document-delete",
"kw": "file document delete"
},
"document-text": {
"name": "document-text",
"kw": "file document text"
},
"document": {
"name": "document",
"kw": "file document"
},
"download-outline": {
"name": "download-outline",
"kw": "download outline"
},
"download": {
"name": "download",
"kw": "download"
},
"dropbox": {
"name": "dropbox",
"kw": "dropbox"
},
"edit": {
"name": "edit",
"kw": "pencil edit"
},
"eject-outline": {
"name": "eject-outline",
"kw": "export,log,off,out eject outline"
},
"eject": {
"name": "eject",
"kw": "export,log,off,out eject"
},
"equals-outline": {
"name": "equals-outline",
"kw": "equals outline"
},
"equals": {
"name": "equals",
"kw": "equals"
},
"export-outline": {
"name": "export-outline",
"kw": "share export outline"
},
"export": {
"name": "export",
"kw": "share export"
},
"eye-outline": {
"name": "eye-outline",
"kw": "view eye outline"
},
"eye": {
"name": "eye",
"kw": "view eye"
},
"feather": {
"name": "feather",
"kw": "feather"
},
"film": {
"name": "film",
"kw": "strip film"
},
"filter": {
"name": "filter",
"kw": "funnel,refine filter"
},
"flag-outline": {
"name": "flag-outline",
"kw": "flag outline"
},
"flag": {
"name": "flag",
"kw": "flag"
},
"flash-outline": {
"name": "flash-outline",
"kw": "power,lightning flash outline"
},
"flash": {
"name": "flash",
"kw": "power,lightning flash"
},
"flow-children": {
"name": "flow-children",
"kw": "flow children"
},
"flow-merge": {
"name": "flow-merge",
"kw": "flow merge"
},
"flow-parallel": {
"name": "flow-parallel",
"kw": "flow parallel"
},
"flow-switch": {
"name": "flow-switch",
"kw": "flow switch"
},
"folder-add": {
"name": "folder-add",
"kw": "directory folder add"
},
"folder-delete": {
"name": "folder-delete",
"kw": "directory folder delete"
},
"folder-open": {
"name": "folder-open",
"kw": "directory folder open"
},
"folder": {
"name": "folder",
"kw": "directory folder"
},
"gift": {
"name": "gift",
"kw": "present gift"
},
"globe-outline": {
"name": "globe-outline",
"kw": "globe outline"
},
"globe": {
"name": "globe",
"kw": "globe"
},
"group-outline": {
"name": "group-outline",
"kw": "users group outline"
},
"group": {
"name": "group",
"kw": "users group"
},
"headphones": {
"name": "headphones",
"kw": "headphones"
},
"heart-full-outline": {
"name": "heart-full-outline",
"kw": "like,favourite,love heart full outline"
},
"heart-half-outline": {
"name": "heart-half-outline",
"kw": "like,favourite,love heart half outline"
},
"heart-outline": {
"name": "heart-outline",
"kw": "like,favourite,love heart outline"
},
"heart": {
"name": "heart",
"kw": "like,favourite,love heart"
},
"home-outline": {
"name": "home-outline",
"kw": "home outline"
},
"home": {
"name": "home",
"kw": "home"
},
"html5": {
"name": "html5",
"kw": "html5"
},
"image-outline": {
"name": "image-outline",
"kw": "picture,photo image outline"
},
"image": {
"name": "image",
"kw": "picture,photo image"
},
"infinity-outline": {
"name": "infinity-outline",
"kw": "infinity outline"
},
"infinity": {
"name": "infinity",
"kw": "infinity"
},
"info-large-outline": {
"name": "info-large-outline",
"kw": "info large outline"
},
"info-large": {
"name": "info-large",
"kw": "info large"
},
"info-outline": {
"name": "info-outline",
"kw": "info outline"
},
"info": {
"name": "info",
"kw": "info"
},
"input-checked-outline": {
"name": "input-checked-outline",
"kw": "tick,correct input checked outline"
},
"input-checked": {
"name": "input-checked",
"kw": "tick,correct input checked"
},
"key-outline": {
"name": "key-outline",
"kw": "password,login key outline"
},
"key": {
"name": "key",
"kw": "password,login key"
},
"keyboard": {
"name": "keyboard",
"kw": "keyboard"
},
"leaf": {
"name": "leaf",
"kw": "leaf"
},
"lightbulb": {
"name": "lightbulb",
"kw": "idea lightbulb"
},
"link-outline": {
"name": "link-outline",
"kw": "chain link outline"
},
"link": {
"name": "link",
"kw": "chain link"
},
"location-arrow-outline": {
"name": "location-arrow-outline",
"kw": "direction location arrow outline"
},
"location-arrow": {
"name": "location-arrow",
"kw": "direction location arrow"
},
"location-outline": {
"name": "location-outline",
"kw": "map,pin location outline"
},
"location": {
"name": "location",
"kw": "map,pin location"
},
"lock-closed-outline": {
"name": "lock-closed-outline",
"kw": "locked lock closed outline"
},
"lock-closed": {
"name": "lock-closed",
"kw": "locked lock closed"
},
"lock-open-outline": {
"name": "lock-open-outline",
"kw": "lock open outline"
},
"lock-open": {
"name": "lock-open",
"kw": "lock open"
},
"mail": {
"name": "mail",
"kw": "email mail"
},
"map": {
"name": "map",
"kw": "brochure,pamphlet map"
},
"media-eject-outline": {
"name": "media-eject-outline",
"kw": "media eject outline"
},
"media-eject": {
"name": "media-eject",
"kw": "media eject"
},
"media-fast-forward-outline": {
"name": "media-fast-forward-outline",
"kw": "media fast forward outline"
},
"media-fast-forward": {
"name": "media-fast-forward",
"kw": "media fast forward"
},
"media-pause-outline": {
"name": "media-pause-outline",
"kw": "media pause outline"
},
"media-pause": {
"name": "media-pause",
"kw": "media pause"
},
"media-play-outline": {
"name": "media-play-outline",
"kw": "media play outline"
},
"media-play-reverse-outline": {
"name": "media-play-reverse-outline",
"kw": "media play reverse outline"
},
"media-play-reverse": {
"name": "media-play-reverse",
"kw": "media play reverse"
},
"media-play": {
"name": "media-play",
"kw": "media play"
},
"media-record-outline": {
"name": "media-record-outline",
"kw": "media record outline"
},
"media-record": {
"name": "media-record",
"kw": "media record"
},
"media-rewind-outline": {
"name": "media-rewind-outline",
"kw": "media rewind outline"
},
"media-rewind": {
"name": "media-rewind",
"kw": "media rewind"
},
"media-stop-outline": {
"name": "media-stop-outline",
"kw": "media stop outline"
},
"media-stop": {
"name": "media-stop",
"kw": "media stop"
},
"message-typing": {
"name": "message-typing",
"kw": "msg,chat message typing"
},
"message": {
"name": "message",
"kw": "msg,chat message"
},
"messages": {
"name": "messages",
"kw": "msg,chat messages"
},
"microphone-outline": {
"name": "microphone-outline",
"kw": "record microphone outline"
},
"microphone": {
"name": "microphone",
"kw": "record microphone"
},
"minus-outline": {
"name": "minus-outline",
"kw": "subtract minus outline"
},
"minus": {
"name": "minus",
"kw": "subtract minus"
},
"mortar-board": {
"name": "mortar-board",
"kw": "mortar board"
},
"news": {
"name": "news",
"kw": "article news"
},
"notes-outline": {
"name": "notes-outline",
"kw": "music notes outline"
},
"notes": {
"name": "notes",
"kw": "music notes"
},
"pen": {
"name": "pen",
"kw": "write,compose pen"
},
"pencil": {
"name": "pencil",
"kw": "write,compose pencil"
},
"phone-outline": {
"name": "phone-outline",
"kw": "call,ring phone outline"
},
"phone": {
"name": "phone",
"kw": "call,ring phone"
},
"pi-outline": {
"name": "pi-outline",
"kw": "pi outline"
},
"pi": {
"name": "pi",
"kw": "pi"
},
"pin-outline": {
"name": "pin-outline",
"kw": "pin outline"
},
"pin": {
"name": "pin",
"kw": "pin"
},
"pipette": {
"name": "pipette",
"kw": "picker pipette"
},
"plane-outline": {
"name": "plane-outline",
"kw": "flight plane outline"
},
"plane": {
"name": "plane",
"kw": "flight plane"
},
"plug": {
"name": "plug",
"kw": "connect plug"
},
"plus-outline": {
"name": "plus-outline",
"kw": "add plus outline"
},
"plus": {
"name": "plus",
"kw": "add plus"
},
"point-of-interest-outline": {
"name": "point-of-interest-outline",
"kw": "command point of interest outline"
},
"point-of-interest": {
"name": "point-of-interest",
"kw": "command point of interest"
},
"power-outline": {
"name": "power-outline",
"kw": "on,off power outline"
},
"power": {
"name": "power",
"kw": "on,off power"
},
"printer": {
"name": "printer",
"kw": "fax printer"
},
"puzzle-outline": {
"name": "puzzle-outline",
"kw": "jigsaw puzzle outline"
},
"puzzle": {
"name": "puzzle",
"kw": "jigsaw puzzle"
},
"radar-outline": {
"name": "radar-outline",
"kw": "position radar outline"
},
"radar": {
"name": "radar",
"kw": "position radar"
},
"refresh-outline": {
"name": "refresh-outline",
"kw": "arrow refresh outline"
},
"refresh": {
"name": "refresh",
"kw": "arrow refresh"
},
"rss-outline": {
"name": "rss-outline",
"kw": "feed rss outline"
},
"rss": {
"name": "rss",
"kw": "feed rss"
},
"scissors-outline": {
"name": "scissors-outline",
"kw": "cut scissors outline"
},
"scissors": {
"name": "scissors",
"kw": "cut scissors"
},
"shopping-bag": {
"name": "shopping-bag",
"kw": "shopping bag"
},
"shopping-cart": {
"name": "shopping-cart",
"kw": "shopping cart"
},
"social-at-circular": {
"name": "social-at-circular",
"kw": "@,mail social at circular"
},
"social-dribbble-circular": {
"name": "social-dribbble-circular",
"kw": "social dribbble circular"
},
"social-dribbble": {
"name": "social-dribbble",
"kw": "social dribbble"
},
"social-facebook-circular": {
"name": "social-facebook-circular",
"kw": "social facebook circular"
},
"social-facebook": {
"name": "social-facebook",
"kw": "social facebook"
},
"social-flickr-circular": {
"name": "social-flickr-circular",
"kw": "social flickr circular"
},
"social-flickr": {
"name": "social-flickr",
"kw": "social flickr"
},
"social-github-circular": {
"name": "social-github-circular",
"kw": "social github circular"
},
"social-github": {
"name": "social-github",
"kw": "social github"
},
"social-google-plus-circular": {
"name": "social-google-plus-circular",
"kw": "social google plus circular"
},
"social-google-plus": {
"name": "social-google-plus",
"kw": "social google plus"
},
"social-instagram-circular": {
"name": "social-instagram-circular",
"kw": "social instagram circular"
},
"social-instagram": {
"name": "social-instagram",
"kw": "social instagram"
},
"social-last-fm-circular": {
"name": "social-last-fm-circular",
"kw": "social last fm circular"
},
"social-last-fm": {
"name": "social-last-fm",
"kw": "social last fm"
},
"social-linkedin-circular": {
"name": "social-linkedin-circular",
"kw": "social linkedin circular"
},
"social-linkedin": {
"name": "social-linkedin",
"kw": "social linkedin"
},
"social-pinterest-circular": {
"name": "social-pinterest-circular",
"kw": "social pinterest circular"
},
"social-pinterest": {
"name": "social-pinterest",
"kw": "social pinterest"
},
"social-skype-outline": {
"name": "social-skype-outline",
"kw": "social skype outline"
},
"social-skype": {
"name": "social-skype",
"kw": "social skype"
},
"social-tumbler-circular": {
"name": "social-tumbler-circular",
"kw": "social tumbler circular"
},
"social-tumbler": {
"name": "social-tumbler",
"kw": "social tumbler"
},
"social-twitter-circular": {
"name": "social-twitter-circular",
"kw": "social twitter circular"
},
"social-twitter": {
"name": "social-twitter",
"kw": "social twitter"
},
"social-vimeo-circular": {
"name": "social-vimeo-circular",
"kw": "social vimeo circular"
},
"social-vimeo": {
"name": "social-vimeo",
"kw": "social vimeo"
},
"social-youtube-circular": {
"name": "social-youtube-circular",
"kw": "social youtube circular"
},
"social-youtube": {
"name": "social-youtube",
"kw": "social youtube"
},
"sort-alphabetically-outline": {
"name": "sort-alphabetically-outline",
"kw": "a-z sort alphabetically outline"
},
"sort-alphabetically": {
"name": "sort-alphabetically",
"kw": "a-z sort alphabetically"
},
"sort-numerically-outline": {
"name": "sort-numerically-outline",
"kw": "123 sort numerically outline"
},
"sort-numerically": {
"name": "sort-numerically",
"kw": "123 sort numerically"
},
"spanner-outline": {
"name": "spanner-outline",
"kw": "settings spanner outline"
},
"spanner": {
"name": "spanner",
"kw": "settings spanner"
},
"spiral": {
"name": "spiral",
"kw": "curve spiral"
},
"star-full-outline": {
"name": "star-full-outline",
"kw": "like,favourite,love,rate star full
outline"
},
"star-half-outline": {
"name": "star-half-outline",
"kw": "like,favourite,love,rate star half
outline"
},
"star-half": {
"name": "star-half",
"kw": "like,favourite,love,rate star half"
},
"star-outline": {
"name": "star-outline",
"kw": "like,favourite,love,rate star outline"
},
"star": {
"name": "star",
"kw": "like,favourite,love,rate star"
},
"starburst-outline": {
"name": "starburst-outline",
"kw": "banner,ribbon starburst outline"
},
"starburst": {
"name": "starburst",
"kw": "banner,ribbon starburst"
},
"stopwatch": {
"name": "stopwatch",
"kw": "time stopwatch"
},
"support": {
"name": "support",
"kw": "life,ring support"
},
"tabs-outline": {
"name": "tabs-outline",
"kw": "expand,merge tabs outline"
},
"tag": {
"name": "tag",
"kw": "tag"
},
"tags": {
"name": "tags",
"kw": "tags"
},
"th-large-outline": {
"name": "th-large-outline",
"kw": "square,grid th large outline"
},
"th-large": {
"name": "th-large",
"kw": "square,grid th large"
},
"th-list-outline": {
"name": "th-list-outline",
"kw": "thumbnail th list outline"
},
"th-list": {
"name": "th-list",
"kw": "thumbnail th list"
},
"th-menu-outline": {
"name": "th-menu-outline",
"kw": "th menu outline"
},
"th-menu": {
"name": "th-menu",
"kw": "th menu"
},
"th-small-outline": {
"name": "th-small-outline",
"kw": "square,grid th small outline"
},
"th-small": {
"name": "th-small",
"kw": "square,grid th small"
},
"thermometer": {
"name": "thermometer",
"kw": "temperature thermometer"
},
"thumbs-down": {
"name": "thumbs-down",
"kw": "dislike thumbs down"
},
"thumbs-ok": {
"name": "thumbs-ok",
"kw": "average thumbs ok"
},
"thumbs-up": {
"name": "thumbs-up",
"kw": "like thumbs up"
},
"tick-outline": {
"name": "tick-outline",
"kw": "ok,done,correct tick outline"
},
"tick": {
"name": "tick",
"kw": "ok,done,correct tick"
},
"ticket": {
"name": "ticket",
"kw": "pass ticket"
},
"time": {
"name": "time",
"kw": "watch,clock time"
},
"times-outline": {
"name": "times-outline",
"kw": "cross,x times outline"
},
"times": {
"name": "times",
"kw": "cross,x times"
},
"trash": {
"name": "trash",
"kw": "garbage,rubbish,delete trash"
},
"tree": {
"name": "tree",
"kw": "tree"
},
"upload-outline": {
"name": "upload-outline",
"kw": "upload outline"
},
"upload": {
"name": "upload",
"kw": "upload"
},
"user-add-outline": {
"name": "user-add-outline",
"kw": "person user add outline"
},
"user-add": {
"name": "user-add",
"kw": "person user add"
},
"user-delete-outline": {
"name": "user-delete-outline",
"kw": "person user delete outline"
},
"user-delete": {
"name": "user-delete",
"kw": "person user delete"
},
"user-outline": {
"name": "user-outline",
"kw": "person user outline"
},
"user": {
"name": "user",
"kw": "person user"
},
"vendor-android": {
"name": "vendor-android",
"kw": "vendor android"
},
"vendor-apple": {
"name": "vendor-apple",
"kw": "vendor apple"
},
"vendor-microsoft": {
"name": "vendor-microsoft",
"kw": "vendor microsoft"
},
"video-outline": {
"name": "video-outline",
"kw": "video outline"
},
"video": {
"name": "video",
"kw": "video"
},
"volume-down": {
"name": "volume-down",
"kw": "sound volume down"
},
"volume-mute": {
"name": "volume-mute",
"kw": "sound volume mute"
},
"volume-up": {
"name": "volume-up",
"kw": "sound volume up"
},
"volume": {
"name": "volume",
"kw": "sound volume"
},
"warning-outline": {
"name": "warning-outline",
"kw": "error,alert warning outline"
},
"warning": {
"name": "warning",
"kw": "error,alert warning"
},
"watch": {
"name": "watch",
"kw": "time watch"
},
"waves-outline": {
"name": "waves-outline",
"kw": "waves outline"
},
"waves": {
"name": "waves",
"kw": "waves"
},
"weather-cloudy": {
"name": "weather-cloudy",
"kw": "weather cloudy"
},
"weather-downpour": {
"name": "weather-downpour",
"kw": "weather downpour"
},
"weather-night": {
"name": "weather-night",
"kw": "weather night"
},
"weather-partly-sunny": {
"name": "weather-partly-sunny",
"kw": "weather partly sunny"
},
"weather-shower": {
"name": "weather-shower",
"kw": "weather shower"
},
"weather-snow": {
"name": "weather-snow",
"kw": "weather snow"
},
"weather-stormy": {
"name": "weather-stormy",
"kw": "weather stormy"
},
"weather-sunny": {
"name": "weather-sunny",
"kw": "weather sunny"
},
"weather-windy-cloudy": {
"name": "weather-windy-cloudy",
"kw": "weather windy cloudy"
},
"weather-windy": {
"name": "weather-windy",
"kw": "weather windy"
},
"wi-fi-outline": {
"name": "wi-fi-outline",
"kw": "internet,connection wi fi outline"
},
"wi-fi": {
"name": "wi-fi",
"kw": "internet,connection wi fi"
},
"wine": {
"name": "wine",
"kw": "drink,beverage wine"
},
"world-outline": {
"name": "world-outline",
"kw": "world outline"
},
"world": {
"name": "world",
"kw": "world"
},
"zoom-in-outline": {
"name": "zoom-in-outline",
"kw": "zoom in outline"
},
"zoom-in": {
"name": "zoom-in",
"kw": "zoom in"
},
"zoom-out-outline": {
"name": "zoom-out-outline",
"kw": "zoom out outline"
},
"zoom-out": {
"name": "zoom-out",
"kw": "zoom out"
},
"zoom-outline": {
"name": "zoom-outline",
"kw": "zoom outline"
},
"zoom": {
"name": "zoom",
"kw": "zoom"
}
}
}PK��[�;�85Application/Frontend/Assets/icons/typicons/readme.txtnu�[���http://www.typicons.com/
var result = {},
glyph = $('#preview > div');
for(var i = 0; i < glyph.length; i++){
var k = glyph.eq(i).data('name').trim();
result[k] = {"name": k, "kw":
glyph.eq(i).data('match').trim()};
}
console.log(JSON.stringify(result));PK��[so'��?Application/Frontend/Assets/js/particle/presets/blackwidow.jsonnu�[���{
"particles": {
"number": {
"value": 80,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#000000"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 3,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "#000000",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 6,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": false,
"mode": "bubble"
},
"onclick": {
"enable": true,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 400,
"size": 40,
"duration": 2,
"opacity": 8,
"speed": 3
},
"repulse": {
"distance": 200,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[�Yr��:Application/Frontend/Assets/js/particle/presets/bloom.jsonnu�[���{
"particles": {
"number": {
"value": 80,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 3,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "#ffffff",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 6,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "bubble"
},
"onclick": {
"enable": false,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 200,
"size": 40,
"duration": 2,
"opacity": 0.6171786813490223,
"speed": 3
},
"repulse": {
"distance": 200,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[��@Application/Frontend/Assets/js/particle/presets/fading-dots.jsonnu�[���{
"particles": {
"number": {
"value": 160,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 1,
"random": true,
"anim": {
"enable": true,
"speed": 1,
"opacity_min": 0,
"sync": false
}
},
"size": {
"value": 3,
"random": true,
"anim": {
"enable": false,
"speed": 4,
"size_min": 0.3,
"sync": false
}
},
"line_linked": {
"enable": false,
"distance": 150,
"color": "#ffffff",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 1,
"direction": "none",
"random": true,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 600
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "bubble"
},
"onclick": {
"enable": true,
"mode": "repulse"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 250,
"size": 0,
"duration": 2,
"opacity": 0,
"speed": 3
},
"repulse": {
"distance": 400,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[e�]\��9Application/Frontend/Assets/js/particle/presets/link.jsonnu�[���{
"particles": {
"number": {
"value": 28,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 3,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "#ffffff",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 2,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "grab"
},
"onclick": {
"enable": true,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 200,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 400,
"size": 40,
"duration": 2,
"opacity": 8,
"speed": 3
},
"repulse": {
"distance": 200,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[�Zu��>Application/Frontend/Assets/js/particle/presets/pirouette.jsonnu�[���{
"particles": {
"number": {
"value": 80,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 3,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "#ffffff",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 3,
"direction": "left",
"random": true,
"straight": true,
"out_mode": "bounce",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": false,
"mode": "repulse"
},
"onclick": {
"enable": true,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 400,
"size": 40,
"duration": 2,
"opacity": 8,
"speed": 3
},
"repulse": {
"distance": 200,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[f�[��=Application/Frontend/Assets/js/particle/presets/polygons.jsonnu�[���{
"particles": {
"number": {
"value": 4,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#1b1e34"
},
"shape": {
"type": "polygon",
"stroke": {
"width": 0,
"color": "#000"
},
"polygon": {
"nb_sides": 6
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.3,
"random": true,
"anim": {
"enable": false,
"speed": 0.1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 120,
"random": false,
"anim": {
"enable": true,
"speed": 20,
"size_min": 50.349650349650354,
"sync": false
}
},
"line_linked": {
"enable": false,
"distance": 200,
"color": "#ffffff",
"opacity": 1,
"width": 2
},
"move": {
"enable": true,
"speed": 4,
"direction": "none",
"random": false,
"straight": false,
"out_mode": "bounce",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": false,
"mode": "grab"
},
"onclick": {
"enable": false,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 400,
"size": 40,
"duration": 2,
"opacity": 8,
"speed": 3
},
"repulse": {
"distance": 200,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[��Q��>Application/Frontend/Assets/js/particle/presets/sparkling.jsonnu�[���{
"particles": {
"number": {
"value": 40,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 25,
"random": true,
"anim": {
"enable": true,
"speed": 14.385614385614385,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": false,
"distance": 150,
"color": "#ffffff",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 10,
"direction": "top",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "repulse"
},
"onclick": {
"enable": false,
"mode": "bubble"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 400,
"size": 40,
"duration": 2,
"opacity": 8,
"speed": 3
},
"repulse": {
"distance": 200,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[�"ƭ�8Application/Frontend/Assets/js/particle/presets/web.jsonnu�[���{
"particles": {
"number": {
"value": 80,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 3
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": false,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 0,
"random": false,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": true,
"distance": 150,
"color": "#ffffff",
"opacity": 0.6,
"width": 1
},
"move": {
"enable": true,
"speed": 3,
"direction": "none",
"random": true,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 1200
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": false,
"mode": "grab"
},
"onclick": {
"enable": true,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 400,
"size": 40,
"duration": 2,
"opacity": 8,
"speed": 3
},
"repulse": {
"distance": 200,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[�'��;Application/Frontend/Assets/js/particle/presets/zodiac.jsonnu�[���{
"particles": {
"number": {
"value": 160,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#ffffff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 1,
"random": true,
"anim": {
"enable": true,
"speed": 1,
"opacity_min": 0,
"sync": false
}
},
"size": {
"value": 3,
"random": true,
"anim": {
"enable": false,
"speed": 4,
"size_min": 0.3,
"sync": false
}
},
"line_linked": {
"enable": false,
"distance": 150,
"color": "#ffffff",
"opacity": 0.4,
"width": 1
},
"move": {
"enable": true,
"speed": 2,
"direction": "top-right",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 600,
"rotateY": 600
}
}
},
"interactivity": {
"detect_on": "canvas",
"events": {
"onhover": {
"enable": true,
"mode": "grab"
},
"onclick": {
"enable": false,
"mode": "push"
},
"resize": true
},
"modes": {
"grab": {
"distance": 83.91608391608392,
"line_linked": {
"opacity": 1
}
},
"bubble": {
"distance": 250,
"size": 0,
"duration": 2,
"opacity": 0,
"speed": 3
},
"repulse": {
"distance": 39.96003996003996,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}PK��[���2Application/Frontend/Assets/shapedivider/Arrow.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
50" preserveAspectRatio="none">
<path fill='#000000' duration="2"
d="M960,16 L1920,0 L1920,0 L1920,-2 L0,-2 L0,0 L0,0z"
to-d="M960,50 L990,16 L1920,16 L1920,-2 L0,-2 L0,16
L930,16z"></path>
</svg>PK��[
�k��8Application/Frontend/Assets/shapedivider/bicolor/Fan.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
100" preserveAspectRatio="none">
<path fill='#000010'
d="M1040,-2 L1040,0 L1920,0 L1920,-2z"
to-d="M1040,-2 L1040,2 L1920,100 L1920,-2z"
ease="easeOutCubic" duration="1"
delay="0.2"></path>
<path fill='#000000'
d="M0,0 L1040,0 L1920,0 L1920,-2 L0,-2z"
to-d="M0,94 L1040,2 L1920,38 L1920,-2 L0,-2z"
ease="easeOutCubic"
duration="1"></path>
</svg>
PK��[+�آ�@Application/Frontend/Assets/shapedivider/bicolor/MaskedWaves.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
316" preserveAspectRatio="none" data-yoyo="1">
<path fill="#000010" duration="12"
ease="easeInOutSine"
d="M1920,120 C1920,120,1777,175,1571,175
C1365,175,1221,41,946,41 C661,41,549,226,285,226 C137,226,0,120,0,120 L0,-2
L1920,-2 L1920,120Z"
to-d="M1920,184 C1920,184,1776,75,1570,75
C1364,75,1200,231,925,231 C640,231,544,120,280,120 C132,120,0,196,0,196
L0,-2 L1920,-2 L1920,184Z"
opacity="0.5"></path>
<path fill="#000010" duration="20"
delay="0.5" ease="easeInOutSine"
d="M1920,5 C1808,5,1540,82,1367,82 C1193,82,1058,14,951,14
C844,14,779,55,701,55 C622,55,594,19,470,19 C319,19,253,109,157,109
C61,109,0,38,0,38 L0,-2 L1920,-2 L1920,5Z"
to-d="M1920,131 C1920,131,1839,56,1557,56
C1275,56,1315,131,1097,131 C879,131,801,26,723,26 C644,26,562,95,438,95
C287,95,298,34,202,34 C106,34,0,95,0,95 L0,-2 L1920,-2 L1920,131Z"
opacity="0.5"></path>
<path fill="#000010" duration="8"
delay="1" ease="easeInOutSine"
d="M1920,74 C1920,74,1812,106,1682,106
C1552,106,1426,27,1355,27 C1283,27,1159,126,1006,126 C853,126,748,27,670,27
C591,27,556,129,412,129 C268,129,224,40,128,40 C32,40,0,101,0,101 L0,-2
L1920,-2 L1920,74Z"
to-d="M1920,74 C1920,74,1836,29,1706,29
C1576,29,1442,50,1371,50 C1299,50,1239,16,1086,16 C896,16,918,101,771,101
C639,101,574,31,412,29 C311,27,272,110,149,110 C26,110,0,101,0,101 L0,-2
L1920,-2 L1920,74Z"
opacity="0.5"></path>
<path fill="#000000"
d="M1920,0 L1920,110 C1560,-30,360,-30,0,110 L0,-4
L1920,-4Z"
to-d="M1920,0 L1920,110 C1560,-30,360,-30,0,110 L0,-4
L1920,-4Z"
></path>
</svg>
PK��[��A�==;Application/Frontend/Assets/shapedivider/bicolor/Ribbon.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
110" preserveAspectRatio="none">
<path fill="#000010" duration="1"
delay="0.2"
d="M1920,0 L1920,10 C960,10,960,10,960,10 C920,10,0,10,0,10
L0,-2 L1920,-2Z"
to-d="M1920,0 L1920,110 C1920,110,1000,40,960,40
C920,40,0,110,0,110 L0,-2 L1920,-2Z"
></path>
<path fill="#000000" duration="1"
d="M1920,0 L1920,10 C960,10,960,10,960,10 C0,10,0,10,0,10
L0,-2 L1920,-2Z"
to-d="M1920,0 L1920,80 C1920,80,1000,10,960,10
C920,10,0,80,0,80 L0,-2 L1920,-2Z"
></path>
</svg>
PK��[�|���:Application/Frontend/Assets/shapedivider/bicolor/Waves.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
120" preserveAspectRatio="none" data-yoyo="1">
<path fill="#000000" duration="4"
ease="easeInOutSine"
d="M1920,5 C1808,5,1699,109,1526,109
C1365,109,1271,13,1080,13 C925,13,840.152,62,716,62 C565,62,521,13,377,13
C229,13,132,103,0,103 L0,-2 L1920,-2 L1920,5Z"
to-d="M1920,106 C1753.761,106,1659.906,10,1512,10
C1352,10,1263,75,1080,75 C934,75,837,4,669,4 C478,4,424,120,196,120
C88,120,0,93,0,93 L0,-2 L1920,-2 L1920,106Z"></path>
<path fill="#000010" duration="3.8"
delay="0.5" ease="easeInOutSine"
d="M1920,106 C1753.761,106,1659.906,10,1512,10
C1352,10,1263,75,1080,75 C934,75,837,4,669,4 C478,4,424,120,196,120
C88,120,0,93,0,93 L0,-2 L1920,-2 L1920,106Z"
to-d="M1920,5 C1808,5,1699,109,1526,109
C1365,109,1271,13,1080,13 C925,13,840.152,62,716,62 C565,62,521,13,377,13
C229,13,132,103,0,103 L0,-2 L1920,-2 L1920,5Z"></path>
</svg>PK��[�z�..3Application/Frontend/Assets/shapedivider/Curve1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
121" preserveAspectRatio="none">
<path fill='#000000' ease="easeOutQuad"
duration="1"
d="M0,-2 L1920,-2 L1920,20 C1050,154,869,154,0,13
L0,-2Z"
to-d="M0,-2 L1920,-2 L1920,115 C1596,121,869,147,0,13
L0,-2Z"></path>
</svg>PK��[�*�UU3Application/Frontend/Assets/shapedivider/Curve2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
121" preserveAspectRatio="none">
<path fill='#000000' ease="easeOutQuad"
duration="1"
d="M1920,0 L1920,17 C1560,0,975,0,960,0 C945,0,360,0,0,17
L0,-2 L1920,-2Z"
to-d="M1920,0 L1920,17 C1560,60,975,60,960,60
C945,60,360,60,0,17 L0,-2 L1920,-2Z"></path>
</svg>
PK��[����663Application/Frontend/Assets/shapedivider/Curve3.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
150" preserveAspectRatio="none">
<path fill='#000000' ease="easeOutQuad"
duration="1"
d="M1920,0 L1920,150 C1700,-10,220,-10,0,150 L0,-2
L1920,-2Z"
to-d="M1920,0 L1920,100 C1560,-10,360,-10,0,100 L0,-2
L1920,-2Z"></path>
</svg>
PK��[��CBB3Application/Frontend/Assets/shapedivider/Curve4.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
144" preserveAspectRatio="none" data-yoyo="1">
<path fill='#000000' ease="easeInOutSine"
duration="5"
d="M0,75 C500,-70,1400,212,1920,120 L1920,-2 L0,-2
L0,105Z"
to-d="M0,120 C710,212,1020,-70,1920,70 L1920,-2 L0,-2
L0,105Z"></path>
</svg>
PK��[&_?F223Application/Frontend/Assets/shapedivider/Curves.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
438" preserveAspectRatio="none">
<path fill="#000000" opacity="0.5"
duration="6" delay="0.3"
d="M0,0 C0,0,110,0,580,0 C1164,0,1554,0,1820,0
C1885,0,1920,0,1920,0 L1920,-4 L0,-4 L0,0Z"
to-d="M0,155 C0,155,110,15,580,15 C1164,15,1554,438,1820,438
C1885,438,1920,400,1920,400 L1920,-4 L0,-4 L0,155Z"></path>
<path fill="#000000" duration="3"
d="M0,-4 L720,-4 L720,0 C551,0,70,0,0,0 L0,-4Z"
to-d="M0,-4 L720,-4 L720,0 C551,8,70,-26,0,400
L0,-4Z"></path>
</svg>PK��[��x���1Application/Frontend/Assets/shapedivider/Fan1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
100" preserveAspectRatio="none">
<path fill='#000000' opacity="0.2"
d="M1040,0 L1920,0 L1920,0z"
to-d="M1040,2 L1920,100 L1920,2z"
ease="easeOutCubic" duration="1"
delay="0.2"></path>
<path fill='#000000'
d="M0,0 L1040,0 L1920,0 L1920,-2 L0,-2z"
to-d="M0,94 L1040,2 L1920,38 L1920,-2 L0,-2z"
ease="easeOutCubic"
duration="1"></path>
</svg>
PK��[��M6��1Application/Frontend/Assets/shapedivider/Fan2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
155" preserveAspectRatio="none">
<path fill="#000000" opacity="0.3"
duration="2" delay="0.1" d="M1920,0 L1920,0
L960,130 L0,0 L0,0z"
to-d="M1920,0 L1920,155 L960,130 L0,155
L0,0z"></path>
<path fill="#000000" opacity="0.3"
duration="2" delay="0.2" d="M1920,0 L1920,0
L960,130 L0,0 L0,0z"
to-d="M1920,0 L1920,105 L960,130 L0,105
L0,0z"></path>
<path fill="#000000" opacity="0.3"
duration="2" delay="0.3" d="M1920,0 L1920,0
L960,130 L0,0 L0,0z"
to-d="M1920,0 L1920,55 L960,130 L0,55
L0,0z"></path>
<path fill="#000000" d="M1920,-2 L1920,5 L960,130
L0,5 L0,-2z" to-d="M1920,-2 L1920,5 L960,130 L0,5
L0,-2z"></path>
</svg>
PK��[�{61Application/Frontend/Assets/shapedivider/Fan3.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
170" preserveAspectRatio="none">
<path fill="#000000" opacity="0.3"
duration="2" delay="0.1"
d="M1920,0 L1920,0 L960,10 L0,0 L0,0z"
to-d="M1920,0 L1920,170 L960,10 L0,170
L0,0z"></path>
<path fill="#000000" opacity="0.3"
duration="2" delay="0.2"
d="M1920,0 L1920,0 L960,10 L0,0 L0,0z"
to-d="M1920,0 L1920,130 L960,10 L0,130
L0,0z"></path>
<path fill="#000000" opacity="0.3"
duration="2" delay="0.3"
d="M1920,0 L1920,0 L960,10 L0,0 L0,0z"
to-d="M1920,0 L1920,90 L960,10 L0,90
L0,0z"></path>
<path fill="#000000" duration="2"
delay="0.4"
d="M1920,-2 L1920,10 L960,10 L0,10 L0,-2z"
to-d="M1920,-2 L1920,50 L960,10 L0,50
L0,-2z"></path>
</svg>
PK��[L�x��2Application/Frontend/Assets/shapedivider/Hills.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1350
120" preserveAspectRatio="none" data-yoyo="1">
<path fill="#000000" opacity="0.3"
duration="8" ease="easeInOutSine"
d="M1010.1,64 C1137.4,64,1350,0,1350,0 H0
C0,0,839.3,64,1010.1,64z"
to-d="M287,64 C414.3,64,1350,0,1350,0 H0
C0,0,116.2,64,287,64z"/>
<path fill="#000000" opacity="0.3"
duration="12" ease="easeInOutSine"
d="M1076.6,118.4 C1247.4,118.4,1350,0.2,1350,0.2 H0
C0,0.2,908.6,118.4,1076.6,118.4z"
to-d="M307.1,118.4 C477.8,118.4,1350,0.2,1350,0.2 H0
C0,0.2,139.5,118.4,307.1,118.4z"/>
<path fill="#000000" opacity="0.3"
duration="9" ease="easeInOutSine"
d="M317.9,76 C467,76,1350,0.2,1350,0.2 H0
C0,0.2,1,76,317.9,76z"
to-d="M954,76 C1103,76,1350,0.2,1350,0.2 H0
C0,0.2,637,76,954,76Z"/>
<path fill="#000000" opacity="0.3"
duration="11" ease="easeInOutSine"
d="M474,67 C642,67,1350,0.2,1350,0.2 H0
C0,0.2,168.1,67,474,67Z"
to-d="M904,67 C1072,67,1350,0.2,1350,0.2 H0
C0,0.2,598.2,67,904,67Z"/>
<path fill="#000000" opacity="0.3"
duration="14" ease="easeInOutSine"
d="M327,38 C478.3,38,1350,0.1,1350,0.1 H0
C0,0.1,0,38,327,38z"
to-d="M327,38 C478.3,38,1350,0.1,1350,0.1 H0
C0,0.1,0,38,327,38z"/>
<path fill="#000000" duration="8"
ease="easeInOutSine"
d="M1175,103 C1344,103,1350,0.1,1350,0.1 V-2 H0 V0.2
C0,0.2,1007,103,1175,103Z"
to-d="M688,102.9 C857,102.9,1350,0,1350,0 V-2 H0 V2
C0,0,520,102.9,688,102.9z"/>
</svg>PK��[��5Application/Frontend/Assets/shapedivider/Incline1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
100" preserveAspectRatio="none">
<path fill='#000000' ease="easeOutQuad"
duration="2"
d="M0,100 L1410,26.5 L1920,0 L1920,-2 L0,-2z"
to-d="M0,100 L1410,7 L1920,73 L1920,-2
L0,-2z"></path>
</svg>
PK��[o��S!!5Application/Frontend/Assets/shapedivider/Incline2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
130" preserveAspectRatio="none">
<path fill='#000000' ease="easeOutQuad"
duration="2"
d="M0,0 L512,13 L1543,0 L1920,0 L1920,-2 L0,-2z"
to-d="M0,100 L512,13 L1543,130 L1920,90 L1920,-2
L0,-2z"></path>
</svg>
PK��[�w�%5Application/Frontend/Assets/shapedivider/Incline3.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
100" preserveAspectRatio="none">
<path fill='#000000' ease="easeOutQuad"
duration="2"
d="M1920,-2 L1920,0 L960,40 L0,0 L0,-2z"
to-d="M1920,-2 L1920,100 L960,10 L0,100
L0,-2z"></path>
</svg>
PK��[Ƞk9Application/Frontend/Assets/shapedivider/InverseArrow.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
50" preserveAspectRatio="none">
<path fill='#000000' duration="2"
d="M960,6 L960,6 L1920,6 L1920,-2 L0,-2 L0,6 L960,6z"
to-d="M960,6 L990,40 L1920,40 L1920,-2 L0,-2 L0,40
L930,40z"></path>
</svg>
PK��[���}��6Application/Frontend/Assets/shapedivider/Rectangle.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
120" preserveAspectRatio="none">
<path fill='#000000' duration="1"
d="M0,20 L1920,20 L1920,-2 L0,-2z"
to-d="M0,120 L1920,120 L1920,-2
L0,-2z"></path>
</svg>
PK��[z�9K��3Application/Frontend/Assets/shapedivider/Slopes.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
120" preserveAspectRatio="none">
<path fill="#000000" opacity="0.25"
d="M1920,0,0,0,0,0z" to-d="M1920,0,0,120,0,0z"
duration="1"
delay="0"></path>
<path fill="#000000" opacity="0.5"
d="M1920,0,0,0,0,0z" to-d="M1920,0,0,80,0,0z"
duration="1"
delay="0.2"></path>
<path fill="#000000"
d="M1920,-2,1920,0,0,0,0,-2z"
to-d="M1920,-2,1920,0,0,40,0,-2z" duration="1"
delay="0.4"></path>
</svg>
PK��[�L�w2Application/Frontend/Assets/shapedivider/Tilt1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
130" preserveAspectRatio="none">
<path fill='#000000' duration="1"
ease="easeInOutQuint"
d="M0,20 L0,-2 L1920,-2 L1920,20z"
to-d="M0,130 L0,-2 L1920,-2 L1920,20z"></path>
</svg>
PK��[b�����2Application/Frontend/Assets/shapedivider/Tilt2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
120" preserveAspectRatio="none">
<path fill='#000000' duration="2"
d="M0,-2 L0,0 L0,0 L0,-2z"
to-d="M1560,-2 L1560,0 L0,120 L0,-2z"></path>
</svg>
PK��[�|j
6Application/Frontend/Assets/shapedivider/Triangle1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
120" preserveAspectRatio="none">
<path fill='#000000' ease="easeOutQuad"
duration="1"
d="M1920,-2 L1920,0 L960,10 L0,0 L0,-2z"
to-d="M1920,-2 L1920,0 L960,120 L0,0
L0,-2z"></path>
</svg>
PK��[2�U�6Application/Frontend/Assets/shapedivider/Triangle2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
120" preserveAspectRatio="none">
<path fill='#000000' ease="easeOutQuad"
duration="1"
d="M1920,-2 L1920,0 L1920,93 L0,0 L0,-2z"
to-d="M1920,-2 L1920,0 L1450,70 L0,0
L0,-2z"></path>
</svg>
PK��[�1~&&2Application/Frontend/Assets/shapedivider/Wave1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
191" preserveAspectRatio="none" data-yoyo="1">
<path fill='#000000'
d="M1920,102 C1808,102,1811,137,1645,180
C1479,223,1380.24253,91,1190,91 C1057,91,946,191,796,191
C584.512514,191,547,144,380,83 C217,17,132,144,0,144 L0,-2 L1920,-2
L1920,102Z"
to-d="M1920,22 C1808,22,1663,120,1490,120
C1328,120,1271,22,1080,22 C924,22,840,144,716,144 C565,144,524,23,377,22
C230,22,132,180,0,180 L0,-2 L1920,-2 L1920,22Z"
ease="easeInOutSine"
duration="5"></path>
</svg>
PK��[�.��2Application/Frontend/Assets/shapedivider/Wave2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
400" preserveAspectRatio="none">
<path fill='#000000'
d="M0,400 C63,48,385,39,553,20 C768,-5,1100,0,1424,0
C1664,0,1920,0,1920,0 L1920,-4 L0,-4 L0,400Z"
to-d="M0,400 C63,48,361,20,553,20 C922,20,1100,226,1424,226
C1664,226,1920,108,1920,108 L1920,-4 L0,-4 L0,400Z"
ease="easeInOutSine"
duration="5"></path>
</svg>
PK��[j^D��2Application/Frontend/Assets/shapedivider/Waves.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920
120" preserveAspectRatio="none" data-yoyo="1">
<path fill="#000000" duration="4"
ease="easeInOutSine"
d="M1920,5 C1808,5,1699,109,1526,109
C1365,109,1271,13,1080,13 C925,13,840.152,62,716,62 C565,62,521,13,377,13
C229,13,132,103,0,103 L0,0 L1920,0 L1920,5Z"
to-d="M1920,106 C1753.761,106,1659.906,10,1512,10
C1352,10,1263,75,1080,75 C934,75,837,4,669,4 C478,4,424,120,196,120
C88,120,0,93,0,93 L0,0 L1920,0 L1920,106Z"></path>
<path fill="#000000" opacity="0.2"
duration="3.8" delay="0.5"
ease="easeInOutSine"
d="M1920,106 C1753.761,106,1659.906,10,1512,10
C1352,10,1263,75,1080,75 C934,75,837,4,669,4 C478,4,424,120,196,120
C88,120,0,93,0,93 L0,-2 L1920,-2 L1920,106Z"
to-d="M1920,5 C1808,5,1699,109,1526,109
C1365,109,1271,13,1080,13 C925,13,840.152,62,716,62 C565,62,521,13,377,13
C229,13,132,103,0,103 L0,-2 L1920,-2 L1920,5Z"></path>
</svg>PK��[_�_
,Generator/Common/Facebook/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:42339F8952E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:42339F8852E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>hH��7IDATx�� třǿ�K��}K�|ȶ|��`���À!�6�.�#�]H�G
@H`�,�$Gذ�!1,��Oɇ�˺G3�c��zF��G3�هG��{mɚ���}��W՚�UK��Y>JbS��M�
D+��@4���eH��p ���@8�p
��p��@8����p @8��@8��p
���@8�
�8������A�5VR�GX0|"��li�˴��n!M��^�5vyP+��hk���Z��,m̖G@
�:�w�i#
����8��:���5)���R)��5�!XXD>?�N7���|�P�b�P��Ȭ��Ҕ�4*Hw�g�G���C�%��Py��M�w�>��yg[��'�d}��~�|�8���gSY~j���a˘�.B�E���L�]��
$�r������s�3���M[ca8���wg���4�$�&�8)���j����|�ގ&.�
�U#,����3f��o�O�)�ߪ4��:,IqXh��yT��2���~�T+��5�$�~��
�.�C>v�;vm��C�$���q��3�
��eR�c�$����<Ɯp��I��eҷ���}�8L�2A��ǘ��cQY�
h4�=���٧*��.��ݨ�m�Ҥsg�.���-T�ң�5">�n�j*cS8�t���w�Ч;��$G�8���k
��y�A(�pD8�L���B�D�����F�ȣAfU�Z���o�0-=�Q�B�aC��$�G��q�#,_Ӳa^�f�E�p|�gb��"`��cL��G6>�e����3M#C� �*��6H�P����[T�p�#45��RlJ��$^�a����v���=>�o���
-�u4(���p�
;9M �r�O_
@Gz�U�����{�|jn�`cP1.���9,������Y��|�˒S녤���O;�;#Ŧ�y�>;��{���4��IӬl6�rR��wI���O�|N?N[�Z�$�%y��S���T�X0 �k�F8����A�]6�
2���0���N��jó."2_�;^�
�J�[>�f�����n�t����vҞ�n�&n�iݠI/�
�0�EgNϥ�ҩ��iBn�ʇ!J�x�[{����6�t���V���5H�$���
��t�"u?�
�t��É5w{iӡZ������B�z(��ȅEt���t��etZY��vʯ�Guk/�uw+����>�{d�
yN�X���45�.�_<=���sሴ�:��w�u*_��-��v~�A�F����\�ۙ�y\�t
�ur���6mг�iw�:轝M�nO�6��kq��#Qq�~�ڹ4��Mt,�L���u�ۻ��E�x"'��"�i�Ӧ�r�k�� 9�ꈤ���=x��r��i�41'5�o��p���]���XL,Q1!ʐaq[v����N���b��;��p���_)=�i
��-�)�����=�t-�]^:���Zz豵���'�Lw4b]��y�Ŝ�u��I��~zp�^��-j�PQ�w�tZ�p�Ĉ���/��O����?����~��>�m�岵��<.�4r�T�91�:�0]�r籣������[���
�H�.Ѻ�r���R�ϥ,~�r/�pgcq��.��*Ҩ�G6~�ͭw>O�51�83��8k2-��I�~յ�
�A�[��..��/�nl��[z�J�Ӹ�~��oQQfJB�L�O��~.�����ޣ��[���u?�^�_�䒼X�K��Uγ��H�����l���D[������c��R�b"���������#x6"�����s��u���dI�(�
��ȱ����#Hyi)�J�b..��1#*�
li<�td�1X����B�~~¢ɽ�ӕJt��װ��,��l�+����6z��y �F$2�k撍E#�&��*"z�ҙ �F�D��SJ�吘_#�:��-)����Q��K�ڣ��'�s4��C��h�e]�G5��t��ַ��8;���R���9��,�h���L�Ei�N�~���T�סj��l�0���0�z6��*�u���+�K��%�b-��9�Nj�x�:��\��b�%?7Uw��w4W����&#�
��[���H�G<�*ߠ�����{9;?(��s�=�G�ֶ��p�p��Qy�f����e��Ɨ������1�yC���i�Q���NiE�{�R~�Y5�曲9�t)736젇W�/�Mv������-gL2�T�ϠE����ʖ�4�˦���j�2�s��̘!�sY8�lkR�Ӎ���L��イ�[�7�8�pUj��N�@o|^����Bd�{�:����jx�X���<4���N(͢S�<V�KL��s���%3Lͯmj����y�%W�P��L�m���_�*�,}~�����Wا>:H������%䱪ݿ������r{�a�1*LO��+
UO�2ٟBz�7��C�%s̝��T�[^�J{�z(�|�C*�ӮQY^����
���t�q����e�m�}5]q*�w�����7�Og��pGs̲�i�7���W�>6��ۢ���.�o�G&&�������g�h~�ѽo��>L�Y��\5��Z0��r����6�8.���f}�h�駛������@��8/gM�S>� &��S�<V~Y7�n�Ϲ�p:Mf�ʈ�N=��^euZ�l�����i-���n����ǫRI���@e@f��|�U�#}V�̍�E�O2��j��Ub+�'3vx��i{��\�A�C�a3x��|�]Tr7�M�,�|km'�oݓ6`&����
Gy�+�e�Ă<���`k�B[扯e��:zif��c��U~&S\��r�s��Mw�YI�<�30���xm'[|�P�C�2��+�1�$�4��||�^_Xϳ�7��l<�Vǯ�S1t�Jz��yׯs��u�JM�yl
?ۃ�I�MnG��#�d�%��DZ�
��Et1�P�i(�����6u����=�ā�����%duȸXf,V=6$���4�̼�oF�;-t��>0�j8�\���hG�GDA�����sP}��$��������ubaUI��ʂ����LY���I_�l ���9ĺ��7��6�d E��
��Y��_T��m,2���U�9�sUv�1�C��rq�prc�[��&�k?�����"��pDf�Hzf� ����b���N;G+J<��:m�7��k��g��Rff~&����Tw������ZhQ��MW���o;s2�z�uP?��n�eI�B8�;�c���'�\�G��ȣ)<6�1|jԮ���%JsX���Ʊt�Y-�pZ���"�5��gj� i�_?�2��y��JQA|f�/��}mI�?kG0�V)Q�lV?�t��q��
@�������f5��%�rx�P�C,�'����$Ɗh�����q�7w�G�����Ⱘ�0XI>T����3��SJ��;��2��o�x��E(7l��{��d��D���j�d��d
�����-�I�5c��MK��0��^�jS�����N-�a�YL�@Yv/�#���.����*�<.���F��4K�{��~��24����1���c3�*O�@=���`��G��y����
�tIE1�;kh�8n^:���mS��-I�%fUj*���f<����yk��8��
�~ra9=t��a�(����=tH��jS{g��NM�����#�~r{�������lP�b[�\���2^�šڵE������x�F��e���J1���@,hɯ��8�Ǚ�����:�11#O�m�
�y.��G�Y
��H$o'����oO�Q��ќ8!��<��Y�[�>�$�oH#p��R��T�PW��$*���7bŪY�.Ai;�wO�J����,�}J��_�M��)/I�iE�j�TU����^����u2j���M~F2�����q�Q�8-��Rmq��'t}�_�'�륓����|s+���O���#nj7 ����k�W{�}�T�o=c�����P����!{�L(ͤ��Pʫ�g^^*��RS+`oS�.�Ø�N��>�l�?n�1=�G�'Ӭ���Y��HNo����&�}��͍zo��P�Ag����Dn�n�sM�S����b\}Vu�y($�o*����,ץ�����ڦz���J����5*�<����<����u���`(-�aS��H��2�ͽ�,W?��7P��;f��=���Ӝ�t�&AO�8�W�a�&�N�Rx2������KL���+�����N������{��bă���m<l���{��\�^ר֪p9�7�P��$J�?0|(Gh���{{iiE!����Q�{�yS�����'��P=�6��ݣ�{�2�Y�F��4�
�N��:3��\a���L�.)W
p���
K�
��L8�\�/~^k�O������,ؔ4�f#�h�7�P�X��^���;��xI��L_m�6%q<B/��ZөB��,ח]����J��i}u{8P${]���^z��}�{?c���^���Vs�CIfIj%H$�{���6�~,/�A�γ�h���D���w�w�o?:8��x3:���/�h=[(�������e�c
[�ͪ�7O}t��ڠQ�������V�(Nۢ֫Ȃ�c�VF��J��6k�u���
�Z��b��j�J�pP2�92��#�Y�bQ��}m�V�4���~��^�'9�*7An��6����,�xh���U�'^�"�z��v��F���j�����7�'���y����ܧ�G��w�"z|�~}�@���[7���5�L�m��,�;%��#���������r�8<ȕ�lq�P'��j��McW�t���+6ъ��m/��Z�X��+��D�mq���֕�o#G��2My͊������h!H����h���+�7��>�l�D����V�G��WK�ʳׯ���?lV�]��v����px�w�C�ۛ�Oly��#�T+&g)'m2`�N�����7�:��Pm
,�IH��u�
7�6Z��E����{#��kw���Js�C"+�-<�~����Ek����,l��77�+sZ�h4��J�ΖF�̟�0A�j���?UDLvolnP����P�mh�W������7Y���e�|��OB����Dn�>�
���^�C�U�I���bk]���IYU��\���w#�By����e
{U��6+U_�k�Z�s��u�7wQem'���Z���V��o"&NV)[��/#yO�[��{艵U�yXBuA^�P��JW�s�5J���#u��ǫ�^��ׅ�^�_q����"��C��|�kw6��;����U�Nn~��9�jS�!/]"}���c���^�+��D5)ש�PK��Lq�ɵ�b�p����S�>h麜���jJDU��+d��ܦ��.�rRa�C�D�p;��r��(�!��=�74x����v���
���鉈��ŋ!q�&�$�l%�����YL�cZ�թ�?h*W�l�V��"�2�"�&�wYI��{��ٯ�����N/շ黧i�90#�.N�|�8����)�{U8#��vK��Z�e��M��>9,��?$m�i��)�ي@�-�)�ʎc�[{���<s�oe�.U��
Dґ�ʢ�<�2Q�>h`�ʬݞ�^=(�8�`I^ᠣ/�1��bVā��:���ĜU���SCmh��a��^�~��ї������0��������W#���!��6h�P�"�
�}E��
��]j���Z�z�T
��W��Xޫs
h.�:P�G�O�<�4�ͣR�v�8���}�7������T��c�:o���͆�ٽ��o$�oP��J�D ���OQ����*�,���FL%"G��N@8����p
@8��@8��p ��p��@8� ��p
�@8��@8��p ���@8�p
��p��@8����p @8��@8��p
���@8� ��p
�@8�����Q�b$@��?�/(@��q� 0ӳ��\�zIEND�B`�PK��[��3�==*Generator/Common/Flickr/Assets/dynamic.pngnu�[����PNG
IHDR�e��IDATx���yp������쑋$"1r�Z�X��m�`�bq,V��L���V��֩V{L�#U�3��X:��ֶޢ�LQ�?��ᔐkw�}�����|�݄��ןdwy��}��<���Yg]�橒�z@n[%�:g]��D4����`S��3���p0#�3���p0#�3���p0#�3���p0#�3���p0#�3���p0#�3���p0#�3���p0#�3���p0#�3���p0#�3���p0#�3���p0����7;��Z��ӊMi�mJ���W{J�})�W8j�u�!��7)��*��}�����Sғ"Y�ݑ�Fr�pܱ��Z:�h��w$��\
�t}uGHM;�_J�I�-��v{�|��)����Y�\�UE:��Ot�_���}�K��|uSZ��)���{͗�t�Ĩj����K���u�r�n�91���^�&���Mi����9�ѕa;�58��:R��}��X�7���i=�,xcj5������Q�ܿtI�o&�sظ��Տ���WwT[�9�2�3A��р����p{J��]�l�(��v膣�7?|hѕ�Ry<�%G�6xzs�[��)?:>�B
9<�"�(R��Ȣ#�9)���#����%=_��U]Z�mk�8�z@k"��+Ŏ���C�A��h��ÇN��+�vI�y�F��E9]����|
�a��A8�hn�i}Ӆ�t��&�1TIY
�4���ŇW}a�D��T�>�/�,j+���8�"v���ko�����T���rJ�RM��i=��W��ݼ_��mri)�ʫ�+�P��G���[�M�5��=��u��"-I^Z��T��c�w���i�$��Kb����i=�<�X��)O�{nL�vo�r��������6���HC�M�ԓ":olaν��^Y��ۓR<*ͻ�D�Þ��6�r�:��.��/�u��#���lTͼ_���ͣ�6l���_��#ʼ(�#�K�����o�4
�Z�n[�=�WVe��h|���Wy��{)��&���s�y���若�f����� �=��ny6�sωu��$���]/7�߾k�z(CnZ�ʅk����ШHe֕��y�Ci�p�/®U�����iKJ?^ء�k�#�5Mݛi��O��Ɯ��]���O�I_!I:�%�-�,����e$�IK�{��ں���<uX~k�в����1������$�Tk��7��@8�ܚ��f/��B��ԅ8�VK��=�����#3�?U7=
�ҕM|���~�b�p�2�,�yȼ۶���G��eHe�^R7<���%:�����nk�c�8��#=���k��o�|q")s�&�f�x��X����'�Ni��?̹
]zJ�Frܽr����r[�����'g�*�r��#����=�_��Eq3C�+�{��̐��k~�ᖬ��j��#
�tt�y1�6���rG�H&{Z}m���ɕ)-����J^mI����6j]=vM����Ֆɏ:r�'�t�]�^@8$}��/�^'=_�侟�HS��5#�}1�a���?-��.��Uf�M=)��x:n@�b���r�3�>��ty�� %GVj�5��z�p%GWɏd���V���?!Y�1�31�����qOf/!�ɣ"z`F�O�3Gu?�ށQ�����O�ۧƻ=�-H�c�t�_��tU\�*.�&����ps-J�Ҽ��e�L|�[p���opu��y�&���:cT���$�q���c�Kkq\��=�%��-��Pđ�Q��$}���=���=�"�vG�=��L콗�_Ih[���e���De������RjXEa��Gjj>�QS��ln�QP4$i�I�1�p/���챏5�����V��y=��/�I��H�Xӂ�Q��;~/O^�}VT
��_�M;f/��L�ÅY��Q��B��ݹ�W{/N�<lD�^<��y����*��V��5<�Q���8wў��o�Y�v�:�>�7���jB��)�.Q�]1H"E���w�~viO����L�z�]y_����g��(B�F���i���S�{��mO���/˦f_y�g}�p�����{可Hi��
��"`^nHg���>ޚ�+�!�(B%Qi֙�O�fRs���[�Y�r���Ǟ�z1��� �=����W3��]��q�H�zQ\���/�7ֽ�:�H�� C]�U:�Y�~��������mSz�}w_��no�u��)��|^ʽ�g�H���iq��i�'vS���:����0�մS�z���yo$t�7�I_��t�h\$�L���L�6%����Oq�қG��}j<���H)oä5�.;5ܶ�n����e�-��}j\�����n$��^��w��3���_�&���Q��@8�s�T�6g(�g>���L�{8`y�:3�Eחj��z�����W�_n�y���e�hriT��!j3o��c9m!���j��*N�fQw� -ѡ�
#�J�ʝ�xԔ�yy�m��R�u+&s5qX\3N���wSZ��S°,�,&]pbD����V_�h���[�c}�쳢zxyR-!Nc�$|=�<���OWŔ�Ɉ�9���q�`Bb�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`F8�f���`�J����_��J�^Ҷ����I�N���}��IEND�B`�PK��[�l'2Generator/Common/ImagesInFolder/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:7F8E335252E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:7F8E335152E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�K8IDATx����oW��gg��w}O�M
��PR�:i(�� h�Eռ���*��x���@ ������V��Д���mꐔ�.���3�l�f<;��^����V���3�s~�3�4��'�("�د�@m3��)�����X������1�U����@p
8��@p 8 8�����@p���@p 8@p
8���fE8�H��Ȁ�دёA�T�W�\��������W�X�{�pt�Ǣ��jb|���q���K<�.
U��ra����._*��566,r�� GWI�c����v%1<�/�HxKdh(ř��SYVHS��"��H&{vt�BZ�4:�qM����t��ח�t��]U��.~�;8./��s?����s�^]s;���OI<u���ڷo������w�J��W��e�,Pqt���y��[�����$g�N07�dW#���C���9Y/��CO8$O�G9��P���c~9p��ӡ�t�mT`~ayS�
��BA�
�g���I$�+�v��CC#��(�#�er���vaqLέ�hrp��Ap��J�V~/C+�c���ّk��K���G�לﵢ�`����d29�uk��q��b�U {xrx胪�=2|�2t�Fj�n`�Ҧ�
edr|I"�v���g�ڑ�s+�~��RX��D�����osF���ڡ�%�1/���������M?���~�{
żlܜ���%��ToXbCa��,�(
8:I"Z2��λy�P��ݓ�W�Jh�,Ytr�§%ړ��
Yy��^;'�dF�;l���T*�(
8:O1�P ����5ѻ'/gN��wn�F���c��X}��v`�����$� G�
�MsPq���8��VEghԉ5
b�}Ϋ���ے���$b�+dmՒ��|��#W*�NLK&g�[�e%�W�Z�����R���*
�Ʈ2�.='�����I$b՝b�nS�]>q`Y2-��Pq��p%I5=lȯߐ��P���+�ɸ�.gE���T��L����T��������(��*��Wʀ�h�ఇ+V�6�¿��R�X�9�Bv����|!&�BJ� �����Z���M���/.�lQ2kI�Û��m�M�}!9}"$�1��1��
3T1����y-{�aY��[�����/J>�
��;�����bVnZ�����FAz�9y��l�q�^N6m'�-��JV����XnVb�;����{*�d�����_ِ�}t>���SvS"V��t����%ِ%K�)~�]z�(�xIVBry&,��?���̜廌Y������l�y�:�u��}�ndB2=k9m :n�mmC��V��>
l�{�j}A�[��Fp�eNh��פT,45ǡ�d�a;<,�҈Ji�$_��|������bN��X^���]=Y_�k����}(�t��r�7"rfj�)�ކ���e·c?y*S�>?�ڬ���D�kG����'o��F7uvs�t��g�[>�S�F��~�\Ͱ3�[k�z�މ8ǘ�h�!�c�}2yh�}ez��{��z��Oz��u@o� ?3�kzu��k���㕫��|�\���\>T��=1q:dP�p����6>���o��W����8�˚�ȴA_��'/��VW����V_��'�Y'<�:�.�W9x?��f�}r2'�v�h8m�ݳKZ�{+��������/����@;���ޯc\x7����]��7��~��)�k�
�a�+����U��[;�7ȴm�&��ߊc���������J�5�u���n��z���B��J���*U�vD=���:����2z�4A�t�R1���
Μ��݇���?S���G�Rk�α����N|=��8��im�{ך��+���tF3D��q��E�=�[��r��C�1��
8�kx�̐�[�kӡ���I�0�LhN�Kκf�eᡕ�_��R��F���n�$%8ژ����6��?C���Sk��ξ)H���0%=�?�Ы���:�}����Q/��a&gM����?ܩu��f�C�R�7m����y�C���!8����{��
ʓz�;�Vg^�s�AoajG�5�!P��w�3vxh�Ъc��i�N��� �`-�2i%�^jފ�/0��fϝ#�9=vv\����I;Sfk�t����_h�Wy�aG��04$t&���6L��of�&��W�s(#媪���T~w|��rU�}<L���J��&E
���=���^|�<��W<wbn�j���Mf�_�;��yw��<0]C,}��[M���0�m�=�2��v�J̳&μ���ZϯPq��p�ά'�����8L���-���^���U��B5C��]UMաW�f��Fh;�����23q�n��_բÍ��TU8�ۺ�e�:Mh�Mb�`�j�=$�t�i5�4���Ln�uz�� R}v�t=���)��j&7�#w�7�
��~O���s�^ U�UCD+��ʨ<WS�[a��qB���A���uի>L�ku}�����I���Ot��z?vdVfo��c�_eoG�A��xo�6��9��}��2[iK��ne}ʹ5��_k�F�\khՊσ�-�ow�z�h�6�Y����ʶޭ�wC`L�
8����;b��4�ckR1>M��h�FΒx,,�\����V�8�@p��ק�(�6��["�8[�lC��_r�]��o��������@p
8@p 8������@p 8��@p 8
8���������@p 8@p
8������@p 8��@p 8
8���������@p 8@p
8����-�����Xh�5���S0��C�IEND�B`�PK��[3�p
(Generator/Common/Json/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c140 79.160451, 2017/05/06-01:08:21 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:C912DF56DA5911E88E17B2AA8C57419D"
xmpMM:InstanceID="xmp.iid:C912DF55DA5911E88E17B2AA8C57419D"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:158ee8d2-0620-4ab7-ab96-2110a8a80c4d"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�3$u(IDATx���t�g��'.��l܂���A uu�ju[���r�X�.���miO�{�:��nYk�Z�r�*�t��-nER��Q�D"����;�̄V&�9�=��;��䝼�<��dfeUJ-�.
�g�.S���Ch�HxT#4TPD5���"8�������)�}'/�e��gxC�q
8�T����U}jjQ�����@p
8��X�w�C��2��Pj@p���J����8��@SV�oѷ ݣT�N�z����j��c*5-S����@����!�U`�����S)[����|U+���k�D=��U�
��ٸ�:x<G���bZ��U����M�
�U@ʖt}�3����ڷ��?��/����oKݓ��.ڠ�9cw�E}u��+cu�ض���oӷRN3>7h��
�+(V�o=��'%uW��~�f�������Yu6'�^v�:4�tm�6�;M�x}��u��p�~G[ҾU7~�ɉ&8�O,�
tSE�ǵP5�WS�m�b[�����k9Y�о�t&�y}�)&Bo�w�����]ߜ�D�T�? �h_�x�!a�A��WǙ�]��f�M�;�/:;&��:����r� շ['��hѤ����@�:Y7+�V�uP�uR��ױ��v��}=�v-�z����k%�N�nլ���q�**.�d�T��j��'Tǘ&�~~a��`�~5��������]/���n�Ű�m�
��{�Տm�{��Mp��H��/�V���5kT��K>ܥ6�:����ۤ1��ܼUvG:I]�3Z�wdp� Tٹ�zuϑsn�\��P�͐�]�p5{�@���Z�l�}!�w���a*���� ��.�߸A��@=hm]�+�M!8��Ҭ�1g����m��qX4�VY
a��,5���A�-au�&tݼyK��;�/����疭7i�uHsEFn,�V�Q��Y.�,�6���ۖM�ٷ}���>����r�j����~�Ȉ�z}mj�~\&s�."��� ]��0/N��T1��o�GMd��/�?�ooӢ��֡yY�":�Z���)���=z��������?;����`�n�v��\bB{��C�w�;�P;��Ap���$�wf?��l�F���Q���u�������3?���Q��a�U�M��cM�U�չ�Z2w�Z����|W��k�v�����w=zXCB�Db��V������n̛Cp��IL��c�ȼ
Y<���5wd���/�
��2}@p 8T2�8����8h��GT�_"�2�5P�@p
8<d����bj@p��Wѡ�>K3}g���Dj@�Bc�螜�
4�� 88
4@p���B
B�0�?����XFhP�
j� �_�讦�"4�q��
8P)
�G���/�!4�q��w�Yٷ9
�q
8�����J�||�ʏ�VKRz,���ɪ~�:Nۿ�vX�?rN��}ڴ�O\��h���T5�hP��[.��'s�'��<�c/OIP���.q���/�ᵥ��z����s�Zm�_>YO-~�)~<'NYԋ�P��|��t�^Ą����I������k��U���}[
H=3�����3���cTpP oM�
�!Ly����(�U#�m���Y�Tnh8ф��:�<�Z��q�'2qto�8��h�S��&e��i#5���]��Ilߓao����TӐZ��f����� ��|��Z5o�ǚ�RDx�zrhw�dj�����ץOA�!�Y.�! �T��'t߈c��ui�0�~)'���}�H��ڴ�[�z�o�ޭ���
#8��(R�pDZ�R�:vƾ4��r;3g<=H�����M�E���u�i��L:*�!2�O��f�7sƷ9N�O�����������
�<�H|ĩ"��
C��?"A"��r/_5�w�q���t�۲�W"M({�X�E�m�#8P�dN���h�8��CT�d��:D�틊��ʆ���9k�����-+�|+y��k�y*;<>\���x���D.Xv��GH�9���{�|�J�����[^�?�ڌ�����yUñ~JF>�{چa3���gHSA�KY�j$e�$x~�Yjۺ�W�Mj86��l�M��_b���Yǿ�/�]�m�}0�F=$�d>�Q\l3�^���3~҉���ݗq�t�8\*�e��8�,���ۤ.�m2��#�F:6��>$�Fys�0�4���҉9k�ZS,��f�\
� X�;����X��s�d%��W�0m�����I�7]�
ґ*�2v��i/��i�|f��5!�+�8p���`��m8�v���u05R�e���Dj��ۚ.�<��4�\�����qއ+���Ʉ0P�=�����0~��r�U����HmE�
���#�`� `ސ�ϨT���H~o~fP�@9��0�Kk=b�Xs�~��]��.T �P�47d��q��8��GCjґ*�������l���rQ�2��os�T@p
8 8���������@p 8@p
8������@p���@p 8
8���������@p
8�����@p���@p 8@p 8�N�
�
�1UV8��m]��_���ާ(�F�IEND�B`�PK��[/�Ԗ!�!-Generator/Common/Pinterest/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:63FD59CB52E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:63FD59CA52E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�ZF��IDATx�� �\U������ZzIo�$�����,�Tu�O@�qT�Q>�dpfT�f�%�&�����}�t:����Ws��&���~B��K��I�[�^�{���9��s�]m.���A!����5!
BH)�a�hBJ����R*B��B�
�P8!B��B(�
!��A�pB(�B� �P8!B��B� �
!��A9�X���o1�f��f��j��b6�$6�I��L�L�P�L��t���t:-~��H�ĖT? ��|XMKM��aG����
��j��u�,5���)"�xBm�hL��P8�I��逫�)î���~ A)Ǘ[u��X�h�HLY)��AN�B���W��c{��U#�*��`$�@(�\B�
'(Ң�˕h�J�.R�
bm��D�ߏt8=�T�
��OL�x=���1�֊JC��-w�-$d0B<A�p�
)�rC�ذ���@`��6mQ����AȨ?P�
q�Y��� �p͚ς3�?�������=W&
��@:M�dG.���p���Tl�n+���6:�˞G��MH
r��a��P��l���R
C�*JF�����H#&���t��oGp5�B�E���Pu�yE�C�3��+!r���.�?#���:~��_Y����V���d�cX��)�Hd��%��N[��k?� ��֪�.����D�T
9F�� ��S:�mZ���9�l�t"B,����LG�4t9,�wAF2ܾF4��|��a���}���5C(�tM�X�UWZ�c�}�зc��,4�ʌJ�)W��R�2��¾��]و��&��_�+\0̋K�
2�X[U�w_|6�͗p�٧��Pf��� �P0�L��:�|$0�8��?�wѼ����0z���' ��r��v����y��:
�B4��(sNDF�G�
�d���Y���w��������m-�mk
�4��A�P4
u��3^��H���u6A���^�8nj�"��f�o�o~�J�X��Y�NW��_dʸ�i�t�h�?z�_~T��t�Nzb���L*�M3����6)�]@�-=t[hq�#C�h��T_����h�l�09�'�hY��,�sLB�u;V�1�7��i�nK�afB�
�.�Ʉ������(V�_���T�I;α�#�}x������-���Q���p�hW%L���LJǚ��c`�x�h�����b
�N#�LA�Ő�E�&�32��L�<jo�gR*��#X�x ���rڨag��7c��^��w2�uK.����=qL1��.��T*�BJ���'� f�9�fU�1�fS�c��6V�`�x��u&͂@��Փpޮwa�fn9�vWo�Nr;��v�ƶoF�ꡘƑ�j�Q�d�qDTF��j
�洠��SQ6u2��VV�"\�ͦFE�l���݈�ڃ��.B����dV�V���LY�z���_���^��}�1���A
1��&��F�o�k��n�8����EC�f�uD�ʲpW7����Q�ыQq�"C��G�D��U�y�O�z��G�abw����x[����;�k�Ŵ{�)g���nV�p�|�фq���Ӈ�u���q8�u%��hJ4b�5 ����pӍ���S���^�U��~�0����v�����.�\5
�D�t?�[��%��#G��.��d�
���r�o/��-���&�O�p<�d�T��0&b�n���~�DO/v�����}��p9'
'�e��EX.�p���y�[s�K�����
��Ǒ�q�w�(�p[�J
�%MW_���?p�P�q}��X�|�'?�oȭҌ���dRp�'��kv�|G��
����
Vo�IYY�(���q�lC��Ѱ�/E#��I��3L����Ϥ��x�/?�����Q3tM�b3BdR�Rz��
����Ү�~U˃_8�r
'x����10�>��#��?��O_n�2z��;�xg7ҁ��Q�F��l���)S��a�^zo}\�Z�W��h,YM��}B��)��Ӟ|(kw���(�8��IX���P�F�D��1��43��AD3~��蓨��
C�������z=�{Z��J��vh��+�3����\��
��^����P���$�
.ص�)MY�d^+�S8�4eN�G�G9�௰�K���&kj�<2�$��.̽��x���=���[�V�K��c���m���{����r\F���_j/�ӿ�]x�i�s�l���-p9�T,c�Od�`lf��5�z�ެ}�^�,;H(c�V=rN�k�[лu�� Ƭ
����M��8��G����܇
�߀���U^��2����r�&�"���j����aڝ�������X1{:�&,v��ϕ�
�b+�y=;a9lқ\�����q�U9���i��8����'D�i�1L����é��M^Z��O9U��G�,��VR���䰫Ij���>���-�YS0�[���>M76�b�U"��F�o~�}���,9��1f��Gv��G�P�~M6cCK+Q̼�.�]�W�Ú��
��':}���+
)�Y��G����ݣ)w}U��46DkVq��sv�
ǘ�ܛ���`��P5r�b�\Y;�����Ik;^�p���(���1dt]��&��X����;������;����eY����Z�!�u0Gt �cL2ry�������Ve���/�&~�x��[�
q=$\�lѐ#1r]�H��DR�⩃���b~5�k�s�,6ᴸ��ֿ"��h��7]������q�̓�އ��Wd��b>���
�qG��n�f�+W+!0ꦤ�~�̕h��mZ�:w��[Ϊ=L4L�91��/�s��Q�-���=��7�M�C$�O�3by����S��ۊ{eN�}�Jas�
�+�
����&g��n�D�[ج���[C1���h~T-9���Mґ(v��](�chm�C/�
�T���z� ���o�p�5�{6�.]��܁�V��k��Hʨ�4\Z:�=��A�Q���Ս�I������ol��
ǘ�ܧeh�65�ih�Q��T]~q�&ƻD���ҝ�n��g�Cݧ?���rQ���aaC�D7�le���Q��|��<���R�t��"LV�Ew�"508��
LJ[8F,�
k=��6��H�.�T�,*ئ�'ԨDƜ ��0��E�G�/]}�E����
\2YMv�W��Օ(?e�����M�E�#�qsN��P8���4#;�
�0.��e
pNmλ?������I�f�$�p;0��oz�Y��np�E�vD��B&�(ڴl�da��no5�3�+��5�p��/~�Mkk�#�b,�m�͍���y��G,��%�a!���kU�����UR��.�{"��m���q�{%ݲX{o
�X���Dw���Y3(:�
����e�X;���^q�����V���4��
��7�<3��W�s�\���1ֿ�C��Sd������܅;_��7I&a�Pٔf��ݽ_XƥCSç�Q���T�p�C\ў�1�!����L������g�ڪ
���It!�}��>���Q�+h��.��R-�L<����Aޗ��'p��6���v�z�*��"Ƀ0[]%GJ�TeY�Y�Z�z�J�^x
�g��W���iY\�X��^_���4a;��A��ƆA������J�� X�>�>K1�GPO�)����]>�6�f�����ZP�O��
���]l�M��76:��J�dfF 븤�����qE�����|2]�P8�4��)�qUCi�;��T�h������.�W�$��?[V���ڲ}t7e�z��6�f�*�s����yb�6�"[v I*3|\��X<�8�1.z�@���O�����6i=�л����Y_��!�f�a�t����>��t�a��2DSE��mٶQ�ZyIߙ�=��л
�c�r�eS�a��"����� =��C����r��G�
�"��wwS���P]�R�� �H�_��m7��Z!gq!J6c�bj����6K)c�d2;���PDŽ��6��`7�C�ε�{+�~�Y�c��O#�����eؕ���U�QA�`����)���cCC"�w�tT�_<�����n<�9+z*.Υ
���vy��,�c�ϓ
U6���y�lv5��l3����W?Y�P/Ia�\�kUᅦ��]�V�7ٍ#5�$ܢn�Z�I��K��}�_����e4�*'Õ55�ٜ�8S"��D�px�.ht�De�j���6l)�ńk�GT����Z�ŕ.�c2E��F�eB&}�+E�v��oJ��b7���%�����K0!��1]�t:;~�;g�r(2%<IͶ��w���`�Ж�C��Xɸ�w��P";�96-5U!L��[j�|1��CC�&�� }X���-c&)�c,2��kY�r�����!��t�ѽu-v|�;9���0_Y+�%���7�sG}�
;�҂�x������Y���=�ނ�ZkX��DL�5VT^Ԓ�{�z�*�1It�|9�Y!:��n4p���d��R�m�݉���=k��^���Qkʖ�9{�)��������X��
���y�~���~�EKs��H�g��r�:�,��]��*��H�œk?s��?R%�y���||x��7a�?�zhW��M*�K�YT�����|�t˗�*o�hG�J��8?�
��W�Bٜ�E���;?Do�;(�7_5.c箣���`R
�p|(����D�]q ��)��-�X�e�:�p��a�O��S�ž{~�xr�ˁ������A���1��AJtۀ�t,=�P3n� �h��Ե\��6o���bzk36�y�87�����t<��#6|��\�DyQ8�.�H$��X����5©��5aK���c"�]�wn�2M��RA�����Fh���hY��/���T&������h��
,x�q���Q��Gj0�ח��'�ʑ�Wa�D��R��R�M������H�:o���>��m2�y|]���֎����9`����e'��Dc�7�",x��c1�Z���f�}|=�5��^(���s���uB̚T���1a�t�?>��eWr��@�-���.��#;�cb#&��ueK�:F<���]ֻ�#:�sR|��s��E#����G�Ƥ�DCZa!5��F��P8�$�`�����`I#,��C�F�gvS�k����::�g�Z�:e.�6��p�2Zin��L�@���=v0���A$2A���V�xL��v�3~c4ӍDT���o�����m���ȵa��zֶ,A�s7�Φ�ųK6�C��T&�s�?�t�畁?Ⱥ�r�ށ�
�S�US����SQ4ԀA��sJS�6�L�����o��+�V٦F�wvaϿ܋U�O��{�v�.)������
��[0��?�c����q��Zl'��!}��U�N{�!���|a5�a�9KzzuF�Ō<O/�^����9b��a�S���?���P��K�w&�
�*qL��'������c^]���V
j�c��$ee�,�.U8��;~Gӄ��.9>pT�D2�L����~�nŖ��� �h%^.�<o�ܟ>�ƛn��$�c7^�q��
���nR�bPèvT�ZQ�2[�p��!$}H�!c��=4iM~�#��3�kE����͗r�w��#��&��AF"���b\E��љ��7�^�����
Jx��5f�%Pl~�˫En[��2��p��r��S:C|�K>�1T&����f;l"�?dvj4��͇��~�+l�8E�1R�@(�w������A8ښ7
���
�f��>��5C�ߜ�\V�YX!V�OlUb������uj�I�&�Q���=kmn���~�2]��E��<{�r�W5�t�oX<R¡p�2�萮�*
�cx����
k'�y<������@N}VB�
y����<��=�,,Z�\8i��!3(�S'�ڴ��wa�*��h��Ǚ?���<�W��^R
ҧ�ϳfJ��c��/AH�6���h�G��Nߟ�vCѰ
����I��w9m��]��"�R22o!�g���.�k`�y��U���������]x�Kׯ/�혭50ݧj����є�Ԡ���q��7��)n��Ehٸ��Y��C&��������/|s#z6���<oHa�hJ������G�r�YN���A�
�,�'Ι�hټ͟�,��.Ģ����h����V����|?j柋�-�P}��E��GMd#r��#�
jN+�x��{�`qyUU.=NQ�TvE�U�c�����GPf�(iѥ�ÄLJGP�&I1���u��9�)�=I����`�BU��A�'�
�]7��uhٶ ��^�8zUg}�Zzʟ��]�ܩ��2N�A�4e"�6�e���>�%������L���ՓS��P8�Q�_���mȇ���������ը_�1D�.�I��څ6mC��~ ��JX$�*�xR�Um&��=��_,x�ق%�l�Ξ>N^;�`�I��m�#5U>ج��ϊsc��Dϲg���A��M���4��z�?����\���O�@&�BR��KB�P��G��C�+�*)2�GxAOB8��$����S��`to���h��/��_�0�
���.hV��g��wBNt��G�m��)�IsP���@�_]�ʖ�N���A?R)�3(�a�YQ��i���v���ѳ���ڊ����hC
�C�6�gf�O��28��Q~�)��;U���e L���K����
J�
'��G��>�/�HǢ��܍讽��-�ٍ�@i�>�X���b�5{ݰ�V�lJ3�Ӛ��ɰ����*�W�a�������s�+K�x"�Ve�?anƇG?�HW@nN�nW\��t���Җ��s��A�
'��M�F��2�N�
������&b��
zʜ��E(�$罵H�JJFmV���X�f������Hq��WƓbK$X3��A>�?b�ZBJ����
!��A�pB(�
!�P8!B��B� �P8!��A�pB(�
!��A!B��B� �P8!B��B(�
!��A�pB(�B� �P8!B��B� �
!��A�pB(�
!�P8!B��B� �P8!B�pB(�
!��A�pB��B� �P8!B��B(�
!��A�pB(�B� �P8!B��B�
�P8!��A�pB(�
!��A!B��B� �P8!c@8:�5BJ�K
Ǎ��.!8
���&�V�-#l�IEND�B`�PK��[�C̈�'Generator/Common/Rss/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:5171B299C78611E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:5171B298C78611E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�0YJ�IDATx��yp噇�=3I#�F��>,˶l#�9��6�
`p v�L�nv+Y(*�Z*[ˑ�Z����
$�#�n68Y��`��S�mɺo똫{��[�dG�CI#��Tuɇ�{����;����� `��rA!�ۃ*�A��
*�A�U*�!$V(B�A�8!!��
�P�BqB(B�A�8!!�P���BqB(B�A!!��
�P���BqB�pl�W�W
��w"?���~x��p;��8�πx�������? �~;:|4�9�(���n�5^L��Lg�S{q]V+ft��Ջt!�hp�B�\.�7h���T��H�Φ���r�"Sd:����z!�[�Q���SlA,�t�ۊ�Z4�:�q}v4zq�'���\���e�~ I|����4e�o�/>���"�!�8H�S�փ�ŵ�)�yR?�Ҝfs�ߒ�wj�)��$"2����!����\�3��m�l�v��,rI�3:�'G��L���hV̾t��꽼i�LV�(�Y�S�����CEf;~��<�r��
�C��ϕ��M�S��s�̺�߿��I��S������K�MIi\@���t�>�)�Pd��o�g��@B�gD��X�/�6�>�A�Q?����д�^߽�sʃ�
が0���
TezV)Jy�qw�FS$^�>O\vU���S�-No8�A�6G�Nw���T�s����5skP��b���������Sd��K���Qw��i���Lk�f}ȵ�6ܒ�����X#+��w��F�%����|;v�[�u�?&�X�a� �m��������y�D��FW��+�U<{az��H_+��ݵb;��(��f�N'���g[BJ�*���}W�0P$���qW��\���x�A-�%�`Z>�~n��y�ڏ`4��R��D2�DT+�Ie��M�';�X((��˪b�I�"�ȕ���rhb3o~�z�6�7!t|��DN��������Jy&9��T�P$�M0�D�!+'� ��6ؾ�,�����&Ҟs"����er����PN@(��f���;Ҡ]���m�c�;���)"�Z�av����_�s���
�#���y���ξ���±j#�a4�1+Y�NNf[��D˄�6,�k��qN+Թ_�c�V��X/�m��R=i�ǝ��X@(2�ԏ~g�_C�Iq�ŏ±n?���a4��C6����M9c�*�+lUI�����ϱ���Ы��@�I��Sq�I�PR���@ɾV�,��g���MP��+���8v�8^��Su"
�j��ۆ}�,,|��u9��4����k���B̐A>��V?�̫���5`O�����4ԬJ�]��JFɄ�cIN3�Aq��T���10[F�H�Rd���y�g�@?�8�<TO����>���_�}�'R���Mǡxg y�������ud�MP��c���̔R���-��ʃ�}�����w���ۡW��!E���]Ps
y�LH��L����
���.s�1�{at��ч�AI�)$R,$��z3��{7���)R�O�?��
���B�a4WO�<�_ASP$,��6��ؐF_3��s0Z�6�u���Q�*�C����jу�'�����n��
���p��JF�8g�y��$;���uD�����h�C��@ʣK�|�5"��JDl�V�Tŕ!��C����Zu�.>^�����%{q�'�ñf+��Y$�{ʌ�q�0�rjA��Xd$��a��c��X�%#���$����=�Z��d()Y�a
�����G�ƃ�r�_zZ�Ñ#���<>���"�i��L�L(�x(�*��A"���R�*�}������}BD�B
�Ń�:�C�a>�J�,��!�#�KiKֵp�"��9n��d��8�����\ؖ>�������ߠ�S�D>�ʀ@d��̀23���������-�FkݸT�&�B,0��2�W\IrC��p<��իa���8n聗���)R�<w������:��˿��G�~HD��*�Aq�2��(�y�/�oؿ�}�lf�2��+D"���"�[�|@��;~
���%���N�8�`�B���1��e��c�>���X����̞.�m�"m��3��"r��s/��"�97���q��#Ƞ%u
f�Ⱥ��"���V��ai������è��Q�v������;�.�8���w�Rҽ�O����+ͺ�����(Ҏã8�
��o�:{�@wrmP�HC�P�c%�Kq��V�m�q�:�:�lB��O[���1&�ѱU���GȜ�C<�I)P�A+�ԅ�CI͍�p��������4F��MI/��P��G`�����ύ�#x�E+갥��Z���0�
&~��rat���Gl�bK/��^� ����������DY:BAq�4{�F
�uf6��7�h�^?�y�]���Zk\f(��Y`(b����#+�`��j�,��<|/U
����"��}�͕�W�Ӓ�x5������A--,�w��1�h�O�3ָg��"��������'ol��V��,
��^������U ��6�M�[�Z�Z�c�Pד2Ag���S�)3s��+^�ь��������5WS�+����g#GsW�)4��}N��H����M�0;u9��!t�}6.�"�P�<�z�C���,�|�g�@����������js�8�1���
)���S�X�!"���Z�64/�ٲq�`6�9�~���#�-j�j�%���u���#t���ɕ��=�NW�D�R��b��8����#>w�&���J�m�cf��V�V��0�k0���aFjV��~%��W"�,��';S
�7��L����
�⚚��kF�ժ�)
��\Ķzo|��Z-Dp
�އ����uam˞����±�ch���������X�S��m��4�?��P�g_ܤ����R���a�-�2��ds��Ѱ�q&
�A�sV�*c��!R��FHc!kw�8s��
���B��h����QCj�H#z����ʾ�����.\t����J�|�]#0�z�]��,(��jsF�s�۰��]����_q���dk�'�ï�_hJWX}���`}���Go>d.�."R���}��=M���9�A�+�GB�'[.ʣ�mZ�wD�q�CnO���>|����]����H��U�i_�3��
���{�����
#��s�~�29y�gA�7�[95�G���^�@�<ݚ�l!��Ɖl]��m^��Ȇ#�a��=�8љ�Bq����
���Ue�VQ�ފ�|����w��]2��0K��Y��rrd�~�Kx�T1�A�Q��]''�,v�D�ڴ�R�K'��B��`#�i9ȿGh�����+jq�(l[S(�W�͎=�py��x�k��C�^�#T��ͳQD�\�n�X6
��-�~r=�+|*4�
G�@P$d���
1��p���m���Ց�C�?�M�e�0���!�(��"��GD������2�T��$���F\��-\���
Q��gs2b�-�S3��WmA�2r/ΐOH�I��4���-��E�e�*"�0B�4��yA����${-�D���s��X����)�Σ��Ɩ�d!t�M���*��%�
��zD�2ſ
e�xx���)#C�}-�O�FT��׆F�*�!�~��ǚ�c��ϊ6��\e%qCo2B���\��ӿ&0WÒ��Xn�U��k���ir��p&Y酂�͡�uF�
���q�[$_�"+Z�P䚵��T�ܯ�:�e���)�w^Ûψ��u��
?�7�=&�Q�9>����������"8J���畋W�"�\V�A��W��:2V~��"���K���)#�p[���do9z|�Qd�� z��b��<4�LS�A������{�x v���A����L�?8��!����|�`�����2���E���D��OiPd"8&Җ|R��)<㷬�yJpG���LMB��~픬8�n��3�Sd�3bɖ�
��APW��g�x�O�Y�٦8l0�ș��x�Ͳ*\�՚���H���(as+�A �4�\����[r�=� �ΜO�U��S��
����ts�^D�ԛ"�����Ňuټ)�*�f[��K��M�!�.{p\���p�ك-u9��-�7��
S�r!7�ɪ\D��m(uw�0h.<��N]��@�Gl8�q&�>�h@�M"7I��s�@rR��M�'ɏ4{N[N-t�?>]5G�J)t������$g�8ȕ�\9�l<�&W��A�8!!��
�P���B(B�A�8!!��
���BqB(B�A�8!��
�P���BqB(B�A!!��
�P���BqB�A�8!!��
�P�BqB(B�A�8!!�P���BqB(B�A�8!��
�P���BqB(B�8!!��
�P���B(B�A�8!!��
���BqB(B�A�8!!�P���BqB(B�A!!��
�P���BqB�A�8!�!�z^BH4Hq|K��ׂub{�&G���UۇIEND�B`�PK��[�;>���(Generator/Common/Text/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:5171B29DC78611E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:5171B29CC78611E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>��4IDATx����s���Gv�
6��PBH�`.���5�2\Z�!�L��I�/t������-��oڤI�҄�r ��KH��$�`�ma��s���Jڕ%[�ό�+i��{~���Z8t�����[��
�Ć"�7
>hV�U@h�|�"8������@p���@p
8@p 8���������@p 8��@p 8
8��|y#�fٽk�,[V-�X
0�W��Ǧ�męG��cn�;��#����7ٓ@p�m�Ay�`�LL<��#G8\#�i��g
E��&�wJ._����*�dǎ��Bc256������Y�n��2�\���t_��־���#�,-]��g"<T8 �����v5{�\���k8�7<dVx�ۻE6�_�^�#�d���N�c�R�i-{�\ �l ��v��[�������� JC=��#'�(��Ƚ��ѵ;(�
���@p��
gx���*͍��@p~�#,�v�HK�F�6�8����(,|V��&etl��t�~����>��m��ې7��Zm��W��i���y�>]RR"r��g��b:P�N�]�`o���tuu�46�E/�s�`���S�m���j�>}��OW����n��+�$�jx�;�T��5<T��ȍj#n�2���&���歪����z�@pdUh�=�1O�QYY!�M
RXX�]�,�uU���fwAR���d�[모(7���29��T9Vy�׀�T
8rl|#n��wx���Is�����q�GߧO�$�~�X��%��q��r���#��2iin�����m���j�>=11)�3��� �;�z�鉙�a�Y�T϶�M��=o*��#�
gC��k������y��U��Y�۴��WKKMͪ��ޔG�cRYQ&+VT�}>�uk_�-����"��\�vK���}�|�u
�u��Z^qqQ���^�m�//�|����i-C�[y]7誘���9�v��/x����k{��� 9�r��I�]���H�N���)�u��ƴ{�)--����m�2p����ξ������?���W.���b��)�����m��)O:_C�H
,��W
�?�?}����|���c9�;�֍�$8�\�����0�/m���b��'���7r���������n�h�*!�����~�ܼ5$cc�R��Rin�3
��hѬh�a�
�ٸ�5H����3�d��=:ߛn�#q?���s&�6���/o�1ۦ[gG�y��y���OyW%[�ï�P(�p����ݲ��e��9q��4�����ٞ~�]o�E9|h�i�"]��z�^��Ys���.w��UѠsV2v�:�:m�����+�VW�~iA���Zo�ݵ��l���>RY7�|p��
�1�:U;_����a���:����}�fz����J�v�� �h�a���]�6ą��_�fZe��g�M��=�?Z8G��FOO�5(;>a[��)X�W�v�xs��#�F��k�G�d�{�t�j7��+�_�$�v�>Z�Q�>P8>�K�_5Gj���y6nX;S�Ȟݝi���]�Z�/����8����zM�E���E��rx�f�|fdNg[��U�#�s�T���ਮ��.[��ڀ�]�tiI4x�;(y�t�
���mU�A�t�vM�������t��mZ7���q��������Q���ӆli��'N�D��ۑ������h��L�.K���fSuTV�G��L���v���AL
N
k,f�֠�˻�p�#��[c�i�B�π�_^��f̡��4
0�WZ�[�Z��}_A�A�Љ�}�eXA��jCih$;E����3;��9��۷}k��x��!/ә0���|x��yL�6(�������Ww���N�Vfދ_$\�g���*����נ��0�e�y��~�Ts�,��L����/zݹ�z��;��)W7��/����f���h�
�ު:�}�]F���*��ܜt0T߫vQt�u�Ǫ�t�_Z��9��ݵ�.����1_�Y����]
���j͚U��Y��Ո~����
�L�7�_%�wQ4H�>:~FV���.K�~#�)�w��u��~���'�Ǚ'�S�z
��8�o����y:4����H����g[�=��;eg���{t{��v"�+gw
n
�Ϡ̪�����^w�D�%[F:֑�y�,+�es���u�w���פ�c�~L*��<���x��Ӊ~��O�Pq�@����X�S��Axx��
<��<�����Y�@p�Mx�Ax��
<2�p��
G6��m�l~�G�9�߳Y_y��� �6䍼�V��^ �B�JY���v�H��h����{w�ޗ�>�H>>��TTT��!/���q������pVoci�RY�x1{�8��6H=�?z��/�٤��P�,)���b�6�F&��|��������@p
8��@p 8 8������@p���@p 8@p
8��������@p 8��@p 8
8�����@p���@p 8@p
8����
K�c���_ip�J'�,xp;r{����x�IEND�B`�PK��[
M�DD+Generator/Common/Twitter/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:4E4A2BEA52E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:4E4A2BE952E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>l���bIDATx���il����^��pC��4đj)U�Q)��H��EU�J�U�JU�*�TQ�j�J�*�U��*$UO�Rr8� $@�! b�k�}�c����k�.�ߏ�/���;��?�<3�۶��="��<���7��4+v
~�#�6����@p
8 8���������@p 8@p
8������@p���@p 8
8��rk`��qY�ܵ�In�?}�&�"��ɈD�i�Vgw.k�W��2I�ApT�O.m�s# 9}%Q�{���{�e�B������on��&T��S���-
�- ʗ���ǒ� ��p�Y�&c��|�!Iq��NݎM��=w�nAK@~��C�����~��i��u*EU�q�0�~�R����������BcjÚE١qf8!_�;\�P�o�J�����^w����;������x�;�h4%/���&�}��N�u��*��~z���-
?��!;��?��k�{Ec��U�״X?<�]��U�j� �ok���1���C֟
8�C�d�s%�X�jU�{c���e���7S�dM��S��a��m��ͺj�b� G
�Rz�t����П���+�m�ݢ�z9z>��{�m��
�\�g�7=ӡ����ʟ�g
���uE���M@=�����o������CI�{"\�m����s�4�V$��0"�h*�g���ql8��CُNw��(?��!��1G�]�$�ϩ��\������bB�\v���+��L��h0d�=�8���t��37g��^�`=�h�:�?���cɩ�F��k��+��vB��V��J;oD��s.*+L���P<cU�7��%8��gv�f����s�~��v�8�:3g@���^�]���F�~�ӆ���#�cϏ���\c�C-+�䖅Ay��q�coXI���=rœރ�~�}8���AV
�l݇����_�xU+z��v\�L|u��=
�iY�:�*J����1a��PA��W���E
�v���Y����9+2{��g|���l�
K���y�y�d��cH��~���Z?�s���M�r� ���X�JI�pϞ��/�M�K��㙗���9Sg:��)Ӎ�>�;Ƕ�'vD=���+(�r�Z��j�Ϛ�j�پ������Y��csG�ir7�kc��o��Y�l���,vTm�~�}~]W�ե��1�e�V��6i7��s�b�ڞ�����?�:�|}5����Ga�f����ݡxٷ���F���Bs��sU�K�3M;����d��{&��3'���qVJ+$
�S���j��-X{�W�'֫P_:-�:��A��C+��Պ�^ݟn�v�L�}?vK�z��BK�᷽^;�Q�{K{?
�To.�m�]�Zϩ��*O�6n]![.���ҝ�Y)莢e|�d�~"��Ş����J9C�,SO}�s��:�5V=.�4\tއs�v͜ᢁ��|C@�J�kO�LT��J$);^-˲�R��dٷ�~��GYgwū��o�v��T�$,
;wU�����5t�!��5��Y�Z
�����90���
?U9��x�%�C��Mq�`v��՝��M)wh�y�*�=1�;�5,K=7��J�q!n]3�qY�|fe�,�W?�ˋ$R�����i�b������A��Y�](v�ԥ�vZiT��k@����V��ޘ�RS����iY��?��R�?}<,�d�|~�$����p�]�8��v�j�����o0��Ƃ���VY�`��529�_i���-Ӻ!Σ����Cw;���)J}1
�q�Щ�zP�g�l��CR�Ӂ܁�)t'rV'�vv�R�!1�T�3'"T
3��f���ٿ���Qy}�2���
�ݔ\�lT:%�υl���U��ޞ�k�S��Ib�oo�NO��#����s� �Z�U�g�����_���ϯ�{^;�{�sW'���sV2�NO�7orӯ=��^O�j�4`�g���Ɂ'�p�~�s-�^���g��B\~��پ��V��2��xR>0R�=S��~�OtFNkg�|������/�s���#��'
���K��y�E�O~���ݑʽ?�
�Z�3"^U�W�\7%r�J�m��ٶ�`(QT{]w�B� 9
Ý�ut/o0�$1&U�ձ��J�=��@������
nU�%��lz�^��W����{����^���<����P��l�ѝH��=�^4g�]�_w����Rr�Bl�+���;����e~۫��K���#ֶ�߬7�90u��u��TY��M�c,�{;�e��vl&u�\��-�7��{ahB�4�i�4�{VV/h��]��o���[a�͑q�E�9U;8:��֏4[�\�io]��o��[�Q���h��pH�,o�~�sW{��q�z�ɋg}]���i?U���AY�Y/��ЮN�P\����Ui��yZ��Z7����u��N���NZ�[
jP��R2I����� �
�~
�a2P�����@p 8@p 8������@p
8��@p 8 8���������@p 8@p
8������@p���@p 8
8���������@p 8��@p
8�����~648��a[��9�x��k�t��IEND�B`�PK��[ҫS__)Generator/Common/Vimeo/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:2A1E084BB7CC11E7A785D1DAD3DAD0BB"
xmpMM:InstanceID="xmp.iid:2A1E084AB7CC11E7A785D1DAD3DAD0BB"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:deec5067-2a58-4bf9-a153-8691be1dd02f"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>���<}IDATx��� tT���$�L�I
���(�������u�)j[�K��Z�V���V�֪��.�jU�V�₂�@ܨ�E!���d���' �L�M�B�sN��L��������dF��"��!`Wd>.���HhH&<488���)@p
8������@p���@p 8
8���������@p 8��@p
8��4N��k��L��I]Ӥ
+E�D��"2��jN��>�r��,��A9"�Ҥ�A��
�����(n�4�[��ɽ#�\?���Az��)5��+��q�cFtJ����3C�ܴ'���6�|ZQ/;j�(��@�n!�?�5���zr�-*��~��U�5�(�UL��c�R��ذL��൶�^n\�K����p1~�4����'�u�`[-��w1�
iT����N���#R'���N�W���[�M�L������k��+�AId����G�<_�i^w��9�WP����y��j��J��]v`H��'=Zr�~I����5�W��N�r��L鑑"/m����}l9i��-&��ѹ��φ��hz��6�-1�������X�gT�T��*�3S��Z�VR�xl���ƪ�[�� ݃2a������;g4G�9�����խ���q���p<th��͊��f�s�V��N���a��>"|nC���d�8�|퓇gˑ��gz�i<�^.�b�^�M��?2���sl�:[�9�)!9�gPƘ����Y�i4�����Y�t9��6�pL��Ǧ������ɯ��n�����r\�`��$�P{l]D.v �DZ���3���}T��k��VVɯ����M�4ޝ�d�~��e�����C)���h��ˠ��ц��`u)6��"��� =��L/�Zӣqr�e�f�F�����5�=��&dt�ݡ�S���
��{�d��qH��%���"s�Ǜ��ڍ6��Y�@m�?�����e�䨅�-4ԅ}�/Ιc�}��:��2�A�6!�54���Ge����4��<zX�<>:�34�%�B2(fX���cr<CC����m4z�sƇ�
5��v�����<��s[�b�kOGҴ�]���ݥec:%�q��m�2��\ϯˊi�ώɖ���<�Wԋ��~���~��
�.?(d�iY�_��f��
�{�a{����=�M44�榶��[s��A�
8|�;�ܣ��n�e�č�S�?�vxvR?S��}�%t8h
�3{y��6��̐
Y��p����=<+����jt�v٤��Dn[�� Θ��
-1�"���͑zyl]���I�|��>zՀ
�m8�)����茾_zW��Е��4��E5��I3��j�k�
E�Ϙnz~��T��i���qn���6�%��H�s��O#2k���#]�c�%if4g�.�.<:'.H������6N�ݽ:"kO���g�L�+��Q���Vش�L��tr�>s!{�Q���&sG�`Y�<�E�<��Z�]X&Uu��g�"���r9�r������E��t��7�ˋ��7���m �+?�M[CC{��+�}P)�o���S![#�筨�A*��#Ê���D���C��{��˓�
�h�8|:gI�L�U]&U�*qB�4v�5�5؆=]�X�|ZZ�u
ίՋ����E�>,�s�����eI���%�I]M���v�=ӄ�fvF/�s�ִAo2�x��,�F��2�$�:4S��L��9�zY�:�4ˏ��f�����V�[WV�_]�����ˀ�h��K�ݸ�*Z[�fH�{�h
��6�1sA7��v�{f8��}��.v���]���r�����,�k�rjP�����h���i(��Qբf$���YE]Lo,E�h�d>{iy�иz@�t :�v�n_�Xk�9�u&�lu)["|1T�
�`��Z�n�!�Y�)�nfz�i�D���\{"NØ>>�c�l���
�B5��Z]a�����1��4�|��Et��a���Z+��� yi��W���I� �GGѮ�+[���5Nwo����<�6"����k夛��Z�t�d`�l�?�ι$���n1:G3�(�Q��x�Ҙ鱝�1�{EB��a�s\�gnX�k������z��{<�{�&@pt��-����9֡vA\��ځI��?����q��^]���7d��ܖ0Y��F^�Z~�T�m��Q�1�1�c��u��|Op�>��'�D�m��d��:l���L���:�rq��-�;Wt�2���
ȴ�9v�_�|� �=�A>V>ns�w���)ݳQ�䵴�����8
����ﻓr]�{�V�/W� Z���c~�m���G��m�#
8��33����}�ٽ�/�Y��'Suo��k������~?)�w"��
���t��N��v�*Ǟ��*TíyW��`�`�kh�֤h%�.��ڃ�ZitXK+P�����Y�c��I/���$4
�9���R�5>~����Ⱥ�<uDصK�����/b�Xݩ�ѫP�ϝ��XB���s*���gY!Z�cO��H�t{þn`�k��]�#���:��G)���4lK<�B�!�}HO�V�G{
W�Y�䏣��g�2�w�3���sP�ܻ�N�KW_N�x�"�DZ���Sy����<�b�e��4Z������t^5���^�V�i�eS��;���,�i��
8Z�u3f�;q�rE�B�w�:��b��غ��y��ѴB��[���V�u��D�|��2��o��P��;YG��蜍��+k�����PPK�m��=O���̰�n��ԞȠ����
ؓ�����Rs���h�W���?m:�p�KM�{Yf�>�*�\�~��hh8���>�&{�Tt�u���l3�ur~�P�/@�%Z/���3M�Ư[�'����2�(��f@���?,�%�W��X�����6G����&���`��'�Y�>VG�2�R�4z��>��Ǐr�mh;�S�a[�p����-۫���c&�3����éҖ2��>,3Z���"ݴv� ��yZa9:�Ѿ�����^���[P渴٬[!��Ln�4xN��|D�4��+��a�m�����R`�^���-]��t�zM˰^X�M��|����]��=�v�%��F-;oYEү[e�0Ŗ�����1��i
�����M�?���a��c旙s�~����n���v�g:)w�����x?�{�6���1Z<v��hIx��S�3]�#t�ҩFc���A��lN� ��T��uQ��������_*ٽ�GW��\��wf�R�3��G�ҽ�ouo�s��<��R�o������o6=xnI��ӣq������m�j<l��l����_)��힜=�T���b*-ĺ�����н*;�a��7�n
ݞ?dni����V��Ї��VR꾋�L�z`M�w.-�~fLv��߱��I�������N�L�}ϗ!��ѪJ]6Ο��:,����;]���hoCQ>�F����b�etH���f�`{�ܵ+\�;?���
B��i��K��L�,4��=������`{����6C���9]\Lu(���
��������@p 8��@p 8
8�����@p���@p 8@p
8��������@p 8��@p 8
8�����@p���@p 8@p
8������@p 8��@p 8
8�/Apq$a��T����Dž�`1@ |3�UIEND�B`�PK��[e] +Generator/Common/YouTube/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:4E4A2BE652E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:42339F9052E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�#52'IDATx�� �Tՙ�������h��f1.��!��Ȣ8����-::*��G�1z��u&�QDLPWD���
YY�nhh��ꭶ7�ޢ���{�U�]@;��<���zu�߽W�Q^9�"��!�t�~��Մp�hBRE��"�l|��T�pB(�
!��A�pB(�B� �P8!B��B� �
!��A�pB(�
!�P8!B��B� �P8!B�pB(�
!��A�pB��B� �P8!B��B(�
!��A�pB(�r_1�>h��К��f���͑u�_mӂ�Ⱦ`0�_��uy��MM�����c4-�g��.7`�wl�x��u����E�-֝N��+��D��m�7zN��m�&�p����퓏�}�h�{��|B
Z��3uq_\���B8�������IЋ������R�k8A��}�_`s����g\��
�D�B�
Ip�;8��b� ��~=�0�E,�)�
q̙
�滐&���HL�$[UN�/�O�B�!1������`�HGO4���}��C���j`o9P)���+ț����l�A���~=�6��u�����7gfB�nC(tl���A��,$����/�;���KQԯ����{��"&�����Q�z�Z�I�pȊ�ဣ��˗ӃA���JRF�wdd��B��"�c�I���pP8����G|`�6i�,|�o���0���6öˮ��3�C����W��}�h��j�/��2�~�ON>���U��x�/Yj�^}�ݨY��������;�C���S8�ǵs晄��5k�뺨'ƊR[Sc
ɕW_�3>��M�nBK���P�AW���!,,2�,�jfV8
-����5��;��5�#��sƋ_�����׀�֯7��g�����N=�G|}�U��h6�2E�;ה��6{�uBOq��H�Lj�)�ԯ���|=�#=L9o�i��U+M�>��6mƌ��A���͐���1t{aa�u��%�(�E&��*ia���앗M�q�%yn����PU5�����gQ�C�q��l1 Q-_�G��ZT�vӚ/`k��Ru.��� e�(Ye�5]�C�
�L8�\8Ee�K���֢Y��o���lIٳ{�Ἴ�|�y���9�ڈ��fn�_Q�ݳfv�L�p!�����a��+n��_�!�
�C|<^8�K���j=ow�,����������łOW�{�D!���hd�/>o_�l�*�yS-\�ㆰ$�>��4�U,�^Pؾ�
{+�C��~n�̓#�k<>3K�F(��J�>MS1��x�P}�x�Pd[�kj�ؐAynX6�mOt����P�BO�#}���0�4V��9�&��?��f��������/[c�gÄlrtM�ߦY7�:��eLD#�J!���(.�r�8P�bH��/��P}�Q�KG��9#����B��0
r��re
e�u���D��!\�:*+��9
���Jt��\[�Na�5u��'],�PB��6S��g��l�j�>�(��'L4����x��k�Na���SO;�Ϻ3/�ey��?������m�Ν��Q�t�]�B��m��[�����9Ȏ~d���D���9,*�@��Ncd�&�.{�^�T�H���5|���K����#��i�Px�h�x�g�
�ˍ���p��\Vא!*�4���e�u�v{�{���=e��-�<B8F�p-k_X����5�d߱�L����S8�C��<�5z�~��}ۖ͛�ߚÇ��wՆ�'�;I�Eڐ�̾�lۺ�p��.c#o��wL�6O>���w�4Y4�Ə7��__�&iU��hk�ͦɄ��������F�/o1�`��Տ? {N."��=�,c��D��-q�>�^8���a؞3}��os&������'��h���O/��1�������9sQ�����w�*�ɑ�,,���R�8��4�CV�X1�kl���Y�{テy�^eڞ%��Đ��kX/))1�0v�
KQ�ni�~YYe�
���D�I�"�o��M�r���%\��a��+,��{��w�#ցf�O9��C0�͢C�=���w�G˷�U���'a�Q8H
�a��xc�k���c\t
��tX��Z�];w&u��������s-��H"���z �;F�;�ftF��)��~��[�5`���JT���{�9�'�j��n�
G:�Y��1��]�/.}ްm���ss;,���t-����݈���
�G��!�c�ee�d�W��_3�{�5t(�
<��IS�3���b���o���>!.��\j�?��8
���m7�(:si�����]�L�����/��r̘2 ;�Ӿݺ2��x�i�[�8M�>� ����%��1V�t��G����W����p�����w�M���"�'�Mר��>T,X�
x���6lT��F�رp�)�
m�tZ�e�̙��ez�1;vl7�?o��!9װ.;��H�sk��\��sXW�7mܨ
���S���
L�Ȝ��L���6̴�E�''ޡC�5��o��%%��_,ܝf��4��S8���g�@ͷFvh�w�I��u�Ar�1ˬ"�uuui}�t�I��I2������A�G�����t�k"{(����L��~8�q����-;[-z�o�\6νB�8
�f����o��b0�`�XB���0�M:���>�at?�}���/2�T���2Y-(���p#UB��8��F+B�a�z���t�#��"ɸ2I�=<�@��To[�C����e��2L�_g߾q��1�E���O�W��+�lu6���[�����#�j�A
0Q^��o�l���ʫ��F�5"��,�>hs)�8���:��d�?]ԣ-����j.������/s:�YY���ggGΒ}'TZG��LMI�n�{,̍TR�4G���t<��-�8S8����&���܌��`kXO㱝�w�9}ee�K���yae�]�"�TK2��A���:tu/���H�Ht��J\�B︗���r6�m�3�O�������7�9at�]�($����ޱG��H�+cu�#/��!�*��ZY�PL�a9`���c����D*�ە�n�� ���D��5t5ؐK����L����|�|k�TG���5N>M���9dw,+C2q�0����q.�w��}*�CCX��Z����rƎ5�Մ�h����oL&0���q� [$'9���nՙ-��|'.��s��f
��f�,�t�CO�A������e�Fg�
m���i�Ե�cb�BH4{FD<�ph.ˮ�e4�3�wE:�yG���,�p�=��k�ew��1bs
jjGk���ҕ�ϭQ������{J�����Tq�P.L�2g����E�~�XXXneLC
C(hjUR��I�-���,�3B�8��5O'����W��İ�����<+�C�i�ƍ���@U��!��tV�SĢ�W&O5�A�Va��O
{옔��9r$do�ڭ�!�;���,.j��nBh�j�v3o�T4���v��N�=Ř�+0�����B&�Q8�o��/Fɀ��5��+��C�c���7^7
)8b�Uvjg���.Qq��˖%=b�&{�&�����`�g�7�s�
o�d�}eB���>�w��ܪ_D���1f� ���t���E���c�_r���·i#Ο����Q�}7�y�.��l|�율 ���8rݍ7Άc���V�s����ާO_�1ek�TK���@舛W8z�%��H�L�$��Eb&Q���PvʢE �)ѤK�R���w�-+��\��Լ�yӢ��4����}�}O.P«�9j�f��#��h��U�\1�*e]$�E�T���g���9���ݘ0qb�/;?��U���m�,~�㏥���ŨZ��:�cj=���[o[ϛr�ڕ+Ѱ�+�s��b�ij�b�u�#��&�_*������A�v�Alyy,����L��_�8<��+�㢹��+���l����}��byν��7�t3��n�a{���>}T,g|��3x��|��#L˼�`}=�y��D�,�;�f�Ǚ��ײ�cZ��[V��2|��q*��[ii��;�G������U\���
�������`�4>�M�\g��H�G���p�U9z��K1(�rM�xn|7AT�'.w�V#�o�z�jkQPX��?��~ �Y�����~�f}{����**�#F��k�`�Qj���߉�ڎօ�^��_��a s'd�@6���}M끃b[~�a�A��\�6o&������^*nP���'�
�ۋC�@��U�>$��^��Ch~���QS�k�M@��C� �he���k�?����x�g IN��6�۶aݔi(��r�O�ϐR�C6��!4nތ�e����ep �p�緷���d�e;�+�9�8!;�y�eb���/J�_���D4��!�+���d�M�}5���y�naY�!�Y�C�>x�`�xž]6�b�#�y=ʺ54���ܰ�Y�GT�؋`C����9��+OZ(�G*�����r9�y�
h�e�Ȧ\���j�ٝp�7N>K�_�������A��-�
�iS�K��\)(r�V�L�NǘZd\Qum��&,.U铸�ZP���ʔr�(Q��CX�� ���� �g�L��-j�`�Z"�zڮ��C��־)�k��>/�s=3f��$ ��'���#�\b�Y,
bmc:�{ۿ����|97��^�ҩ�q���
���Y<眃�����1����~
[~>�{�~Y_�^����"lU9��o݊��^F���qgi����Y�v����W�=f��t�p]Z7oA��o��Fp�>��a�zS#���r�q5�4 �����p�����F�@ƠA��)��c*�|�
!��A�pB(�
!�P8!B��B� �P8!��A�pB(�
!��A!B��B� �P8!B��B(�
!��A�pB(�B� �P8!B��B� �
!��A�pB(�
!�P8!B��B� �P8!B�pB(�
!��A�pB��B� �P8!B��B(�
!��A�pB(�B� �P8!B��B�
�P8!��A�pB(�
!��A!B��B� �P8!B�pB(�
!��A�pB��B� �P8!B��r�
�~�BH
TI�'��wAI�J��?�RA��-�3IEND�B`�PK��[}5Aee1Generator/Joomla/Djclassifieds/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:5E426DFA2A8C11E8B01DF19C0BADAB4F"
xmpMM:InstanceID="xmp.iid:5E426DF92A8C11E8B01DF19C0BADAB4F"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:b42cfc68-105e-4378-9c98-5081d884fd67"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>��)�IDATx�� |T�ه��3Y I� ���w������+Em?���Ӣ������Z[�nu�~�ZD�
d �@���%��I2���$w���$�����cBro�n��s�?�>��ګ!�y2��r7M�!�y�S�'���c@q��BqB(B�A�8!!�P���BqB(B�A!!��
�P���ҍ��!
:ƲJ<���{Na���g����1���><HD!���a��)(.Ǧ��z�q�h⨩����x�#^nj+c1-q
z��QǥJ��k��'��tFa����S�"ib�}y)r) cc�q|�A�8�Ac`T(���鉱�A�3��j%�5S�r"�%3~`�M�W1�z�
S�;�moV~���f���g���
����9�0qT46�A�:����/�W��Z������p�"��X�4Cbz��S��q.�����CIYE����<fO��f�@�@���tv**��f�!�Z���%�-����#p��8xyz��P�3���Y���.�;�ѩ��ʄ�����ח'��
���|#���{|�)U5�r�|�T/�z�Q�#�j�1��Q2Ng���j�`�R#O7|������z�}{��yW`�A<yio2rK����X�5u��{
E"�7fO�S���gT�J+ܡ�ogO�;�ODdxO&�Aڃ
Z�!�h�0qWG�4�}���`��Q�-0b�/�Ʀ���������4y0��zpvlBF~JZ"=&�5��
��*5K�ه�ƫG����D�@�1W�]T�7Z����BjZ.��O��S������R<���jh�����T4H�Gn�#̿[�a>�r;�jL�)���!T�F]��!��g�
���SY8�"�A>]�)yq����v��$8Ѐ���w���^DaI9��=Q]����|�bGk
�Ⱦ�>v�^!Bqt92rJ��йv}�J�KjTWW���!ݩ|`>��8/�Ͼډ<�W�����X��GMy�S�v>�����mH�.R�����1� @LT����EG�B�Χ�4�?�
����A����32����٧Qm̅���Y(-�Oʫp.��'��
� 3�����)IE&����]�u/݇�8A�i�2
�n�!���c��m��#�k�I�&��gq�5�뮉��yӰ`�x-��C�1O��{���G�W�aq�`l�Ij���w%�
�T߯��*l�vv+�O���A58x$�j�T�!�b-��ӫ'��e�y�������W�E��O�0����0��Q�.�#A��ޑ���Ae~n�;ny(,�Ğ�e���������,Wb,Ǩ�X���#�m�x{y�����H���Js
��H[�k_ ���).m����ְ�kj��{QRj2���9�1,�LE��_X4<�
����Q[��&�Wäġ�u6l״h�W���.�EMY^��-�����CaT���Bp�AKU���p��Bz���PQ�����yh2�w�<r�x��`@���y����ҟ���s4qx�EQ�ER�8������$(��n��
e�4D[q#�����&bĐX�e�Ƙ Sun^x-~�Н�]�P�)<�
~��K0����c1��M�'��#;�h�}%�%�<��-#
�FH�^��9i���z��f��^jZ�Q����#'�b�O�>�������w��%��<l�S%��`�J����楔�W
,$/�X�k��7���9���"�d:�eX����#ط�
��Fp�?���TOK]]�<&�5�M�#U%�zM
)��h�PB��J��8�K�j�a��~ePYo-���/���q-��'�̟�Ǟ�<==Q\��?��J����FM~�$jQV^���xyy��aa=��R���x{5�-�<�5y�7z�^�$�Aq����()�T�}A�ƴ1���~�
W�U�q.#>>�𬫄���&
O��38 qш��Ĉ����p���'_ŁԴ�G�<�3<E�u|��A\q�0U��*]��Qax���?2Ʃ�{G��mg��g�Q��$t�,-@d����G��K�0�{[�7�2`��1ؓr��Gc�RӘ�x������'���hW�8\t�vZTj����7K���Β�a`t��*T��h4��'㮛f
��M�!C�9��;��y�yC�T�QS���8H'C"����_-FB��!�_ϝ�߿�J-<�<q�T�ըQ��98�����ұ��)9~�k_s�zb��
���e~<Q�,��#1~^{b ⴈ��"7�2�]�5��
`�{�nFnA1�
8�zg�s`,/��T��7�z7k.y�8;��
���Y��'G^���HcP�p���Q��Ix�5)����k���ޯ��p�^ ��lme>EX�
X��GQ� ����O��2i�,[t5���j%�@-�
�S#P��U~g�A(ұȝ��X����'�":����#~P,�f"�L�g��dXMM���Tj��)���
m�r8���@��k��5��j��RD��ٶ�u�lD��@Ee�y[E��2�l���
5�K6LҖ���P�^��$Y�
�9IN|`�t�k
��� �����#ے���qC�D���g*=���Kw��x�������BP�?"B{�`��G��_^�P�桦�["�2��
.���qȡ��y
R�(6��(i4��&�����y��3��-(,.U�x�c愑
���7��%r�Ta�:�`q��
q >v��Ҽ��.R��:�
�+q���j�I{HC'q�`$MOD���>�د�4d�<�X�w�\� E%�v�oo~(#�q�4=MU�4z����A\L/���/�+,yh��Cxڥ���Y:����r���[�w�X%�*2���/�[���|5��^=×�8�k0�8%��7<�^�����S����~�6�)jJ�H�9d��d/U�&���}{������cՔz77�9>���y����5��7O8�A\����T��B��l��.D��-�pE�^u����PTZ���2-B(��s98��i粵������&�G=l���g�˳�"o/Y�2�!���dt{�w�D(�n���(BB���X�a~r�t��汴5,�X$������|�#����Fh��sH�Uc�9ji���lF������
[��XV����,6GQK�����NqWд1I���t7']�^�����T���
djт)dhb�kI�*.l�}�=��<<P'S۫kQ[S77-j�T]�2�5��p��aP�`���֪���קE1���A�<�q�kb?�¡���}��E���Dw��Y��͆��Ru�VUW+,�7ͼ�ܙW����ˍ��#n�c��T��h��#��ZM��N:?����KÕ���v��B��±�t5bS��/"S�%r��"����QQ��Ģj.j�%�@���
.�OX�ݚ��q��ROg�gV�õ��؟�V�4��X�l��pSsE
�J���0��>�e��|�$�8���wSJ��G�Rp�#o`�ڭ��S�z��-�,M �H�u���g�FE��S�%Gx����2~�<B�
(����-����
[�4��,Cc���Վ~F���ѷw(O8�A\�|��}K&b��f���T)<
����e��Y,|�i7^x�5{U�:��o�����퍎,oL��-���Ig��t>g��
�Q�(���W�T�RbԚ
Pm�i�>B YG����#2"��fa��4Mu�ץ#��*��N��Kg�?J�P�
�j�1��q2Ng:8�n*��5壺4�q�E�<��D��!�6��HF�#n���DE`��٘=u4O*�Aڃ�����c��T�$��{C�Q����������W/r��DܥI�5
��tP��֚]HK/p��Ԙ
Q#�������o��YSeP�C�)(���k6�hiHuSy�����A�iK{"E�I�q˂i�Fq����#�x��=�y��E������e��¸�q<I�H���[�����L�⩛j+��%۪`�VH����`������A:9YyF���۞�bc�E��yT��L2�$i�,�7E}R=�8H����v6&�P�1ˣ�ե�V�-��5�9q$�̟�a���S���moV~��f6tߪ��1�P�Dž�C�wG�_���P#@ �A�2�tc�q��r"�QE�1f5�縀�%!.��c椑�Iq���<D
}���
Qk*j�mi�<dF��9q���vQ����mG��7�8u�$���S��a����kg&R��)(.Ǧ]'�~�طwj�k��!�M<WO��#4$���8HƲJ<z���])J���qÐ0$��%!���|!!��
�P���BqB�A�8!!��
�P��!�2�a��������s�qx�t>
K�WhT�_~Y�f�ݖ|[����o]0��t�8��]x���л�]q��m��x�dd�Կ������?|�}��{��m7Ll�m�����cza��+(��\���r�^Nv��
��Dϐ�V_$�Xq�5.��'3�a�!l�}��Xt&��uӇab��M�+3U��N��&���i�����cMġ���Ǿ��������f_��C?8�"��N����nu㵉�>����dŽ��v�������e��d�פ���ﶩ]"�h��.Gʙ��c��&і.
��V�$\�v�:_&S�ZO�8��R��u(�[��&�a���Ƕ�N�j\�4����J
:�(���âp<-g��Ϳ��ǟ����]�sJ$�O�А�&�q�x��{����FI7�l������uu�R��e7���Ht
w3�0�Y�K��*<�LC���H��p�ool0KA�q�
��5%���YSΧ1o��V-;o��n��F���^:�~,�OiP��5�N0:!�|�y��,��s�})if5W$D�xx�*Z��5�,7�8b��I46t`��1�a�Ƕ�"�8}��e�����
�"��"�r"K=j��k�;-(%�۲3{����+�c길f�[��wSׇ�WM�b��v]gޗ���롻ga���V�����űv�!�i���4�-k&�R5i�+^Xo�3���a��J�mqvyG]�H�2��ԭ5�'��?֩���>�{�~���Iv�'�Jj��Z���_�T�i��]=ż�šGKfƩB.�c�tGq%���+��{d���z��
Bt�0�k����tU��F��o�ZE(��ޜ��@���S59^W$�\�����)VQ�?#��,�ޚ�ʲ������Sg�T���>����~bO�C����e疨�e+GK$jե��ⱈ�Wky_�E�8r@����KzGlt/�
�r���8DR:R�m�j٢ɘ0f�U��Ʋ
ը��,�F�:v8e�N$_��x�X�����[Q��;�2��ɫ+�1�IO�t�պ��R�����{�5a�?.�~���pl#���D#�H�O��I�7i�p�8�㻝e#����c7<n��V��Yn���N��DXH�U÷���˷��ׅ�4i�]��w��Y
�r]�4쥭�����}���䫤"�nR��<��)Ҡ8\���ttQ�w���
��˶�,���H�X'!Ṽ�1���c��C�]�-��Yf�>VQ���ϋN��zzb�R:8Dz^��
Ϗ����R�c���qI�CrW���Ю"*2Ԫ���T���rT�kM����Tد߅��,��ݩ�1H
�o��˷� �%����=Ͳ&�UE���3�a�Gqt!�a�y�mc�$4��}�n�RH��t�9�c�2U����K��I+$:���2����H�wJ��^
i���Vἳ˷5����gh*��|��JT��@�?|�<X�B>~�n�%{ɊC���0ۻ����FrXW
�zÖ;��n.������~�J#��h���=�b��<O���9%qTpfyW"��ArFĖ�<����>��
��K"-��Rs�
�����K�+���2��5�Ԫ&y�����y1ȅ%�ZG*��]����]�(c&\�t{�C
���S�%̖���|[!wr�xJ�
����Nɗu�.#�ua��IO�#��^/"8����C�]6���
d>���f���߬6���
�
e�������uV#X%�X����P�R�ٶ��6��`��=��\�zD#�Ls4�J�U�k�!?=�^���Fv!˷%��5e�:�2�^zAd{$
=�����tգ"�F��eD����|"�{���;�}��#�u�^����hZC�)�NDKEA���b��g��b)��Y"�+zH�X�X�m:[V���L#rT,���X�E�-�pA˷5r.et�4|]Ď��$g��y�ր�۫�X,{�`g9�ѫFq�I/�rGpT��,��ɉG��ݲq� ]��Z��eA��h�\ �F��'���܉u��nK��4l�}�ɶ��o9�����i�+�Ś���l���R��W��u_�u`���r�=q�z��aH�h�Ⱥ2v��
�շ�."�n{u)J.c���qH�n;8˙mi�;�|{�;���яم���Y��
�t[��bB�A�8!!��
�P�BqB(B�A�8!!�P���BqB(B�A!!��
�P���BqB(B�8!!��
�P���B(B�A�8!!��
���BqB(B�A�8!��
�P���BqB(B�A!!��
�P���BqB�A�8!!��
�P�BqB(B�A�8!!�P���BqB:�82y!N�%�K��
���t��j��ϥ��IEND�B`�PK��[����,Generator/Joomla/Easyblog/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:99B63D3D52E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:99B63D3C52E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>��IDATx��xS��IG���)�����(�dy�(*"�čW.��/^��sQQd
*"��l\����l��2��#M���6�I{���*m�<�yz��$9o�}�}���AD�Pl� ��*�q:!)
�?���@;�A�&@8��@8��p
���@8�p ��p �@8����p
@8��@8��p
�bB���Z6�m��3�㼰V�iJ����8�;q.فf
2���U^xV��fC/!
#Ȧ�EcG�G�-���(k����uF2�)b
����;r�[��F<� �!u��1�r�;�
�`">o��� �D�Gu��r�G�u���u1�W&W�=XOܡ�8͌���:�Rt�����#X���
iG��暏 ��蚜%T;�
�(8�FpU�"<���!Ө��m�.Ӯ��j���~@
���t���$�2ϒ���K��:�2���R)!�k{���Q8tn�,�M(3r�������r��l�i[�#W������;e�4+�&!a0�����NΒpבM>g+�T}4G^�k�ee�����s�� �&>�k!
�k�NVJ�RX??���Q��W���XC�i��=�B�ݞgA�4ުz@��]����l^B�WQpԯ�r�;PF�����W���f:x`?9��F
j��oh��ɞAך��R�ބ�-�.��qv_B��_�²�5F��E\�v��n�������\�6g�%�"���#G�����Ç�K�?#�[�iK3f�B��&���/�+L���p_�R����[��H�Ć��.����r�sOSjJ����ŗ�k��U��۳{'-�7�.^�(ţ�8��u�S�.]�!�(N��!��Rdd$z6��;!�KW��Y�.GPvx�pP֫�'ąS������K�����U�<}�����ih(+)�l6�Z�t����Z�����2���I�aK��z=\A�U"�z�l��m��!5�|�#d,8D�s>��%���|&*2�2/_������Ѯ}՟+�����w�a�(�KtF�u���{dc�˓��S��
q�B8�CŦ99����g���J8���WkM�1Oѵ��4�.�?JX
>2�.�
PB��LX�:�b�K={����1��o�"��x�bzy���몲��3�F�|�e~K
&&;�1M�X�F�:��
���T�O�����e rsr<�o��O��`���>D��B\�����
e�G�4���Ro$����~&�vE��>tW��
E�b���]��c����wi��f��r?';���
y_�9rp�<pF,��>�c����ZY&��d�i~[r]���
�5<���d�O�8N?l�&��x�9\�ԍ7���������h�u���-8v��23)..��6oN�;t����Hw"--��g6� ��`��IϽ
�=�۱����e2�Y�^}��x���dʔ�N�h4^q���h�t`�>:u�e�LT�zujx]#�F�i�M)B�����7�iߞݲ�Y<8�N���Q�Q\|<�\��">�Fb�����pTu��;��EWtld�2�NQr��2iՊ����X֊���w�.;
���x۰~-M}��k���[o���n����˗h玟�X��L'$T��g-����[�"<����x�F͚����J�v�*)bL�x}�7X?x�])�\�Ȑ��I���/�g��6m=W��ۻ�f��&]�x��p�N��f�+�$��"""
����ڢZ q�)Ğ��V-�h�u�F�2�Q��ӻo�ԥծ}���)]X��[
�L�Ls|X����W^��&���i��]t��Ժu���V̸�'
��-�[��G�`w`����9�z���[��1�ϯ�v
͝���l�w���v]/�㜷��<�e�PYR��5���m߶E��yq�/���,"�b25�镗'+����)ڼ/����&��mݲ�^|�iE�6
�Ů�V8��r��'���Q��%��a�B���]<�(FmN_���Զ]�
�s{�IӦ�SO���fuJr2�L��V<Ɩ�W_~.���S�f�5[��=�N�ϛ?w����9~���.:ai~9������~�<q�G)2��Y�q>=�>(�<X������M�H���_��ΞQD��m_��E��ا_�t����GK�s���TZ��SY��7�>��cN������͚Kw�E˖R첲L�q�J��
����osi���E�z�-��O���#��p�Ub2]�͚���
���GX7�7m���6a��r�DN�߶U�(FyO����h&,���ϼ/������
ak��C�^pc�W+�;�rs�.��h��e�Uf�)dr�
�H�VFI���px�g��ƣz1r��%�������Ĕ�a߾=�����a%s�6mܠ�8c,��'�R���q}O�)y�v��<��1wҲbk���si���$&�ͷ����s���+ǿј��>#F�=`�QT�VB"��2����\���\�X��#��ѓ�Q9��e*1�K�h��ƛn�M��m���1�Ɏ�y�Y��-�A������2KѨq�{v�R��JYH��i�
9ڽ��ĝw���;/��eq>�=9Is{:�ߥ��=M�6��q�<���m�Y���\��ܵu�^�ޅ�Z���G�xxh�=sF�=�߶��g�ͪ}�I���Rp����;����2�:|�h����C�)�W��撡aa��3K��!ªiӶ-���S��r��W��Ԯ}M홖�����N85��a���
)�)�2�!��n]M.g�ĮJ�9��X�/�ڕ����8^�V���z�^�"������J��\�����;���<�Y���0�L�� �G��j�oݬTur�uWq6�e��T�n=��m���@��ٔ�+Whn���T�3g#e��}� �� �#��a��U���4�3��D��*qi���{}��G��E?��#��v
��9��x��۶]{�Nf4ʬ͖M��p`�[�륛�t��pS���Ξ�Y-A\W���6k��,s���E�\]6�9�w�
��ڠ\��t1�'��|��CU
Lg�y2��;g.
Q2�n�Ⅺ�2l����8��+�((���}�U�W"v?<�z'Ǐ�^��������]��ԝ-&g��ԉҍ�z��[
�/�s!�A*I�X.9O����U�^ �=�t���_�.v6����B�8�#G�sg�ɞ]�5�
)s�ȯ��ؑ#�q/a�xs��W'5j$j�u-�ڹs�� r��9�N�4k���94k^t��%����I*�&A8��ûSJܫr%r-+���c���1�y��"G�rLr�U�՚�䩏t�Ys��ظ"�J/��N�ޮ\��p0qɢ����,�2xH�I�5�>s�m�V�^Nw�ޣH�srh��9^_�`�\e��Q-��s�V���w>=�>Z��Q�r�6^8��#9n��B����3�y���r�
M���1-���3Vy-�����Oʼ��`,Z�A��ח��ј+?��Vd��V��#W�rU'��<���#[*-Z��(N����y�I�V\{�n�A��уMP��
��ӲvlEp)��sڴkO�:wu{
z��ܤ'܊ָ��b�`2�eEXZ�������-(�DF�x2�.�B>�ۥ<K�h<��#�ыN�.@�rpY�(
��g��uke�C�.�D�-�sT�Ĝ���qt��)er��Ç�k�L��Ě���I��חϟ�<�q2��q�7e��p#m�n���N��H��h��9�]8~�κ�^�Ϙ�u&�,`�Vo̘^��p��v��E�l�9}Z�/qN~��Q#��bAS_��L
s;ׯ�.���{g�8�V����e��$�R,M�p�<_ȅǩF��8p�ƅu,a-(5�~/��U�ҁW��WZz�2jq�/v%%)�\;��cO(��x���"iH�Ϝ%����f�sDt����Y���dQ�:�Vœ�<��N���zw�%���RUwCX#�����﹏bbcU\�!�[Ր�u��m0Ovz�����+\����Oz��a�뭷����h�u���r�f<�eҳ/�6wΏ 4�#�ӱ<}��������ޱ�fK״XqQ���CO�,S&��s�[�C����o��$�e�K��ԻO?��={˒u��D�8]�kI�[³?����䙲���S��VW�����V!
Y�L���-x�lTt�̈p6�U��n���,���Bt�n������?�@��"+AYtx�.q�;Z�ĸne����Lߣ�����2�ڬE�W��Zs�r�@���W�����J[1�v��QM�AΏ�#pL�Y�*#S����$:":�h�2�!��)����<�g���$d�Q��;M�V��C�y�p^�-�$��Jn��b T�X��+E4
Ԣ�l�T2鯕ʺ��5�c�V���8��tX�.7�;������uW@v��6���3>�F�2V�������`��ބ�֡CGGe#?�:J�{��M�}9
�ry�u��C|�t� �g�u��?�E�,p���-w[?���|7�m[7��5�i��aԲek�XSzZ���6�p��9Z��V81
n:]�I��w��KhSʌ!�����n�ޡ}%k�.\ֈ���J�[2c�4ea��%F��-�]N�:k7��[��P�����;ƌ}
��
��9,݉��s~�L���>BI�FZ��l�Ϳ�1zIK�P_=`;P������}�M����dX�År��*?�n=�%�:v�}��!��X�f�u��R�������������^����̚��,���ޱ�8+��ujj
]�8O��ꊊ���5k��p��_�N8�bf)1���ϰ��n>m�I:A!N��(!�KYQZ��"J�����*W�&��rGym�w����փ�*'�ȧ8�w2���2�,,,@8��0[�L�FY�|�֮3
�d�tM�p2���U���^�4�M���;���R���Vrf-�Y��[@
��p �@8����p @8��@8�p
��p��@8� ��p �@8��@8��p
���@8�p ��p��@8����p
@8��@8��p ���TV�HE3�
���!�A[4�,�q�/�
Gu[!��IEND�B`�PK��[�����/Generator/Joomla/Easydiscuss/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:D35135B0C78711E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:D35135AFC78711E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>����
IDATx���pT�������3<b�&U
ZQ�@�
b��KJK�m��-:2PڢҊ80�*(���(�xPy���Ď�K$�0i#�����Y�>sM��d�l���=��s��>�6��~�H�t�'�Q(8N���U����\E��@p
8������@p���@p 8
8���������@p 8��@p
8
�i�H�+N��g����V�.�ۚ�mr��_hL����K�G3�PP|bV��i�)�0�q�ƀ�9fXfO
8.���f��Cfsi��w"�77����m�ր�h��ޅz�m���P�(H��)�<kC��T=�3�d]݊o�U�Pdʼn]fǙ������o��nS�!���u���H����a��4Pp$�^��ֹ&/����U�+����y��C�oAp�%nzu]�@ϋ7[�Ǻf�ٚ�j#~�9�}�uӷ
8�m��h�Kc���to�>�2����}�@�:<��:�oAp�����͖="T�kY��j&~i�3��C���>
8Ҩ�$4���R/@ϙ�ռ���PG��{��&����r�)Ѱ�J�T)>�15颪����c��C�������*�됝�V�}��Es��$��ܿw������ٿ5m��G�P�3?���!�;�T���z��gk��v�2�=;���^^�9��X�1i� B��t�]�~�M�&MbG�QV��yi��?e�$8҃�&~C㥓�"Β���8s�և7-[^k������;����9~�Ȇ��_5S��*�W�
QOc���λ�fk$8҇�h��du@��U�sQ��ƴ�Bc��iu�����7����Ȃ�Ϙi���y(HF�3�-��;�Z�sd��E�i
7�
��#G�6�ee�v�2͗[�HZ��lu� �@23��P���[���.C|�N�}`>*.��ݱS�p���S���G��B��ԩ�e���m��lW��
Q<{tC��h��4������c��_֬2�C{�hӟ���q�-��b��
^��5?��G�<>?��}�O�W��O����A�{��u�l3r�X�f�
;d���Y3��I�k=g<�˘���soD��
��;Ǯ�7}��M\��=x��=o��m����^���w����^���|�'�i�R�ky\N3���~�U����C����B����^�ӗ[A�e�-���Wlhh#�'[�l��Ww�
�_��{�l#/�{��Ѕ�6<����lټ�\�p��:�{��7���ߵ�>����!
�x�����-W�c���M��
��[�i�*f?�g����5�1�ч�Ƥ£�!:t0bO�0�.vx�<l����zc[L��݃�=�
{Qu��W��Zu�]h��p_�z�^�h�SO�?��~2v�x�y�ݐ��[|㵗[͆�iW�5<�(�;-�/ptp�*h���^�XQQ��+*�e7:���wCVOB{K�����ڱ���c���X���4�sy��C�{�L�dz�>����"i{�mW�5���Ǒ���
���
J��h��7�A=��7n��Q���@[�ع���_]r�D�A�)Au�r�@=
��9��� ���{8��'�{��(B�m���j�#G��o�5f=���eK��h9�5�]�u�f֬\n7rGv�
I�鸉�g�:ܫя�C�G<�[������PG�t�P��iڴi��m�S������-4��T�Νk�������3kfx=����g<.�&Z�>�Nnu�Bc����^ʣS�ٙ�%�V������/�3"����k��[HuER
4$��n�h�Bg'OG�vUT�XX�Į�;�L�@����:w�\����õ�w=�^�P�iW�W��=�m7Z�1k�\;���wSmD��E���R�T���cC�
SR)8�]��v��Yh=uP��P��ZO7ۓ��p���k����+�^L�] \Q��+��>w�:TV������w\�=�+�j�V!�)A-]�|x
�ۃ���Y�G3n|�EY]E��r�BeL�M��]���mt�����Q˲�I��(:j�&�]Q_B��h�6����%�c���ӧM�y
=_�5k��wA��ƃS�=�AQz?W�t�H����Yޡ�>������1<�pǜ�x���s�?�[v��e���5܋w���V�j~6tkݺu�vUO-^��
�8�sOtA��#v3�IL��v¿��c]�_{\��u�����4|�>�R�{mmD�32�E�ހ+��j��Ό}Df���
�z?ͪ��t�K=�~�?
~>��7�u������q}���n�m�Ϩ�C�m���J=��@��u$mt{�9j�K��},Q�q�Q�����In5y�6M��p�At��A���:v�l/Z�;۽��Y��39݆%z���7�Z^C�x4Ko���햓c���^���f�rT�9-�
�멍[���\�W���Xݔ�7��o
�^~q�
-���bE�C
�F���y���r�ڵ>V/n��W�~��>_'�%�:���{��O:�6�p���&�c74���D�C= ]�����^�X��G��U�@�G�st���D=7L!4�`�CÐ�%�{
�a<�yP��H�^.�J��&�ᇎ�pEQ� 4�����S�k�N�fMu���liD�PG@�xn
���k����2�����c�R�=d�5�։�l�!;\��ۯ?����8*
�
7�Vh(<�^��]�8�}\�2��HS��Pq2Ȱ!ȽV�/f�^7�]O��#�����C!D��k8�k��'m]��@pxhآi�
5w?Yw1� 3���%�����S�[$2�Fm�B
8ja���,��'�RP�w�GG}�^�z�\���G�!�;�<U*z�9�
8�T�ok�,Y��Hs~�oU��l ӫ�!��L�GR*��<s�DZ5ΰ���*@p�&�r��@p
8 8���������@p 8@p
8������@p���@p 8
8���������@p 8��@p
8������@p���@p 8@p
8�&8N�(Upܯ�|( ��_��?�<�j;IEND�B`�PK��[�v<M>>.Generator/Joomla/Easysocial/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:D35135B4C78711E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:D35135B3C78711E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>u�\IDATx���
�Ue���:5ºh.��o����HK�!i�/)�d�1����::%���(���CC�&`�����#�B"脸@A�d˒��9��߳���=��sϹ�e������r�ޗ����<�l�iC�Xč�G_���~L�d�c�
Mx�EhH��^��"8������@p���@p
8@p 8���������@p 8��@p 8
8�@5�/A��~{�~]��1#�����+�#Ӵ��������,ڜ1��{�BC�1|^#��蠠P`(8��1c����5��U�7;-i͘�-�n7�֘�h�AUd�{Ƽ�nƆG�F�6fx�Oӑ�-��%I��8�w�9t?~�@pT�D�*�Π���/Z��
��%cVn5��%�$4i�0�c��P�0}�Q��mo�2�˫q4�5���CS�G��}�?;��g�G�H����,����-�2�Aݘ��h�gI�W�]�Up(@X���
���6���[SѨ�9�o�
)���&4�����jy�����h}�J��'���7�2�ؿ:�M����w5=/\��NT�(�I����ISU�]�v�uk���l��M���9�\}��%{.��5�~���V�kE[h@v�>���K�Od�G&���}Y��<����O�1��̜YȻn��!�M2�7r�?�m��Ʒ�S3��_S2Uk�G�9%
U/�o̘�ץ���_��A�����F]]ovG}LG@6�i?��y`�o����T�73~g��{Sn�?��+���B��ZT5h���w�UU+I���M�J�Cu��f������-�__���N̆����EϘ�3�3�8�K�_�~��4�h�&\U���9|��6�Q
踔B˪�85�yu��Y�?4�;����7
���G�R���Ҹ���"ֿ���B��Q��|mS�y1���z ��;3�qF�mԬ\�ܢ��?����1������ys�u�\zy芁zwM��~���?z�o�~�z.x2@/���-�ys�s֗ύ]�P��٧�2˗5�鐦H#F�/�=#�z{��u}ʘ�>�^���{|w?�?������ֱ�V%���~�T�{l��d�%"�2��X
�����v�ׯ[k.�⪂�����5�Θi��Ȇ���A�X���=W^}��ܧO�Y��;�,s�G&�Y�6T��Z���f괛B�p��i�/xr����mwx�Å�Æ��/��>V�(Ht?�G�7G����a���A=����� LS�R�_
&^`��X���f�g��K�A�N\h�6��ko�����cN=�����~�zyv�����;��}�|ᄓ��p��6�h�օ�����z^���<m���K��
M��k���~t�B����:�p���g�5��k���?�冩�
`�z+S�{�9wF��w��
��m�Zu�k�&Y��ΕW�M=4]��ښ�N��/�<��o������1t���N�w�
@�U���k�r��!
!]���p���uړ��-�ߙ��(h�S��n��Va��~ް��_�)L��{��\�
m*�V ��Zj��i���*����V>��Ïf�^��R8={��~��E�����)K^~)o��N�;/�;p�������})�+&��DT �*��qS�X�B0�nΨ�]��2
���T�����{������1<p@h9E��k��6o��KN�4lj
h�T=����3�'�o��:�t���w��_lWD��7��G���~�mܪw�p�@W�h
�---^E
��;�
Wlܰ����@�bw��y}�k6p���1���ղ��*�C�u(��$�^ݗ���{t�F��W���|�{�vS�7W�̹̙2�Fog�����*&|�k9�@qMJ�û�B�B7��%�qg�m+��h*�>��w������YS���]
�?Ι����\Т
���G{U��6=����>��m�r�Ln���O;ݛ���2� ��J6Tu($o�Yc��
D�$�u^�h�C�*����~�S�٧�����ت�����۶.{�3�ra����=�^�Q5=m5W�B�=j��6�����l_�
��>U�Jj*�i��n������u4$���}��-�jJ����sǧ~�e]7E8h��غ�0�[Z�4
�R�f=�W��ɪ@+ECp�1UZf�;�UU���i��#mu�mW���<��݃�4�O��fj�;p{�TU���;�C;@����_�
��z���C�.{#����0��p�8t�!��tL���"�F`y}
HܴDǧ<�6����An��=}��w\36MQ��)L�;��2xȐ���$���?�[�V7nO��p�w V�����{�Ѓ�`r+w��μC�?�v�:z|v�,�h�O�H���06�-�
�`�s玪KU���ߧ�:���
��g
Sh�Mv�0�E�۲�9v�wٍ7L���Y���c
�w��>�U�6��G��$���;I�WE�x�V����ݤ�7o�i�j�uB+0n�ƥ���=�U�ݩz^���E��Uhi XS���;���������YN��۷���}��
�}��c��溪��Q�Ǫ(T%ĝ�X��>
m�*�B|x�mh����L�|����'�2�q'���W|���_~�4j��
@�����ޥ�U���o_���]��F2�'�5j�܊O�c�o������7�h�XK��VX)�fat��u;��UCpT���4��:�qړ
ǝưP�����ܜ�g��Դ���5}Q%�Pq��fbpZ�۬\���`��op�Q�JU�Mw�J�{-0�n�.�CД������ʚ�V��u��y?��;w�{b�����k��U#����m���ľ���'8�48DMK
���y9$#z��2
�({�j�n{w�<�.?U�`�NѴ�4�PO#j�H%y���V@p�%5%��n�F���Iڿ�R_�+|��7 �MM�=��d�"йD��B"aw6n),[��p����_�Aub
eEӐ�]�w}jЯ~/��wb�*��Ɏ�_��$��Ɲ����%g&G�SQ;6m�9INFv2�$JQ�G's�Ҟi<�d��o�F�N0Jg�-���$Ŭt�*�X�tK��I�t
8��b��4F0t���/qg��]�.Te�j�
8��b�Q�6V�����������[�W�*I�m������D-߲�
�q�~{��?��i�S��D����@p 8@p
8������@p 8��@p 8
8���������@p 8@p
8������@p���@p 8
8���������@p 8��@p
8*&8��e��fǷ�������'�C��s��IEND�B`�PK��[t�a�~~)Generator/Joomla/Eshop/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:D35135B8C78711E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:D35135B7C78711E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>H����IDATx�� t\�u��4�F�7Y������6vB�R��uӞ@s�H�hO8mO�ЄsBOCڦ
-��IHKB��P
[���qcdc[��}iF#M���$�7�7I#�;g��yo曷�߽���~�������k�$�Ѽv��p�D4��x�p�9�?�@8���@8����@8�@8��@8�@8��@8@8���@8����@8��9Ln6"g�S�_�O�������'�E�}���`��"��;|�!>݃X�����>�
�ˉ�@<梫��h�Gz�r�?r�pLHt��(9���I��&}K���k
I��3�I�)$+b���T��o��i����@����p�G�Vɉ�ٜIO,s�s��%��
��o���&�|Z��e�ë��Р�}~+b��kWJ~_�?�t߆�^�]��T���R|��p���v}Wb���7�\%��/�<�o�&���-ݫ�K��g�R�:�rFg�����xN�\���rg�@[�����}Z�����"�{>+�+��H͚Yu����$R�b���}\�ZOc͗�x��`�eR�t`9w�1U~�_�K��_�M��R��}�2�W^#-�(�6�>r��4�7��Z���I�U�Rz��1gOTɡI�ȳI�),����
sg����Ke(�dΞ�@�{\������ɳ�J�'��֟#C��g�����b��e`��S2�how���ʲ+��p�fi�x��R��I▝f�;���i����zO�G�VJ�����K�Hy�j�
�0θT-�xP�>������J�I��n��Y,Y���T.��������?H�;W�fY�cWF���緽#����뗸/G��$VT-��2���\��Y�@�q�
��%VX���0���o=$3^
��`i�T���i��1�G{��wؤ61n<���<����qW��ջt�����?��Q�eK�r�������>}�=��
}ף�;c�/h������g��K��^�I:>�){��=.�[��]�n��H��>+�|�s�J�7؊h/O�b��=��Rc4*J}K.�ε�>��F�4�Th>3�yL���s{��x}���B�(j�It��8��t�c�ݕ�v$���?�m6R���I�%Gkc��2��1����1j��jU�p�&�Q)hy�Qh���S��[�J��V�[3��Ƶ�J���f���m�ꏹ�,�ZY����~����Uv�?�������6kܱ��70o�1�S���5�c_��t��>���u�M͟��Lx�
/�$�>k#ew��v��h���Dc�R�{N?�^bD����٦U�4ҷ�r�e�c�l#�;$���pn����=���n�X�_��\_��-f�vc�8�q3���!�M�q�y�K6��ji�x�=^*^y�\;?sQ�D�T�h���'�L:v\�I��Rz�Qww��'ַ���K�cl�c�gd8P8��Ş���ߑ��@Rw&��X���$X>Қ�SޡH��ε���X�bLpm��:f,��$��D+�{���ἐuQr���5Rt�6�1�8��.M�9l���<{�uq�f�s_���|ԓ[a���X�"Q��$�V��/��"իm�@O��/��N�f���Nt^�k����(�c���X�Î�����&[
?�- �/j>+7uI�n�/�[7&��`��R�W��)E�^t�)�A�L�v�Ո
ju�
`�ۏ��wcJc�n�S;�����JT8��yR*^~�q��߶��5Ћ��!�����}!+�Yxl�4�O��M�8�����v{z���j5x�o�r�����~j̈́k7J��4t����k��'�v�3��,��y�6#D���ZZ�c�VI�ſ%�W��f�Iq��+�c���>��P}v������7k�r��-�6�����`���YO����M�=靸cӦ��Z1��;��%_��xK�ſ���,N�-)��yc��p�ib�c���C'���)g)ޙ��ru�\��͟��5�
�6��I�K���2Լ����-�4��L�yN]�5�Ib#-
瘅�8%���9|��uM�6H�<8��c�8����{��VǑ���t���*_z��>�.��Nfko�=Y��)�/��*g1��u�>ãq��7�%e��WK���3�9�:���}�V�C,�
_q����|Tc�d�3XVgݗ�֑f�bqLk����ʻOO��*^{�s>I��;2>���E�Y<��z���xF��<i��q��5������nu�ӻJ�d-#ߨ�v�űA�dV�K�mfē�7k8?��{�pL�$K��d!��B&ЧU����R�,�|�?3�pj��!c�}|��^��'T
��[�(���7�֘8~^�<5/�!n��=G�[E�S�|B���H��tw�k�1���7���m�M��'qբR�1Svbc�t��@���"����y�����V���pLu�#Ii"�1�¡Ӕ!��m�ܒ�d���Iu*�ʩ+���N��p&���e���y�b3N�`:�ճ�:�;�<-#@82a��,�����fm�OL�x��&{�M�vפ�'�hr���㱏�qi
Xf"V�
�~%>��Ms���q��D�V��<��")�o:��D�Ȫ�&re��o�$��W�S��I�f�:�i�6[�꛴1���֥klfh
��q��R�� �&Lu��+���
���6Yw�qO��7�׀�i���(5��#��2,�Č
X7�-��K���Bꒌ�7){��6���Jv�zE8��]Y�=i���:��q�og�b�?�GU��O���n�8�lE�T��ͷUV^~C�j���4��͕H�*,^d���-���
�
t,X1)�ۍ���q��?�+~�P���LSG2�F��kS�S���������B�}Kt�:g��XG��l�����n�y����,B���~�>��mPk'�}��?�����ő�:����)N��Tм��D��]~µ2���Ѳ�Dy@3YC)�[7�1��Y# �rgR�fe��g7���$k:t6�_�DAkz���R�
�<���mg����/-��;3�T����tf՚{�N|�1V5i��Y`�+���5��F��>7$�'�5�;֙��6��v����%�I�Z4}�O��h��;S�X��kc��ܰ8&-��_�^�.�ـF�5��.�׆��Q�l��"a� �����|�c1 ���a����5��M�1��)�N�)ўWJ��_u�Mn_�9w��?������DzϾ�"+�p��=���T��6�ܱhM�E���D:��9qAӁ1�F������1��BV�V� �RS��\�,��Ҳ�N{�9M�M�b�a��1-��O�p���t�^�7���P~����D�Ԥ����i���[�b��JJ�by�V�6�{��1�1
��l����w�n�<TPb�ߙ~@`qL���U�/��Z0l.��e��u�*�V��"�6x>)�MLs�tpx�9�8cQ$+�֞���
��x�SOc�,�h�c�ӄꟵ�j
=rg�R6�x�kWq����xHN
A�3�e��{>�
�u]�)͢��n��A���&"Y�\�t9̀yv��cS�Kkg|��<�:�Z�wz}��5s����n�ӄN�+�c�g�G�$߸,� t��)H�WR�%�8��;�[q���W��X��pD�T41��bU��;f�,�R�v~Ѿ�yݫ����w�g�,�.��W�s�6O�g�Urjǟ;n�kt�Z00��)�fj�dm�`�4/�@���s��m `��y�V��4|���/�X���߰U����8ʉ�y�|qDo͓�~M�
/�X�T�fK�1��E�#�jNu_��i��A�x�_KȈG�s�8��f���-v��+��8���6�����O'k�@�#Kћ�L���5�}��P��c�͞>�i5tM�V_�c�-\]@�c�г�cc��L�4�:
-�N�JWe���B�Gl�A����[�JL��AɡI�k�&�H�q�>h�����
�*�p� �p�� �p�� �p��p�
�p �p� �p� �p�� �p��p�
�p��p� �p �p� �p��
�p�� �p��p��H�h�0��T8nտp,
�k��0�E�8�<IEND�B`�PK��[eiDZ��1Generator/Joomla/Eventsbooking/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:CADB227A5CF211E88589C5C58640CBB8"
xmpMM:InstanceID="xmp.iid:CADB22795CF211E88589C5C58640CBB8"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:b42cfc68-105e-4378-9c98-5081d884fd67"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�U�>�IDATx��mp�y��ސ$h��N2�]H��N�$m� ·��d��tL���I�L�q�N��$�8�1������:�$v�; &vb쁀;�`�@`!�ě��WZ���ݽ�W{�$��ܹz�={��9��<�y�����}�,2�d����3<�8�h@�A4
#�j(�
� �p�� �p��p� �p �p� �p
�p� �p�� �p��p� �p��p�
�p �p�
0�V��v�pq��:ϟ���sv|h������6������٢�����>��bW74����nj}]�D<���S'l�@��]�|�ܙ�����z�<{�'(p�AϪ���n{��I�#a��7ͱ;Z�m�g��e$g=�ㇽG�=��7r[V�i�;[;�������?zVƣ����Fq��,XlWa}L��wz.�7�TE4�����0�c{�}�����8\�L�z���SH8����w��e\���<��p(���c'a�P>���¡�B��$�-ʏ��!��Q
�f �~�e�n�2��]��w�K��+�m�W��ۖ?�Ou
�G��|ۢT���w��*�+���d,���f[�|锼Ǜn���͛*����n}�������K���<=�C��4O#������6���/�k�=��G��\��f-3k��Р�q����X���[楚$���=a�w�-���m{�(��-��V���L�FS<�=ZX��o����������_�gvE�������Ͻ�r�q�&�a�E���ڟ6�~��9��7m���(:N�R�6�/�E��g�y����
���/6J��sKw��{��"�x���ph��k1#�uu�
|�Zjk�'�]v��i����<V.H��z��z{Oc��ܾȿ�;�[��`ѱʟ��ږ�9r��o�+W^�{W#z���ǿ3-ʴ��#�}k�1-X�EYն�f{�����]b:i�����{<��+�����G{q4��k[��=+�Q-�\�"����;}�^=�k}��[.�2��~�((�8.{��U�q̮��ꋴ~v���;�*C�����=��b�%H?�^��ڶ�LK�`���5��Ǯ]{�>Wq7p�.�������A8�x��U1�U�n��nZ*��~i��_,�I��'-�CC���S��wQ>�ߥ
�P���*��FUV���
�*kd:�2���Ke �6�J(���p��w�VݐX!t�� e�(�������œF"�|�鱟ի�8]sǎW�O�W���E�p��-7�m�?��+$�4輰p�����S��+�NJ�-��Y=W�#��x�Q�I�Ap�Ҕţ�xF�R Gg�33���l��^;|��UY�5l��h����I�,[1��s[NX������LR�g��y�'b��-��ߍj�珮�����YY�穒��=��w�"�j�[��}�k
�+��nl�lM��Ġ�Z�̊��i��O{��6��N)�7m*���t{�q��1�}�>����QI%�|m�Yk[?x�ͫ���}���v|�e�[Wg������S�kr����7:J2������?1x�n�%��,Tz��h���JL�����|�MY#��C�6�o>�u����Q��RW3�
�p�1��o��u?xZ�g����*���J'M'⊆:������7m�v�s��h�Ь�j�h"ruS�p,nl�EC�[��
�>u��:��YM�V��lY�+�.l&F��\AW��`}do40pz�w��U��'�*hP��[�r�u~����G��Y7ߏ���R�� �Z�n��\�Y�q+�z#��)*[5��S���$�ncW�T>��12���?��g^�$��F�ɽF#&�<Ǡ��K�I��я�r]:��Z�˖-�W8Δ�d��~{��q�ȼ����듗Fe��@�J5+T�o��A��x�*:_ɲ�5�zq�z\�(��4�U��p��J�]���pA���evǩB��$UNU�o~���JG�G��z>x��ww���WӚ�������n�.�j��J��q�^��`���J�
�S���kVl��ԩ�vk���>�r�g�gu?S-r+g+@��������/���U�T�!����i��ŋ��Ph�D��x���ӌ��߬��'��A�"1�+4��E\�R/e*�_���V���U
���j(
*$\[mn�Ոu/n�H
*�t����|���9�����Z$Q��T���_S�F�9��H:���MK�N�t���%W,5
7X8�[~ԣ,\�[9���5���V��ڵw��ny$U�p�((�`�"�t�c���G���j��K�\��^v�K��'�l�0+�f�Q3� ���C�%Uహ(�S��"�e�G�
�}��g}���5*7�<�/�&�Z�E��G���H'.���6n�jb����.��4�5a�I�"��R*G�R �^�4p>�p,o�m���۫�=�gV�{[fۍ���+'��[��q��Ϟknm�=�m_1�� 3K���!ƨ
�� �z����N��U}A�����
/p�T^yM<���$d�L�%rk%A������E}d�N��*/��J8��x�]���mˊ[��Z�8lw��a]�s94�e�
��Yw/Yf���}l�eQ�,{�;�nF�������<rA[��V7H*�Z����������<n�NWVY�=v��c.�evgA15�p�
�S�`�A<$β0ܡ��~շr�J8�Z�W�2%��M�ê�E
�c¡�a
�;��DŽ�Y�.�̙��4f�k��ꄑ
�1�X�TP4
�M����$�=.�W:I1=#5�pcT�C��~����{��!�W��x�*�w�f�@�=w䐝�p���������������{��p����:O��/�U)'��Qx��/6 �zHz�a^z��Z�9���
�Y�
�!�N7�/U�ī�@x�
�=m>|d�(�;^�K%z�ܙ�vԀ�C�����w�ê����k��wx�T��x����*��o�M�0iݔ�Qw�!��Q}*����Ǟ��ŕ���#�;a/<b�W:��Ew,w(x"�9�ii(X��OR���U��^���'}U>�Ǧ�9z)��&�<I�IAqAQUpM�rG�
!�����B���e9�!(n�[��U�ԹQ>���Li�#/����k�gw�|a��+�4n��!��yʒ��U�n�G��N�[���r�rLmF��?�#�PL���J�h>��f�h�p.�%54=,�Z2-M^��;�>%-�ţD�,h�i�D+K9JPe�D3\�if�����J'
��I ���;Q��E���['{��,��3^SOx�v|zk|A�s��EV;�2�����_�E���mݙ�i�#8O3�n%����v�D��S�,K���E�ESɣ��N��{�mZ����R���X��v{��)�/������m��?��c���ӹ��YM��������N)E$
O��F��&B��kW����sP��
�Z �M�&�20�K�A��.�r�r�=�]���I�ܭey��G֮]7�~��~���*����u��o��AO�粼[�z۰�}���kjr/�a��6��z"��Ԝ+R�We2���;�I��V{�/ȇ*�f^j�a"^i�WyL�r�$����ޤX�b<wݵ��
��^e~!ӝ���Lўj�
�4�K��(wk��1�yɫ<&K�Vw�b����в�7���ѳ&��`�}��x
d����4V���J�֓V��]��°�h�Pح
�����������xZaد�/�?� �L'��zFA��Qv7�����x��
�KU�M��j��Z�R���<�{읪�-rO�q�����'�c$0�9��^#t�]�7n�Z9�豷+�I�P
T1����e��!�������Jlݧy���'B.�8�Yzk�^�GehF�&w-���<�#@o����.��*W-X���>0M�#@n����2�
k���'z���'D{�j�?�/� ������ ��$j+}5~�Ǖ�@\>e�@8����@8�@8��@8@8��@8@8���@8����@8�@8��@8�@8��@8@8���@8����@8����@8�@8�����E1@�H8���Rp������ː�IEND�B`�PK��[A)g���0Generator/Joomla/Flexicontent/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:1F0B1A2BC78811E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:1F0B1A2AC78811E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�ĦIDATx��� xT���HB�C
����E@D�R�D�"(�Goo���^�VpiE-jE|�^�֫նhX��b�T@Ye $B! d��.�Lf93Q�|?ϓ�af�3g��y�_fN�y�Kp,���g�)B�;��OhpS�?�w��������@p
8��@p 8 8������@p���@p 8@p
8��������@p
8��@_.VWȮ��C�?�����͈�6�9n����A i���6rK���+�d��Ts�����2(��$-�~�2�M~�9�u���ϔe���KYUA�l_CcL�g%1���e��jeӱ7������uO���'4U��t�!���4Yh���ɪ�O��/]�
Yh�G��Q&��
�j�V^U(��1C*.[�F�9w!ϥ���o^.ѭ:8�߶��ɖ���/�_&�-����_��k6m�t锚j^�x�j������%?}�K�^��ƾ{e?'N~P�
����ˌ)*,���𗙳fIۄ��[��پu�����������ɧ[W��I_�}�C����b�B�O�q2$e��a�L)����j*e큗d��~�_�үek�;���E@������PU�U�q���j�~��壙�6�u�Kؘ�[�J~^�W�s����|��I�d��iR^^ns����ޔ֑��n�Y#��cϝw}O�~���dgۼ&�aa4U�����KN�N���û���K�P��w���T��c�#��������K���z�oD�YNk4�&�K�X��پG9Ǐ˼Y�����n�-�6ɢ��n<X�}�y��AI�z�յU�E�o�Wό���) �oa�?&��I��r�/s�`���?�)�ȱ�_=��%]㇓�j�����3����w��?9Wjjjl���q}mm�M�^}��Bc{-Z����է�*�N�I�W��\~P�G%2�}���W���
���s��r�h��N��X��d�ky�Z�������V�ۆ�v��ݫi�����-�]�G�]�o��֠�n��<'�n[6o���e^z�����M��TUU�lG�x�,[&���>�>�Ϡ�5�� �(i�l��]�����9�����ʭ�Р�{O},.�Xޯ�S�Ip���h�ޕ���UrJ's�8�m�{�FIYi���h�ݾ��X��2g�cr���h��(�x}y��b�oc�T^*�\~H�4�h$T��W���S[W-_宺ڷ���J�[:K��|�]tߤ�2u������o˴G���6����ɒ�ILl,/�/�8��q��?[.�>��$������N��ڋN�������}�*�£y$CR��5wط߭��i�V�v��g���H6~�ވЀA� ?:e���+��os[Qa��u���ef�>'Kv�9��k��y_C��N+�/�&�X].G
6������mDwI��o�����c�q��s������s��sA~<� )--��k�8����,^���t�LR�bS�@�:�eۄws��?ib��4ړ�#�v[ޯ�;L��k�N++=��~:ڢ���5�u�,�h��MF�Jgn�m�����);ly�Z������}���3�In�I�<�ՑK�.I�ܹ63_�}!c�����8V��K���hEj�mn���n�K�� m��Y.�)%��Ɇ:&w��߷a#F��s�xu��BC�%}������
�ca�N��2��U��}%�U��T�l���_��_��:c�u?�m�B#
@��e0h�<3�'���>w��ߡ����6Sr�wX.��k}~ҳ�H�|쿛�9u�hN��ޜ-(�>���o�*T���F���ޱS�-]�~�v�,w��V�d�tsR�zިY̞�cٷg��6�>1K��£���RS[m���Ͱz�G��;�,8�\�S�W9�����l"ՑÇ�?w�>lX��Й�//x�����Ш�c��yl�,fL�*YG�ֻ��&%<.�|���*�j�l��}���K���m��Wr4�v���X�>_֯]k�v��1��vCm��פ]{�i�W�c��G�T'Nj���]�y���ߑ�!�f�\x��Y�Jg�jxDEG��T)8��������[��\���lPp�Yu�i�y8uZ��m����:��[���������J�v��}R�L�1�����)o��7vo_�j�y辎PuHN�y�k�cs�lW�)�g��R�^ �eD���x���G�5�A�HDp[����TN�\6�hx!���E�=]���M���ݨ�si}�ƾ�IQi^��/�N��+�J���rټs�%�h��t�#rm>���li�2����u8����lyV��h�ō4�t!!�9{�WF���(�+���#���ͣ�{�iN���tUT�$n�i�#����N��-�c�ۯ�}NO!��'�x�:!Pd�����>L~��W�z+�C;X>JC�Z���sr��ڝ�Z6y�LJu����
�:�9U,���V��~$��+�x=ߌ��Z~�H:F�"�-c��[y�T��])ۏ�'���jc�T\)�Θ�Gt�-=F9�|ٚ�����
*8_T�"�.�fn[G��ue���T\q�<��Y�(
}L}NzyL�g%0
�A�w�9�O���<�\��Z�����ҸO���fy�,�m���C������n��m��9B4�����O��?�|LΞ�2��:�s!�����a�
�w���U��o�K�p㗹�<��Ś
IK���o|��~��uU���7'�}O�SrT֙���ʺ����g���ո3��<����{�@w�>�fm"�yu_ڄ{�������Z[�s�$�rz�ذTs4Iݕ����9
�C�Z�ґ����@�+]��!���Q+y����tk�/rw��F�v���3�)�jp�;�~��
~W�s���NpF��>�]c{��7�4�\�xh_��Щ�cdlcd�'�O�{䋬�e��7�RS�6������^OJ�`�/I�l�p�l����T�Ah���℥��-�_�N^ݟ6�]��Z�w��\�Y�;r�h���.3�P�&=���-�;"`����צ)*M&�eȪ=OɊ]O�iK$,��}&8Μϴ\6�U���*څ��31^��*�h���8���I���.�h���^�*
�A�Ke��y�b��F�,��D��r:۠Gޭ/y��("8�ao�k��d����5;j]:���?���-�Ծ��[N�^��[:L6k:L��VB��a6B?(0�៳5Z��Re�M�0/��?��<����(�
8�,~A�}}[[?=�~�#C��WhP�9\yօ���� =���9:�C�e��3;S]}�}��+wu��dm��{��ꚪ��3��
��p�s�ͼ�Rp��8�'�B"�/���I�~����);O|h6 �BS�vx�鑂�����_��?�< ����\��\��s��&���uy�t1"�P]{�e3t����9��{�ѥ�3�Ԧ���<m4]�J�Ԓ�98�G�ч��2�MS��lk�,�稚�i�i�dXP�-�$�N}b��!��k�����g���/C���<����3�2
��i�k�Y�r|�7]���>�f���,�e#�?~~�bp��j_���NO��C����6��� i�e��R~���������nd�
7�q 8 8���������@p 8@p
8������@p
8x ������@p���@p 8@p
8���������@p 8��@p 8
8������@p���@p 8@p
8n����e�|
��z���r��)�'��w��JhIEND�B`�PK��[G[���2�2,Generator/Joomla/Hikashop/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:1F0B1A2FC78811E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:1F0B1A2EC78811E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>'�D�/IDATx��}��u�;��mw��h�Zu�
$�EH�:�!��`㘸���8��؎I�?~��6 `l��)6E4 �*�Ҫ�j{�����73��]$��ϟ�W|�63w������_�h�B
N�N8:�4����CHC �!j��3��@
�B�@�C q!�@ �B�@�C q!�@
�B�@�C
q�?a��+x"���4m���c�7rw�{�V�Z��1��o���}��~ q�W�V�Q��{���#���t��p�'��@�������-�'
��(�u���\���?�x2�&�N;eij@=V�e�)-5�?1��lƒY<�@���sga�ً1��Z���p�QC���.�|kx~#Q4MoFMC#�+��G���٣D�PҙLNu0y8�����6�DR��y���0t�@��>.&0>�)N�ggV:�PG:���㭘7� _)Λ9]��B�3���~���B[o�>�4.X_U-N4�340���Xk�a �:5(�pj��
M��,Xqd�c~�T�8D�<>��SL<Et�d��#8�c+6�ڃ�Y�o�z�.�B� �;�����.�9����nRY�d�dI5���)�7�"��.��"�pkZ΄��u��#M3>c�5t�@��a��89���u��!�>R9UF�o㍗_BO"�}�ch������tx|�v��}���k.���kѣy����$�PSP;=ahc/��?i�
�E�4�9�� �ϧL�5�
ޞL�x"�d6K�)���8�6��(�`�a��~�_��ɸ�(P=Ёݿ
/�o�峘�
��8'ū{���)n��*�]p:�)h�enh����z��g�"
��+���#�F끽H%�pX�A&�F
Ĵ9����:r�a�F��l*�-�0Nb֜����p�,F}r��}/�9�Ǿ�Ԕ�ȏ�=1
�#�G��>��rԮ��8�ɸ�0N=�l��^>�-
{U3�C�y�0,��w�T~"�ξ~ba|u�*��kj�,��:F"����e�c'gz�Ӵ��
9��F�4F�ǡi�:t�z��ڂ%�q��H���܃�}�+�Cy�@��#�����,�̋֠#��#�O�S�y�fͲ�0
���CSW
�[UY�9ӧanS#�Lk��(����p�n�b�C�l�Hn������UcƜ�O6�DF��/üK/G5�W�{�)��ql<�y;�Q�{�ZtNh�H�70�P���h<4=�j��euaX�t����I�����$�͎1td�4�N-��z`���~9^z�}}����m�{��q4K�h��[�<����"aU7b�x�7p��W~0B�w�
V����:$�a�W0��'���dH�i�y�&�I��g���W5�I�e
E�*�E��Fi
���"��}��q)_�Ibʴ1t�|���8���L�H5��E8w�L��Ï�F|�G6����rL]��Ѹ�z2N(�X_�f�#qN�dpj���\UqYK�N�X%����.�<q�v���a.3i��B8�?������`���P`$�P>���Cϙ-�bL'�w��,*A�����oq���$�T�d�=�"杵�` �D|�U�T#o��#o��y�Wl�x����QBj����w!���Q��`��㇊����Fϑ����p����(����=*VD������
�{�ϙ��DR�8�j�4̝ֈ^xE~8�8&/��u
�ɢv�l�ǒp�s�b�+���(r^S���eV�J!TR��M�m݊��ZL��C4Q��"��x��I2ش�K�f��é":7n|_]s>�-[������l��d�2S`�h�q&�q�t��"�L���7l@*��G�JEqLF<�q3��
�U"C��00���
�R!Z��C��9�Im���(+�ރ-ر�5���h?�qR4�A�rlzؑɎO�iޜ|�`1��c�9S�Cx��M�pj�(��S�p��e�y�����l�L�� 9����p2
ߔzT�q����8&'v?���鈰�
�����t����b9G�La�$�Ǧ�o�G��{�ߌ������M:�E��ʩl��j���RV��-G����n�rԶ�}�x+���H+�J���9[����7�3�4��U�xy�>� qLNx�.K�M� L�淆��}U�[�Ϗ�[��,O?���pΜ��n��L�;����,W�.�4͐��aX���2S���$)"��6m���r豍�;��X}�b���H%ș�T:�/<�3Z6��Ӎ��*������I�z=����䊝����}�pq������MW��}8�ޡ��S9KM��d�,�(���T��7�%s�lΌ�v-���ĺU+�f��cBlU��a�cә)&�4����OW�c�®qa�I5�1f���8Y�cQ\x�2��5�o?�Ĩ���('�����%$�)��٢��^�5��:I����(F��zM�uv�~���ܥKQK&J,�š�R�J�u��JB?Ñ5oBB��=����0/�
W���~<����x�X�����v/���\��<�|n7ʂ���7��6@ui �tta�]�����K�?���:��?�C��/
Y� �,`U�9á�K�qL
h9_�M�S�ú9*Ԏ��?(�*�T7����:���uԻ�q�E�x�T�����C(�W�<���Ȥz�/��/B}eE��)t%��.\����\^J~9����cM�?�4�ߝ@�c��Ƅ�$��Ł]~��f��
�d$��`:��T�d��mw8�X*��.�����}cۨ����Ē�
��c�_PT���)zφ�2���q^S-�:wq�x�%l<ځ��_�H4��$3���E�:�痊�e��j0r˴g6�
��/C"h�����<���PK�f�W�&�m�� �[��a�m�D�!�t
�r
��23�^t��
*�c��y�����_�|�%�|�1on�&T��mށ��>|�Sνt�K�m��^�����%��A�&'1�#CAd����6]@(v\Ǚ�=/�!�n�Z˪y�`Ӄ�V���
M�ᬎ0�$�3,�p�lU3�˜�FA*�y�aR��X��B��#��߃A,jn̽�]Q��]m�*�k�2�d������7_��2W�!�����Go���±�>DH�t
�w$��pI2�x���j?U$�R���J��x,��x8�8v�t����C�&VWR�]�#4�30��<V0�a]�Ղ�n�єq�
�����
;-�UU������y+�
�x~j�j���yb8щ/]} �[�>���&�ύ�W��B�v��b��^74����ʞc���z3f�F�L&;��v��P'�>q�:�9*�!��h���ՙN�7�U
�a�3\ֵY�- a�
+�
�f-�r&+m�=Xz��p�T�I|��_��|D���(
��q����b�|�D~�m7���&>�|)���U����yh(/C-����e�Ο9
���d�'qt�n�d� �BBu�wZ�iC�:Re��ܯ�
y��
�hV���R"�e+�<�X�z�z�$q|����;?�3AƢ��U�a����ux�������o8���B1�YsT�-�blŲ?�Tɱ�@�c��)��L�$je?A2��~;
�`r��m���&i�}�H���sl ?���H<��X ���c��=�����r2�(l��Is�5�h�@7C��1�a�TI,�V�GIĈ��)��d.LojR���Q~�56&n��\?��dOdvv�&0@�k�%cg����jÑS*U�L�7�s��k�Lx���E�L����rϼ��'���� _���aGk'*K���sf�1�=$����p�=��\yȋj7�=�Z+pLIa��S�|Nd�Ǥ�Ag<�A��~K��j���O��}�e��!_�3����N%q�x���`tL) `ES-._<�U�x^%yi�A��u�<3A�'�P�,]��P�J��mD'�J��G*�E2�E���Hg
ի��=�Q>�Q��3�q����$�Xn˫i�7kr$bz8:�:�*����A��SQ�GN�@td�.
�e�X>� ��j��S���w��mA4����P�8�ɵ���ۉ�H�d"����h��I�c7�=%�+����ow�����-�s���z�
�8&-lg.��t�jv�w-������Y��O�A*�ۇ[P�qbvU�Ι�e��cFm̈́�gWk;�4Oǂ��;v,�|����i��z����L��GV�����T�m�y��a��s��?fe���C�F8�L,!�I�����<~ژ��ZA�TEss%EC�TA
<�ϭ\�sf6��n�I�u��o:��':�[~�kr���ȴ�\^������gJM$�(���i�d�Hb}�$��e.��3K3�lRm9D�|pZa�[�/��?�S��L��r������s��&�Ju8`�Fp(�H�&T1mr�E�O�xm_v�v�s8��/@�>-�6k�X�Є�!̡��,��^I)FV�La$�
�:]���x�n�d���]�8����X�4�d�pz�Y���ؤu���"�!�1�%�Qy�����C��P^рj=�� ]^\���=���p畗�=�ݺ�8�C=��0��/Y�y��x��m�)�(�b�
�_2�!�"�
-�ɟ�+6[�t� ��)�����H*�R�%�@��SbFU�BA'�|���\{���_�L�.N�۲"�R��ܼa�C���Cuuw(��
�t�;�z2����>��X]�8�t�#TZ��f�@}y��V��B�
�vwc����t�`�̝�`@)��ae~h�2Җ@2K���\!e/��r�n�&z��G�i�?��i�d-��M�KZ؍����
�?he��*�֡�ɀ� q�q���N���U�(0�X�4��^/������T���EL�!�A��Z����(����#mJ9p��X*�{���Mp̆��!�A�eE�v[Iz���q2k�4�R�C��bA+�-���$�g�҈yŲ檌�_vLĩ@�cR�*�N�8���
�wapWy]M&-�K&�(��5m�j{�F��=g��*����`k�Q\6�iT_��G[Q_Q��HTm�VN'+"��h<�P�;�b�nZ�'�0�K��q!���f9�MWfL&�$575�4yv��n�Z�uXmT>���h�we�����]��y���']]��S
�f�fUS��v�fs��6�J�>������'��b+�F�8�{��I'q��sr��X+v�af��D�$<d�$�18�ۦ<��������S�O5��[�ʭ�q�
"���-Mp6Q�]���՞m6�4�4�>�k�\|Vsk�j���.tS��8&���O��caqb��J;խ��
vV��K�4�R�u�Jb��{�s��q��� S�˕���B���H<�z��h�,�H$B
�i��th��N>"ίa�(!�ﷵ�!2F)������5�
��D\V D����T����8&=o�8&8x���YSq�Ydmb
v`ڤ��_�{SCA�~���?��v�i�żi
�O2�A<���bWkGn��s����J�V�{`�%�
&�Cl��s1��@{g�
}7����$��$D�@B��N��Jt}BC���E��I"Ys;6i���A�{����ߋ��r��3���ڎ<�Kg�H,N��B��p,�����|�UU�b̬����Jl9t��ASq8��#�w��bnu�rÕ��Go@5I���^ܮ\���2CF5���w��#l�:�8Ds���$:�P�̬aX�����G/��m���b��ch�h�o�
�_�h�p��h��W��h,��I�P�s8�_o�9��Ո�"xu�U�'͉m��5�J�wp�֪�=d}��u
�ם�O�a�������{�>ʱ,xw
�*�:o�*ƿ��m���#��Wda��өVHv>��%�ѧ?�ˆ}d�V���0��Z5������sPX6j`��zU�낹͘V]����'nƿ<��z����ϊ��
'��Ȥ�.X�9�L�e�뱻���h=רI��n��NȮ�
B31�j�8�͵<�(u�ʀ��`�]�]N�ߵ��M�b|i텸y�2�Ƕ#��?�m���6�l�C��H����[mT�2QB?JJKT����Z,h�W�?��-�Ή�(��{`��e�g/���<K�Q��V�1,��5��
�+�!.�<����'P�u�-4�X��_s
�L!�����.Åg͆��Ƌo�óo�ǖ��М.,�٬����P�a��V��j4M�?����m����X�h���
��H�I���s��&d���q�;X����od!�[�d}5F�x�n�s��솔��`_�c�r��&�#(u+��F�b���Gq�o_
�8��u4���v)�'G���R�a��(��l�0q�I&FM�q�O�<��v�S�� ����(���i�R�|l"��!f�M�EX����C��Q!��VK� *K�(G��l��;T����4�����DT�9��P�� �b!3��*m����5���ɤ�ˮ4�SMJ�S�T��X����g�1�&��u\��8�\W��ܲ���J���0��b}O�H!��m���E7&l��R�)J�k�R�"�U� \���M�
��s�v�Y>����u�8x�s7�t�'�p.�VP�R��f�Kq��z>�V��M����+�{�!�1�aX��DW
��,�bdj��MbX��cL�L'h6Wү�oB�X�5���(���";,ǩ�6O�
Z�tr��a�̡�U(�H��G9GO+���H
�1���}yξC�ۓݎ�+=\�ɖ5��\i\s��|�:�2Iy�%k�6g��h%�e��Y�ϰ|'j�T+�ע��4�����|E�h��l�aI���7W��5Yˏ�B�a+��7�Z�1�B{2����yE?�?�|
�M�MC6�˥T��ql��60�ۥ"8C��h]�
��,�)%E�i�Ipv�}��ǚ*����Y" $c�`)�}~�e�S�x5�_���G�s��vziz?�\����9�ҭ�=�z��
��b�q��0��G���YD�i��ayS���0�y�f\�T���+�1O�/��$����owt�[�ۀ�ۍ����,�Z���>��`
W�S���cN+k���LE�pa��;��8]n�����@��zoi|S�) !|l?�=px��0�
kn������*`�_E �1 ��
/��ܙ>ǹSk�v^��Nd�9�MD�bz�z̊���/��/�Y�L�W��QK$�؝��<�W�>��
z�����TM���U���s�J�P8W��(�Gmi��8D��.C��Hv�!B�l�-\��S?G��a���E�~�ڷ��0"��p�p���[���C�$���588#�^�<>+���#��j�e�c�p{��U$;KX���XQa��W6���3X7��o�ۆ7��OF����������������X�P���>T����m�F�r��vwG.X�����L7�۸������+�ߵf.��Ot��������,�s��S;
��~$G�гe��mC�yk��������
�A�H!��"xk9���A8�Ad�#*����WZ�tx����睁"d���U�G� �`���k?�dO��F�?
q�8�1U�]N
~�Kf�n�<�?�}4�V�"��dN3����PWZ��p�ݹ#D(oi�o���o�KH�t
���7��{0�2gv��gP�`kk����Īsq�?��Nx�T�8�K�W��ڏ!�y};^Cr���ddج��������."�I�+O"52w�U+���V�!HD�m���מFj��_��ًMg�RR,>��C�Ǒ$��ԋ�݆dǾۦ
+���&LCY ֟��TE�_�j�uc˱j��qbh��V�
xs�>��[i�@���WÔ�RU���Gp���w�ޠ��*
�zD2�G���T��$DW�S5�\�)�^U��0�eYv���T�X��2���ImDP�p9�s�c���x�${ᯛ����*����T�f�
S���_@�T�+X�`�Y�l�FV��B������j�8�ĩ���|�-/�?��_�v�&��ϋ]-�����A��
ә��i�,`�:�*���.��7�́�h�L�.�g���[����d>���B&DZ_��{6#�
If�F�7u&�'q3|\��40�;"��`�9�ɲt..2CR�29�Ǒ��4���L���[��p���>�����"���h'�M���@�c��*8Iњ��p]XW�Z0�����"̫����ˮd�_
B��xդ�� ��}&?��x`�6�x�f�oX�ۮ\���������_��S�9ٸv�\�3DL�RԮ�s8i�oz���ܥ��ٙ��R����
%�g�)��';�,�;��eZoe-�f�e���" #����QO%�)�@鼳�q�{nm�&Q*���C�U�8&��0WF��� �%���&������֭�_^|~��8�.\�`6�6֩�fVW��9����^���(���W��?��F,Z4�R�CA?���˚����]mh��N4�U5�'�!���0r`;<L��Ef���e�)Ǩ�}5�*aSdp��D��P{���ohF�Ɨ0�k4���IR�h�H��85knP��H�.��ۦVhr�*q����w8G�*�ˋ�~R����Gi��l��z�j*TEs����=��������@4�-G�PVU��~�YTUU/��l<t�Č�
)���� ǵ���XBij�帺�/���Ƿ�AQI)��?��D��R"�$R�݈�(��C��:�v*E���Azx]��S�p��
�݁�g&"����ɾ.��c�wP�4��jh'L6���L��>zϴr����*��nKk��%�%|�?G���{��ժGrBhF6�0���Ɣ�2�"NZ㍼L�*G8���2`�!�N9mW��xw�ܴ��Of�t�)�O���vLJ���!&�� �$JB%���jM惞L�uNY��>��ʓ�}1�Xz&e�Ū9/�2s8i�s��,#K&�J�s�1�Թ�ʨ\~BK̥cV(m�ދh�!����`2+����G��
_*��#�#�1y}��9���'2�QCj%��/��WWJ���(�\���\,���0Ғ���`��7�|ue���dh;"�QQ�||>v�2Q�$w��c��0��E䉏��=�M��p�ұ���c`۫�?���ն�[U��e��SE�C`O�n�|*��;��J[cq� ��G�D/��YԻ�FT�IMi�z.Lje$EQ
�����K�T�'��L-�*�h�T8I&QY$d�t��Q+iT����-��s�M9)~�nRI�J_K�a�1R4��_1)
n/��Gj��G9~P�^�e���Bϕ�_�8G';m�58�`�U�58L��|)�4ѹ� �\�/c%�u��9��ED)���s;q�%+i�z�c�K)�y�f�,̝R���UX5�=#E
"���|F#�I�\~�l"��J���ϯ��t�!"�$=ωv�k����*KGO?�mj����V
�FF�nYy��2@�U�v6��ls���U\�L)�Q�1'��BKYm�8&���a����-L�B:�a�&߹�Jԗ��%g�?�_U�%����ŇV-�w>x%��}/�ޏ""���~B����%��=���O|�S�J&[+]4�g�T�C��_}w�c���)�V_x?��cXId�א�)�������V�W��
�nى;��g����ޏߌm�ڰ��1���ÿ��G%>�z9n���lj�<�~nniə�:�z4��☤`e�!_�s��#60��i⯞;mڪVa\t�Nd��݈k�.@���&������Y��S��_T��g#;<�9���سh��>��6l<t��h^ay���xb�n��O7lRDe�;.^�����-��1��Be�&��~��~��k���8n��������q��;�b(C�]"����Ne�JѤI=�i$☔�� _�:6U|>�u��e��v('b�����x�a�&֓4�?|������%�^^ڱG� ����H"�
o��S��L^#��v_���z��Y��;L�C�۳�Df�����cZ��lީ��>e�i[�'��ºEs�oޅ��b=r�p��Yxi�!��C�̡�?����9#�(f�M�л���o����`��x����O]M'b���^�m��nTA��W���G�{M�����<��="�7�L8�ޅ���X�4w?�"�#(�I��c�}[h"��]':0H&Tw<�=':�=�T�-O���D&[�8N*��aG��G!"�x�֡aѺ�ȁ?S)�W�B��J�g�i?7��m�R���e�/�N!3�б�s�%��+x��l��x��®}��ǞA��x�Pn��h�$� O�?�?����|'w']�9�%�1�*�4�=V���������C�
���J�b���OEz�z�2���e������xi���B��
���084��FuU�"���0���UW�CD���'EBǭ�,������
ŢX��?���--x㟾!Q�B��Dyޗ��e�����-�J�K�h�q�̠Usfa��|�|��W�#>�Ij'��u�
��wbj(d�����]�̃ם#,h��D8���|���#�1���`� dI�/�ֈ�p��ԍI?C�(�+�PWT���U�Q*����F �&_��:l' >����!�Dc�� �t�����g��رo�Z���^#?!��W\�ۉ�b�ܹp������8uu�?���W�χ��c�8�щ{?u�Z%q,��;p��
��ú�����HyD̎��ğ��qd3BcM�,^D�q{��7n�+�Δ�{������v�s?}Kf�B��Flܻ]==�Tڟj�v^^��YD�4�X:k&�اA����w�u���+�"�!8ٴ_��a�j���3g�ch��A<����g���0r�^:�$rb��L)+C,Ŷ}TR�?�~3�/]
?!�x���
|^��p{�$����_e�r=R@{�@��)�:R���S����@[w7�,Y����*4VU�B�C0Qt�?�߾�
5�h�����A����$3i�#��=�9�?�ǭ��i�*�@�$��8{�tܱv5�.>K~B�?�[�◯m�﷽
��e^�s�t��a�S)%I5q-��AU�g͒�pK���9�G���B8�-��a�֖c*9�������6\X6�+�����U52��@
���q!�@ �!�8��@ �!�@
�!�8��@ �!�@ �!�8��@ �!�@
�!�8��@ �B�@ �!�8��@ �B�@
�!�8��@ �B�@ �!�8��@ �B�@
�!�8��@ �B�@�C �8��@ �B�@�C
�8��@ �B�@�C �8��@ �B�@�C
�8��@ �B�@�C q��@ �B�@�C
q��@ �B�@�C q��@ ��qt��
�]Lw��.��N��O���5�ϸ�IEND�B`�PK��[�A��C$C$1Generator/Joomla/Ignitegallery/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:4A632FACC78911E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:1F0B1A32C78811E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>���<
aIDATx��t�Օ���^-ٖ\d���70B�� %6i�HaOv��P6��)�@��%$��f����{���-ɒUF����w�͌ڌ=c��Ǚģ�ʛ7��{��=cou�R��^%
���W�[%u
BH,�a�hBb���: ��
��B� �P8!B��B� �
!��A�pB(�
!�P8!B��B� �P8!��A�pB(�
!��A���U�x,�Z�jÖv;\�>�Ov�,�D��Ěv6�
n�8 �LU�����Og�
�;Z��j�+q���ΰpy���Lj{
<z��#x�1��Xe8`X�+�m�|�v�'=�Nn�!�ty�W�
�h����ݰ�%�E^�y]/��{mh�Q]/� \5��y9�t. ��o�͝����8��wS,wN�cI�G���ھw��:-�R���D��0�Y&+��R�őeM���/�Y�����Ӌm]bUk�k࠲^�W:�f���&�q�-�X�
+�m0�~I���}YA�D�s9��m����>�}X�'�C˃P8>����;�F�he)*�"��1��hh���A�|y��ۭ�T�r+J2��ExYo��-��NB�L�a�/��;h�0�e�*S��U�S�,l��g$��m�m^x�R��`3=�<)ݎ3s�gu���x�Ɔ^��
��gY5��#��!0,tϐ���D�3>��:4��XQ�߄P8F5�`�{
#d��;�G����(K�`Y'f*H<�k7��͎�n�6��1jY�D�'u�ۯ��î�M�1���M|>ߦ����
�[y?����$�QIK�I��>rV�҂[��b�r�x~8X�뀅�>V���= �p�2�S��̀MW�ʊ:/�G�������n�_a�BIJ��1*��E��f�
ǨBf��m��ʺ�#����*Ӂ�JM<4���r�q���p
Ǩ��@uOl
ӛdÆF��?g\��;��ʅ11!%z��#�]��C���1z��3�Ś�ai�O5ر�-6љ�a�^�\���R�ĭ��V�p��]�i�ǃ���jV��Q�ځo��pK�����8jp
I,|�b��s��x�ֆ�^7��H�A��Z�P�֣�#Lɷ��ѭD&��*�W�?�C�'M �p�w�`�L�3`Ww*K��Y��p�~�H��C�R�����I�Lu�{��r��-�T���]��{7�~���l=Q�/_�r.�pč�8e�/WVǮn;n.�bjV�睝k)���/ۆ6>�}�mRn˿�5q�./4qE��?��&(�0t��_CrN,\���y���)%����,�i�
협3Pa�����*������+��l>f��(H�p�S����u�U�.W��z�r��_m&�7�G�y��S8�K��X����
/���e�Yv\��)�<Mnl���]��Qz�ou4�-�\�g,���`y$�'Ib{L�Y��츣�փQ�L[
c�φ?&�����Vu���T��P���5�R��-��<�*��W�9?8��3�Gp�F�1�U����&2�8�W�On�����~�k�-����ΐ�"]g�
%�0�(M��OL�[�uu��e��M -����.���E�7t�唐7i!�˰�\��%e7�o�?w�?��9��Q���a|�g��Fiq$��ڷS���-�Tc2t�
�Z�[z1}^J��=�q���vٵEi����G�jeE���-
�}|c���dQd���i����hU���Z��m�[�������\������t_���^\Yd��y>�0�
��:���ܤ�ߡD:�a�z0�bG�2�S}�C�w����h-��紆y�-|c��"ö��8Z��$���?(SV��lp;`��M��?�k�-�l����\�lx��V��4�Ю�ͣËR�ێ��N�O�ɀ�7A��U��M�
$[�fa\��I��j��/�(Ԙ$߱�/�OY
`( �$�rtaj��s}A��X�l�S��ţ�����#���#��B��o��?�*�Ă��}Z���U�����ի$i�JH6|屫�}�݃�ݑ}��V�Vx�$�uç��ʩ`r��L�0�������l1��2T�4��m"?)�6K5��$;�BtBv��w�|��#,p�0g��<���/�}�w[-O��O
m��
���Un��82+ٴ$�i�:(q�g֚��g[�x^��M����v(���d����ńor�ڤM�W�֧��
��m}�aN�ߞK#�t�͐|��D�����G��b
�4!EYN_)�bu�2"�[Y�[��4�
���s�)�#�ս]3��!�%�Vq8��g2��L`SGx�9/?|�sB:��a���+J5(p�ޱ��v��o_2#vV�H��ݣG>-�D:#�/D��������x���j�-q�jsY����7��&%c6;�5X�(Ob"�{�.I@�H����#���i�U���x����A��./2�������_N�g��Phنn%v�-91N�)$�3*m��,V��
��S��/+w�]YB��Ka�O�.-�`�-�;"rU�2�A�,�0t�+�p�0��*X�e⽣��L�6�m�۫�<�Wb�_��Ю��sr�XZp|&|h�rI��W1����m0m����W��ǥ�-|��B�%�,*�c[�OV�nD�U\�(5�����dp���'N��]�_/�P��g8.B�*�Yl'���`�m�sp������Z�������2�C�}��1+���(���W��47rC\����ϕ��U��XK�2�a�3���N����XC�|~��9~���5�r]Nm�����IaRpv�2�ی�$�H�գ����ݦ�
���r�/S�lbf��5N�,��v8�^\Y�hJ�9vV��:
ۼ�@k�lX�;Ў���5]<�/�;9-4�c葒ǹ�}���u�)�9J Sl1�p�bn(6�q���$�:���HCӍ�
���8k[�HO1qea쑽K�lx�MK���h�LY5Q��[UJ)C��o��l��z
=*sv^t��l�B�q��^2mn���dk���j+�+C�H$y���ʎ'w��q�O9�e��.��cE��:)j����߿�V5�@�����J��D�]��=�hH���ї�E&�i��l����3-<tp�J����8�G�Y���:v�Q��m&��[8+���������yT�7�e���6v��W������Vh��`���H�M%c�_B�+��p�
����?�3�X�V�.���8Y�TaᕣZ�䵩V16Ɂ�s����f�!HA&�e
�Jq�X�J_oV�|�'�,̱pm�Q��*�Ȓ��k�KV�v/6v9`�[z�u
�uS����F�e���)pZn�
9N^�h�Z��8H�����ZF�Ni�2r��8yU٭,�$ew8Fh��q��;ȭ��u�H&H���@�ۦzs�yv/*��H�zm��A���\�:����{%�f�<�U�] �ch1�P��%SB-���ԱC�{R�v�1H��!Y�rG9��A���Aa�����4��3y%34�d��\�f��t=�ۍ�Ɔ0#��x�Ng���9������1)(*
;&�^�.��1����L����/c��r:�b�fcC���j�2>���G[k+��ٍ-?E}}=::�u�09%iii(.)Ay���0S*�����ޅ��Z�۳�G����}��p&'!7��+0}�TN?m�r56���^���Ƀ(S�P_W���zzz�$%w��G�<eʈ�e�Flݲ��EG{�j�v�edh�Q5��8�Q�aGGj����F�aZZZЫ�����ǃ��n|�FŔJlߺ���#�����NW����C�p��_��v��|�)�ǥ앯-NJW�����!�i`�]��3g��\�3,;���>��C|�f����x�)8�o6��X�{μ3p�W���I��UU�����ޛ^S�6`%��^��;�o��;�m�=����6r��p����EK/��z�
lڰ�J0�a����7v,�+��r?߮,�إ���Q
H:�|�)����A<����î�×^UPX�<��ڕ�/�pWW'�*Q�&b�a�'غu��c���_Ag����g� ����X-�6���^�`�W�T]k۶m��w����sr!3"�������L~�0����u���9'-=M��˥���Ğ���طw������O<��;w
qy���t݊ձ�%��JWV�Y看�TY��e���L6{t�U�I�[�sϘχ�X+s��?M
��(3Z���,��u��B��^Ճ�zs%�����c}��@�;|��@o)M��ӫP1u*�M�1���t݀�mٲe����A�,m!�z�_<��~D��d������r8��.ÂE�Q:n����|�����+�V.���{o��"�\���\���+L4
�]r�9����U���~%<����T������۫�ı�#Ѣ�q��8LR���r>���!=�#?}P���ɪ����,�z��/�Ko����]]�ʂ�"�M�����-c朹�^K�are%ο�b����Į]����u���y|�[������Ԉ����̬,�y�0u����'Lԯ�K���
uu�;x�����INJ�X��K.��˾v̤�]�J%�ʲkl�M�Q>��#�ػk��b�"4k�A6�h�p�q�r��hR��<��S�Q&�P��U��t�a8�ܾ��C�F(�ho��?�F�?��^��==� ��˞�C0�
bu��H��t�X|���綾
T.ī~#TBX�s8DD+�����g�'�:W�E�NY�|�)��">�_���U"
�������\;�a�qe嘨L�OٵcG¬��{7X��g����H̙;Ӕ�X��&
�HCð��
e��:Ģ
Aew��K�w��8ĺ+#����T��p$�����ե��HI��SV�1%�|�D���g�ےs?��3���d�[6m�[��y����X�(�m8v�؎fqo�9's��OH� �����k>
�OQ=�Hy�&=#=�}�r���͛�ݤ�L�N͉���I��Z�r�vm��r����O���m[���ۂ�Xq7�-X���8$����&�^~3��Ni�z#r4$�!�t;�c�
��������EzHY�O5Tq{���|��,��[����)��xL ݔ�a��9�H�����\���r�֖9ҬG
jDCC:ڏpMl����YW{��^7���4��KƎ�y�'"
WHҼ1��Ŭy�����&
8���{w���g,\#!������SJPM8�cH���X��jeZodžuk�#n��"c lrdY���|LY���䎜+"BӦĮ����?.ԣ��r��'�����Y��ٴ�
z@�s0�صc{��d���!��?�p$%F4�_��K:٪!��-ّꁗF2e�T�/+C��Ixo�;�4�!��v�BҺ�Ԁۡ�f�;\�s)dnMSm-�v����G����u�%IK�L�q�3K323�V�s�a��BA;�;2بφ��uU�ܔ��
GtWXl!/7�Y����'���zE%E�%��h�->S F��"
pp����+B8$BRȫ��uf����ߋ�.�a�#??��i���F�<�藑��2N��҂H�ߺiӀ����cؽsg�M�1s&RRR�`S8�� �<g|-��?���E p��KAvn:�n��
qS1�Hd��d�8��3c����`�y;�>##3�eX�6o�Q����C�P>iR�(oݪ3l����
G�I���#F4b%t&q�����h�'_�ڍ��_:��ۙ�΅L��5g�^*�t�8�)�(5-
Y�Yڲ8UT͜�m��]���0�ؾm�v�d�r��~$͜P8����T�7�9��~
�H���B4�N��0q�Nwm��̇���";B�Edg����(�����ʇ�8aGde��.����9��Y��'�ޱus0OBFd��h!77����2,<�,ډ��p2��Hc��A$&#��a^��L>����L��&�p�)9�ʎ=�����$����%�$#�n�*c�j�2b2Y�pqP|���`�N�ܝ];wcA�Y٨�6�4���
�RC�6�xd]�E�4C(;'7�>IFF�^$@����w���Hf�N�A�7�W�Q5{v��H(��ۇ�%!9 ���@�J]���,pOf�L���$Y@g4"Y�S�քX����u��?[T���E�8�=of&��ym��z���CSSS�u�Gw��F�w_��l�̥��r�d��q���Z�M�a
p��ޫđ�wKC�|%������^|��!���G<OOIb�vn^>Əf�l��ޒ�q��K}�j�:��������Q��^U�656`�����UTV"g��B�H{���o�7D~�������<��eF$RM��ϖ�!���/.��h����!�˯�9�U��2z��%d�P�d�W^��kk^�IS�"G�5Q"'ð�Y�s���x�<��`����.��_ �ҿR��}{�p�:�X�N�H
�wW����/��\���&}���<tϏq��}-,���ݿ'<��4���Ln���;�=����G��a��E:3//)�i�x�:�M�n���
+Iث�W]�x�c��``40�-�:"��wn�����+^��;,�/X��+[V���,�B���j1R$=3�}�.��២Ϳ�ށ���}�荂�ƌ�&�RG{��y��Zo���'�Jľ����~��[�F��N�(C�Nv�y,��x�u\r�� 5� n�����e�����B>��S�4����mm],���8����oʡ@(�wg�c��Zl���������~7�׳R�>���^��@���dw��=K�97�8����9��w��ߌU#c�vA
>��'�g��+���w�u>#A�VO��q�1��k��FT���,�Xܕ �>V�0/b�B�8e�{�8S5ֵkV��e��E+���{�%�zo�����!
e3D���]��[�Hد���<�n%$v�SRS��R٧����'L�{�6M=K��_}
B�L��,���]��֧�,Rv�p�C����^��uk�T_�Z%�2�F����2���H[`e��"8��F���x��,|�A<�}Je��ڲ̣l�I��q�X
�E���=�L�xĿ~�N�����?�ȣz�̑��o�O�@v]_]&܍�)��m-���29.t~��D����wt����)����'-�Q\��l�#�@���A�]v~ˌr!�S��F���S�k�v�����6�u!�ñ' Zu���C��G��)��w�z3�o���s��Y)������t����&Y=m�_X
�����)������NX�WU�dp>z���npߘ���)��
O=�xXj��y:���%���N|�H�uW5����
��ǁ�O?��6�4���?DR��[��K�;o��2H\C2'��7�g�'kq�hRܤ�zExB�8�H�m����U%e'�u7KK����}H$�A�0�������P1uο�bVd�x{劰����t��P8N*�Q��*�Xb}HڷX}!ٓ�������7n��'�1r�G��A�H�ŵ�݀5~�O�i�"""(C���~����uD�Y�ګa�KT�3��1jXx�Y�%S�e����,Q ��<�H��ƌ�)S��s�4Kkk��6$?�2W&A0�3t� !B��B�
�P8!B�pB(�
!��A�pB��B� �P8!B��B(�
!��A�pB(�
!�P8!B��B� �P8!��A�pB(�
!��A!B��B� �P8!B�pB(�
!��A�pB(�B� �P8!B��B� �
!��A�pB(�
!�P8!B��B� �P8!��A�pB(�
!��A�pB��B� �P8!B��B(�
!��A�� G=��
"_��.!QP�^���X�y��N
IEND�B`�PK��[/��-4-4+Generator/Joomla/Jevents/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:4A632FB4C78911E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:4A632FB3C78911E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>*��C0KIDATx��]���f^o�+���b��F���
��XbI�b�[�$j�XҌ&���
�AQD�첽�}}�?��{��,�
�9���y����~��s�u�e'x��BA�(�e�FıEHC
�
y�B�`Q��=�
!�@ �!�8��@ �B�@ �!�8��@
�B�@ �!�8��@ �B�@ �!�8��@
�B�@�C �8��@ �B�@�C �8��@
�B��v�����*|��oj¹�]�˵�=��[^Z�A�����-��C�ƒ~�h$Y�v���_�ON8[6�ʍq��0`��퍞={"���}8#G�Bvv��h��*�"�x�-]
M�`�۠k�65�c��p�=X�b>/��-0
�7�b����A}}=\N'*kjP���̡�<"���o,����~#G�9 ��8�w55b�Iʟ���C�ۀn�a���a���ӱa�z���CAA����N���1%�q�b1�].�v�m�Z�]<E������D"���:\y�U���W
NBߗ�B��?^�֭}����2�l���D�֭�QX��?
�=z���;��1���!#����g˖!3=��,J$ �A��Q������q2����q|_�
�FAA!�vӀ���#3#q2��y��qcƠ�l3233a|C��:��0r�,9i�D,Z�@�-DLLb:}���W?�E����N��C �8�+,���Q�?u��ְ*�4�>?l;4��n�-���z�J��EK��I$Bk��t2S��shpy<D<�jk����`(���"+;�Z�*�h�9]�ۅ�B���JK�1h��ֆ���VlB��h��I��
aR�֬P>���,x�n��о�9�[�f�`&�:�h��t��l�6�)>v����2C�^�������Q#li b��X�^�p�E)
�������?�����j�sL�5��v�ǩ�p�*�6ljZ��$Ũ�����RV,.:G6��N�ڗ�l/L4$�4�|-v�<�!�o��*���{�!�oS!M�apW�m3�F�O`��a0ca�
�f�GŁӰ%֜d;L6EL�8�Y�D�T(*^J���B��)Ҫ`�#G�s�\y1M#�w��,QNj%PҐ�.�@��[C$¹g����F�.B<�P�t�b\t�*�1�|T�����`��<��}
�@�8ы���TH�@��)Ea��:]K��zE�ϱ���}+S�h�F���i���F���+�6�q�F��n���^���#�B�N�s����cpک�QQ]��Ff:��l�p]��
���LK����T����P��Nd��['҈Ѷ}�$�aSF�?�Y��ಥZ�e�D���$��o���N߷Ѷ��T���PS�O�"&����@�c�aޜ�P^V�ISN����#��@m]#�|�ɰ)�,K>��J�$*�hLĐhnB,'f�qR��}�"!����Y90�s#&�Į�== �,�>"'���n'�5ij�
������ҢHGY@�}GF�hA:W���v��OϠ���m��q���@�cϠ0/k�Z�
5�q�Ӻҍa����
$��͇�`
>o!r����lv"ԋ>�%Toow8�4��a�:��05^�2Ы�㠑'��t,ղ�jHx�?i^Zҁ�U�٣�(�M��4��(Lh�@P��o��
-����ׅ,B��x,����UN�{Ǩq��dcذ��x�B�?�)�P
x`l:��[5l�v`�q��Tn��x�d>�b��C�����db�I�
e!���I��D�B�D���ۓQ&�
r��o�tXS>8�a0y8��Z_Մm��MS���*՝.N�V����?�'��GR9*9js�&<��3H���?�����Zn��#�1{v:�Z�\�mO$��i�Q8�������Z��5ӱ�s��A�*
�`��8�lP7��K��'��d�����h�Fo8��i�>c+;Wy��)�8�y�N�RV�¢|����8�_6�%��f:t�5�+q����䣏0|�~���P#W�^��|9?�pz�!*�;3݇4_%���������<tj�6";��ƙ��dq{�X�֨TvV:z�B�ɃU�a�I'��-����t���/�U���
<�Vr��>���A�LdXjdK=(��/;�YcP���*ȅ��Y]��7@�Z��G����9���f����i��%f2��ɔk!S��� ���&��
f��A7>�-�~5�|�}�~�æ
���kk�G��6�?�(���>�"1�Q�ώ��сh̋/V����p9#de8�fA��%LxȴȮ���%HJ�B����MVVi!�F�Rv�"3���.�
�#��6����UBm��9�i��
�`t���
{�����(XKq�ꈮZ��c{t :�wݍ����
�[Il�Ɇ
��n��3��� /��;o��O��.��Y�'u�I�qc8���>L�^�����UHO�@ZV&����}��7�gx���W�I�DTh���Pؚ�Hw�����?QC�p�U��
"V��
S%�Q���h�*�4b��kU%�uF,�Q�������v�����No_9�ڑ��6LM��<��'x������K:�;Ѐn��q�F�¿V�훕��Vz�V��
c7�S��&����
��,bqj�.M�42?�l}�!�:ɜp���kRa��91t��[H<��
Z��`-<�9�
)��j�J
k���Ov�� �rp���R^T�)G?LkU�Y�C��_�[;u��mB�c�˷��Q��;\c�(�_6�X���~v�o��ȍ�����R�h�=ݿ��X�%xD��H9/?�2]�����dd��j,;Q7����C�(�Ș���u6m܂��
{�XhAS0L=z�j"���Hd����B"���tU�#a#�"��B�����d�;N�8�w+�F����e�l"T�99,�2ߍs�Ɋ���ؙ�8���R���R"��tS **�����U���{�K$��A�I��wS�P��L�Թ���jNqMq���ECcjjk������L4�����T�ScY��ϐ�4+��
�9ܽ�"l��$��L$<��,����|
�
UJĭ���;7���Tt�k���`��Cwx��{�@+̇��^W��w�Y�D8�^/�h�����~okܘ�%sl��4~�ط�����Ll�F��.�RS~��M1CG4f
�zQ�BTմ���>��{�!{�l��#R�z�8�b��-x��p��P��fs3�mI0i�
�LFPbH8�y�D<.�yj�~�%�1ل�P���������5�w�j����cͤ��F�Ϙ�Ht����8��Rc�U�(!��)��.ш8L&�ˣ"A�Y�H
�u�v744�Z
��#�
�t�֗��UTZwQA6y���`�&�NӔ����r9\EQhhP��$�8;D��$����CJ�'��NԊ:���O��u5�c��_���{_�h#�'�����\uX�k��RfL�D�-8�m5͊}Bq�-����v��L2 K6�� l
���(Dn^>ƞk�J�Q�u����@��.��T�� ����wV}��\�(/S�6p�
x�>����0��
0�E`:lj���d��I�EEDMMe~�鏀;��x�x6���G=i�Y]�}��x����;����0�è�')����5z*����R[jлo>�E]��uZT^Z�*)��";���U-�P�k�xK���eBK�s���l0w���+q�_߈�U�y��ѻ�.���w�~���0���N{�z2=g��">���o�
�V�rJ�Qfgfa��!�ɤI}�Aptc�h����O��c�k�̃y<�[o���=�hT
��߿&�cq���vЈ�Ȗ�A"57u>�~��
����b��O�6���/(��a�;�:.
��OⓏ?V�i�y]س�|0.��
x���8��i}����V^�P��H.���t%3x�X[A�1�j�BY�f̭�աwPq@�� ����{���-8�kG�f=baR�S5�
�XO���P٣1�U��XNOy3��x(���\|��*��s@n42iT��-[���ǤtzeϽ� ~��24�b�a
hG��:ߝ���UN�w88��$�w�wQ���瑠{���N=s�j��Zy�w��+�����>6�o�X�����C�{e�7���aĈ<h�]WS�
����^{��0r�H<��������5Uո��������lc ���j|J���tc谡���V
`�G��^Ø�cq/�Kfvn�}VWU��K.!3�Zup��A����kq�i��!BE"?~<�|�y��ڈ���N����Vc����3�TI��?�O>�ޟ;���78hܸ�.q�C�����p����;p(��Z����¾�
�+Q���ݮ�Z�4��EɄqÇ��
�z?%SŁ���Ы�<��&��\\;��c�"��2;�5�D��q�5`Z���^��7?�Zj�5A�7�q�?^���G���G����J؋z"���CG��������f>�>0�l���(e�af|��!�KXQ���S#y��:NE�%6��!lz�U�-���)74�G
.���~�e|��GX�j�ܭc�TU�ݷ�AQ�^�y��&�c=��}F
h<w�tL9�ddf"/�@Ugklh$K����x����ĉ�=G���1�&��L������+V��&�����?�#�:R���{l!Һ�۰h�"\0�\��?��9��gvN|�4�3����E��c��y:|(���*��V�5����@[n�����_݀�t
��R\u�5�y�R��d����1k����K1w����<��H�b���~�L�1OS��,��M�{�8���貯��k��+Ӱ�a$jBU�=?x��AP4� G~�g�rPN=�T4҃��3���Kl-��S�2���Sp�����
��8v$n��Tx���r��v8N��Y��Ɍ�ix�ړ�:;\��^��{("��Q[OJ#���!�y������`�б7��}dG�Ha]8}���yP�RQ��4G���Kp�7^��Ϡp�y�1s�x����YYŔvb������(ǕW]
����F�#�4�᭷ݎ�|\2˷͇HOWKQ��u��x�w��^��N������;�t��k0��0t�P<�!;7���/
���3��oP�q��7�gm{�t�;�ֿDv�=�L�:Gs��9���D�`�8z�Ѹ��;!�R��N�}sW\{
���&���}&U�y�r�J�=#F�D�~���Q�W��k��S_���!o�?r�b�Yet��M������p�p䠓0���obsM.�t.�N=ṂD:-*���l��@;8�55�7k`R��M�L�䱫��/�nC)�x`�dh>�7�c�ѣp܈��y�Op�ïRw���M������k"&��Z{Y�������D�rIeq�fn�iԳ�ed�.�Yd*����}R��)SЫg�z�-T�o��1[���2����9��St����$w�u7�=��mH�3"`��{0q��/��N%
��$�$3�����>����+��Y��F���{�P�BVV&�_����.��������p�u�N�=s�D�'OQ�ё�ML����&�[i��qd��ʎ(�X�G��err�U�b�ˎRj��Sώ�~HkhA<i�p�7������Eim#�-��4\����Q�{��sP���L�f�jVmQ$����,''ېd�V�"X���K��G��/W3�çs�,�Տ��d>+�����Zr��
���r����,%{C?�
�@@��^O������z�iSP�P��/�d9��
�w�|S�v�p��(�]�ņ{��h'�|2�!ӣ�
��+��q�2�~� -��E4ǦL�?CJC�Ɣ}�$��@445���>�������M�م��"Ē��;���p�>CcƏ�I'�����p�"d�.ąY�ްZ�B�UՄ�>/�U�����̠n+���LqT�e�ņ��x{˅�r<�f}>�7�i�eX��z6�D����ԣ��lX����e5BV�ס����y��u�;=�C�����
3�Y�eY5�?��ܑ��\��%�Y���W.W����̽�\ōRO�.^��W���՝,�����T�Wt�Pơ��\�^=zᅿ��fVm;���ӟ�/�h?���T�\���剩��կv�Y�"��א�h ��˳w�2�2e+**���'S�;��o6��cU��FREz
:�����Y����9�x�o��-���q��q��ߒ4=m�T�Po?&?�}���0�G�����nTR#�)�I�=��e5=�V�G"�s��JH,F�上g����(��}�����t�)�8g�s�T�8���F���ּ$M#�Yx}�W���Ȍ�8�UJ^��k�u!b���|�1���a����D��3'�g����Oz̭[-�hkdeﰇJ���#�9�w��ٙ*�c�g�9-Hjm�a��� �&�x���xe�lL�qq��s�s~8wV�\� &`�#���0�}�d ��8�L:�={���]�q��u$z��e�-C}m-�]Y��Db��©���;ȏ���jJЊ�r�(�ݜ�7����.���=�
�#���p���>����
?@�ƎK�(����!�݄�.���F�:,�'�;�ę�p"ƹ����o���ԑ�k�!���
-h�3�<V����su1��cUU0�a��ҁQ�FK3���T�kf��s�ǽמ٥����7��Ű��`u5VB��1
�&g����a
Տ�y`��=�H��:�-a|~q�Q�^�ԡ� q�?����_/��s�??Yب�����xB
����:�n�!.]�
{ j�Ϳ�%B��ڮ�
CE��9k��D\�f��ctF�D�L���vm
�E�u�]�.�Mt�^|��X�z
^{�?*�{δi�F�2���wA
�k�`��+�s"������c����XZU�PC�^���{�@�[��)��2�l�T�#�*6��;��euhZ�Dڸh����
-16R$�3�:���M�B� "�(5�ٮ���t�Dv�z�R"Y��u��P��k�
���pM�~����/��<�"V6);�؎�c�2h�i
&�Ɛ�ȺU��9�����)�1�ϱ;�ӯ?9�P����;8�������I|��Ç�yz�*���3Q^^F�9���J|�x�R���������
##S�M�$5ׯ�17���\5Ng�G�l���z~v?���B�;kݓ�* 쑇«��7~���q�g��B�8ڟ
��d��y�]�������8=�ݯ�������U̮Y�k�z�u�(���D���7�GwW�!^6c��p�;���Y�<�p�j�V+�7ٳ��+ܰհ�T�ͪ��Oc�[5(4&�>��w��x�
���L�e����6��{����"5K\���NѤ����zҿ�J�������M��169������<���p�I'*s��u^�ӵ���?�t�K�S�t�l�&�z��8`�X����ۡ%�/�Dp89�҅;�W�Tҙ��z%;9����k�9-�\Κv8h,^��Kx��Wp�mw�_��~KfLw�c~��Q�h e3´/�/���_��~u�l")$�Į"zR����qT{ݤ"h�zV�<�=�#��
gU%/Z������
і��m���)ӀK�רU�K9.�V�X<Y{�+�C���>X�ї8��{Q�yk���?�l�f
+p�7�X��34f�c�j�Q������`���Mߕ&����(�#��e����9��W�\�����@j�װ#�a�&Rd�(��������bm����\Z.��[j��:9�&���ϻ��v|N��a�p�]w�ٳ1���X�z5.&����F����H�W��է/.��z<�ܳ8�/l";wsC�5���q�J
� ���,'g���hHCZa_؇���q6�7cPߣ�'���ݫYыd��T#��i�#m�0x
���@�F
'�^E�/)
��g�"��� ?��zg��
U��ū��J�$5]={�ŗ�g��p�{gaO�{������=z�Ƴ��g�����*;7U����L2tl$�l�-����y�e?S e|�������/�,��ӧ��t�@�$0b�H�A���[���H�s���L8k��Ax����S���V����^K*���f[�)3���U�+-'��Ã/�'��g'�)�@}̴F��gj���n�#1�D�q��)DM��0�Nx=yp8dT���a���.�*ۄHSt�5���t#�X�C���ԆA��I
#�u��ǒ���[P�$���Zi�G�!�� ��Fm�Ed��$�"�ml�ɹ$����U���i;!%3햻���F���-������w��̶:��=5ԡG�����?[���R������BO"�S�Lޡ�`�;~�+N���\\~���ʯ�
��2j�X9�m_Ov�w`�����e�ٻ7L��JSU���SC��8�'���#
�pZ�1n ����f�����U8��/�w��c���
��aR�;Х��)��<�މʦR�Z���Ʀ�%���C䠶�fMg@�Þ|3QQ��ɞ:V_��85�8�E��N��z��$��oP��ǃAz_G$Ѩr4�(ƪ�z5�
�;Xy��x4��+���d���6h�fg�����3UWbX�r�;wR&j�Py���9b��Qy�L�����E.�|B,�؈���:5V��q�ݸa�6�=��
�[h]Cm�RF;
��os���9��?^�_�{F���M=
�@�Q�c���U&�$�w5����7^�>�P2)?��j��Flw`�'!H���+W���Lt4[$_�i$��Y댶�j����Ʌ���"n5Ғ+c�"��`1�o8`���F��ǗDmV
5����<��i#ӡ\��p�ԓ���(t_6�6k$*Fʏ�t�Y�K�u�W��Ӷ��QK���,h2�8��HΫ��?�U�(�/�T�F�~��8J�8w�l�x �y�MmIB��Ũ���p���Y�Ͷ�y؋z��D���պ��+���ÿ;s\�l,��3g�?�2���4i���;w��9�
1��wZ7���fބ��<�f=�#�>���kd�����x��7T����'U�$Y�qGn���-j�c��8��Ъ
*��Zb*u�Cz�:�EP8\ G��Q/j���8���z�&�ɛ赑^�����k�yx�<ʳӱi��TZ������`H�q�ttSy��F���
��~{>�=�Ȭ!�jĒ�����F�Ψa9#վ�^��n�HS��:�^8H2s�i'��ALv�[�{P�y��͡�i;���nS)�v"��:�
��g���Z��j�I�Ӕ��E���v���C݂9��f�ⷱ�Ҏ��=G����H�����v�t|&�헴�tU�X�4��:i�N8A='��1j����֓� Pg�u��/"���>�#{�K�̛o������80l.)Ƌ~^)�ΰ�L�9��A^^F��)��i[ual�$ZU�a)#�@9q'�X�0��`�9Nj����(Y3F�'��I]8
��|���lXտ'^�XO�O�>���G�j\��pb�L?�E&=�).'�R���P+L�I�Acih����"�N�W�`�ቈ����YjЕ��mW~��~#T�FM[Kr��>���3��D �AUO�$C�c�mN=�D�A�Nsw���OD�w��?Ro�ة33��Cs�v(�y�G�*�Y99]L���5��ؘ8�0�_�QS������]95�f�n܈⼳��
7ބ�?L�zt&���3�ex.�Y�?��sޣ������~�9]�I���ڻ��nl�u_N9�$�z�����π�C�]#w�֮�on��d�^r٥�gO�q�fk���&�6�a�#a�d`����P��D��w�=Q$,�^I=1��_4R$��x(�"ݫ�4?ܫ�ⶃĒ^��nhP��
��z��ݨ+�Qok�Ó@s�ٶ��@�c�iԛ���t�����0I]l�?:���hc
��T☕xcK�ˤ�LFR�[���n�><�45�B*w��*^l�b؏��5�6�ZǕ��Q��Э�\�֜
���� ���>�,�i��s�+�4I9z;A�W�{�Q;|�7oެ&Xb�ؽ�D
�֯UEpR#jw/���C���/�Р]w��������%\Mf�w�q�7p��oQ[S��`���IŶ
=#�=�N�zz�����Y�8�����;C��#ѝ4C����L�l���}xx�,�~�E҉���Ê/�����������.�t��ƞ!fM&�͙���-3�]2o�9�*�7֭XEig
ڐ"�EH��/�����i�㰅°Gbphv��۩ׯ!��¥��Y��WW#��:����~_�Vb�r�݈��pR#uڗb���>7ىi&V��q
�IZP�����\��Uڃ�|�R�Z�:�;mK��,����M.�;�}���
���LUۘ�0��������(;�3[��S��#���.Fh�Lj�Y�M�ef�=��N<���u�Ӟyι3n�5�{�*��+q�a�w{B&�0���PZ�q��)��1�;0y�i��SORcZ���|J�S�g������gǟt2z�����X�-d2�o���Z�l���fg�U��s����{ey�5:V�,�e�2����ƃ�/���>��j7|}L��^w��r3�bQZm]iٞ3���L�F�*�Myf{�%��
��0�j$ѪJ,�a}�Q��4N2�'I�t"��ӑ�e���4*j�w�X4�{���b��᪩y�#�
@f�
e߁��A����[k�F�;��/��W�@˶��rl��Δ�L�2=����$Ihm�4C4[�5�Leu�Y����y�f��P�cq�uOS7�ϻ�!'�ߝ���WF}�EY��3�G)�rW�Ԍd\�}$�*h�,f�;��}dU[+���R������г��
�vU�c[Tv*�l�ssw�j;w�[ȴLKKC�Ύ
�D�!�#/?O�ܙBcB�
t�֫"�ٹ90p�i�{}�ʞ%��DT:�?�HIʌQ��d���FM��>ƕ��7�"���id�Ω�
��
�!jPe},u����Z��o�7�y�tu^Z����j\@X��HCO��^m�ߩ
ߩ����No�wjQ�Lk#�i������d��i�s��6��p���$�PRN���lj1�%��:�"���K�M0�����VtĞrԦ���^`�5Ni~5���f|Y���`�%9�DK���%���v�n�v�Z��n'W�<Nyr?T��UB��3�Ejڑ
Z��c�����<
��atئ;O���Ik�O�uX��N)���2o���ǒ�B��pm���*r;bs'�����u����B!���dv�v��|.v
���@
�!�8��@ �B�@ �!�8��@ �B�@
�!�8��@ �B�@ �!�8��@ �B�@�C
�8��@ �B�@�C �8��@ �B�@�C
�8��@ �B�@�C �8��@ �B�@�C
q��@ �B�@�C q��@ �B�@�C
q��@ �B�@�C q��@ �B�@�C
q!�@ �B�@�C q!�@ �B�@�C
q!�@ �B�@�C q!�@ �B�@�C
q!�@ �!B�@�C q!�@ �!B�@�C
|��Q.�A
�*�8.�7r/A7PFˌ�`�Zܷ �IEND�B`�PK��[&�j��!�!0Generator/Joomla/Joomshopping/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:D794BFBC52E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:D794BFBB52E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>RZ[IDATx�� |TU�ƿڲ��@�7DP6����^ܚDD��
�b#�,��n�b+B�*��:"��(*{X� d�,���2/
Ag&q�?��Hޫܺ���sLGNf� `�|%�B�%_�L"�
B�切��A�L�̼��˅�A�pB(�
!��A�pB��B� �P8!B��B(�
!��A�pB(�B� �P8!B��B�
�P8!��A�pB(�
!��A!B��B�
�P8!B� +o�/���M�Თ�d��bwy9B�7��.�x<�a��A��#c�X"Ba�D(�v;�z3�
B�
����sa���)�f<i2��_��i��ٸo�Uy��g�t/����Q�Ԩ!�{��E�q/6��O5,��G���HY��&o��ATbB�(?{f��O6��E�߳p�U�Y��A*���ٵ`��Ba8�t��z��
�(ee82�QX��j<�*�����x�="7LB��G��]R
����Ga!=�խx���x)�=����0���!�2�%!z�0z
�Qr.�ԔY�EGWOkh�p����p�y[ɯ�:��0���؋%\��1L�ۍ��H�Eԍ:9|�AAzF�
�cyA��F��$�O�p��c��������_�q{��� ��uJd,�.���s��mVi���\�.<U������.X�
Jo#
էJ<e�h��{��g�P8j ".��d1�5��]0�'�l��/����t�b�iϡ�9�
̖���j��!�Y�֘h?�P?{�H^����V���8���p�&��J���T3�6�'�y)�ҏ!44����!����Fj�����^����qt�X##���Y��4~� 8���i"�Z�i�W��i��`��5��"��|4�1h���wK�
$q�q�T S<���8�������<���̈́���j6\�2Dvj��n���YB�=����}�&����Ď�7!�_o���D�9�~W]��
��R!��U+;;v"wLJ����:ԥ�n4Z8��(A����y:��9ʭ pe:{����Q<�!p�?Ա�PH�*O?Qq��!9o
Fp�d���r�����xHe�С�OBڴ���ڸ<�ap[Y3H�)<r2���֬,��'���L�˥�!i��ȍ
G��+*�6ұ��]XP
^�Qb�N�So�X`��p!'���:�Q S�:�r!�fLl"cba��á�v�ա5%c��S�>ӭ7�B�쩳Q��c�ĨvED�D��7Q�KX������ OL��]�y%��|�����8A��%���庸������Y��c�#b�F�i��p��S����I�lAp���]Z&�g�ׇ�{��)�NU�����U!���(49!���/"��!b
'��K�����!��|�R�oj+!I����o�
C#<"q��\Z �E��t�#Hj��ȨH8�>P¡r"a�Q0˱��Qz,��B�Du���N���e����:�v��%&"�gWXc�[�f�&6ǹ�8�ꯀӥ�U�iA��S����><L��L'�|B��V�uL�KZ�k�{�}}���^u�4�,�-y�;~����^�[T�~����+m�E��.[����T�8IG ع���:wA�Z��*.F�][�nO�a�R��L�<}�E�ef�&P=q�w�`w����@�"�~!��A4l�X��r���o".��6
k��+�<��u��C��(1t���sg�B��kQt�{ELjA�ٹ=͕���J���M"2.��2ʦ�Ѣ$���G&��,m8��H�4��>`Ej��Aួ�ԞD�x/!�
Nu�"`!�8��p&��9�l:z�9�Ñ_��+^:ޤ�4�]��9���%m&�
OBp��oje����}ޑ�O4d�V��H��x?#�����Ѣ�UZ4/��ǑܴY@�3:���[Y�q8Ļi��Y�WxA����-�"&*��8�逢��ܓs�����"m��]a��^4Ą̴���EM!+CNL�
���z&��.�5TB+�n�&/��U�V����a���<)+i�P!��#��YD���Ϻ:{o'��|��.��75� �G`9���`J��M�擣'k��/�Wb
���z ����;���Ɇ)[}N������61�C�D�j�zU'�<Ӎm|����Q�=8��"YCRҐ�>r�n��ӣ�-.��N�Y��;(��S [B��G�x"�?�m�6���^��G8T��z�X Q��iZHt��_��Ic�j��=7e�7��n�xX��N�_���Ԥ�Zl�}wKX���i�T��(Eon�1����,�[�s�j7��#:����r��J��5�,�g�9z��C!��gT�T�sd8�M�
K U�O�-��Z%��5q�P�k�����3��z� /R^Y��Ü�ĩ�st^C%A�&-�p�W�#��y(�>�xj�nTg�����-(�x�Nr�0J���>xl�N�!l��ZS�χC�]����!�PI��d�
Q��V�8�`.f&:��+ĉ���FXd�V�jVB�Ebt��2n�K������z�5�,(/+��r���b<�2Pz�(��~��G�LT�ʩ����|�kڰ�]!o�����n�o:!rh��F��'�����YP�����<Vy�N��0J��%eH]%�UDD���ع��ڢ�!ZlD\�<������̹FE�$,��
_|V�S������X�^�z+5SU�|
���*⦊�":�EX�{�K;���ѽ+L�Y\�
�6
�FA��n�9���:��î�H}����<�ŵw�͆=Қ�͈�<��"�
IN�
K��~OFf�7�âv�^`*��B.2���3��Q<8�1b���[r�.D��^�J�` B��WS=~j�l��-a�܉�<��<_��M�!}�XX�����"u�Kp�0�?��Q���VS���DČ��|�2_|AjM�ˣo_�Es�9Bj�p8�mn��V��=��?�ѼD��
������m��%����S����2T�j��R�Ԧ��h���{����n�;!�*�)+Ջ�'b�[h3��"��������ٻ?��Ll�;?u�nW]��0T?T2�,�^�1�/�'wem�_���PH��f�O�;��F��=n
Jē�D�y=�}`j�N7ua�s���D�@�g�q��U�P���
��v _����/pDF�R��u*v�H�]~�0��W~���p����Ԯ�*�R��G{�w��+�Q�*����T��^�B!uL'ZͰ��!�A<<��7O�%1֔&0I�t{.mZ����t�Ɇ3����n1~65J��a,��� 1�NX�
fd�y�$�N��+n���U�U��T��H�*T�����a��+٩�=v �
���I�xȝ��������,b��!X�U���-��a��~�U�\.]1t�����6��T�f�ju���14�x��\o����+��՚&o%�����ܦ�P�*B(u99�JW7Q�Q�+F�z-J\����^�Ƙ�a��^���PVZ���
����A�
��/�!Lޅ�\<�~}�^�Rp�b��TY ����rX�!,<B�
VX����_H�<�>��pi��n��^g�9�h�()���M�E����P8~9ѐx?�B�^*���#U!jQ�"
UgP�ݖڋ����z�
`
�F�ܜ��ݗ�"��]�۷!+3S�����}�=��f�A)���MzA��L]s�z!:6�O�Cj[�n���%����r�v Y""������!*:[��Ɨ��!22�gĚ���1t�
��8�S�oFӦMu�T(d�����"##1r�8��&&����k����#�4%�9���UFX���2���0����ˢ��T���<E�y(--ALl쏋��.���ظ+^���Ч���cOΘ��<�x5�g23pK玾�������|b =��t��p�<����c��l��T�;�
Pq�����Q��F\�z�애¤�1z��8�����}z=�Q]ê5�(��q���7�1x�C�; Q��j���w���\�Mn�P&*��\�h�����u���H{t�/��\yP�̚����c!!!�����F�T���=�jo������4�)�QQh��د��L�>y�}w@�,�)jK
��y*¦(i�E˖��o��F��I�$q��G���c���п��\-4S���?�aC�lu����5��@��ti���((��!���^I��T{!��h�����D4HL�!iU�D��ظA�+]�#�3d�H}��q�_d��.hNlT*�Lm�\B�zhҬ�\��t�����qG��)��z��_u�� ��z���
�N��թ:��v)c5��Nl�~֎UJ��=��.^���Z�X��
\}͵ړQ�~b�+?�!�Z^�__|����{�T!��OLE�AC���I�S�L��_��6[�j�MonFd�a�?{=���N���6G���S���#�o`B�|�墄n�xemoj��o�v�opRpO�~����w���ǎ]�m���߈���
a�@�B��WԞ��ii5&�ΈG���m~8�
��_�ݗ_]���m����Z_�w,���C�{���s]fn�
H����l8�0��D��ݟ��B�Ң���s�s
4�c",-Z���*���I���4h�UX�f���{�m�m�A�u�����|�n���з�ݶ�)g�G��)((���C���i�KW�x������"�¿���v���驅y�Ǡ
�s���>m����썧�}N���ӟĪ�+|�~��?`���Z4��~
˗-KL�����K*�38(X����e�ۆ�����Hi�R
vhw���J��~?��DEEV(�����9sÇF^^��w"""����
�6����@��,w�u��,�Δx
9��-�����]Վ[Сc'��:b�
�h�;c'N
8
)ᗻZ��oo����UECݻ�}�sB��kt��Ե+�u�&j��9�
�,^�J�{���[��E�Q^�z�mz�-�k�1`�4=n�9AB�Y������S�h��A.\����_��k
~,_�J�5�)�j�d��!h����ƧD�����f�p$&���λuF4(?�&�R��W|��K�p|]��l��?�X�l��Y���}�sW_}5�Nx4�h�ѿ�]w�n����~�/��T�ڳ{7����K����F�r&Ͻ�P���=����T����
u�?��a��umn���?2��-
<7v���d�ƀ�����6nU�ׯ�qӣM"�J�J���`/�Ⱦ�K��l��ެ�%`��tw����4j��f�
(j�5l���x|�T4m֜��_3��y�<@E�H;�p�w܁��q�~��d�ƔI�\�u?{.�syb�$�����tL�0�j1`}��G��%�A�=��a�>W����D%��x��l��X/��. ����9)) OL����-��mۻ�s-Z���Oθ�X����p,m�D-��k2H{w��M�����k�ÇΥ�����kP�rΝ��#�^߸ѻ1����-m֞T
>q�:��ju
�{�9���$�@U�g�Xv��K*�n�_�#�^�O�۽�}lܰ���]�v�6����-oo��KMMœ����A�
S��������k<���9�d���⪷���?|���~�(D6i��dU1Uy���\
�+��q��i�،�M���n
>��?}�ڈW3&m�6ȷ�؈�~�;w]��=n�%���� �y
u��ކl�Hh�(�=)).�������
u���L�
V��_~���k�o�u'꼚z��4��[7_��b��nX���E��
<2JO3�6�pnŚuGAe�gNDZ*�II
1u�,��Z ]>۳�w�u���w��}TS�=��g86y�c�3P���kT5�i��Wӑ����E,��)�L)�
_�>��!O�ZB3e�g�21q|ڏ�٬gD.e���������U���~-Y8�~���\ǎ�po��|Ǝi����"�8j�.q��˖^Vٸ�U����
���Wxo��kf��}�vz����X��U߹��x�}aA@�@ue@�>����o���^�����=�[n���,�����-|���~ J�f�O�c��'
�2�H/|�7�K+�=w�-\����*��CG���³sp��aC�[+�aaa�;�K�{?��7�<��������8��r��&Iyt�ko^]��7�|1�:��/�3[��+D'O���UIOO�����T~��_`�����]�u��l����!��-�:2�?�9.*�1h�P4�9�ѣ�o:w4����ij�#ֺ��bFCVӝ_~s@���+�����P���\A?cp���{?^��.�CO��)�+%%%��C}��e�x_�����S�۩sg��h�F�.��Q��[��^ӣgO<;o��Z5t0�o��;��I�[�(�
e���t����f�O��Wj��o�^~�����FphX��)F.�?��,�j��A=tj��)���[&�y���GQZZ�P1���䀢�]l���Ũe���M�[�l�&)��S�+�9)#c~^��ʶ�f�j�V �ՔdbR���TՐ�
�zd�P���?�P����C[��O$�{��ă
��,�z�J�T���ŋuK��
��UU�]J0�h�>����M�d龽{u�SUتږ�oh��9�_�ۧ�E�<EGG�u�6�ܲ
O��a�8
��ab��hsC�j=�脱
3ϝ=kju
�E�$tT��x`�&��Yy]%o��7�ؾn��R5}���䕌�8Q�+��g�?�/���}��gHl��뾑�p+^^fH���f��
ԴlU��ةF�M�Y�q�/y�
�_]Q�DC%{���Y�)Ƣw�w�/s�ڡ�!��ES����oǑ#G�� S�Ul�@���P�_ۡ]������ñ�K��^q��>��z���0p
��|��|���'7w�Q�hW���:|F�~���p���Z��*Z��T <��Z����Ȥ�T^F�)TB�b�C�@UE�)�0_F��z�j�P���u�AR8!�
�!B��B�
�P8!B�pB(�
!��A�pB��B� �P8!B��B(�
!��A�pB(�
!�P8!B��B� �P8!��A�pB(�
!��A!B��B� �P8!B�pB(�
!��A�pB(�B� �P8!B��B� �
!��A�pB(�
!�P8!B��B� �P8!��A�pB(�
!��A�pB��B� �P8!B��B(�
!��A�pB(�B� �P8!B��B� �
!��A�pB(�
!��A!B��B� �P8!B�pB(���[���m
�\g�pV��^B~�5�,D"Cz5�*IEND�B`�PK��[!�����&Generator/Joomla/K2/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:99B63D3952E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:99B63D3852E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>��vIDATx�� tTŶ���s�(\e|"��/W� ��@0b� �l�@Sd��E����.��EA%x�@B�Ϋ]}�� h���?W/�v��>����vU�;���V�GmBȵIQ�!.Jg(
BHi��JiBJImW�!���
�P���BqB(B�A!!��
�P���BqB�A�8!!��
�P�BqB(B�A�8!!�� ���BqB(B�A�8!��
�P���BqB(B�8!!�|p��'�����������_�9���lԬQ���GH�;�_P��@J�˱S�V֓��8����J������^��ݏ�OO�R;����dr�e���Q�!��rrsQ�6ˈ��9q�ܽ��
�2Q���O��(����T���lEff&�=�4��,4��n�j��nn9���l��Fx{y�ݽ�%Y���:ΰ���_�������ߏ⨄�yz99�N��}�JQJj�i1&*
��<��u����\�q��!��IX�fM���U�.vS����E�U:z�?�A@�.e\�R���H�p��Uжm[��Sn$��v��RyOސ�[ ��M��U��sg�ʋlB����:�0�/�J�E}f����g�ٰ!6m��x��{��d#WEF?���ل_O�@zF�LMť�4���^��R �YC�{mڵ���<�P���!��A:R�i����ۋӦ�?��J�s~v6���`���?��PJ
/7�~�����8��r��*�����ɓ�M����w�.4k������y��(�,�^NfFV�4$eX�n=���+
���8��s�`���rf���=JS�gRiͫ�L���19n
�hp'��b0#eN��L����ϝӍ�"
J����3g�f-�9��^_����˖��{a�{�iiH��{1i�
T�����|=*d*Qj��\E&�w�F�'z�}��q�����Q�^�O���
Ҡ%u�;�^��
T̙9�6n��\D�M"��6iJ@`��Ffz:,�p��0w���:=S���x62[�}�z�<(R��p��I��uGh��P��w�>���K��}?��{���>>�"�Zd$�(j�
@��mѢys����jp��<Rϟå��ݷ���o=*.�[ZZ)y���
2���ER�,��G�c���]���}�aq����P�vm���ƘQ�t����j@��-1�!��];#8��n�|��]E)))8z�֯[��G��C���d����{�M~��0e)����ÆZ��
3_�AU�b�D䗢�Fphh�B4�5)"��5l�E X��F<��IԮW~��E��EU`�\�::t��K�a���gyJ�%�.F�؊�+��RBq�2����
��K�m:CuZ�������6�Ի�����3om܄Gz�E@`�R���m<֧�.�7I�E�x�D���k�U��f�����Pix�38|�R�z7�
�V�F�{[��KEx�
D�����M@H��7]ؗ���~OD��P-۪ZK�ʖ�[�h�A���+��JE����,�Ǯ;���n
���]7m:u�'��,^�~x~L���|�Y�=NGA�а9�(��.8~�(�v��`�u
k��#{�P��6L��H��7_���8�\��]�(R{!�����O�E8ݴ�{7A���1��w�Sl�又B:��'%!!!�.L��������3T�K:1;w還%K�P<���32/ぎ�n�yTE)�hC��~y�Y�6�4iR$L�hdg^���eTqvmذ!֭߀�産L�oܸ��ž_%����P�(�
�%&Z���\2U��E�ɏ}�E���ע��0�z�{s�z�\ܜ�<�FDGH6}/�����TT �8H�����Z�-����ܐ!�g-e���vn�n�5���WH^�u��MU��U�#=#��
�mH�^�~}̙5����o��5k�S�
u���/[�G\m��՜�,@����|5.H9sƒ����ǻ�w^S5E1S%�ʪS�:U������GY����G
&���w��A� e��;|�<1�9��w#����N��n�sj��^�:���8nӅw�E5��O=�ޏ?^�����z9�(��9^JOC�'C���V�2�2�ҩsg�2q�.��(�߁��kX�hڤ)�f��;�4I/tN�(�HQ��܌E�����Q*S��I\�Ұ,���ب18u��4y9�F�cI�
V�e�<�\�g�^��V��]w�Ә�`sw"
u���#
�ϋ��rך7oBBB���w�y'�N�j~��,\H��a�|�z�
��^�i�"Ά��?*������Gu�|iv��E/�Lq��[�djx����ld�yq�:�BC�J�05�A^��Bk���������9s�b&N4�k�ۯ�
b�\��F7�m~��dgN�H�O�~�����p`�b�Lj�����ĠNݺ֨��HQ����BFJ���d�Q�S�r�G�Z5Q�F5���YŊ��"����+̜1�Bͽ�ɺ���֙�3��524^_E;v�Aq8,E��Q�ЭkW�oիW��%=��O�7q�$4k֬ԟѺU+�;�܇R�s;._���&����+�%�W
.~��=}�B�C*F�ϛ�K��p�T�0����pu���J�d�6���.�[�6d�ٓ����/��C=z`�Ν�y�M�ӡC77T�FS�'~���Ry7���ذa���n���i���!����"��Yx��'[�Cj5܌��tg�jxJ$��i�D��]�79��v�����!=�e+D9��5�����8�������v��)ƪU��ʕ��y^�bN�����\ �e�j�����4�:���-
��t�(�\��H/T���⥱Q���V �����Bq8$E1�}�O���w��He�ѣ�74�;u����ճ'���͝����s��d�#
%����~� ���P����br�,P)��c?;�(K̞5(R�WIW�'�>ֻ��M�g�RSK���G���5� u�క�.^���wݥ��/�*��NUl�HC���o����˙h��~�GPd�_c���-[b��]���s�������NJ�Z��W��˯P���#D�z��s�)
�d��\PP�u�<��[&�y��`�;��-��@���>.ۻ��٩��rG�?o�S�,yY�a�<l�g,)h�ԩ��ᰖ�GJ�w���\aPd$Ri�e/��<�<c���3Ф�]ilJ��R&/)���l��ℓ�,�2�ѷ__\�p��"�0O���]1d�^����F�&9�\�e�%W�-#y���FG#��@�������EjND"nƲ�a�a�.稣�T��#���()�t�n��O�Bq8(E1B�'�I�&�z,w7j�Y�g
�l&�IA[��1qRL��q��BY�Fh[&ol3
��O�6��j;$U��>���?��c�d�`27h˖-(`�8����ФiS]��2~<�mժL�:�ԩ����|M�>�Х[�"%�Z*FaXRb"~=v�����剅���ի��)��,
��_b�rT�Y&��R����UҲe��'I�����_4D)D+��v��s�~)2���$eq7R��#�å�T���ªIxc�|�wK}��
e�ccѱs^���rb#�4x0�e��B�:�4vl��,�?���e�9��XD$��Gɢ�e2����7W-G�e�Zc��Ų��z��J?#��Nq8.E)Pw��!!xc��<�8u��[��S-5(��}Cѵ{w;��J�¢E�p��==ٲi#&O����a�}�"���tj�ȑ�7LN(�I���[��`�&^�J�/�n�N�Ԡ�,�.�o@��.uz4C ������6I�۶n��ѣ��(i�ϗ�ئϜ��K���)G�(����ȣ�"�g��PU�8`�@�[j0(���
W+;r�f̘��Eғm[7c�����UKXD�$&Q�c�
���k%��;;�JU��ǜ(e�°G�n*e)�0,iY"�>���d�JOl�aMO��8�H#^EC����`økϘ1
T���u�Z�)�w����S5��I�7H�ɫV`�MzK�!BU"�?`��4�!=�2/t�ñ�M����P�=l�P].]��\U�>��=w���$e���ٔ��L���IO6�MF��j��(A�GFb��H�DiP�NQ�Uœnb�?g`���z�{��m���S�ة�u�fk�"�X�!e�G�pS��$y�
�2aB�H�LW��iHz�H��=)���(�5cEB6M��x9��#�����7�؍��|2qД�WJixa��9*Ҙh��5�0�
6%�O��=ц�(ҧ1cڴ
}*R�ТeK�!�LQ���bc��)K�-����_~���3ox�E���ϿRj#
˚/���s�Q�푆%�^�B}Yo�"#{�,��
�U؝)�@�Ν�!Ka�*��?��뾗����o`�L�S��a�������M�`�+�!��p��\��"q�?={��K�Sg�8c��0%6�zv�Uʲh�t�^��v�1)��"*�E�� �K(��Rb� k�W�m�O�.�8;t�)g���8S� >�>�NqX�>�F�FZZZ�?%�;^��3�C�Y3g���QQE�͘~/sY�b_��3����ps��Xnt^��.U��5�ю;�yY`�Q[hJ'k��
����)�;�\pn��;7�b
��°���c�����t��Ek2�]*v�$�F�O�i��W�'%�����*�k�۟��zƾ����*+�S�:�(,qqފ~^Έ��X�,���WO$�H@�)KdD8�~Z����hPs�s��֔�,<9Nc���d�
��F^cy��c�1�>�(I�!H�r��?3��L~kǵͱ�ՃTrq���7�Ln���%dD"++�\�����7qO�E�M۶:=��p��YF��ް�����l�P�Ȗ�6�W��LU*+��_|�J����p�m�T�1r��HS�/��|333ѲeK������U�H^�.�n�%��02Tj"[lv76�jּ�� y����///�jծ���2��5�O��ӧN�믎�Ž�}0m�4t��0��$!�}���BqB(B�8!!��
�P���B(B�A�8!!��
���BqB(B�A�8!!�P���BqB(B�A!!��
�P���BqB�A�8!!��
�P�BqB(B�A�8!!�� ���BqB(B�A�8!��
�P���BqB(B�8!!��
�P���B(B�A�8!!��
�P�BqB(B�A�8!!�P���BqB(B�A!!��
�P���BqB�A�8!!��
�P���+��!�ଈc�<��r��C�_��@�u�Q�IEND�B`�PK��[����44,Generator/Joomla/Mijoshop/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:D794BFC052E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:D794BFBF52E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>���RIDATx�� ��u�_�}�{�^]H�!C@.�
ss�;1$��N�$���!I���2IH���P11�
�r���!�A�C
��е��;;w�佯�gzfzV�+G���jjg�����{�}��վ���W�C�Z@09����Lъ�\
�t�Åk�.��@8�
��p �@8����p ���@8�p
��p��@8� ��p
L�l��睾������!�{���Ǒ�d��C0���*�#P��Å�1u4M�H8��\�o��C$�$����oE�^$
{��m
��@�*�����`NGg_�mn��~�4��ߊ���h��ڇ��9+��c�K���S*_����Ft�0�DM���K;)�=[�h�7K�I���q"ٝ
�[���)"�����Z8fi�I{��ņ!�q�Y����D��eKt���s[�xR����`�0��c���D> G*^|Yt��n�.vDK
E{J����ͱ�M������qljf�7C�~㮺"�<{9~onA�r��v6�d�0v�|�Yd2�=W0���.���.�3��6�h&��_�ߥ��˚�ɶ*�:!
@����Պ�įӰ��F�.�+b�:�.�*��碻6/��&?�x�0=��QУĠ��G~�<"}����Q�G �Y�����[h8�������{37�NWml�[Om�=�i����3r\�(��_��.����!�.O+� LM8R��.��w
����I�*��
tj�'��PU{�<N�a���p�O�|>�W���*l�'��R���WZ����â!'�U���a��$k0�s
�#G���o���M��o��"m�9Hᘏ~�۫h}k@m��&���^zc�m��+��.E<���ҹ������oW/-n-�������e1�x�
M���=�~/�cȣtu
u��&�����?��kmG�͓���!6��c�ц��AsOi[���;l��l��6���A#�2����E����S�7�e"F�%�ԝ�,ޓs�����g�hi�������"
P�ı��7��[IJW��e�D8x�c#�D���l��llo(����{x��(�x���W�IN�:�Զ��+��z5��Ѫ���h>��b�Z(o��"�)��:Sgί�~D�Ўdd��'�4�B
����ڳ+��>�lߗ)�
�^:�ǐ�d��p�G��G�mJ4>���]Vb��"ᶝ�[3ދ�jT�5��8�y���CI
�9����sH�����8��h.��=,:JS��1p�w�x��Mo�V��I6��a#T�ѝ��:�b�_ړ9�˖�'��5%�8��s"�$����l�N��H6��4����cg��7��].}�ݗ����p\�0z\�.��ƚ�|��Ŗ��W���4�Lj��@8N$�_*ОQ�1�b����ȳ��p$���<�!��C�6�=0F�y�]���,����K����vЖ]#D�u��%���ӛ�a(��9J=,@��x��G�t�)Q�ca����i��t�%�թ�j?moT��!��b~CB�I���:��V*���%,����m�l���U�"!����,���Ȉ��Z����tٕ6n&+Eäѝ���d�������"Q��4C8r,&A�*'���������e�C<�[��l�=L,&��I��w����������-�Q�ճ:}�'��OY��2���mQ�ZL��c�t�n$S���5y�S�^ɢa�q6�oD8^��Вx�p�o��������ې��O+��'�JP� ��r%���T=�ۛ�[<�}��
5�,��i:;4^��͙y���+d�W�����i��#���tj`����ȹ�Trw�7��_�
��C|]�ʫ�����$�m�C-�g���r?�;�V=^{KZ��^���Z#��X�
�mECtYA'�!ۥã��I���9��m.$��-�6��
�
2Kf�f���'����0�Vz)�����/v�a4��l�e�愨�Kyl�U�I�b ��HNBO�)Xɇ<8���3s.3$z�C��c�t{S/���J3�����5������̦�0��Ud:D�do�j���E"F?iU�g����ɹyl��"�/"#�;"L[�+�{����?' b�c�$H����y�]j9dZ��5,�`�\�ы�
S��ުߐ�i�����Z�d�l���D��YiW�"z�i�x
�3��ӂS�^�pH8!�./7�>6�t����|��F���!�x:��}�b"�JW<����w���{"Z��i�'���[���пݿ��1���3 2#sf(��<���"�Y�z�����'��?e�Y���ə�w��H��QS�n���c�]:����B�v��JK�-L2��?G[�
�����ɞ�p���9I�ʬ�c
#����Ǭ�p��B�R�!S�,��ڼ��Ƽ��� zhG?���M|�Ӌ��*!�������.�u�z�C���_�?�d���7{R�ms{.w]��V6�i�� �ޫ��^�V>�e��4<�{X9۳�F�G���C�X%]MQ���B�ةi�C��,��"K�|����i��������H}�����kꡠ֪�IB#y�y]�0�BX^��Ȉ�e�,�>�+܇%���f[�FrGr.���k$^ة�1-A����7ty4�f���Of�t��q�:BY:"^�^U�P4Hi:�"v�1
KF}EV/��뢻o\Iw�gܐ�AR.����{��k���9qXx���
+�>9�l�hF�o��!���U�3Z���m=��k=��.m�ӎI��-a=��"��"t�+"��AH2�ٓ����o�/a�L�\�6S�dƩ�˹]�CA6�f3�<�s���e
Yr3��F�Ǖ���oJ8z��¹7ٻ�ٙ���2K$F�:{="Z�pXb*Bx�Cu!{:[8|�n_��.xt`i��^��%�Un���{���ڋ�I-{ ���lW��tӺƪ�F�ܺ���F�%@�U���ZDq�����Y�G�(��4��y �O5��ȪIfv{H�Q��9�;���7�;��.�*h�\p�~<ˆ�|"^�o��qz���|���Y$�U���j�;���>�f�,:��u�f�3k!&K��<~��)���m����Ѥ�]��`�(���J�x�Dm;�$�:Rپ��ۇ��JW�v��NAO�V�W�iͪ�L�[��Иz�7��ol���AӠS3��"i����)�*��]�8�I��"S�D<�g]�����2Y(%d��
Qq�4���߳J�ss�����$��~�����T�J�����Gw>y�����#^6� ���ʃ��-���M�������]* ���e��Ek��zw���W=jfE�y\������V30��ar_�N+�~%&+a��M+�i�Ű߾�dS(A?c��D������%A��U,�*����v87�;a�_p
���Ȩ�%�{h�*i[���O0EA���0�ϩ:�5�t�}���u!xd\4��R� R�s4��P_�.��{�f������k�K�E�����pFgOC͜�}�?��k�o�g�����F��
�V��解��a�?��sF���>�go�C�"i(3,��Azb�ȥ\s9g�qH�b�bHR���[��m$�
S�⑴{���f�����f^^.!�;���V�L�͐�64��9{�R�.��
���!N �
��:���Ȃ��W�X蒵{��ڍ�Q$&E]r�}T��m�vo�]jB���w�f�n�-��`����C�#�F�iG�b6V.�p�q�o�%��5�2�˚+�hO��� <=�T2��Y+�_d5�|��2��Ԙ�o�ίT�l��MDk�:ڤ���ۦ)֟��%�bz�2�JE84���_��uh?�%��:ɪ�z��U{�a!�O��(����֬��[X��=�lI��^Q�WY����v�9ާ����^��Tjڋ���Z���`e�U�
K^H����s�[���-j�Trn}+{ND����s�q%
�GՔ�x�u���k���$�+�S!�����|�/�b�;M}5�!�>ϑ����R㚱U�YD6k�y��H���Y���Q�%)�cu")��<ǹ�c�N�C�BX�U%��v����T|NFeIz�C��#��T5��9�����P�r�Tdu�����t�c�m5ǒku�Ӆu���B:��3<�9��+e��*�Y�ӻn�,�l���l2Cņ����j�L��%g~��2�:=��K-��#q2D����|��s�'�J_9�ϲ�X�(1�/4wӥ��Z�?����*R|�4�y-��ڟ P_ާ<�C�uzpQ�7G_f��yH�R�im��,�C���({EE5pd��3YrS�0)c��v�y�NR�C+w!U���G�u�hi<H�-�%z�{�2�.� �q+�AӲ<[T�r=��Ҵ�jSY�u�C2���DH�P��N���l�"V��NHرq�B+)�/%�~&M�K��F�d^曻�|�pT
�N�uS{��$�[��H��ݙ�V��B��b52E*��ρo�A8�0�HQ��L]Q��t.?����?�Z�TX�@hf�1�ə.f���HGƓI*�:�<��
.��<^����!c��f
��Hdfd�,�W
2�*5'��G��$R)�Gj�kW,�T��L�����Q�dO��(d>�X��\(vd��$��$u��^Gb�F8���u�8��C��0��z���L�z
0��%pf4��/�.
T,"
��(`��1
$�0��f�1MR��G��q�H���p���$|��E}C�>�s���T�����>.ÖP(��SA���U��qҙ���q"�ɪ���hD�����㟚�hxl�P�m�XlX��"�P��s���<��!�OYNM1ce��h�i`x��
�1E�/^P
AB��e�JPfB��y%���x��Kg�����/1��fO��9�I�#��b�la"Y;5��zMd���+/��,.6�p�vv��D��TfB�<�fEf���O$+��CGլ
';�������Z����^\X����p
@8��@8�p ��p��@8� ��p
�@8��@8��p ���@8�p
��p��@8����p @8��@8��p
��p� ��p
�@8����(���0
zD8�7��)�ɯ;�O���t�0-r�IEND�B`�PK��[���6{'{'0Generator/Joomla/Phocagallery/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:C1BBCB0352E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:C1BBCB0252E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>��^#�IDATx��]il\g�~��I�;�;{ӴM�&-�-��
���?��R T�lb���)�B�p��%!��4���n��o�s����x�q7��g�lsr��<��_�ѓ�if��6A(�3n���G�HC�Rȣ\�!B�h+�5�T�8Aq�
�A�!��C� ��C� "AD� �8AD�
�8Aq� �A�!� �A�!��C� "AD�
"AD� �8Aq�
�A�i]�k�==v������A�ٙ�˧�-�N���+���ƚV6[cS�5��ZEEE����Y+++�
�8^'����2�3v��A;y⸍��ز�*[�Cu�5��yR(//�Iazz�F��t��A"�MͶ�������8�v"a�Qv�dǜ.��!�����_���s����*[�r�'�E�nr[�1�8�
e244dsn��Um��͞|��F"�8�
h����G��>mc�#�n�:[�~�544�罹��2�'�E�����P����J�<�L8�v������'&�}��r�-~��}Y��Dq,���;::jO<���<~�6o�l7�x����y��p���#.
,����8��SN}L؈#���>�q�m�e��Z�ړG&V�y"�k�4hԯ{�}�����v��a---�0��Ƽ��z�7�0���4x(������X������}������[�E��f�SD�`<�=o�9�d۶m�}�v�
�@
�e˖e�FRe�#
�/@��ocP:]]]V�|�m�q�?������Cq\cJ��'������F�%�!�;/�;c&a�4
��M��!�iG�1���������t�ؤ�~뎝V]]���1�({c
������v[�v�WPPȜ൪�*&��ܒ|u�<��d���W|b�1�T�����=��[w�Ꮟul�U"
0��石W����m�f�k@��P��H�A�R#y�o�1�0C�ce�-}}v��~�z�NOXa�CDW�4�8��w�+��7�٧[A0��z����"�B������`����:H���{�m�:[����
�8�i�;W����o��n����Ҩ���q
�4蚄��ň�p�a���<A
���;v�-w
���ժk�l�#�TZ��
�"���(�|�Q�@�P�'$
�4�xF�n\�9�xI��T����2��c̑۹)Gn��V��c�S
�U�,����R��~��� �㞻��"�';H����=�e�y^a�$�¤g�q�Ȋ��\R��Qni���N[��rGU�[4rDB$�Q�948h�vﶝ;wXcc��!@]Pi
��tO.��ٝ��p.$�q�$G�>K��^�SN�����ʜr٥+�c��"�K}����/XCC��k�E��IҸ�W$�tt<fOX,��P
���W��=�����ĘMa�mE�seLqV0���^�8y���N�@mpX<އ�]W�J��r�G���+��$�X���cm U��IC�����蘍
�YY��V�PJl#"�C��g{{�W0@K��:��_�Q�M�u��<�e�������M�-ͱK3<�gn+��o�M!���m8#��:q�nڲ��3{�+�z�P�¯���,IȀ��f��_1tzjڪ�U�"����\*-q�Ԇy�����r�����o'�ƵP�Y��\R9��P�
���{Pe);2F��#}���|]H�@��̕Y}c�n�p���pw�:�iW�y(
�
�5�l���.5X�!K�$$���/�]����¹ZX�{�-�/�vv�c�y�-��{] �:2��#��C�F��@��|�M��`H,����PX�f=xR���ƹ��1��R�+��
&��ò�L4�M
�#�`?<W�pID�[ҳ�8�A��������շ@�������^7���&
&����.���Ea�F��ǹs�쩧���^z�ư��]�7��M>�R*y�������>����C��Hc�̇?�a�e�G��S}p4,I#$�!��R%q;��Ѕ����E����BΜ9c==�Rm+��q\�nJ��ă���I�w#w�t����7�a��_�Q?�����O����K!�un�{��G?����g~�a�ӟ�d��������$��<p~\
�F�j�p?�u�2&�%��gÆ
ޝ;u�
8���Y7���Q/PqC�qGr|�(0,�~~��ߵ?��<{�X�|�+�����8����{��oU�w�#^��_�/|�^��j#4�d{B�?!q$�#�Z�Y<W�Y%��0
ƭ[����6���3���zb��)0w� ���8Cw��e����0��Ɗ����I�`�����������'�C�e���3��O<q1%I#�3a�]�p�KI�A!������p_�l��ʦ�����'�*ڈ�n���h����?L�b��{��C�?�������Ç�ĉ>P�y�`�?~������\Ϟ={r���X�vͥ6r�TV�r�����;7�|��<y���54�}���<�TrO�٨3I�'��0M
c&�l�E2%6>Ƿ�Ϸ�d��l��:6�?ߴi���j���^G��us�8^��
�����!���QB��r�-����g?��8�Q��;֖-[|:���g�I7���(Z֔��;���)
�6�[g#��L�&q�~���:�%�On �}������>�){��G�;��O�J�X|��_����o�կ~�V�^}�z�|�;��}oNW'ߔa��b�F1�g_��8V��<7n�`�c��D�;�G��ʇMrrMa�u1,�);w��RȲ��?�-��IU�@���@�%#�����G����=�0���_T��[�֦y(�r�C��R/�{b�tw��Ȱ�lj���!|:�HPG���~��_�L���o7n\4c�p����g��_���>�����h��S��$�B�]������q��i�t��燈��F��B��C�Rm�}�0x��vj<>d��>����a#�e$��r�d慪�S9�P�s����c�Y�����)��������ǒk6����2�����U�-6><��M��u�ȘP�Tk2��PInh�azwq�S���p�UvY�^�o#y����z�z��q��=��g�ϴ��G�B^���p)��X3������p�{8xn1H��3Y�p������e�@�cp���u�8�������a�I�_,yp�+jPr�{�n_剙��ҭ0dMn��V<$�,ԨC�`I9�Pq��l���RɃ�=y�<���5�� EK�6�n�ZgԨG�@�pLG���a�H�b�H�%��&�B1Ԅ�r�RG�O�>Xo����J(z9<�=::;��JMum�o]��Ł��]��j/��.�<������'?�uz~�f���_����'?i�=�ܢtK����{��#n]#�59�5�`��c�bjr*k�1Ta�4���{��o�[�7���#98}��}���^���4�<!i�M!q�*��G
a���R
����U���A��\�%�8h\PX�n�Ra&��ց!�=��_�җ
��ѣ�r̓�
��R����8�/�h�X�߁��b)�;�{Q�1�ѩ�P�c�a����-0�4&��f�#$6�Px��9�O����ً#)�l��?&;}�nJ�����رc�Fa�������RKRqШ�#NA>�9�4\��g�Ɵ�����}�{���g>��6������E+��[�Vߔ8ف˻T�<HLfR�����\��K��60n�۶m�|ps1�8?��zp0@VU��C��]��q�� ��<�(AL���)V4�B�0��Ǎ��3�
���4�I��馛����}�[��=,؎��@VP>�9��V5]���Il��Mv�H�=4©�#��s�����9/Fp�M�����M?)űt0U6� ���
�a�0��`d,�7;��W_��� C��"���m���ȿ���o~����A��G|ߊ����^�
��.`�VѾ}�<aᩌTf8���@`��\�qU�>H��H@��.~2�k�^�˂߀���V�i
T��p"�%
�;e4n^�d���A&0"���(fi�L�4F��=��㟤4X4�կ~�]��Bp�h=d��1��"1l��$����ӓ�"Hxe�*�˜�.TŒ����aT0P
3�+t<�o*����5��HϞ�8c���tS�8���\�f��F�`a���'&��X���?���q
�.�o�j:B�1�9���1(F�u1o�A��ٲmgj#iPm��N�PJ���rY*�Ĺ@��Y3�H
DZ
y��������8�8BX�AY���<�OY���b߂��0z��Q����vEC_�=5p<�F���(~��pQ�u��
p���8��yP��R h�XIJ8o�#������|i�Pu`�
�u�|�YK�*ݘ"�kˢ���؉�#��� 2F��a�P0l<>���PQ`*�g�}�>�yU��/xw��?�AOP$$
���w��?���C��D������.%T�
��p��v\��D 7�TX��L8ע�\�nJǵ��ںx^��V��?�e��� #���=��0h��18�$*�W^�P�V��`�{�S����������"
�b�H��\x$�pzG��? �T�1V%9���G��
T�{��"��`-�*~7��ZV����c)���C�
y�%�¸�:X�W���¨a��D�](���!!>#G�h��\��nP�)ZdV���0pL�[��_���`�FH�ݏ#��A���"��/����B8'��k�o�{�
��J��"�+���Æ�̰��2�㦇A¸A�h�#��x����Ǩ�9]'rv��#a>�>k5x�T9X��5�n�Bc�_Y͊cѕ��9\�H�-���e�
J͊8�U�;��oh��ᡬ�K옆�͏,�ODmX���?KJ��=� �/P�Jׄq
֊��a�E����+I�sTl��$���u��`��D�T4�J�|nƎ9d)��#��Ve���ZB˪���כU�
�Oc��F��q�m���`(��&G���@+��q�q
�1pN̜��W�c\�nJ���R�Q�DxmW�$�9I{{{�;A$P#x���v�~�m�|E��V[�7��P}Z�Y�qe��ݴ���+�iB��3��<����G8�*n
օ���3��4,�ۀ
X܅��P�'�ctU����DB��֬���35x��8�����V��Z��5±�Q�8�C4�l�R7*��0�P���g�5��
�7>����`[L��oH���"$�Ð(�qNT$
��R%�p��Ű<�����N�z�:O��U�k��[�\�aOi��
\��HD��7n�W�U��d�F�riR2��=�9��@��dn�`���C=�-oy�ϲ$;y���,�ੋ�`_$
G��Mv�J"�DM�z���Lx���RX��WN9yx�^�>Zm����#��ʘ<<q�f�@"BD��
�6���}��#�z`�5�.ˁ�Ǯ]���
S�ϐu���v ��z�W��
��۾}�7|�2�)��3E��-� uC��kB�{�J��)p�%�Sh�.%\Ի�!���;���3<]5Ā@���d��7l�1��WQ��K9����(��ABYH���C���R�୫�m��7�'vx��:���XE�a��B�`�^<�|��/~��L2@ǂ���K�`���w��V�O�ɧ�&��̷n�wH�%�ޡ��Ad�3܋/�� �u�]̾0�̌���Ƶ��Q[�n���8osUN)�f�X�rD�*O��LXM�ST�8�#Џ�M��hӍ[�vz��8�Iñt_8$�7{��8��Ǝ8����ǀ��<�e���
�����
'w]�d���Z��(D�ȤE�O��
�J��˺K��mqM�k��С�v���ZQ|6�[i^m�)�2�)���i�H�ѵ�T��tZ�!̯2��1��� 7\˪6��"S�a&��W$TB�fG+�8�>�T�
�e���z�w0��&B<. #It/�>f1��/�@�U$�Cs)�;����k ��
��3�ʑ��F8��N�|Q��Q�]���w����ٙ�YЉ]�!�%��(S���b ��e�V���3/N*��3l˗�� ��ӑC�!��ZLސ��'���������1�"l����-�'�},-�<�B�}W�@x�p�A���o䵃R�50.,sg�
�)����vTO���|��+ǹ�$�,1.�<�1]�1�<��s���ae#����ۍ�l��z�M ݕ�5U��5��N
����"!�}͓Ğժ�kB�����.�1��!�K&���G"ɠk�A�5G
�*�1��H�B��+�@���V;��e-�[ZE&��������_f)e�O�u�8��LO�O�9�`DCC��q�
N�Y��Θ8��6B����n|f_r79Ǯ
���"���&���©�FI#�,DqR
�G�]�>cu,���d
(ňټ(�d��qđ��������z)��{\��"�����d���H8a�
�M����M����ͩ��g�ƙT:�&T*�B�Y�_3X��d���G�u.lO��x��^mM������#�8dAp6U��>��]�YGA����;�v6{�|a�з�ǝ�ʋ/z)
���R�p[n��1W@40s��q�?W��/W�A̗ )�P�����U�Ҏ���`ܽ,c����>�4:j�7o���B�I瑩YQmg{z����H*Uv!>�����G��/K�q9%-�pU���˂4]�$����λl��=�mih��ŚL����;t?
�M��@�f��;v��5���W;Qh��|�OuRI����aM��S��U�Z[����QWe\������l<Fh�
9r���Y�w�r�q�
��!�(FqD�V��x*�HQ�@���Y\�u�v?����Y�4}���:a�:S�I��@�|�y��9���nQ)d1����O$����$25'Þ$|���uY�a�/�d�����5��噁~Px纺�J�Z@��q�8mݺ���7��##���iGR�NUT�1<)>�q,�<h�U�B�L�7����CC��y������S'��|?�<��;��!�;5�A/l�j�0�����D_Q����Ƣi)�F2Z*1�<r�"����<h���'|`k⩍�gK[�;�5�X3�X]��|9�����W}e9:�:0�sg�����I3K�醠�;+G(<��c��+���tı���|���^�]�p̑C�qI���{��D�3�en�?)Q�1>=f�0
�������a�dCC��+��@������c֯�g�c������p�+kG�:��G�mI~f3�%;���d�3����R�i���u�3�Ox�Hd5��~�Y�B*(CiO�M����e�N�U�S�|5���u�����'�(
%�X�*�#tdT@�N������e��E{8z�cN�aa��B�!�#
��l��K����8���������v$������[�O[��IJ�G2��JH$� ����� �C(c���߁�T�휣F��:5�5� ]�U9����⢛3��(��;�eHs�N������\1h�h�P-��\j�G`4����&F�b�<*tj�~��?X1�穈�
!���,�'v�B��##�(�_����d���S�S�0�4���p_�tf�Q̓�l��Ϧ�s��g�
o��}�Q����4�_/CәN��"�߷(�DR� W"�f�BH~~�TIa��\�'$&(|<��&t�2սS�ѤS�x(���ZO��d�$E#�5�M��we��
ɞ�x#�e�$����gg�Src`�3�f�3Y
�S>ʟ�O�T�ل�cA�dJ�.d�8f���|Tq:�8���-�%��1A$�X���s����ǒ�L�
��ZzE���I�yRrMD���x��#B�J[F�M�빋��q�g2�a��O"����tg &
�@�YBMp6zE����2�4��x��m+�q,92��F�0���+������(��Wą�-�����s�5� �('��E"����%W�$�dug1nL�đk`W�p^E�{���@�!\A�R(�*��g�>�E
��sm�o�\1d �qנ��'��O>c����F\?Pѽ
"AD� �8Aq� �Aq� �A�!��C�
��C� "AD� �8AD� �8Aq�
�A�!��CA�!��C� "AD� "AD�
�8Aq� �Aq� �A�!��C� ��C�
"AD� �8Aq� �8Aq�
�A�!��CA�!��C� "AD� "AD�
�8Aq� �Aq� �A�!��C� "A�
"AD� �8Aq�
�CgtA(gA��?t-A(n����,Ӭ�eIEND�B`�PK��[�^�tGG+Generator/Joomla/Redshop/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:C1BBCB0B52E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:C1BBCB0A52E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>E}�eIDATx��|TU��ӒI�TH��!`[WAŇ�EE@"�s�S��)�몫�C�7XaUQi�%tAAz%R'm�}眙L�-3�
�����{��z����?gtJ�Fѻl�F��q�L�1�8�#z�
H�����@8��@8��p ���@8�p
��p �@8����p @8��@8��p
�8�1v� �t.w�L��$j�r/�Ʉ��C�&晳ܟ%���o�*ꘖ-'I�Ÿ�k�F�o �k�^�ȽX�c�X�<�A
�y�>�o
�*����D#��
)#���x�Y�I��N�E2k�w�BM/��7@@w��LꐦЖ���#>��7�!룏�WEG�@j��}r���O��ҕ������d}=Q��iu�;������$55���X�0I��U��B�55�uYH�*��!$
5StLEFF�N��{)�����}7�ϵ��}X�Vyc�և����y����������q8BQ���^:|,ks3��w�n�zq>�8�%<��Æ�n���e�V"�oB�Ï��ֵ��f�$cF�l�m[7�O۷��C���L5�ʡ��db.�
z��ˇ
�����X�9�^�\��и�&��/�<ό瞡S����n4џ�{�����Wy��ؾ���JKJ���J��EDDRZF���kR;nUe%=��Sd�Y�~'�<�](%5M����
�D9?��E�Z6��5�=�qM-Yw��PB�dLN�Yu��$}��:�_P��V��S�f�JZ��zhڣԳw�~�ީjq$v�y�3t�Tٝ��
g�&J������\0�6�_+,���3;+����ΟIJx�Wt�M�ҥ�
��[ZRLuu�m~7�a*)>L�f�{�r�����)���وƍ']��$u�'b&#uc��[Wb�OK+
<�^e)d���y��O��g���_���;e�ÜYo�K���c�71W�ĉ�?&�R��4�{��Du[�^}dn�����߅�q6464�'�'�傋.�����a�2������!~aB�(�gֆ�Edf��`�
�f�ppA��#JH
{��D�wb�s;s���p�?�,��>�g���Y��wK�~�/��^w�Yj�~jz��(֨����,�r���le�g�|H��/.�G8��]-�n �#�������)���9�Z�q\q��#�X�v%�S$�23Hw�����S8��U\���M���ȑ#�z^n�6���J�>��-%5���̿�Ү��by��g7�nz{���p����Y}pUD��C>1i��&M.�}�l�v��ԉt�;�Tv�Wx�?�(9_ZU�?�$Ü��x��?�8pP��=c]�G8V|���%0`�
���E�zH�}�^�2��ڱM�{f�9`�!-=�o�ᨊ���y�֭��Ǐi/"2R�Ga�1�U=+3��655j~�;0{��]5��߿���_^Ν@@~��p�/��t�v��r,��t�z0}��ڦ?F�
�f�;I��I�7�"��)�w��!�$����\�;&֟Oؙ����H���,�gl����UZs�-��<%|o%^z�9�(ѥKB+�C����ceeT]]���0�0y���f�B��GD��'P��}e]�\</��V,�^�>���tɥ��n'[_YyF\��!gmq���ǒt�B|v0_X�`��8xP$�Ql�3@�a����Gұ�o�r��l��o�a�c�+�ǟ8�GG3�I�ښ,�:�_+1�W�,�����훶�}?��z��#�ԯ{�kWf�j�~�M�ZI<��[rH}t�}���� \�Z��&۾�b-��V���l�!⸶=�*W����߫z��.���haa�B1tO �]ݟy�?�Md��鎏QOL�
�:x�N�>���S�S��l�g���M���*�F���T^�y�`mn~���ѭ[�{��p�:�������A;֬uIy)�G^��/{�iڣ�3��}�*��*���\x��At:�I��
)I��I_VYklk]��S����d�Ӌ�yBT\Yezb:��)7S����^�����(즱vˍʂ�f=��)
�־���(���NAQ������Q���=Y�6�.{�->�M�H�S�x|î2�߀B����Qu���=�7�>U���h�� &����eEi������n;s�Bu[l\�#(�(�'�E8�gVq��\M�����r9��w�>5�m,Juu���Bx���ױV���B<��<�Fz�ll@�SC��'�n���2s6�G�qw��?���u>��Y_��f"�1���B�{�M��gy�
�%#kټ\�3'O��w�3K*.>^���u1��1c��n�
2F���z%+?q\�~h�����i^��b��{�<��L�r��)-�Q���3ҲҎ���`RR2�#�|�������IF�wZ�g�A$E�X�lm�y��g�C�A�d~i������n\Ө�duY�/
�W��~@���}J��|��9Qk����O�$C����ϋA����0�}2_;ʝnc��?�p�e_]���\���ؠ����>����\<x��Hb�xt�ʦ��<UE��ؾm�X�p�TRn-h��dv��xeee�8��:9��n+��D�5���]��;�k�pxGv9BC�����ի)�Y��?� �t^/BjnrN
ĄE�^$_(�39Xka�o�YA2D5������g�B{#�|��z�;wQ���/�g�+�[]��C�VYjh
{�Q2�bu/���5EMT~�,"<�.!!���o��{x�uKE]�r3�Ch��+i�
7)X�~�r�q�Y.j�aaᔜ��xZ]�i�>���K���q7�]�Y9���\��hfat'��=�����@�W��l�H�rv���y�����U�z��o���N�H��En+�-����x4b��c~|��!�_Z�2�^��p�;(���>����A��L���b�*����!$]d��6�^Kf�( �1;��sA�^bl����&�[�X�4#F]�^σ�\d~��?J5���R��`<�.�!�sex�7�5\�T�Ԓ�ʟͩS����Er�܂��#�,�^=ɶ�SqBF^%*`�gs�=m����c��%sO�]I�|m���"��y��ɶj5/_�y���;'>�C&p�;S�����0��Ȅ�+0��*���);Fȅ�e�!����(:�uдB9����w�����v35�Y��1������7�}{��=�Y��G8�Z��;�C��##�7<��G4�>"�ѵ�`�\Z��?�߸x�t{��4����]��.����)��g�--k�������}�ܶ~�N�N�/�
�}33�+/B��R��9��md?t�}��ݔ}�=�C/�t�:$j\�X.��N��y�es����^yݓ��k�(o��\Ѭ۶+��cǨ��ʾ�1/G�{�OO���-�����ɳ����;|�=�shY��B����ceGU������h�D���lӽ�bD����ő����OW��)��S'������-[�Կ�`E�s�Y%ȥf&$����Aa��Y��3_��3df8����*����|�xG赣d1��+�}�O�AW�����18����^"Ϝ�n�1[��jj�^\��F�1=M����/�O��?>Gcc�����\������a~�N�y1Z� �hY��.�0��Eͬ�.ڨX���G4�Zݣ����IIu'��^�j[����@8�r�<hFR}���93f�|:N�v��N�+���lj�j!9\݉MLH*F�!������Bm�ӧM�b۫��1��9�A�(���e��17�z�������L
k}�3���7���cxⒿp�ڼ7g��. �\n���O����S-x�&���h�1�D1�$�G�WJ�XN�W졸�-(~��9���C: �c��ru�Yꝋw}l�s�h���z{ح7e��M!��������?!�d��<�T�AK��hF\�ej��Zʕ
īwi�u�a�J�&�3�Gd��F��w.��ceTo�(�'�[E�k!=L�u�ĬV�s��۶�n���MZr���c�4��)"�qNGĤ�"óq�r
kj&�0�Ȯ�Q�)�lFOQ.
�I])b�]d�цnXnmX�]�&����^�<
+�⋨��j�����+[<U^�^�m��D�����'SڨQ��->ۖi���r�s���{m�0���_J)�-̟��p�+���3;ב#�&ܵ���E,���Yٹԯ�����x�?��D�z�X|*-7��n��iVR��pCNv��p�,W����i�Z����N]W��V��ŹYE�nۡ���
�&K@X#�V�e��>���H֮����N�.>|Pu�t?�h�Uz/x�jr��ޭ�+��_yi
�r�l��"ݾe�f���욒�'ĝR�/����<��A�:�d4�p�;����i�jX᮫�PR��,̿���Q��.g}N�T��ݘ���$(�©}�Yy��34�pH���n��0�w���ڧ�U����|}�F2�|FK�YD������K�娮�Vu=8�9��eq�[~�C+��'s��{'�i�mx��{�g��<\=����,&�%�y^ǒ%KhG�F���$�����0���ᆬ�EE���L1��4b�u�ӣ���W���š��4��[s�3���^\L
�(�>�.��Q�*����,����xO
!Ie�S^�̢��:��ȫ=�y���c��b�V%X����M��u��@ �^Pۅ��/`�ҥ������㱋J���:�7��f�h�ۤ�a%-��k�^q��9**����^V&w ����-��D5��D�����>Ě�^�Ԡ�.�c-��2�U�4>�G��WxcN�̴nϩ�I�=A1O߶���T��
&����yok�|J�Q������\A._���K��Z�Sͫ��o`TT���;|}��K���WUUI[7oj�y�7B!qJ��B���܃��B�ϑ���7]88���(t��*��{hτ#^���۵��WH|C+����?<(y�S�-\y�(?�^_7��k�]������s����R�kB�˨���*۲�Vy?{���d��5�T*]����HQ�����xJ���5>�ɲxJ��Ө�q��?�i�tz�I������Yɻ]?���6Miǟ3�0.:�z��+�γPU[g?=*����渚w`�>F��~�~��Mco���}�?S�4fd߯{T]�ظxY
���F���^%��
�s�)��︓Q���W_��tU\��y$����j�KK��K.d�����7]xA�&_�D�y�mjZ���������U�7��$����6Cr�
��oo�c1�+z�Lj\��b?vL�Ӈ��>�}�w/2_�`|f���I���W�g���O�����,��"e��E�����fj�wx�Ly6(oͣcb�{�,*��"o��5���JuzO%�%8�A�����z1Q2�_�����
�P��C��{�!:�D��K��EZE�
��Z�*>������.-�*�Wc~^���Ǯ�7'���\��A�{����ϝ+�OԱ�ֽG�4�~�Jʓ��ϛK?,[&"�=X����X!8��.��U�B�N�D-i�)9��^O�w,�=�U��@8�
��p �@8����p ���@8�p
��p��@8� ��p @8��@8��p
���@8�p ��p �@8����p
@8��@8��p ��p��@8� ��p
���p�c� .��x�(c��`��6+���IEND�B`�PK��[�
`�2929/Generator/Joomla/Rseventspro/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:47879788C78A11E782D8FE3EC6B3A005"
xmpMM:InstanceID="xmp.iid:47879787C78A11E782D8FE3EC6B3A005"
xmp:CreatorTool="Adobe Photoshop CC 2017 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:c989e8d6-ffa3-4d84-a787-2d0ec83e7129"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�}�5PIDATx��]x�U�>S�z�"MAQ��U��V�uE]u-�**������
vE��.D)ҒP!HO&S��d&��
�yu23�|��~Y;v�ND�Ղ
�":v��ZG���B�8�p*i(��D���B�8X(q(
%�B�ġP(�8
��B�P�P(
%�B�ġP(�8
��B�P�P(
%�B�ġP(�8
��B�P�P(
%�B�ġP(�8
��B�P�P(J
�B�ġP(�8
��B�P�P(J
�B�ġP(�8
��B�P�P(J
�B�ġP(�8
ů�/z�o?���*8�9|4Qێ��[{A�8���ڱ+�K\(���s9��}T��C�_�G?rNԾ�?*)Ji��s�8%�:��� ��8�4|���ٱ���f��C�>��1`Q�J"
�oYU �\J��L���qq,m��C~�x�հ%4iJ L�=�ٶ�<Ӟ!ol<z
Ǡ�Z�czshO)��ؼ�S�"�y�����@E�!Mx��<5�r�5"�@&���WTH��[���T��J�g0K"C��[+�(��đ���/N"�(7t��Xr�zp��w8)��/@H$���.&��FM(�w��aٺ�<��%_r*�
aIdQ��{
�q��3H�(�֘��A
��PU�����?`���,��JiH
S|�>��RM�Z�,��|���D�E�ZhO*�4qTWQ���d���I��r�a�#�ߐ<�D�����@�aA���j�W�$RD5��Q͜�L"͈�
GVg5�^U(�)�ğ�֮��&?���� �TW �$�
gb"yv�@y�a'q�pB1��W]ME�ny���|�Zw�A"��(���8��ќ�����NJ#)�#�3�A8�$�`�15>��G�F���+)��
T�q��
L�j�a�a� �U?K;>&��9���ә�ڇh�Xrt�FU�⨕8
v�H6�( `�Ù�d�&2�kU!&H��r�%^��3%���}i߬wɛ�K�K: X/>��Ԇ䯪"oQ>�Ly�|��8N;ψ���(�8��1&s}�����B����^��>h��߹5�����'R&����J?�����}(��*�r�a+�[�T���
��
�H��rNo�^���/�}�)9/��uW(G���<,��DFĨC��1,$@aa #�MJu�g,<���%�پM�2
�)��IB^
����cJ�4�b5�ե��B<��Ot��@��b��lڽ{7�����5lԈR�PZj�0�����/���l�L���j�;���S�N4d�pJa���9)@ׯ���
r:^��s�5h�J]�v�Y;�wPnn��琏�w�=(�A�;vP^^nıa�c�A�����Z�C�#%�"�"r&$�T!��
�+d۱���xQL�T!Q��
���:L��"�n۞jĠZNk�R`/������Pq%��?�ǚ9s���M/��_�~U��QEi)��<}�xjݺM�c}��.���Q���iȉ���*����a����ES�N���-肋.�Ǯ�^���3ޤ�#GQ%��q�k>�M�?��+�e"���A�4CME{}t��C&���wަ����_��7�7�;�M�z�����ֿ�K��T��*�$ο�XSNe<6xqm�<��O�@�7Q��<�����I�8@�Za�7���0_x�bu#i̙L< ����O�Vmȓ���3�Q͎m�G���!�8�DJ;���ϥ�e�|���iG�{�mن�ߙJԩ;� ���h1�^�0@H-q8M��/e���}�6tι�W�9���hO��'�@��1x�����A�ڶ��;�N^����r˭�rYhҬ�4��҃�nϭ���c���Եwo:~�h!�_��{���ȇOI�Iԃ��f�F<�&��:ebX���c}
����[����6��7�N<i�o�8`��'6ClG��BH�,�D�P-0�-Ch�Ɵ�f��a��ݪ-��IR�i�K�&�0l$�9�|y��z�:�Z��<Y���7;(u
�
�Pٜ/�n"�s0����ߐ�����w�2K�رȽ ZU�V܉F.{��%��W_���N�����2j$5o�N���1����|~&�b���q�&t
��瞡{�O&�49�re|_�<�>&q��|�.*y�(-�GUL">&c������tߞ=���(}��qZ�o����륟�X���Ð���"���N\|,�?�|Z2���Q'����;-��!�O
��V�0�80�,J�=��$P��'�f"p���n�N�v)�M{��D"��آ%?�<[2E��A��g(��|�y1�H_�u�I)�]��g]�_W-�R�E��(�W�d������]����$j�@��?x0}��'4�ē�U~���嚱�ZZRb�j�؍?��MXJM�өm�v6y�m�۱g�ES��2�6��`P�@&L�}�1�>���Jn!�c[�2�Y��v{dr)@��d֎��a��Q�CUU%%�6��E%�C?��ER��ԜF���&^�UUt����լY����v��q�s�TGVUx�;l�O�n�u�����cU�W��}D�a�8@"��;�� ��?����rw�!�_\L�}{�&'[l+~�:�V��eq�=�����q�C�#�u�V��^ݺS۶myr�d՛?.%��RO�y=��+*G[Z�r
?��n��ܭ+��ˀ�ʔ��Kk��N?}<%�$Svv6͙��9n�8����Pom�ϰ�X˪���r�k�ó$�8�8���>o-q���ع��E�B�#�R�)ҡE,�d���E�j��>.-(���=d,X�b,����/�y�ٿM���ĺ�˵�*+�
R�i�
�+�$���E��@*��o�V�*2���L�ĴeI�cW�F���d�
���?a��"U�@
��#Ϙj��ǀiO�+P�K��G@��8@B�Gt�ܙG;�8�O?9Y���|LZP56m�(�|�vmxũ4�NX�X�bM��.[�ҵ�>�z���$S��OL7�t�mP�o�~��^���0�nz�~���}������FJ�}�@n�g�p?���P��0a�q
�Hǧ$7��b^|R�T�E�q�Sc�>�µ���b:}�iҏ�x��'(�a�m7��x��e�w��1
�pmB��XZ�9��GN�d��+6QlBBf�H^#�WU�QP�-C�i�#��A�&���s�fW6�wȕ�B���(�sw&�.�nޒ\p�9����j�BJޞ&ײ���¼�0�춪��U(�6ЁՕ��<jԤ�xN��
��Y�0���}���[�E����o���}�I�ׯ?]}�Ua'�˒n`W�t�q�}��生�'�?+k��1�(�Em�`AA}����a��lيN;N�c�7_ӏ?�$�Hw�"������sΣ������Y�
iбc'Q����~��X��">Q���i���[����9�R�hq�>��p.Y��@0ߞ9��MF�|��|@ƦM���Q1����V3�RSi��at��'cbR"�do�~���paם�~~�jH}fXcRh]>�6dn��<F,��U�DV��'h\�l�N��� �FI[~��l�qՏT�R�_���6mf��}��g���!�g��!%�1y7d(�>��#�>��JX�b��A�"����^`�O��{��0 E<->+�4�"~�Se�s���
�A�-̧��D�q���خ=�Ջ\�ۓ�G�c�|���e�qX�C�ޢ"���a�S#y`�KʘO���a�Y���� ��&6H�E��
5�až�����s���o��?x/ &i���m©(/��]tI��x��T������r� Q�`)����6�:R���� &L��&=LW]u-���Sεw�Z����(v�W-Z�P�5鑿S:Kd��I
��ޣSG���/�N=�S��iK�Ctb鬂'!�_]]IkV��x��$ck�4H�
!_��WЗL�^t��j�-�go�E
�0�O]��A���Ԕ�V{NH�!��Y���u+u��S�Kt'��y��xj��ySy�)�l�"[%۴q#���ש�;�F3Ͳ[��|�ض�>����=�v��QѲ�K0b)�"�a6��B%%�^߹V0�M�-�O�|���R���Z���!L$&d�z�2�z�:�.>&gj#Jq"��w)J+�ٖ�3��aJJ�%��`��EuQ�+sLR���8�X�}��ިa#^%�)6�q��ݺ���h5�3�O�,��/�Qm[�
U�ЫK߾�����ƍ�
5�Mkօ�eK���ٔlbioa�d"�:�g�@!Lxw�)
��u"����'���ӧҽ�>@i
�a�A�!�"B���G��=�R2K��m�'&��O>brtr[�F���RZ\\,���U����K/�,�����R)�֚��*饎�;Q,����l�i���̾�0����A�q�[>�����H^�x!Y>7T;'��� l6�q�4��S#&
�ދ��ab,�6����t>�1�p.,L�M�ۢe����\�E�׳q��˔QQF�/+n�6�#`�p�!�N3h+�m�M�l�N1m;Pl���'�{q2�
"6��u�ݽӠ}0.�#�}�g�S��S$�D<+�C�=A!�
�(`rl<��z^ ��3�?O���
�cR��O�:�C�YR�^=l�?&@^E1��x�u&B?�g�d�I'Q�&M�J��T��"������֍9�`:u�X�ޣg���i��J����`,fr��#p�¢Bj��
���v��E�L
�X��<D�����e��=�ݻ�b�E+��R�>���ޣk�����u0 ���e�W�3�m�^&�G$(C=���p�m��9TTTdN6w�X O�A��)5!����;��H9P3�o�I�E{eш�g�ԥ3yX�-ܝK7^S�����D�����
�I���
�b,� k�X�d��m-R��\���%�$V��6��q��;����z���폶��
$<�\���L�qԮc{{lA
����e��]Ǿ��%��b��S�m��^ovH@$��Q��b/n[t�b����0Xm��чO8Y�2eΠ�fQ������%/멐F��X�7
�!+�<�f���Q�X}�x�M}u
wx��}UM5ue���Wk``���Iv��W�{�h��~���U�g�}`pb�A��}���IO=��H(�_x뻝��iu������^�
�:���^�W�#��h;��5Ya/ظa
����ix���ޱ���iIee�J�%+��:�\:l�����&K[���mX�Ѿ#���%�]�f-�����ޡkW��A��mC1�w1~'���Su������m�9#��6l*��A|�˒)�Vg�I��Lw>z�\súu�;3h��=�&���[v�R��nQAxm�0�cϞ"*a2�ǥ���>��}�H�V
�&U�$ؑ%L��&նݪW�~B�%������2��>�Z#���lO1]w�
��0��+/N��#�,=��[��($���?N�>^���7���̗܀�y��#
FGH�S:��.���!Gb
9X��#�},V�v�CN�{���֘�|KUo���$dJ;P��c��<(`:�i�f�b108
L�-,�X�"��L�ۻ���������?J�t]�g�A">�
���J��4�4u��]y͵���;u��"�Fɟi٢�L0Ā`7MoN�֭�ذa=5n���ݡ�%��
�D b�`Ǡ.�ݧO_���Y�����bd
�E�*́n4�����2֯�K.��,槟y�'O_[�
8�&�}���L}m
�lc.2�͔UЕ��uy�űZ���A*u�^��L�FZ�-E�Ҡ���pH�yL\ą%X2¹���3���'�]�M�ڴ�� �k��MjKF]p��B�cL�e� m���^99����2��v��qǝ�)�
L;r�ŋ�1�Nў��OU�d�� ��E���J��?Qp�QR���
�D�l�F�mLH�h%�G�L��M�ٺ�A.܂~fvĄ8�B�<�����M{�`XQ��5m�:��\��EC������Q���D��N=y,���C�AlƝ�GV��[�B&}�&��8Z�jego����w��m<yv��xԻ)�K^>RvO�I��O� b�a�Io�N�_q�X�=m��`���UW^G}�>��~���d�
1�!�k��J�%~WƒT�ظXZ��Jھm���VUYE>���Ьys*�˥/go��ȥӕ����˗і�v<�B���x�|�Š���W�%��u�����.iX*��ln��v��|Ҙz�!��ٟc+��!Yc
��i�Ӹ_{���'�'���唕�)$_K�P��[
��$�������}C)�+�%�`��S�.��RRJ�㿣�8���f�&�c%���:X�,wl�����r�Y��]�ե5�\p�a��>�-�<�|*��$��S@����!�I��,�XB��]ȏ�.�v�2"yd�å���v!�f0t"�,`{X�|E��X+V�Y�F�8Z$����e��O���^������4�L�&�-�X��K���"�ͣ�ܜ0�Qd\p�%a?�ѳ�(c�zk�R!�s~~>��v
��?ٓ�AZC�ܥen��"y�}�V��!� +!V�͛�(k�&���؍X�8~�-!އ��$!��f�{�U!�*۰53+���]�T��G������ ���:��w�M7� g�3(Ѳt�f��v��>��z�I����a�`��|�mL�W�<�/�4p��
Fw��~�ӷ��9<pY7�\�O�!�'kS��P�8�IuG�8xզ���p����6$3.C&��aPGL'lh8�
)^֫��Z���q��7NWl���Χ���*����7�
R��?���b��
i�o]���".\��J$�(ā{�u��X�X7Ŋ��"x��
?!"i��3�Ә��h����.-�;W����
�7��Fg�{����Z��ć��P����I��+!a�>#��E�֊�E�4�?shl�u�ڷӋI�]{Ö�7�������9o\�x�v���2���F�s���3?_���t>����]Q�5k&1$�f(�z
�h���t�%���'��Zu%�VOp�`u�vl8덍�*n�ݥw��tݍ�F�
���<�S2)%��x�Yjժu�9q�>�q��m�0۪��{9�A�7���8x�y��E�����4���5�h�FΤD���J�zz�Q�'��W%$R�;ҟԀ\�ڒ���<s���+o&w���/ȣ�f�g�<rw�&�k�h�@ ��k[�$�q�>�9!S�xS���_|a��4}�t�3�(���a���?��ޝ9SB��ڋ2x��З'y8�kܸ����F�Ds�̱$�a�����O�A�
��.19D�v��$u(q&��?�q'm�̤��t��W�쫅Lַ��F��!�xp7�q�-
#g�f�TK�3�:GHFV����[���2����t4�Iy�kx2�Ty+;՚�
��$�n��R�5�T�?�>R��G��噁�+����]�armZG��s)�?��QS�nXC�O>(�M�C��8�!f��U�����e�B����Y�%�^vP�!��ŗ^Nw�v+}�xq=)%sӦ��ayZ6r�6f
I]��X�BJh܂_,���=�X7�n�.�w�hE4�5~��హ��ʿ�G��?x_���aՊ��)�>X������w�%�|@�����녜|�Cx�
J�8���<�#+ eVy@1�ZQ�^s�� L>��R9�f�w�ݒ�jK#<���Xe9���
�(�m�����ˋ�x�j#����پ�\�^�k����C@"��HktЏm�������ҥ!t���������T��װjQ�a��?Ғ��I3{#���X��ڸ1������{�x��jۮ=}�����Nή]��
y<���tƄ �g����װJ�yF���~"�-�̓
�p}�~��JUwq��$������!�5�8X̳�0�P ��ڠ/s��9���Ɓ��j�o����l\F���
��Xz��Er�o�
y����&͙�*�R�,���b�4|\�CX�M��w��TU��|��[���kC$tH�}2�.�8�
����?��H�q�H�ޣG}b��J�.GT{�i|���2ten�Q_�ݷ���#:8�2�~`�lXAc�p�ў�<���iڿ�I�V���G!�pwN�ĵ��
k�7ݞM�6=dB9R��T� 7���o�u����8�Q���L(�'AW"G�$j3`�c��@�
O����Ɛ�M{��)�ś���۷.Y�j�����O�_|D�����Ő<X=*{�9rw�a�E��%!�v�'��"��=�{!��Ckք\��Όt6K��$�����s�J5)��6��[h��Q���^�Ro�b�����|����"Q�x��٫�����#���i����_��͛�SnN�}_�����B�fG2_�.����@��Ν;���]*����O��^EK.
!e˫����}w�%6
c��S1}�ۇ��&�#��V2(cOQ���-�@-�`��Ӱq�c�8̑,W�NӾQk�{W���z�.�3`9y�;y���8��c�7�����|��ĐZ��,�^��bq|J*�
�ɛ�UT��T�*O��NVGD���`�f��8�&8}��4mʿh��wȦ
����
d���s,P��v�#\y��$��}�Ӱx�B��K�yz�~D"�ܜ�t�����Y|���s���,9�<a��}���&��i�6ݻ��C7�zz��r>+6ѓH6{��W%���W��,b4����w/
2T�O��^}���>B[6gQaA>��7!��O�猉!�$:�XUf=W|�d����%�<=�Z�T��u���ߟ���t˟n�0�wf�U���E���!���S����Z5��8�!��,j��0�rHx�#�+'K0�:���i3VU��;�%̡��.��~����N���^�F<3
(nTH���Z�h�t��}���ї\v9=9�ѐ���4��b������ɓ�u**����z�L]5�.�kՄ�}�w�!,����7x:w�b6�3�]��\AR���?a��t�y"�CB��ñ�!�I���SX����̱���n`^
*#$�W^x�>���ع�����J�n]kcI��@�
�R��3���i�I��郙3i����-���N?s���#����D�
T7O4�A-ۂ�鳓٤�7��|�`u/�*$�k�Sͪ��và��TU�^t�Y[�V�1�S�1�ܬ�u+�(/="̀P��ր�E��$�1��=J+���p�u7��6�@��;�h#s�V�.����3X��k/��V�v�\��n�o
<�Ս@[�r�l0,�ͥe���̐8L�+����\y�5�ƒ���y��0�G�:�N>��c�8�TX��~+F��vˊ=")��2�Հ1ԇ��<r��S�c1ə\1n�A-R�d��!����u
�QiLܷU��o�F�A��'q�¸����C�?����M:�vS_���ǟz�&�w��6Q��:�A�z��'��/��^���E8��!C$���meH���~T����1�!Oa��j���p{��-$�#���|��s|m!
�mڴ2����f��0[��0��{B&V
L�[ ����#:���z�!�?k~��������H֨��r�I��A�<1�(�D
��;X��{�JO�C����]4if�@�`����'%�*���}R��z�ڷ�HΉ�[Ϫ�BU�O��2ޭ���i�Ek�*�{02$�kG@�3�c`�U1ْSR�F^��(+3Stak�J�tpֱ���G�x�N;�ޘ6�~Z����j�sH8���t@� q���(����[j9
�:�!�>�֭��d�sK��ܰ��G��m��+S��ج?�(l8~3�=���C��t��QR�6�N;�NxC{"�A��ΒO
��0\z�\��1}����GЂy�(gg6�b���x�at&���c��_�\ne"'7Hc�5��|\�=�ՙ���qf%{�#�ڭ�[��:�<,�c�������xʘ��'b��#hrrr��
�杏fь7ޠ˗S�/����{��4�3h�9��.�#��ڱ�C���T���
Ki^A�H�2W{{���8�n�\m;0),���/���(��5\��L��|�
V�RH,����dϔ�=Yj?
O�u�Q�����ߟ)d�N'�
w�jb�];i��5��X��ݹs)x{,��`aA�DZb2ar�R�Y�)AZU��v�D;�^۴is��h���D�
����ٮu���"�F\o�Le�$8K=�����ܦ=�H���/j��B
}`��3�/l�l`Uum�@�z��˵�r(�WY!�9$t�+*WW�����*` ������bx����d����?�ɡ"�+�$��[�s������T|��M8i�u�UG3>��j���*e��W�Н��ױu�y�P(~i��k��QL��T���ܩ�J03�rP=Jޚ"^q��ժ4�����/��aOl+��q�~i�*bS��N��<-��S*�j���R�B�-��Y�FR�#��V!�
��4�F�/�.�bA��T��0���V$c�c!�˱&q�G1�"k�x�>Jk�Vo��C�_�Y?�ς�c�8�v��=��u
�*vY%P�4����7+�E�k\�&Zx/�9�糶M�sD��Hg1�t}��y�`w��A�Ee�>'h�b����?�S���
iD\�A53��HA/C� ��X���ԐPs�j���M{�_�5
l��n�b��{��}k֟'��!I���^�����=
�`r�y�=RC"V��A·��5�VI�K/�"��yb�#��AJ�J�M�3�
ñ҂����ñI,Y�P"Wk�kF3��{�I��٪ukzx��Q�m�O?�}��EϿ�
��S�#���SO<F}�o��A-3c��A��ԳW���fl�(��܋/K]TT
���D<7"����W]s�l
o�1]�`D�6ge�=p���c���a�FG�8�9z�5LZ�>O.ON�ly۶�(f�J�����i�vp��e�X��F7+^f���Y�T��|�� o`�HFFW��9P�{�>����?�)�J�I�_��R�� oI�(�z�$mҤ��\x�Iv�Tx�c�_�NꕢZv~^~�cQ�^�F����
���۷ =��?i؈��{t8����~�e�v�j��E�;�G��U4��ī�p��p�HR�dE�d�%y��'�5Y
E
>mڸ��}{��srr��{���t��t�M7���&Ѿ�{�J^(����Ѱo�^�`�}�%�$���K:�82�1r��yZ_W���ҹ_S��q����j���lY�4ħM�AZD��Lu�~Bv���v:��M�Y4���Q"1Q�ޡ���k̒E�de�t�Z$`@"S�;'J�v4q1�N?C�n;��C����p�BU�J� �n��:qab�:���̓
iA/).>�s��;v�$R��n���w��mHj����?B���Wl�S�B�>��N��h��f̸q��&w�d���\$,"��)�{ffF�cQ�!�;������;X�_�~��AM��1���RGlUgm��M�(����� �J�����A��:�T~�"Ke1Ք���|@�]UE�AY%U���V�6 ��q7�+G�'R�HQ��Gy��X��'Q/>��w߱����7�
z��n�H��x�^~�yZ�t�!�ys�+թ�|�yz��?�"�ǡٜUfp�֊� ׯi�186+�$4֖3�����̓��0�t�)�ے�%�HP��O��&�� ��3K�Ѳ��"N�p�ܨ5M�bߢEKQ�[�j6��
��������N^��g�/5D^p9��J$��RS�&MV�xȞ+����}6�����dQayDY�l�LK�,�o���^-�``�@��>uK�\��tx�"�w�DU}���{��"qT@b��Qv��!���˄�P*����@@j�J{��8��B��Y��6��c�lc h?l�)٫�z���y�}���ECQa�ؘ���Kڱc{d�6��EMX+[5*���˖.���O�Z,"��R���XS��u
G�,2܇V��:����H��"�CG�<�&jĢ����0n��Q�f�4K���Ƒ���KF,O�Z�#�,㨿v��@P��ad��!��D:V�m9Y�eU"5���DW�x�B�F=Tߊ�V��ؽg�zш�DJ�>yy�Kw��]����7n,E��y5A*<�Q-���[�䔚�&��ٟ̒��'
��7�ϣ�n���M@�n��?
�c�β_쥗����������?
U���bE�^��C���w:v�Xj�5��K��H��8�?�{"p��WW�����ނn��N�D�oA>���WQ�~���**�è�>�Q�
�B�7�P�
�\?������+��V-�@N��$OPE9ŶjKI�F[9��&���-2�t�"�a�JZj��`��n�%q��[s�&+kΎ�w����o���H���p|���3�-)�_�8��e�6=���
4~nfݸ�-��Su%���Yؘ�p��
�;ֈ>��]1<�]�'�+��!c�
���;l�w��ۊ�߸�|��
��&�B�?]f
��B�P�P(J
�B�C�P(q(
��B�P�P(J
�B�C�P(q(
��B�P�P(J
�B�C�P(q(
��B�P�P(J
�B�C�P(q(
%�B�P�P(J
�B�C�P(q(
%�B�P�P(J
�B�C�P(q(
%�B�P�P(J
�B�C�P(q(
%�B�P�P(J
�B�C�P(q(
%�B�ġP(J
�B�C�P(q(
%�B�ġP(J
�B�C�P(q(
%�B�ġP(J
�B�C�P(q(
%�B�ġP(J
�B�C�P(q(
%�B�ġP(�8
�B�C�P(q(
%�B�ġP(�8
�B�C�P(q(
%�B�ġP(�8
�B�C�P(q(
%�B�ġP(�8
�B�C�P(q(
%�B�ġP(�8
��B�P(q(
%�B�ġP(�8
�o�8vk3(��@.��:��m�P(��u�0�!&��IEND�B`�PK��[Q�n��<�<.Generator/Joomla/Virtuemart/Assets/dynamic.pngnu�[����PNG
IHDR�e��tEXtSoftwareAdobe
ImageReadyq�e<xiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42 "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"
xmpMM:DocumentID="xmp.did:C1BBCB0752E911E5AC0EC600AF8B67C9"
xmpMM:InstanceID="xmp.iid:C1BBCB0652E911E5AC0EC600AF8B67C9"
xmp:CreatorTool="Adobe Photoshop CC 2015 (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:4cac024c-6f67-43bf-853c-df61417bb13b"
stRef:documentID="xmp.did:c6901131-0537-467c-a6d8-930c976b43f8"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>ԋ�9IDATx��}�T��s��/K_zAEDD��D�~���ς5�$�g/�oI,1�� FA��(�R��,��lo�;����ܙe!F
���fn9���<o;G�RU3���*��`|7��u�B�Qˤ�`0��<T&
���(T�
�����`0q0&���`0�8��`0q0&���`0�8��`0q0&���`0�8��`0q0&���`0�8��`�`0&���`0�8�~
��`�`|�P��P��o�8�>���9(D���p$���
�*��p�6T6xaUU蕋[6���㈅
�!װ�����Ƣ��P���n��~8��R+�G��F���3�&���QY�����Q
���`�V,YW�`(��lf���#z�$?
f:IB�5hP�4LGi_E(�a��:�l#�mm���(�q���G�a%��t�w�
��P&�#Ñ���m���}S�V_Y.'����&����4�SU0LGG�4%�q��ف�>Z�-խHЯ��d�חN��y�H����q�%�yoq9^�h-ڼ!�L
��KO��ݳ���P&V�����V���2t�c��fL��3c
s\RY0i0�8�4⚂~� o,X��P&��0�מ3E�a�9�`�`$Ն*}O�c9Z��!������I(��I{
�2LG
�;�x�եXQ^G?i��̸�qd��6�-�(&
��Ni!���uK���H$�r����p:�p������C�fgi��8�0q�������m�j�d�
�a,�%�^<iN��9��-�x�֯ò%_`���dǰ�������f�F��D
G��܌@ ݤ�_�~�8y
����v�)�-U5G�0H�}G
�۞�[k���L�3t�r�xL�S��#�t��D���mx���PQ^�n�{`İ�Я/<YP�D:�;!B�&2s�&�mV`���y��|V���֭�гwo\z��Qҳ�Y��P!G<q�Z��V�C�,��@G�xI^��8�e8[)��
F
Ƌ~
uu�2e
F��;���:��f� Yn� 1�#��m0�@K0�H(�Ew����f��^�*[���χ��n��z��5K�8�N
"&d��ɷ�c���d�ZHNFqʄR�p�ќ�y��t�,�I���`��U8���q�أ��Q�FJԙ���l�f�$�'I�y�{�Tc�>42���8�H[0��?66�P��#�è<z�u�Y�o��O�o�˓��q��F
����[k[�.�IҸ8혾^euљ�S����v3&N<g�y�!��UCNA�+F�<�\�&A&F{$�@TC8�ɟ�43)d���6456����47��
���ǁ--!��n�jDZ���
>Y0�Ι��<�����8�lG�⨬�O|@��B��"}�]=#����u4G� K}`�{��k/��뮻�����m~(��>�7zg;�&d���k��h��wd��lC{{;>x��]�*�7�[I;"�x,�J�0���=����ȵ�8˅���?o.��*L�4~��P'O��u������^R�2T�I���g����4�k�(x��/`��E������U���#��l�ގ�F�#�`,�ϔ/M��D��d������v䥻`�90y�d���#�#�"����9M��R��H��mv�\�+����+1l�H<�����9�8�±�*1�2�ˤ�p�-x��ӑK���� �J�k�H��=�
���w����C�wᢩ�Ћ�I(�@[(NJ#A\�&�Ȃ,��@ȂG=�K��G���u��Q�z�hll��b��n��L��n�$a���a�a\�Ӎ9s�"c��1hj��Ͻ
�u((�j�P��n�o6�a��b��^8vT��QL�n��#�0��j���Jʰ6��s�MH���7^ź�+pǯ����Ԛp��AȲ)�jh��$�D�4�
���S�Aj�X�lw���A�ӂn�%X������v/����b^�"�@,&�F�����l2c����=S�N�>���G�o�?�K���!��V��SgX]ь����Ϝ���wi�#1�K��-��Пޅ0:9俰�6�Y�9+x��خ���'��F�P��h'i��?��*Ȃl�&'�zL��/>x?;{:�UV��!!�ϒy����:�`��jw����ʀj1# ��Ԅ��M�vʩ�;�C���K�: ��}J>���D&G4q�o툠�Fq�ӊ�L���T����>\����� Y��@8�����c��i7���ӦY��9��&��/őP�XҬ!ͪ`D����8N4���
���h ı:��5���N
��
�0D��j
)����P�vDba�(G��Uh�*�S��'b���him�'�k�|01�\�H4�8���cd����R��cO���ǰ����mc�2#k|�e�L�:�6!�������e
����v&�x
6�s:�w
H��� ��<�M߇�W�ڇ�GMc;�
>X�/�y�~�l(]&�9t��:�j,��[�x�C�E�١��O:� ����9����b�y���;p�?En^.��>�s�BM*��
jo(&#&�8�_�5'ꪫ�n�"4W��W~�����ۃ��<�߱���6�1u��p�"F���]�Br3�H�F0g�+��VX��t�hl)/��Yw��.m�oO��ϯ�w�2���$=�ʱ�{�0�-�"�
F����XՆ�=2��"��C9���bq4��
�p;m����Ɛd�L�m��I��Z�ū�����G�
�yxu�mQ"3�f ��d��5�T��]�_�YM�1
�1pC��M~�_Y���}���X��?�����9k[1t���$Ӣ��@�?&#&⟙{��
,[���6�|�D�<o[��͊�X��_X��G
�Y�f��g_B�����1�dԅ�#G4JǍ� I�9�1�*�#1ts*��4��A�)�Mm<��77
�~��'�|�Kd�ѽ1��r8�at�b6��E�0��q���=��d��YO�#�$�Y��df�f�ӂ�4�:R�dadx�-v��xq��
Ȍ��G�9l�#
���
UF���zg��q��c�pt��7����:��G��n-p�WA��4.����%|<�=�\㍨j��k����N
#K��F,�j�"��0����ߌ��?�ƌ�'�|���|�ٽ�"��Q����|�Z����簣�dBXBF_�Эn�}�Db;V,������i���2�s2���(��ҏ%��p�wℓ��
�Mxj&�L�%�=mb�ZL��j4Эv���!;�~
�d��_�[����[M2�7;�)�,&ɳ����'�ǩ���sw�&6$���^���M>�ɼrҵv�>\P���e{��动T{z6+�&��/�~��P�+[D�&]���ݤ`�X�Ǫ��P\\����:�q�{@��R�6vD
U�P-h���'��P2���d>����~�.�D��?Ř3.G���a��ȊI�����u�����^/��
B�A
!LZ��$���،u���'n�12Q
=H�ʔ��"�1�H��;�v�"J�.����b�:B}ɯ%y���h
ũ#ؠ��$;�~[3F��ٯ�)o���E��lV��M��8��y6�Ìk���J�Ӭ}�ZDԵ����[��t�Q��:݇�eEK�����:v��]�HU���"�e
�҆��=����Ҹ�]�a��`�&��;�¤��T�6^~�������+���Y�"����Hc�3��_]|&&�8Mf�����v!��
'2�|2CD\���ٸ��C����2
�jF�H������l[-��Eg��wˁ��L"3g3��8��)�&��T��65F�նv��������3��pu"{��ɱ�!y�
�f2�Jf�;7ɇ�}
���/��!����)Kr=���;_���5ER�S�U�"/��3�t��bE�@^T�n��⓳��C&�������_u�7
�],=�:�8���Gq��
J�c��.��] A��Gms�j;P��G�7�9
�6��1V'Er��F�E��-��4k3��:G���u� ��mEb\s�>W0c�ς/H����*B4D���ߒ���]Dp�/j<��I�%��>f��� UaR���Hbg�%%T���R/1H��5��km�9������&��2�K�;|aR�4���.=s�$���>���1τ+3A�$Ȯ��XBE$A=��[밍�_���X[��MeX=�ulx� ��߄��\� (�IG����C�:��n�Ǔ.3Jt���P(L��X(Htҏ6��WX���\l-�td�8R�rTo<��
���!�İЬ�rS�QbZ�U��g�
���}����E5����q̝�(א��w�"g�k�/�*'+݆�fN�����h$�Ѕo0a��&�
���f�ͮ�/-���eR�&���}g��\x�l�����'���q{���~�.�!1��ѳ0��$��a��˷���i��&�u���j�,�
N��G�ڣ &:��!!M�N�G����(��[vS+�Dd�v�UMR(Z,������i����(>�B�K;��j04��q�J�1#�&iz��UL����W=z�c�Uܷ&��j�Ƶ�)�Dd��f%�L8��hR�Ћ�[�1a�4'���;L?��C�3V��MDL'�!@�
FϹ)EH�����0�'gҽ��Ų��B�ꯠZ�t[�"�ي�G;�W2M�(ڪ6`����G.��&\u���|Q-��ʫ�"
��+=�`�����23��r�jo!�C�G*<�s<ݿZ[�:P�äc'��ůf��G����3\V�S
����Z,d�E�bc]��7���ƪM��9�Ӊ���'^lz���xœY~�K�1P�,#k�y��}�G�UM� �r���b��'rRt��W�2-B�Ѐ��9��Gbz�.�$U���Խ��"�#�#.<��fʝ��1�|n!~��Եd-��f��L&�E�m����W���R!}AMEe{b��ax�uCAݴ��Ƕp�d�Ι]t�^m��D�[,m�S[�F��������w�4�q�{mx��ԩRR'r^|�p_���p;�F"�I��)�]��uĄJ�{�.���ľC�K/ƨ��Q���fy�7����)ј_�ٙFt�D}���y#�1P�B~�
ط|
��ϱ�У���L�<2�*떆;n��ݺ�G߁Dv�54��tI�C����<�DLy�dGl\ޓX�C�{Q�␛��G�lm�C���5+�O�_�8��:k�@���x����I���x3�V,��7GY��o~ �[���~�(fMIw59��q�g��]�Δ��&!��D±��4�̪�㰙a�A
�-B�C�s�4�<vV��3
�b6µ�j�q��S����������U\��<T����]��Z�[�!US���Zl7�i��[p�#���m3v�Qi��R�����h���E��.ђ1Ƽ�A�;-Y��ecSrv�
�Zg���k��m��,�{�xCE���7T�0#n\�Ǥ�Ӑ��va+5ɗU~AR�T+"��4+���BF�>�N55�T^fŨN�w�����Fe�jI�"��Dna:=�8�"`"�1��ҁH44�������l��sw;ރ��*��1�M�����m�GR]]#����!Մ0�3��DBXNN��V#/?_���j#���I�:H�� ��O��m�#4���q�
��N�82�C`�8�d��S��v�m��ٞv��GǙ�O��5=h�qfh��3�8븁��&�i��?���&f��cG�W�.J���t�08٩���\��]"�}�I��HX��Q?��ә�K�В�~�������>���U�I�
���{~{�d��'�
�6_���+76�H϶:^���L�)cW����V��݈J��5��sv�+��
�!:�E�wB,i�g��K�3�I����ʍ������V]*9M7K� �fuoo�J�%�?�'pE��Iav:ߋS�02�7^�B�8��o\��1(&E*��'���#���A�bп�9��122He�\� �1�i!3%���:�P��"3�ʣ�G�Q�*��P�{AnN.�}�N"��ek��h��1�d�"--��i�D�Vi�XȤ���%�H��#�cnn>��>�&���蚒
�~��(*����0p��#�TAR�?�'����4�����6��5&S��_V���J�U,
{��&ʑ���߁��,g皎�Q�<f`�;o���E������H&��x��9�eC�ۆze���,F��M�n'[��E��rX����r�����9���t��^=�92�
�J�\�N:eS<�qMɸ4\��ʊP���.EVsw$:[�EfF�4������tu�Ȉ
\7b�4�eT@Ч�\]J��!����P�A�C�Beh4�9Ս�iq�4�qd�5g��Y�<nW�]�B�MXC dY4�ie����*������5��6�"&���!L��� ń�{mM-Lf�a+�;N�l�DW�����gO�t���{����JLFz:�E�rn�Y��b6ő#3L3��dul�^�8��m'�m�o�F��3%�Բ�@2_�u+ƶ�GjT%5�u�5yѸ�Ԉ��v+�Y�Q:$�m�;��W�J�ф�#{pP�<�蛋=
�+��g%gLeΕof�dt�!nW�y��m��D�3�t�8�-�$֕�����d
Ű��k��:�#�K\n/� �uv.\�рYݞ�,��G��������k�z2�C#uW��fԻxe�"�s����G_�Vx��瘍�����f�=tA-�`B���Zg:��Z6��M-V�*,ȗ�'M��E�l�h�T]L���sX��\�ؼi�4R�#Ax�� ���/�ݺ����˓fPaQ�L�?��b��$1X�_gddH�H��n�[�����t������d!�s��\�T�I����f�mtĘ*���hf'����n��ʦ�Mrr
�6V�a�8E*#5v�����
�ɋ��L��,�|`�EDfD��Ҳ*���c�����
b{�
��d�@o�PE
-~�������@��t�i0��!L:ni�C<�f[P�l�k��b{h�b��G?�cA����!�j2{J�w����M~��ǜ�
�qEf^dad�Zq$�jVLW��tWN,��G�Ǜ�g�5�">29�
����҈���>N�ivO,_���yN�"%t���4��Y����^����2Q��"a,D_mD���l
��Z��_�#�X8�[Hq(�^PDx*I�zJ~�]>�DMM
?z��WVO�sƤR<�^��X�hL�_���Ic�w��Mx`q9�̖
���a��Iē�w:�4A4�6ԃ�DŽ?A�[|�N'��>��RIn��"�Ta
�fU�������[c����l�K���_�W��ƘT�\�Ƹ��
�.L�@����M1YTcfW���i;��7C��ڥQ,��5�1�#�t���L�?�8������Nx_�%��-��q�U�"��P;����H���ѣ������{�
���"��BUD�Q��zPMR��m$ԅ��X�G8>Ś������Y�F|�f�>G{
S��pʦ&��W�JP<��)sI4��Ϗ�a�C�7�5ul_�i4ۑ�b����ʆ]���խ�LJDD`�hD�ү9cԿG�4�������T��':����0f�b����d��/�Pĵw�Hƒ�.+��v��!T��
:px��ަ$S���!�~���;���c^ҏ:���(�f��Ia��
��<D�悅a,�$3�!�iDJ�M8�ԁ�w���iC��Xr�^��nY89���-�����
"�55m�l
���OjK��+vjbf��Y���iޥ�%L����li�8\N���C��d@U:R��¡"�bD2�P�w�.�-�X"%]#�
sI��sG��l͈�%M#b�v�ɏ�=$��p[1�W.64a&Ear����m��-r�}0����}A�P��\�2�e.�'�I��z��h�(Ip�$��*��'��)�'�(��yqb��7_���Ƹl+-�-q�ƥ$p|7>�
�}M���iN��+��Evl��HiuR���TR�u~=��6
�C���3�xa�ym�Y�A�ϕ�X���h_��ʔ���HE�rA���62YZ:N��
���w�Ձ���?�GM���w�j!iq8�}�
�.�4A�Ig���hBF��眤������ީ^�[Z���!K� ^"*�Ut�TQ�]��Y{3�Ȥ��Yd2�ԕ�9�0�����{^XL�&(�D�|M%N��u-A��\[a>tR�<��3�h*!;�E�E�E5��D���s��>���C2ӜҌ�D�w��c�FV����O�G�-�s\����L���ɚ�uyn3��Ydxu;>��J��Ċ� �3˂b�&�i�O��1l�j)����6#���r��#]^J�LNC����KtMo7��>-G���T:��O�����\_��]M$��2[D6p��"2���FD�_�^x�%�z�6�w�o{�a�$)čT~�9囡�-V�p32�p�؝.Mq�]DH������U��v�zL�trs�PU� ~��"��Μ
=��`6Rxi���2D���!�8�N0r`!�V"�܊�������'��ٲ��M����Я{zz~4�PS:�_$�@�ǾwMJ����ދqdܳ�mH���4XK�Q��V��������Q�o���<v��R�
��Ր�ɓ�� ymWi�h�IV
b�f�}�E~SE�(�jgu+G�qU~M�;�pz�YeX4���b;;ɒ��>��/�%����2����n�J���n�Q�}�h@�H�D{�FVR�Y�q���֙Wc��Qp��57��m��
�L��٬��x4_�[6T`՚2��f%ʶ�bC���5�q�Yr��?AT��h�ġ��q-�I�Tt�qj���55(,*��sG͇"o��
r#&-�g�jaJsC%�hhm�e�X�j;,1-#��S'��>�4�ð=E�d\��#���n~�yv4G0��XA��5:$kPh�x�Í蠿9���8�.f�ۋ6����f<��W���3��yCƪ�D�v���Bt�c�����"G���v��A��a|Pg�^�!�$��)җ�)��C8QO/LB�dJ��@,�[G�~ՌOj�;U���{t�P�$� `�r��i89��hyW������k�]G����Y'�Lt�xo�B��T�\���ކ��4&�fb��A�ޭP�(BeC!��A���C����bm�Z��Ě0u�mh��N���=v��E~�yѽ{/�mX��װ�zA��\7W7�t��������l�&T��c'����|�Fr���h�v�EFم���[Ke:��N�a�W.�sԀ"9��W����\O2;T!s9�7`P�L�/%e[G
�>���~=�а�'W����|�S���r��'���ye�rM�,��S��d��U����s���U�c}��.��;��9GaDi>2�j�����V<��%����p�1}:�ﮤ:<�d��KF�%}�xe}������B3<j"�a���*r��^���&�
�Iө�cA�/"ͭƀ��W�Y��d�Q�&T�\���Y�|>R6�Y��u�j�s��M����\�.dHÁ��{FV�L9�c��d��"H��mGnm�3��#Rμ�s�cA�|0���:I��%5�������ɏ�s����@ �iD����!�u=��Ht4n����}.����XO�(-�K�D�H
E�d� bw!n�"%��X(B����`��A=��C���燞�
M�>���.��E��7m(���n���;�s]��r���+����w/,�]�%B����ùS�bD�\\t�,��B��^[뽸�s�q[��G_�QKGZ�fg�+u���������$�E��H�����P�T%وw��8��NԋsVb�ѽ�cU�M�WS�̼�1ڵ)��(
S�^�z��F�������j8:O�:����̎�(_=��/���I��M�X��#.�Ӎ��Zb*F�XZ��"�%��Ff)��HM�VKXù�0[���4؈�:>{~�&�|����J���L���(Ie$]��ǺT9&Rm�t23��B�0�Ѻm-N7������*4����;j<b�cŠ�MW����I�Y�ƍ����K�����`r琢Ʉ
=�V�#����Xm4i�����&�Hӎ��ؽ�iG�A����v��A3��DB�#�<��>��R�PDcĢ*1�xD/1����PgB��Z
���7\�{�<Nfr�%��oMU4�br/��A�=ߍ+N /�Ƒ��bm�'�gS�-C��L�[�YE�U�ֹ��ӂ�<��D��&��;�~��PA�¢�\l�#��G����3L*��UC�[���vo�@��R�X��:�� 9�n*M��L�A�x�}Ʊ��N��&6*��ȣ%�����D�H\64�b��NT�
���Di�2'�,Q����"*:��]�V~F��XT���$��
��Ĥ�O�7+V�G��L��"a�f3U6�'��Hm�&MU,)H�no�w�lc]�'���}�I4�
����l��VM�G���Z��B�GC�?�6|�kì��ӆg!ܴU��'B^�U5Q����9sУ�Cz�`��%}��4y�!p�>x㣵P#a$$aD!�R�!�~�s���ܧC���/O����s�Hͤ6�[�&�YČ�qXd��@힉�wq:^��t<={9ʫی�(o���f�HJfu�g\|�`���EeC�$?�p��0�D��gxl������IbEw2�v�"�i���NŒ�u��d*v�H�!T��B�M���tc���f���2/@��4һyL���Ü\'cW�!�{Z��}�az_�����&G�)(�c�t�:�U���<q�3J�x�,�����Y�fٓ�m�9Ԇn���v�ʅ~YF/\,V#���e�1L���n���h���ܿ:���x2AD�������v���x,����0�Ȇ��"�ʨ�I�I*�Df�ʟ5�bX�������̍�����SOĊUkq����EK�y�EК+�L��^U�@�bq
�A���ɤLG�����\���!�\ O0�@(MN4��RSDHY?���?�E�b�]�=8��Cu�ؔSK̪�zh*�#�
VqUH�E�Vb֥�q��n��UR}e�IU٦V��գ�XI+�7�25�������L��$��JhR!����FT�nɐ��M�$K�S���m�(qNQ�Y��%��J��n3IǷ�YKO
K=��^�t�6�eWe~���$�6]W&��H�*N�6������\�d��R�u�ɥ�I�h��6�.�%�v�ϝ�S6��c
֑�*�X`QHY�T����!��3�ũ3f
��`����8��v��i��.#,�&��-o����s0j�(|�d^~g����W��3-�~'$�M,�x��н����sQ\��?��g��xH�l���X_O�Ӓ�+&G�e.��<;k���᱇��}�ǞT���2��m �yq�4K+�Yi8nH��+�K����Wl�kG4*S�����0Ž��:��JG��o�:�>۵�s:He�)���u�|��KdDۇ�ā]�3�"���bD#x�Z�ڷ�CG�
O�s�F�����D{�¸ܮQ��>�%�����_���q߽#1���7
J}d0#I��4�uD��`�R���?SN<�>���lh!S"�;�B��aJ+0�]�AS,�d�ڠ�W��O��?�[�o�K/<���l�Ց�P��Z��x6�Ò^�.&!���j�ɓ��O�O��U\r��
i����!��.�!�if$|��X���G�q��O�ҷ����/��J?�Cd�He�d�LA"F�l.�8�7f�,�WV��_ގe�
,��ʉP�����a�5!����0o���;NJ���K��o/�����]��p�'%�?�{�FB}"ZZ ,�,REV�y+��9�\6}V~�\�I�q��dR��k��uxi!�>?L�"����ˤ���!�Э��/���H5�5,�X[Vfhꆣ�~�lY��o:���2+fc��WaQslY�a
6"�V��pd�d02IĆK_;;�X=�,�W�
�߀?��&�PwnwR �s���}x��2Ԫ=a����4#�
G(ǥ�G�
ӂ?��O��Y8���CH�����@�D�<f@�z����=ѻw_�~�_8��s��ΏE~8e<[E4Ё!�N>�|���G��//k"��5
�hm�0�8�5%"�-�m����⥕��w�#';��X��J�@���(� ��՝�#f�]s���Ǎ��īDp"z6j섃:q����v*�x���a��ˎ�EF�29%��p�ͷ��G��Vlo��.2S�fD�zS��ಫ�Ƙ�ce��@<AKS��~t�U��1X�V�����.��28]n\�5X�f5~�ި�li��a�Y�C��Cq�Y��g`��^D�����ܬSP[�7�p���l��A��q���q���T��u�x�!���Z���k��#��;��u1�RZ��V΅˓�>}z�t�p�_���Y��r�}��F$�����-x�W�W_�ɓ&J�>�F_���3��
�l��n��a%�<��}�4d{�xr�d�����+q�wb�����̇�C5Rw��&
�ܿr�0��Y������C��S���Q��NR��cCe6�k��ҭ@,,�*���]�Gф����d+@0b��1w����A���΄�C�aram͘ŷ�p�<��Q���_܌3�:��8$���o�
w�@qI����O��i�c�Bl��!䔉e"��Q26w:�4���L�ɞő E��",�؝BE���ڀ�{˂��u~lj�YB�J��M�͓��K*����-�^?
�����:9\�?��dy�8��$�h�{x�/������𗏷���ud��]#$)B�nE��z-f,U
��E属\T�g�!ץ�8�#�-����!�ջ&��B�H��}p�E��R_��n�SN���.��G]�����8@Tl\�;f݂+��'M������[���f�N�0����˨��J��V.A�{�&+�GRa$��Q�5R
=�q�c0���}.}�\?���t|��
u|�E&�`�;R�"���~���B\u��H�)�Uu��M��;�_�@ɚ��22$�k���M����X�.D�s���z��;���Z<���y�<�S��+��5l������DM�����g�� S��̳~�;+����zl��"��Ee�)��g��>�d��05b�P̊+��Ŕ1}1qX1�6�~�M���;8��qƹ�/&�B<��o��ys����cpҴ��է����u>l�lǎ�4���9u.b�i�Ղ�,7��a@�<薎L� ����ŋe���.�
N�琏2q0�g�t ��$��翏wߞ-�#F�w���d��]H��E����$�x4�o;�oߊ��Y���k�I�N='�|
��a�j��`(hp���b��X��K44�#��ɽWN��3E�=�~��P�HHf��c�q�a�Q����[�2q0�m�ƺ
b���X���?���+;؋�s�5[,{]
�p��9������j��HB����Q]� *?r���`0�8��`�`0L���`0�8��`�`0L���`0�8��`�`0L���`0�8��`�`0L����`0�8��`�`0L����`0�8��`�`0L����`0�8��`�`0L����`0�8��`�`0L����`0q0��`�`0L����`0q0��`�`0L����`0q0��`�`0L����`0q0��`�`0L����`0q0&��`�`0L����`0q0&��`�`0L����`0q0&��`�`0L����`0q0&��`�`0L����`0q0&�q�G7�����R|�m�`0�j�u�`]E�=IEND�B`�PK��[���=Renderable/Item/AnimatedHeading/Assets/animatedHeading.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-animated-heading-wrapper {
position: relative;
line-height: 1.5;
}
.n2-ss-animated-heading-wrapper div {
display: inline-block;
vertical-align: top;
}
.n2-ss-animated-heading-wrapper > ss-text,
.n2-ss-animated-heading-wrapper > a {
vertical-align: middle;
display: inline;
text-decoration: inherit;
}
.n2-ss-animated-heading-wrapper > .n2-ss-animated-heading-i {
display: inline-block;
position: relative;
min-width: 0.6em;
}
.n2-ss-animated-heading-i * {
text-decoration: inherit;
}
.n2-ss-animated-heading-wrapper .n2-ss-animated-heading-i2 {
position: relative;
white-space: nowrap;
display: inline-grid;
justify-items: start;
grid-template-areas: "text";
}
.n2-ss-animated-heading-i-text {
grid-area: text;
white-space: nowrap;
text-decoration: inherit;
}
.n2-ss-animated-heading-i-text.n2-ss-animated-heading-measure-width * {
display: inline-block !important;
}
.n2-ss-animated-heading-i-cursor {
display: block;
position: absolute;
right: -2px;
top: 0;
background: #fff;
height: 100%;
width: 2px;
}
}PK��[p��}��)Renderable/Item/Audio/Assets/audio.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-item-audio-bar {
display: flex;
align-items: center;
overflow: hidden;
height: 32px;
flex-wrap: wrap;
justify-content: center;
}
.n2-ss-item-audio-bar audio {
display: none;
}
.n2-ss-item-audio-bar svg {
display: block;
}
.n2-ss-item-audio-bar .n2-ss-item-audio-play {
width: 32px;
cursor: pointer;
}
.n2-ss-item-audio-bar[data-state="playing"]
.n2-ss-item-audio-play {
display: none;
}
.n2-ss-item-audio-bar .n2-ss-item-audio-pause {
width: 32px;
cursor: pointer;
}
.n2-ss-item-audio-bar[data-state="paused"]
.n2-ss-item-audio-pause {
display: none;
}
.n2-ss-item-audio-bar .n2-ss-item-audio-progress-container {
flex: 1 1;
width: 200px;
padding: 4px 0;
cursor: pointer;
margin-right: 10px;
}
.n2-ss-item-audio-bar .n2-ss-item-audio-progress {
height: 6px;
}
.n2-ss-item-audio-bar .n2-ss-item-audio-progress-playhead {
width: 0;
height: 100%;
}
.n2-ss-item-audio-time {
font: normal 12px "Lucida Console", Monaco, monospace;
margin-right: 10px;
}
.n2-ss-item-audio-time + .n2-ss-item-audio-unmute,
.n2-ss-item-audio-time + .n2-ss-item-audio-unmute +
.n2-ss-item-audio-mute {
margin-left: -10px;
}
.n2-ss-item-audio-bar .n2-ss-item-audio-mute {
width: 32px;
cursor: pointer;
}
.n2-ss-item-audio-bar[data-volume="0"] .n2-ss-item-audio-mute {
display: none
}
.n2-ss-item-audio-bar .n2-ss-item-audio-unmute {
width: 32px;
cursor: pointer;
}
.n2-ss-item-audio-bar:not([data-volume="0"])
.n2-ss-item-audio-unmute {
display: none
}
.n2-ss-item-audio-bar .n2-ss-item-audio-volume-container {
width: 60px;
padding: 4px 0;
margin-right: 10px;
cursor: pointer;
}
.n2-ss-item-audio-bar .n2-ss-item-audio-volume {
height: 6px;
}
.n2-ss-item-audio-bar .n2-ss-item-audio-volumehead {
width: 100%;
height: 100%;
}
}PK��[O��f-Renderable/Item/Caption/Assets/caption.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-item-caption {
position: relative;
overflow: hidden;
}
.n2-ss-item-caption a {
display: block;
}
.n2-ss-item-caption picture,
.n2-ss-item-caption img {
display: block;
min-width: 100%;
max-width: 100%;
}
.n2-ss-item-caption-content {
display: flex;
flex-direction: column;
position: absolute;
width: 100%;
height: 100%;
}
.n2-ss-item-caption-Simple .n2-ss-item-caption-content {
height: auto;
}
.n2-ss-item-caption[data-direction="top"]
.n2-ss-item-caption-content {
top: 0;
left: 0;
}
.n2-ss-item-caption[data-direction="right"]
.n2-ss-item-caption-content {
bottom: 0;
right: 0;
}
.n2-ss-item-caption[data-direction="bottom"]
.n2-ss-item-caption-content {
bottom: 0;
left: 0;
}
.n2-ss-item-caption[data-direction="left"]
.n2-ss-item-caption-content {
bottom: 0;
left: 0;
}
.n2-ss-item-caption-content .n2-div-h4,
.n2-ss-item-caption-content p {
margin: 10px;
}
}PK��[�E����9Renderable/Item/CircleCounter/Assets/circlecounter.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-item-circlecounter-svg-container {
display: inline-block;
position: relative;
z-index: 1;
height: auto;
}
.n2-ss-item-circlecounter-svg-container svg {
vertical-align: top;
}
.n2-ss-item-circlecounter-svg-overlay {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
}
}PK��[�h�*eeCRenderable/Item/HighlightedHeading/Assets/highlightedHeading.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-highlighted-heading-wrapper {
line-height: 1.5;
display: flex;
flex-wrap: wrap;
align-items: center;
}
.n2-ss-highlighted-heading-wrapper div {
display: inline-block;
vertical-align: top;
}
.n2-ss-highlighted-heading-wrapper > div,
.n2-ss-highlighted-heading-wrapper > a {
vertical-align: baseline;
display: inline-block;
}
.n2-ss-highlighted-heading-before,
.n2-ss-highlighted-heading-after {
position: relative;
z-index: 2;
}
.n2-ss-highlighted-heading-highlighted {
position: relative;
}
.n2-ss-highlighted-heading-highlighted
.n2-ss-highlighted-heading-highlighted-text {
position: relative;
z-index: 2;
padding: 0 10px;
text-decoration: inherit;
}
.n2-ss-highlighted-heading-highlighted[data-highlight=""]
.n2-ss-highlighted-heading-highlighted-text {
padding: 0;
}
.n2-ss-highlighted-heading-highlighted > svg {
z-index: 1;
position: absolute;
top: 50%;
left: 50%;
width: 105%;
height: 120%;
transform: translate(-50%, -50%);
overflow: visible;
}
.n2-ss-highlighted-heading-highlighted[data-front="1"] > svg
{
z-index: 3;
}
.n2-ss-highlighted-heading-highlighted svg path {
stroke: #61ce70;
stroke-width: 9px;
fill: none;
stroke-linecap: round;
stroke-linejoin: round;
}
}PK��[�!9��9Renderable/Item/HighlightedHeading/Assets/svg/circle1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M239,36 C183,-12 5,33 5,117 C5,229 495,210 495,97
C495,12 250,-32 148,56"></path>
</svg>
PK��[�
���9Renderable/Item/HighlightedHeading/Assets/svg/circle2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M105,160 C63,155 5,151 5,106 C4,-17 495,-9 495,91
C495,206 58,193 33,167"></path>
</svg>
PK��[�UP���9Renderable/Item/HighlightedHeading/Assets/svg/circle3.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M336,166 C185,204 5,167 5,101 C5,35 140,10 269,10
C397,10 495,42 495,100 C494,179 261,223 130,159"></path>
</svg>
PK��[�@�Վ�8Renderable/Item/HighlightedHeading/Assets/svg/curly1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M13,190 C29.4,181 46,172 63,172 C79,172 80,190 93,190
C116,190 129,172 146,172 C163,172 168,190 183,190 C204,190 215,171 232,171
C251,171 250,190 267,190 C284,190 297,172 315,172 C335,172 333,190 351,190
C374,190 389,172 405,172 C421,172 419,190 437,190 C453,190 475,184
488,177"></path>
</svg>
PK��[%�Fѻ�8Renderable/Item/HighlightedHeading/Assets/svg/curly2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M10,175 C19,170 27,163 41,163 C55,163 50,180 60,180
C71,180 81,165 97,165 C115,165 120,181 130,181 C149,180 150,165 164,165
C180,165 190,181 201,181 C219,181 221,163 245,163 C261,163 270,183 282,183
C299,183 301,166 327,166 C343,166 346,183 360,183 C382,183 391,165 411,165
C426,165 434,184 450,184 C465,184 482,177 489,175"></path>
</svg>
PK��[�����<Renderable/Item/HighlightedHeading/Assets/svg/highlight1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M25,94 C72,62 93,40 98,46 C102,52 36,128 42,134
C49,140 146,58 153,66 C160,74 85,151 91,154 C96,157 217,56 219,62 C221,68
166,143 174,150 C182,157 259,64 266,71 C273,78 241,135 247,138 C253,141
334,44 341,48 C348,52 301,136 306,138 C311,140 392,53 399,58 C407,63
354,137 361,140 C368,143 440,63 444,66 C449,69 408,146 412,147 C416,148
472,104 475,95"></path>
</svg>
PK��[t��ww<Renderable/Item/HighlightedHeading/Assets/svg/highlight2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path class="n2-ss-long"
d="M20,40 C41,44 474,40 474,48 C474,56 10,54 10,62 C10,70
472,65 473,72 C473,79 22,83 22,89 C22,95 469,90 469,97 C469,104 13,107
13,112 C13,117 469,110 469,117 C469,124 24,128 24,133 C24,138 490,127
490,131 C490,135 17,160 17,160"></path>
</svg>
PK��[
�j>��<Renderable/Item/HighlightedHeading/Assets/svg/highlight3.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M32,85 C46,83 415,64 429,66 C392,83 58,125 46,131
C66,142 442,127 468,108"></path>
</svg>
PK��[�>ɕ�?Renderable/Item/HighlightedHeading/Assets/svg/line_through1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M10,100 C41,97 467,97 490,103"></path>
</svg>
PK��[�jmޕ�?Renderable/Item/HighlightedHeading/Assets/svg/line_through2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M19,27 C83,19 440,151 481,173"></path>
</svg>
PK��[.����?Renderable/Item/HighlightedHeading/Assets/svg/line_through3.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M23,47 C88,39 427,159 470,193"></path>
<path d="M477,35 C421,40 69,168 36,190"></path>
</svg>
PK��[:ѷ'��<Renderable/Item/HighlightedHeading/Assets/svg/rectangle1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M486,180 C482,140 481,2 471,0 C460,-2 29,10 25,13
C21,16 -2,158 13,164 C29,171 463,169 498,149"></path>
</svg>
PK��[��n���<Renderable/Item/HighlightedHeading/Assets/svg/rectangle2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M455,170 C392,148 24,163 9,165 C7,138 3,50 5,29 C28,25
461,-6 495,20 C494,44 493,137 492,150"></path>
</svg>
PK��[���p��<Renderable/Item/HighlightedHeading/Assets/svg/underline1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M10,186 C45.342,182 433,167
489,176"></path>
</svg>
PK��[a�^ʱ�<Renderable/Item/HighlightedHeading/Assets/svg/underline2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M12,187 C111,161 319,156 403,163 C422,164 482,166
489,186"></path>
</svg>
PK��[qns���<Renderable/Item/HighlightedHeading/Assets/svg/underline3.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M487,161 C461,164 352,165 311,166 C270,167 47,168
18,180 C7,186 20,187 40,186 C59,185 66,184 79,182"></path>
</svg>
PK��[�y|���CRenderable/Item/HighlightedHeading/Assets/svg/underline_double1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M11,173 C41,169 101,167 115,166 C137,165 337,160
339,162"></path>
<path d="M201,186 C276,168 477,160
487,162"></path>
</svg>
PK��[����CRenderable/Item/HighlightedHeading/Assets/svg/underline_double2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M11,174 C76,156 429,154 492,171"></path>
<path d="M36,186 C116,169 446,180
458,186"></path>
</svg>
PK��[�
�J��9Renderable/Item/HighlightedHeading/Assets/svg/zigzag1.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M479,151 C424,148 43,151 21,165 C53,170 386,157
418,165 C399,168 196,181 192,180"></path>
</svg>
PK��[`=����9Renderable/Item/HighlightedHeading/Assets/svg/zigzag2.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M330,149 C302,145 169,153 169,158 C169,163 294,158
294,161 C295,165 200,170 200,174 C200,179 246,180
250,180"></path>
</svg>
PK��[����9Renderable/Item/HighlightedHeading/Assets/svg/zigzag3.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500
200" preserveAspectRatio="none">
<path d="M209,180 C259,175 345,173 401,170 C320,168 201,169
120,171 C222,158 386,161 490,159 C400,153 126,142
10,159"></path>
</svg>
PK��[�c(77/Renderable/Item/ImageBox/Assets/imagebox.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-item-imagebox-container {
display: flex;
overflow: hidden;
}
.n2-ss-item-imagebox-container .n2-ss-item-imagebox-image a,
.n2-ss-item-imagebox-container .n2-ss-item-imagebox-content > a {
display: block;
}
.n2-ss-item-imagebox-container[data-layout="left"],
.n2-ss-item-imagebox-container[data-layout="right"] {
flex-direction: row;
}
.n2-ss-item-imagebox-container[data-layout="top"],
.n2-ss-item-imagebox-container[data-layout="bottom"] {
flex-direction: column;
}
.n2-ss-item-imagebox-image {
background-size: cover;
line-height: normal;
}
.n2-ss-item-imagebox-container[data-layout="right"]
.n2-ss-item-imagebox-image,
.n2-ss-item-imagebox-container[data-layout="bottom"]
.n2-ss-item-imagebox-image {
order: 2;
}
.n2-ss-item-imagebox-image picture {
display: block;
}
.n2-ss-item-imagebox-image img {
display: inline-block;
vertical-align: top;
max-width: 100%;
}
.n2-ss-item-imagebox-image .n2i {
display: block;
}
.n2-ss-item-imagebox-container .n2-ss-item-imagebox-image {
flex: 0 0 auto;
}
.n2-ss-item-imagebox-container[data-layout="left"]
.n2-ss-item-imagebox-content,
.n2-ss-item-imagebox-container[data-layout="right"]
.n2-ss-item-imagebox-content {
flex: 0 1 auto;
}
}PK��[���vv5Renderable/Item/ProgressBar/Assets/progressbar.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-item-progressbar {
width: 100%;
}
.n2-ss-item-progressbar-inner {
display: flex;
align-items: center;
}
.n2-ss-item-progressbar-counting {
margin: 0 10px;
width: 100%;
}
.n2-ss-item-progressbar-inner .n2-ss-item-progressbar-label {
white-space: nowrap;
margin: 0 10px;
text-overflow: clip;
}
}PK��[�f���3Renderable/Item/Transition/Assets/transition.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-item-transition {
position: relative;
}
.n2-ss-item-transition a,
.n2-ss-item-transition picture {
display: block;
}
.n2-ss-item-transition img {
display: block;
min-width: 100%;
max-width: 100%;
will-change: opacity;
line-height: 0;
}
.n2-ss-item-transition .n2-ss-item-transition-image2 {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
}PK��[���dU%U%@Slider/SliderType/Carousel/Assets/dist/ss-carousel-single.min.jsnu�[���!function(i){var
t=i;t._N2=t._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
s,n,h=i.document,r=(h.documentElement,i.setTimeout,i.clearTimeout,t._N2),a=(i.requestAnimationFrame,h.createElement.bind(h),Object.assign),o=function(i,t,s){i.style.setProperty(t,s)},l=function(i,t){for(var
s in
t)o(i,s,t[s])},u=function(i,t){i.classList.add(t)};n=function(){h.body},"complete"===h.readyState||"interactive"===h.readyState?n():h.addEventListener("DOMContentLoaded",n),r.d("SmartSliderCarouselSingle",["SmartSliderAbstract"],(function(){function
i(i,t){this.type="carousel-single",r.SmartSliderAbstract.prototype.constructor.call(this,i,a({carousel:1,maxPaneWidth:980},t))}return
i.prototype=Object.create(r.SmartSliderAbstract.prototype),i.prototype.constructor=i,i.prototype.createSlide=function(i,t){return
new
r.SlideCarouselSingle(this,i,t)},i.prototype.initResponsiveMode=function(){this.responsive=new
r.SmartSliderResponsiveCarouselSingle(this,this.parameters.responsive),this.responsive.start(),r.SmartSliderAbstract.prototype.initResponsiveMode.call(this)},i.prototype.initMainAnimation=function(){this.mainAnimation=new
r.SmartSliderMainAnimationCarouselSingle(this,this.parameters.mainanimation)},i.prototype.updateInsideSlides=function(i){for(var
t=[],s=0;s<i.length;s++)t=t.concat(this.getVisibleSlides(i[s]));r.SmartSliderAbstract.prototype.updateInsideSlides.call(this,t)},i.prototype.getVisibleSlides=function(i){i===s&&(i=this.currentSlide);for(var
t=[],n=i,h=0;n&&h<this.slides.length&&h<this.responsive.slidesInGroup;h++)t.push(n),n=n.getNext();if(!this.parameters.carousel&&t.length<this.responsive.slidesInGroup){n=i.getPrevious();for(h=t.length;h<this.responsive.slidesInGroup&&n;h++)t.push(n),n=n.getPrevious()}return
t},i.prototype.getSlideBackgroundContainer=function(){return
this.sliderElement.querySelector(".n2-ss-slider-2")},i.prototype.getUIPreviousSlide=function(i){for(var
t=i,s=0;s<this.responsive.slidesInGroup&&t;s++)t=t.getNext();var
n=i;for(s=this.responsive.slidesInGroup-s;s>=0&&n;s--)n=n.getPrevious();return(!n||-1===this.getVisibleSlides(i).indexOf(n))&&n},i.prototype.getUINextSlide=function(i){for(var
t=i,s=0;s<this.responsive.slidesInGroup&&t;s++)t=t.getNext();return(!t||-1===this.getVisibleSlides(i).indexOf(t))&&t},i.prototype.getHorizontalTouchDimension=function(){return
this.responsive.slideWidth},i.prototype.getVerticalTouchDimension=function(){return
this.responsive.resizeContext.slideHeight},i})),r.d("SmartSliderResponsiveCarouselSingle",["SmartSliderResponsive"],(function(){function
i(i,t){this.wH=0,this.slidesInGroup=1,this.mainAnimation=i.mainAnimation,r.SmartSliderResponsive.prototype.constructor.call(this,i,a({minimumSlideGap:10,justifySlides:1},t))}return
i.prototype=Object.create(r.SmartSliderResponsive.prototype),i.prototype.constructor=i,i.prototype.init=function(){var
i,t,s,n;r.SmartSliderResponsive.prototype.init.call(this),this._cacheEl={slider:this.sliderElement.querySelector(".n2-ss-slider-wrapper-inside")||this.sliderElement,"n2-ss-slider-3":this.sliderElement.querySelector(".n2-ss-slider-3"),"n2-ss-slider-pane-single":this.sliderElement.querySelector(".n2-ss-slider-pane-single"),"n2-ss-slider-pipeline":this.sliderElement.querySelector(".n2-ss-slider-pipeline")},i=this._cacheEl["n2-ss-slider-pane-single"],t="scroll",s=function(e){e.currentTarget.scrollTop=0,e.currentTarget.scrollLeft=0},n=(n={capture:!0})||{},i.addEventListener(t,s,n)},i.prototype.resizeStage1Width=function(){r.SmartSliderResponsive.prototype.resizeStage1Width.call(this);var
i=this._cacheEl["n2-ss-slider-3"].getBoundingClientRect(),s=t.getComputedStyle(this._cacheEl["n2-ss-slider-3"]),n=i.width-parseInt(s.getPropertyValue("padding-left"))-parseInt(s.getPropertyValue("padding-right")),h=Math.min(this.slider.visibleSlides.length,Math.max(1,Math.floor(n/(this.base.slideOuterWidth+this.parameters.minimumSlideGap))));1===h&&n<this.base.slideOuterWidth?this.resizeContext.slideOuterWidth=n:this.resizeContext.slideOuterWidth=this.base.slideOuterWidth,o(this._cacheEl["n2-ss-slider-pipeline"],"--slide-width",this.resizeContext.slideOuterWidth+"px");var
a,f=n-h*this.resizeContext.slideOuterWidth,c=0;if(1===this.parameters.justifySlides||1===h)a=Math.ceil(f/h/2),1===h&&a<this.parameters.minimumSlideGap/2&&(c=-1*(a=this.parameters.minimumSlideGap/2));else
if(2===this.parameters.justifySlides){var
d=h*this.resizeContext.slideOuterWidth+h*this.parameters.minimumSlideGap;l(this._cacheEl["n2-ss-slider-pane-single"],{"max-width":d+"px","justify-self":"center"}),a=this.parameters.minimumSlideGap/2,c=0}else
c=-1*(a=Math.ceil(f/Math.max(1,h-1)/2));l(this._cacheEl["n2-ss-slider-pipeline"],{"--self-side-margin":c+"px","--slide-side-margin":a+"px"}),this.slideWidth=this.resizeContext.slideOuterWidth+2*a;var
S=!1;h!==this.slidesInGroup&&(S=!0),this.slidesInGroup=h,S&&this.slider.stages.resolved("StarterSlide")&&(this.slider.updateInsideSlides([this.slider.currentSlide]),this.slider.playSlide(this.slider.currentSlide)),u(this._cacheEl["n2-ss-slider-pane-single"],"n2-ss-slider-pane-single--ready")},i.prototype.calculateResponsiveValues=function(){var
i=this.slider.visibleRealSlides[0].element,t=i.getBoundingClientRect();this.resizeContext.slideSelfWidth=t.width,this.resizeContext.slideSelfHeight=t.height;var
s=i.querySelector(".n2-ss-layers-container").getBoundingClientRect();this.resizeContext.slideWidth=s.width,this.resizeContext.slideHeight=s.height;var
n=this._cacheEl.slider.getBoundingClientRect();this.resizeContext.sliderWidth=n.width,this.resizeContext.sliderHeight=n.height,r.SmartSliderResponsive.prototype.calculateResponsiveValues.call(this)},i.prototype.onStarterSlide=function(i){r.SmartSliderResponsive.prototype.onStarterSlide.apply(this,arguments),this.mainAnimation.finalizeVisibleSlidesStage2()},i.prototype.finalizeVisibleSlidesStage2=function(){r.SmartSliderResponsive.prototype.finalizeVisibleSlidesStage2.apply(this,arguments),this.state.StarterSlide&&this.mainAnimation.finalizeVisibleSlidesStage2()},i.prototype.updateVisibleSlides=function(){r.SmartSliderResponsive.prototype.updateVisibleSlides.call(this),this.mainAnimation.onVisibleRealSlidesChanged()},i})),r.d("SmartSliderMainAnimationCarouselSingle",["SmartSliderMainAnimationAbstract"],(function(){function
i(i,t){this.carousel=i.parameters.carousel,r.MW.T("--slide-index",""),r.SmartSliderMainAnimationAbstract.prototype.constructor.call(this,i,a({duration:1500,ease:"easeInOutQuint"},t)),this.ii=r.MW.R(this.slider.sliderElement.querySelector(".n2-ss-slider-pipeline"))}return
i.prototype=Object.create(r.SmartSliderMainAnimationAbstract.prototype),i.prototype.constructor=i,i.prototype.onVisibleRealSlidesChanged=function(){this.slides=a([],this.slider.visibleRealSlides);for(var
i=0;i<this.slides.length;i++)this.slides[i].localIndex=i},i.prototype.finalizeVisibleSlidesStage2=function(){this.carousel?this.prepareCarousel(this.slider.currentSlide):this.calibratePipelinePosition()},i.prototype.prepareCarousel=function(i){if(this.slides.length>this.responsive.slidesInGroup){var
t,s,n=i.localIndex;if(n<this.slider.currentSlide.localIndex?(t=Math.abs(n-this.slider.currentSlide.localIndex),s=this.slider.currentSlide.localIndex-this.slides.length+2+n):(t=Math.max(0,n-this.slider.currentSlide.localIndex),s=Math.max(0,this.slides.length-n+this.slider.currentSlide.localIndex)),s>=t)for(;n>this.slides.length-this.responsive.slidesInGroup;){var
h=this.slides.shift();this.slides.push(h),n--}else for(var
a=0;a<s;a++){var o=this.slides.pop();this.slides.unshift(o),n--}}for(var
l=0;l<this.slides.length;l++)this.slides[l].localIndex=l,r.MW.R(this.slides[l].element)["--slide-index"]=l;this.calibratePipelinePosition()},i.prototype.calibratePipelinePosition=function(){if(!this.carousel)for(var
i=0;i<this.slides.length;i++)this.slides[i].localIndex=i,r.MW.R(this.slides[i].element)["--slide-index"]=i;var
t=this.slider.currentSlide.localIndex;(!this.carousel||this.slides.length<=this.responsive.slidesInGroup)&&(t=Math.min(t,this.slides.length-this.responsive.slidesInGroup)),this.ii.x=Math.round(-1*n2const.rtl.modifier*t*this.getSlideWidth())},i.prototype._initAnimation=function(i,t){this.carousel&&this.prepareCarousel(t),i.unsetActive(),t.setActive();var
s=t.localIndex;(!this.carousel||this.slides.length<=this.responsive.slidesInGroup)&&(s=Math.min(s,this.slides.length-this.responsive.slidesInGroup)),this.timeline.to(this.ii,this.parameters.duration,{snap:"x",x:-1*n2const.rtl.modifier*s*this.getSlideWidth(),ease:this.getEase()},0),this.slider.updateInsideSlides([i,t])},i.prototype.getSlideWidth=function(){return
this.slider.responsive.slideWidth},i})),r.d("SlideCarouselSingle",["FrontendSliderSlide"],(function(){function
i(i,t,s){r.FrontendSliderSlide.prototype.constructor.apply(this,arguments)}return
i.prototype=Object.create(r.FrontendSliderSlide.prototype),i.prototype.constructor=i,i.prototype.call=function(i){for(var
t=this.slider.getVisibleSlides(this),s=0;s<t.length;s++)r.FrontendSliderSlide.prototype[i].call(t[s])},i.prototype.playIn=function(){this.call("playIn")},i.prototype.playSpecialEventOnlySetToZero=function(){this.call("playSpecialEventOnlySetToZero")},i.prototype.playSpecialEventOnly=function(){this.call("playSpecialEventOnly")},i.prototype.playOut=function(){this.call("playOut")},i.prototype.allowFocus=function(){this.call("allowFocus")},i})),r.d("ss-carousel-single",["SmartSliderCarouselSingle","SmartSliderResponsiveCarouselSingle","SmartSliderMainAnimationCarouselSingle","SlideCarouselSingle"])}(window);PK��[��'a009Slider/SliderType/Carousel/Assets/dist/ss-carousel.min.jsnu�[���!function(t){var
s=t;s._N2=s._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
n,h,r=t.document,o=(r.documentElement,t.setTimeout,t.clearTimeout,s._N2),a=(t.requestAnimationFrame,r.createElement.bind(r)),f=Object.assign,u=function(i,t,s){i.style.setProperty(t,s)},c=function(i,t){i.style.removeProperty(t)},l=function(i,t){i.classList.add(t)},d=function(i,t){return
i.dispatchEvent(t)},v=function(i,t,s){i.addEventListener(t,s,{once:!0})};h=function(){r.body},"complete"===r.readyState||"interactive"===r.readyState?h():r.addEventListener("DOMContentLoaded",h),o.d("SmartSliderCarousel",["SmartSliderAbstract"],(function(){function
i(i,t){this.type="carousel",o.SmartSliderAbstract.prototype.constructor.call(this,i,f({maxPaneWidth:3e3},t))}return
i.prototype=Object.create(o.SmartSliderAbstract.prototype),i.prototype.constructor=i,i.prototype.initResponsiveMode=function(){this.responsive=new
o.SmartSliderResponsiveCarousel(this,this.parameters.responsive),this.responsive.start(),o.SmartSliderAbstract.prototype.initResponsiveMode.call(this)},i.prototype.initMainAnimation=function(){this.mainAnimation=new
o.SmartSliderMainAnimationCarousel(this,this.parameters.mainanimation)},i.prototype.createEmptyGroup=function(i){return
new
o.FrontendCarouselGroupOfSlides(this,i)},i.prototype.initSlides=function(){var
i,t,s=this.sliderElement.querySelectorAll(".n2-ss-slide");this.slides=[],this.realSlides=[];for(var
n=0;n<s.length;n++){this.slides.push(new
o.FrontendCarouselGroupOfSlides(this,n));var h=new
o.FrontendSliderSlide(this,s[n],this.slides[n].originalIndex);h.index=this.slides[n].index,this.realSlides.push(h),h.init(),this.slides[n].addSlide(h),1==(i=h.element,t="first",+i.dataset[t])&&(this.originalRealStarterSlide=h)}this.initSlidesEnd()},i.prototype.setCurrentRealSlide=function(i){this.currentRealSlide=i,this.currentSlide=i.group},i.prototype._changeCurrentSlide=function(i){this.setCurrentRealSlide(this.slides[i].slides[0]),this.p("sliderChangeCurrentSlide")},i.prototype.initUI=function(){for(var
i=0;i<this.slides.length;i++)this.slides[i].setNext(this.slides[i+1>this.slides.length-1?0:i+1]);o.SmartSliderAbstract.prototype.initUI.call(this),this.parameters.carousel||this.initNotCarousel()},i.prototype.calibrateGroup=function(){var
i,t;delete this.currentRealSlide;var s=f([],this.slides);this.slides=[];var
h=this.createEmptyGroup(-1);for(this.mainAnimation.hideSlide(h),i=0,t=0;i<this.visibleRealSlides.length;i++)i%this.responsive.slidesInGroup==0&&(this.slides.push(this.createEmptyGroup(t)),t++),this.slides[t-1].addSlide(this.visibleRealSlides[i]);for(i=0;i<this.slides.length;i++)this.slides[i].setNext(this.slides[i+1>this.slides.length-1?0:i+1]);for(this.parameters.carousel||(this.slides[0].setPrevious(!1),this.slides[this.slides.length-1].setNext(!1)),i=0;i<this.realSlides.length;i++)this.realSlides[i].isVisible||h.addSlide(this.realSlides[i]);for(i=0;i<s.length;i++)s[i].destroy();this.invisibleSlidesGroup!==n&&this.invisibleSlidesGroup.destroy(),this.invisibleSlidesGroup=h,this.visibleSlides=this.slides},i.prototype.updateInsideSlides=function(i){for(var
t=this.invisibleSlidesGroup.slides,s=0;s<t.length;s++)t[s].setInside(!1);o.SmartSliderAbstract.prototype.updateInsideSlides.call(this,i)},i.prototype.getRealIndex=function(i){return
i*this.responsive.slidesInGroup},i.prototype.getSlideIndex=function(i){return
Math.floor(i/this.responsive.slidesInGroup)},i.prototype.directionalChangeToReal=function(i){this.directionalChangeTo(this.getSlideIndex(i))},i.prototype.getSlideBackgroundContainer=function(){return
this.sliderElement.querySelector(".n2-ss-slider-2")},i.prototype.getVisibleSlides=function(i){return
i===n&&(i=this.currentSlide),i.slides.slice()},i.prototype.forceSetActiveSlide=function(i){this.mainAnimation.refreshSlideVisibility(),i.setActive()},i.prototype.getHorizontalTouchDimension=function(){return
this.responsive.resizeContext.paneWidth},i.prototype.getVerticalTouchDimension=function(){return
this.responsive.resizeContext.slideHeight},i})),o.d("SmartSliderResponsiveCarousel",["SmartSliderResponsive"],(function(){function
i(i,t){this.slidesInGroup=0,this.wH=0,this.forceSlidesGroupCalibration=!1,o.SmartSliderResponsive.prototype.constructor.call(this,i,f({minimumSlideGap:10,border:0},t))}return
i.prototype=Object.create(o.SmartSliderResponsive.prototype),i.prototype.constructor=i,i.prototype.init=function(){o.SmartSliderResponsive.prototype.init.call(this),this._cacheEl={slider:this.sliderElement.querySelector(".n2-ss-slider-wrapper-inside")||this.sliderElement,"n2-ss-slider-pane":this.sliderElement.querySelector(".n2-ss-slider-pane")},this._cacheEl["n2-ss-slider-pane"].addEventListener("scroll",(function(e){e.currentTarget.scrollTop=0,e.currentTarget.scrollLeft=0}),{capture:!0}),this.slider.stages.done("BeforeShow",function(){l(this._cacheEl["n2-ss-slider-pane"],"n2-ss-slider-pane--ready")}.bind(this))},i.prototype.resizeStage1Width=function(){o.SmartSliderResponsive.prototype.resizeStage1Width.call(this),this.resizeContext={};var
i=this._cacheEl["n2-ss-slider-pane"].getBoundingClientRect().width,t=Math.max(1,Math.floor(i/(this.base.slideOuterWidth+this.parameters.minimumSlideGap)));this.resizeContext.paneWidth=i,(this.forceSlidesGroupCalibration||t!==this.slidesInGroup)&&(this.slidesInGroup=t,this.slider.calibrateGroup(),this.visibleRealSlidesChanged=!0),this.resizeContext.slideOuterWidth=this.base.slideOuterWidth,1===this.slidesInGroup&&(i<this.base.slideOuterWidth&&(this.resizeContext.slideOuterWidth=i),i<this.base.slideOuterWidth+this.parameters.minimumSlideGap&&(this.resizeContext.paneWidth+=this.parameters.minimumSlideGap-this.resizeContext.paneWidth+this.resizeContext.slideOuterWidth));var
s,n=Math.floor((i-this.slidesInGroup*this.resizeContext.slideOuterWidth)/this.slidesInGroup/2);for(u(this._cacheEl["n2-ss-slider-pane"],"--slide-width",this.resizeContext.slideOuterWidth+"px"),u(this._cacheEl["n2-ss-slider-pane"],"--slide-margin-side",n+"px"),s=0;s<this.slider.visibleRealSlides.length;s++)u(this.slider.visibleRealSlides[s].element,"--slide-group-index",this.slider.visibleRealSlides[s].groupIndex);var
h=this.slider.slides[this.slider.slides.length-1];if(h.slides.length!==this.slidesInGroup){var
r=Math.floor((i-h.slides.length*this.resizeContext.slideOuterWidth)/h.slides.length/2);for(s=0;s<h.slides.length;s++)u(h.slides[s].element,"--slide-margin-side",r+"px")}else
for(s=0;s<h.slides.length;s++)c(h.slides[s].element,"--slide-margin-side")},i.prototype.calculateResponsiveValues=function(){var
i=this.slider.visibleRealSlides[0].element,t=i.getBoundingClientRect();this.resizeContext.slideSelfWidth=t.width,this.resizeContext.slideSelfHeight=t.height;var
s=i.querySelector(".n2-ss-layers-container").getBoundingClientRect();this.resizeContext.slideWidth=s.width,this.resizeContext.slideHeight=s.height;var
n=this._cacheEl.slider.getBoundingClientRect();this.resizeContext.sliderWidth=n.width,this.resizeContext.sliderHeight=n.height,o.SmartSliderResponsive.prototype.calculateResponsiveValues.call(this)},i.prototype.updateVisibleSlides=function(){this.forceSlidesGroupCalibration=!0},i.prototype.calibrateActiveSlide=function(i){if(this.state.StarterSlide){var
t=i;if(this.slider.isAdmin)t=this.slider.originalRealStarterSlide;else
if(t===n||!t.isVisible){var
s=this.slider.currentSlide.slides;if(s[0].isVisible)t=s[0];else{var
h=s[0].getPrevious();if(h)t=h;else{var
r=s[0].getNext();t=r||this.slider.slides[0]}}}this.resetActiveRealSlide(t)}},i})),o.d("SmartSliderMainAnimationCarousel",["SmartSliderMainAnimationAbstract"],(function(){function
t(i,t){switch(this.hideAxis="x",o.SmartSliderMainAnimationAbstract.prototype.constructor.call(this,i,f({type:"horizontal"},t)),o.MW.T("--slide-transform-offset",0),this.parameters.type){case"fade":this.animation=this._mainAnimationFade;break;case"no":this.parameters.duration=0,this.animation=this._mainAnimationFade;break;default:this.animation=this._mainAnimationHorizontal}}return
t.prototype=Object.create(o.SmartSliderMainAnimationAbstract.prototype),t.prototype.constructor=t,t.prototype.refreshSlideVisibility=function(){for(var
i=0;i<this.slider.slides.length;i++)this.slider.slides[i]!==this.slider.currentSlide?this.hideSlide(this.slider.slides[i]):this.showSlide(this.slider.slides[i])},t.prototype.hideSlide=function(i){for(var
t=0;t<i.slides.length;t++)o.MW.R(i.slides[t].element)["--slide-transform-offset"]=1e4},t.prototype.showSlide=function(i){for(var
t=0;t<i.slides.length;t++)o.MW.R(i.slides[t].element)["--slide-transform-offset"]=0},t.prototype._initAnimation=function(i,t,s){this.animation(i,t,s)},t.prototype.onChangeToComplete=function(i,t,s){this.hideSlide(i),o.SmartSliderMainAnimationAbstract.prototype.onChangeToComplete.apply(this,arguments)},t.prototype.onReverseChangeToComplete=function(i,t,s){this.hideSlide(i),o.SmartSliderMainAnimationAbstract.prototype.onReverseChangeToComplete.apply(this,arguments)},t.prototype._mainAnimationFade=function(t,s,n){var
h=[];for(i=0;i<s.slides.length;i++)h.push(o.MW.R(s.slides[i].element));var
r=[];for(i=0;i<t.slides.length;i++)r.push(o.MW.R(t.slides[i].element));o.MW.X(r,{zIndex:5}),this.showSlide(s),t.unsetActive(),s.setActive(),this.timeline.fromTo(h,this.parameters.duration,{opacity:0},{opacity:1,ease:this.getEase()},0),this.timeline.fromTo(r,this.parameters.duration,{opacity:1},{opacity:0,ease:this.getEase()},0),v(this.sliderElement,"mainAnimationComplete",function(i,t){i.zIndex="",i.opacity="",t.opacity=""}.bind(this,r,h))},t.prototype._mainAnimationHorizontal=function(i,t,s){var
n,h="--slide-transform-offset",r=0,a=[];for(n=0;n<t.slides.length;n++)a.push(o.MW.R(t.slides[n].element));var
f=[];for(n=0;n<i.slides.length;n++)f.push(o.MW.R(i.slides[n].element));r=n2const.isRTL()?this.slider.responsive.resizeContext.paneWidth:-this.slider.responsive.resizeContext.paneWidth,s&&(r*=-1),o.MW.X(a,{zIndex:5}),o.MW.X(f,{zIndex:4}),i.unsetActive(),t.setActive();var
u={},c={ease:this.getEase(),snap:h};u[h]=r,c[h]=0,this.timeline.fromTo(a,this.parameters.duration,u,c,0);var
l={},d={ease:this.getEase(),snap:h};l[h]=0,d[h]=-r,this.timeline.fromTo(f,this.parameters.duration,l,d,0),v(this.sliderElement,"mainAnimationComplete",function(i,t){o.MW.X(i,{zIndex:""}),o.MW.X(t,{zIndex:""})}.bind(this,f,a)),this.slider.updateInsideSlides([i,t])},t})),o.d("FrontendCarouselGroupOfSlides","FrontendSliderSlideAbstract",(function(){function
i(i,t){o.FrontendSliderSlideAbstract.prototype.constructor.call(this,i,a("div"),t)}return
i.prototype=Object.create(o.FrontendSliderSlideAbstract.prototype),i.prototype.constructor=i,i.prototype.is=function(i){if(this===i)return!0;for(var
t=0;t<this.slides.length;t++)if(this.slides[t]===i)return!0;return!1},i.prototype.addSlide=function(i){i.groupIndex=this.slides.length,this.slides.push(i),i.group=this},i.prototype.destroy=function(){this.isVisible=0},i.prototype.call=function(i){for(var
t=0;t<this.slides.length;t++)this.slides[t][i].call(this.slides[t])},i.prototype.playIn=function(){this.call("playIn")},i.prototype.playSpecialEventOnlySetToZero=function(){this.call("playSpecialEventOnlySetToZero")},i.prototype.playSpecialEventOnly=function(){this.call("playSpecialEventOnly")},i.prototype.suspend=function(){this.call("suspend")},i.prototype.playOut=function(){for(var
i=[],t=0;t<this.slides.length;t++)i.push(new
Promise(function(i,t){v(i,"layerAnimationCompleteOut",t)}.bind(this,this.slides[t].element)));this.call("playOut"),Promise.all(i).then(this.onOutAnimationsPlayed.bind(this))},i.prototype.onOutAnimationsPlayed=function(){var
i;this.call("onOutAnimationsPlayed"),i=this.element,d(i,new
Event("layerAnimationCompleteOut",{bubbles:!1,cancelable:!1}))},i.prototype.reset=function(){this.call("reset")},i.prototype.setIndex=function(i){this._setIndex(i),o.FrontendSliderSlideAbstract.prototype.setIndex.call(this,i)},i.prototype.setInside=function(i){this.isInside=i,o.FrontendSliderSlideAbstract.prototype.setInside.call(this,i)},i.prototype.setActive=function(){this.call("setActive")},i.prototype.unsetActive=function(){this.call("unsetActive")},i.prototype.focus=function(){this.slides[0].focus()},i})),o.d("ss-carousel",["SmartSliderCarousel","SmartSliderResponsiveCarousel","SmartSliderMainAnimationCarousel","FrontendCarouselGroupOfSlides"])}(window);PK��[�/�� � 4Slider/SliderType/Carousel/Assets/Multi/style.n2lessnu�[���(~'div@{sliderid}')
{
margin: @margin;
.n2-ss-slider-1 {
display: grid;
position: relative;
}
.n2-ss-slider-2 {
display: grid;
place-items: center;
position: relative;
overflow: hidden;
border: @border solid @borderrgba;
border-radius: @borderRadius;
background-repeat: repeat;
background-position: 50% 50%;
background-size: @backgroundSize;
background-attachment: @backgroundAttachment;
background-color: @backgroundrgba;
z-index: 1;
}
.n2-ss-slider-3 {
box-sizing: border-box;
display: grid;
grid-template-areas: 'full';
place-items: center;
position: relative;
overflow: hidden;
z-index: 20;
width: 100%;
> * {
grid-area: full;
}
}
.n2-ss-slider-pane {
display: grid;
grid-template-areas: 'slide';
justify-self: stretch;
margin: 0 var(--self-side-margin);
position: relative;
transform-style: preserve-3d;
overflow: hidden;
opacity: 0.001;
> * {
grid-area: slide;
}
}
.n2-ss-slider-pane--ready {
animation-name: carousel-multi-fade-in;
animation-duration: 1s;
opacity: 1;
}
.n2-ss-slide {
z-index: 1;
position: relative;
width: var(--slide-width);
max-width: @slideouterwidth;
display: block;
border-radius: @slideBorderRadius;
background-clip: padding-box;
background-color: @slideBackgroundrgba;
border: @slideborderwidth solid @slidebordercolor;
box-sizing: border-box;
--a: calc(var(--slide-group-index) * var(--slide-width));
--b: calc(var(--slide-group-index) * 2);
--c: calc(var(--b) + 1);
--d: calc(var(--c) * var(--slide-margin-side));
--e: calc(var(--a) + var(--d));
--f: calc(var(--slide-transform-offset, 0) * 1px);
transform: translateX(calc(var(--e) - var(--f)));
html[dir="rtl"] & {
transform: translateX(calc(-1 * var(--e) - var(--f)));
}
}
.n2-ss-slider-pane .n2-ss-preserve-size {
width: 100%;
max-width: @slideouterwidth;
}
.n2-ss-layers-container {
position: relative;
}
.ssPerspective() when (@hasPerspective = 1) {
.n2-ss-slide {
perspective: @perspective;
}
}
.ssPerspective();
.n2-ss-slide-active {
z-index: 3;
}
.n2-ss-layer {
-webkit-backface-visibility: hidden;
}
}
@keyframes carousel-multi-fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
PK��[ҏ:�j j 5Slider/SliderType/Carousel/Assets/Single/style.n2lessnu�[���(~'div@{sliderid}')
{
margin: @margin;
.n2-ss-slider-1 {
display: grid;
position: relative;
}
.n2-ss-slider-2 {
display: grid;
place-items: center;
position: relative;
overflow: hidden;
border: @border solid @borderrgba;
border-radius: @borderRadius;
background-repeat: repeat;
background-position: 50% 50%;
background-size: @backgroundSize;
background-attachment: @backgroundAttachment;
background-color: @backgroundrgba;
z-index: 1;
}
.n2-ss-slider-3 {
box-sizing: border-box;
display: grid;
grid-template-areas: 'full';
place-items: center;
position: relative;
overflow: hidden;
z-index: 20;
width: 100%;
> * {
grid-area: full;
}
}
.n2-ss-slider-pane-single {
display: grid;
position: relative;
overflow: hidden;
width: 100%;
opacity: 0.001;
}
.n2-ss-slider-pane-single--ready {
animation-name: carousel-single-fade-in;
animation-duration: 1s;
opacity: 1;
}
.n2-ss-slider-pipeline {
display: grid;
grid-template-areas: 'slide';
margin: 0 var(--self-side-margin);
position: relative;
transform-style: preserve-3d;
> * {
grid-area: slide;
}
}
.n2-ss-slide {
z-index: 1;
position: relative;
width: 100%;
max-width: var(--slide-width);
display: block;
border-radius: @slideBorderRadius;
background-clip: padding-box;
background-color: @slideBackgroundrgba;
border: @slideborderwidth solid @slidebordercolor;
box-sizing: border-box;
--a: calc(var(--slide-index) * var(--slide-width));
--b: calc(var(--slide-index) * 2);
--c: calc(var(--b) + 1);
--d: calc(var(--c) * var(--slide-side-margin));
transform: translateX(calc(var(--a) + var(--d)));
html[dir="rtl"] & {
transform: translateX(calc(-1 * var(--a) - var(--d)));
}
}
.n2-ss-slider-pipeline .n2-ss-preserve-size {
width: 100%;
max-width: @slideouterwidth;
}
.n2-ss-layers-container {
position: relative;
}
.ssPerspective() when (@hasPerspective = 1) {
.n2-ss-slide {
perspective: @perspective;
}
}
.ssPerspective();
.n2-ss-slide-active {
z-index: 3;
}
.n2-ss-layer {
-webkit-backface-visibility: hidden;
}
}
@keyframes carousel-single-fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}PK��[��j)j)9Slider/SliderType/Showcase/Assets/dist/ss-showcase.min.jsnu�[���!function(t){var
i=t;i._N2=i._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
s,h,n=t.document,r=(n.documentElement,t.setTimeout,t.clearTimeout,i._N2),a=(t.requestAnimationFrame,n.createElement.bind(n),Object.assign),o=function(t,i){t.classList.add(i)},c=function(t,i,s,h){h=h||{},t.addEventListener(i,s,h)};h=function(){n.body},"complete"===n.readyState||"interactive"===n.readyState?h():n.addEventListener("DOMContentLoaded",h),r.d("SmartSliderShowcase",["SmartSliderAbstract"],(function(){function
t(t,i){this.type="showcase",r.SmartSliderAbstract.prototype.constructor.call(this,t,a({carousel:1},i))}return
t.prototype=Object.create(r.SmartSliderAbstract.prototype),t.prototype.constructor=t,t.prototype.initResponsiveMode=function(){this.responsive=new
r.SmartSliderResponsiveShowcase(this,this.parameters.responsive),this.responsive.start(),r.SmartSliderAbstract.prototype.initResponsiveMode.call(this)},t.prototype.initMainAnimation=function(){this.mainAnimation=new
r.SmartSliderMainAnimationShowcase(this,this.parameters.showcase)},t.prototype.updateInsideSlides=function(t){for(var
i=[],s=Math.floor(this.mainAnimation.slidesInGroup/2),h=0;h<t.length;h++){i.push(t[h]);for(var
n=t[h],a=t[h],o=0;o<s&&(n=n.getPrevious());o++)i.push(n);for(o=0;o<s&&(a=a.getNext());o++)i.push(a)}r.SmartSliderAbstract.prototype.updateInsideSlides.call(this,i)},t.prototype.getVisibleSlides=function(t){t===s&&(t=this.currentSlide);var
i=[t],h=Math.floor(this.mainAnimation.slidesInGroup/2);if(h>0)for(var
n=t.getPrevious(),r=t.getNext(),a=0;a<h;a++)n&&(i.unshift(n),n=n.getPrevious()),r&&(i.push(r),r=r.getNext());return
i},t.prototype.getActiveSlides=function(t){return
t===s&&(t=this.currentSlide),[t]},t.prototype.getSlideBackgroundContainer=function(){return
this.sliderElement.querySelector(".n2-ss-slider-2")},t.prototype.getAnimationAxis=function(){return"vertical"===this.mainAnimation.parameters.direction?"vertical":"horizontal"},t.prototype.getHorizontalTouchDimension=function(){return
this.responsive.resizeContext.slideWidth+this.mainAnimation.parameters.distance},t.prototype.getVerticalTouchDimension=function(){return
this.responsive.resizeContext.slideHeight+this.mainAnimation.parameters.distance},t})),r.d("SmartSliderResponsiveShowcase",["SmartSliderResponsive"],(function(){function
t(t){this.mainAnimation=t.mainAnimation,r.SmartSliderResponsive.prototype.constructor.apply(this,arguments)}return
t.prototype=Object.create(r.SmartSliderResponsive.prototype),t.prototype.constructor=t,t.prototype.init=function(){r.SmartSliderResponsive.prototype.init.call(this),this._cacheEl={slider:this.sliderElement.querySelector(".n2-ss-slider-wrapper-inside")||this.sliderElement,"n2-ss-slider-3":this.sliderElement.querySelector(".n2-ss-slider-3"),"n2-ss-showcase-slides":this.sliderElement.querySelector(".n2-ss-showcase-slides")},c(this._cacheEl["n2-ss-slider-3"],"scroll",(function(e){e.currentTarget.scrollTop=0,e.currentTarget.scrollLeft=0}),{capture:!0})},t.prototype.onStarterSlide=function(t){r.SmartSliderResponsive.prototype.onStarterSlide.apply(this,arguments),this.mainAnimation.afterCalculateResponsiveValues()},t.prototype.resizeStage1Width=function(){r.SmartSliderResponsive.prototype.resizeStage1Width.call(this),o(this._cacheEl["n2-ss-showcase-slides"],"n2-ss-showcase-slides--ready")},t.prototype.calculateResponsiveValues=function(){var
t=this.slider.visibleRealSlides[0].element;this.resizeContext.slideSelfWidth=t.offsetWidth,this.resizeContext.slideSelfHeight=t.offsetHeight;var
i=this._cacheEl["n2-ss-showcase-slides"].getBoundingClientRect();i.width<this.base.slideWidth?this.resizeContext.slideWidth=i.width:this.resizeContext.slideWidth=this.base.slideWidth,this.resizeContext.slideHeight=i.height;var
s=this._cacheEl.slider.getBoundingClientRect();this.resizeContext.sliderWidth=s.width,this.resizeContext.sliderHeight=s.height;var
h=this._cacheEl["n2-ss-slider-3"].getBoundingClientRect();this.resizeContext.slideContainerWidth=h.width,this.resizeContext.slideContainerHeight=h.height,r.SmartSliderResponsive.prototype.calculateResponsiveValues.call(this),this.state.StarterSlide&&this.mainAnimation.afterCalculateResponsiveValues()},t.prototype.updateVisibleSlides=function(){r.SmartSliderResponsive.prototype.updateVisibleSlides.call(this),this.mainAnimation.onVisibleRealSlidesChanged()},t})),r.d("SmartSliderMainAnimationShowcase",["SmartSliderMainAnimationAbstract"],(function(){function
t(t,i){r.SmartSliderMainAnimationAbstract.prototype.constructor.call(this,t,a({direction:"horizontal",distance:60,animate:{},duration:1500,ease:"easeInOutQuint",carousel:t.parameters.carousel},i)),this.showcase={before:{},active:{},after:{}},this.directionModifier=1,"vertical"!==this.parameters.direction&&n2const.isRTL()&&(this.directionModifier=-1);var
h=this.parameters.animate;for(var n in
h)if(h[n]){switch(n){case"rotationY":case"rotationX":!0,!0;break;case"scale":!0}this.showcase.before[n]=h[n].before,t.parameters.admin||(this.showcase.active[n]=h[n].active),this.showcase.after[n]=h[n].after}-1===this.directionModifier&&(this.showcase.before.x!==s&&0!=this.showcase.before.x&&(this.showcase.before.x=-1*this.showcase.before.x),this.showcase.active.x!==s&&0!=this.showcase.active.x&&(this.showcase.active.x=-1*this.showcase.active.x),this.showcase.after.x!==s&&0!=this.showcase.after.x&&(this.showcase.after.x=-1*this.showcase.after.x),this.showcase.before.rotationZ!==s&&0!=this.showcase.before.rotationZ&&(this.showcase.before.rotationZ=-1*this.showcase.before.rotationZ),this.showcase.active.rotationZ!==s&&0!=this.showcase.active.rotationZ&&(this.showcase.active.rotationZ=-1*this.showcase.active.rotationZ),this.showcase.after.rotationZ!==s&&0!=this.showcase.after.rotationZ&&(this.showcase.after.rotationZ=-1*this.showcase.after.rotationZ),this.showcase.before.rotationY!==s&&0!=this.showcase.before.rotationY&&(this.showcase.before.rotationY=-1*this.showcase.before.rotationY),this.showcase.active.rotationY!==s&&0!=this.showcase.active.rotationY&&(this.showcase.active.rotationY=-1*this.showcase.active.rotationY),this.showcase.after.rotationY!==s&&0!=this.showcase.after.rotationY&&(this.showcase.after.rotationY=-1*this.showcase.after.rotationY)),1==this.parameters.overlay&&this.slider.sliderElement.querySelectorAll(".n2-ss-showcase-overlay").forEach(function(t,i){c(t,"click",function(t){r._shouldPreventClick||this.slider.changeTo(t)}.bind(this,i))}.bind(this))}return
t.prototype=Object.create(r.SmartSliderMainAnimationAbstract.prototype),t.prototype.constructor=t,t.prototype.onVisibleRealSlidesChanged=function(){this.slides=a([],this.slider.visibleRealSlides);for(var
t=0;t<this.slides.length;t++)this.slides[t].localIndex=t},t.prototype.calculateSlidesInGroup=function(){var
t,i=this.slider.responsive.resizeContext,s=0;if("vertical"===this.parameters.direction){var
h=this.parameters.animate.y;h&&(s=h.before+-1*h.after),t=2*Math.ceil((i.slideContainerHeight-i.slideHeight+s)/(i.slideHeight+this.parameters.distance)/2)+1}else{var
n=this.parameters.animate.x;n&&(s=n.before+-1*n.after),t=2*Math.ceil((i.slideContainerWidth-i.slideWidth+s)/(i.slideWidth+this.parameters.distance)/2)+1}this.slidesInGroup=Math.max(1,t)},t.prototype.afterCalculateResponsiveValues=function(){this.calculateSlidesInGroup(),this.parameters.carousel?this.prepareCarousel(this.slider.currentSlide):this.calibratePipelinePosition()},t.prototype.prepareCarousel=function(t){if(this.slides.length>this.slidesInGroup){var
i,s,h,n=t.localIndex;if(n<this.slider.currentSlide.localIndex?(i=Math.abs(n-this.slider.currentSlide.localIndex),s=this.slider.currentSlide.localIndex-this.slides.length+2+n):(i=Math.max(0,n-this.slider.currentSlide.localIndex),s=Math.max(0,this.slides.length-n+this.slider.currentSlide.localIndex)),n<Math.floor(this.slidesInGroup/2))for(h=0;h<Math.floor(this.slidesInGroup/2)-n;h++)this.slides.unshift(this.slides.pop());else
if(s>=i)for(;n>this.slides.length-this.slidesInGroup;){var
r=this.slides.splice(0,1);this.slides.push(r[0]),n--}else
for(h=0;h<s;h++)this.slides.unshift(this.slides.pop())}for(h=0;h<this.slides.length;h++)this.slides[h].localIndex=h;this.calibratePipelinePosition()},t.prototype.calibratePipelinePosition=function(){var
t,i,h=this.slider.responsive.resizeContext,n=this.slides,o=this.slider.currentSlide.localIndex,c=h.slideWidth,f=h.slideHeight;"horizontal"===this.parameters.direction?(t=c+this.parameters.distance,i="x"):"vertical"===this.parameters.direction&&(t=f+this.parameters.distance,i="y"),t*=this.directionModifier;for(var
u,l=100,v=0;v<o;v++)(u=a({},this.showcase.before))[i]===s&&(u[i]=0),u[i]+=(v-o)*t,u[i]=Math.round(u[i]),u.zIndex=++l,r.MW.R(n[v].element).setValues(u);for((u=a({},this.showcase.active))[i]===s&&(u[i]=0),u[i]+=(v-o)*t,u[i]=Math.round(u[i]),u.zIndex=++l,r.MW.R(n[v].element).setValues(u),v++;v<n.length;v++)(u=a({},this.showcase.after))[i]===s&&(u[i]=0),u[i]+=(v-o)*t,u[i]=Math.round(u[i]),u.zIndex=--l,r.MW.R(n[v].element).setValues(u)},t.prototype._initAnimation=function(t,i,h){var
n=this.slider.responsive.resizeContext;this.parameters.carousel&&this.prepareCarousel(i);var
o=i.localIndex;t.unsetActive(),i.setActive();var
c,f,u=this.slides;if("horizontal"===this.parameters.direction)f="x",c=n.slideWidth+this.parameters.distance;else
if("vertical"===this.parameters.direction){f="y",c=n.slideHeight+this.parameters.distance}c*=this.directionModifier;var
l,v=100,d={};n2const.isFirefox&&(d.snap="x,y"),this.showcase.before.ease=this.showcase.after.ease=this.showcase.active.ease=this.getEase();for(var
S=0;S<o;S++){(M=a({},d,this.showcase.before))[f]===s&&(M[f]=0),M[f]+=(S-o)*c,M[f]=Math.round(M[f]),(l=r.MW.R(u[S].element)).zIndex=++v,this.timeline.to(l,this.parameters.duration,M,0)}for((M=a({},d,this.showcase.active))[f]===s&&(M[f]=0),M[f]+=(S-o)*c,M[f]=Math.round(M[f]),(l=r.MW.R(u[S].element)).zIndex=++v,this.timeline.to(l,this.parameters.duration,M,0),S++;S<u.length;S++){var
M;(M=a({},d,this.showcase.after))[f]===s&&(M[f]=0),M[f]+=(S-o)*c,M[f]=Math.round(M[f]),(l=r.MW.R(u[S].element)).zIndex=--v,this.timeline.to(l,this.parameters.duration,M,0)}this.slider.updateInsideSlides([t,i])},t.prototype.revertTo=function(t,i){r.SmartSliderMainAnimationAbstract.prototype.revertTo.apply(this,arguments);for(var
s=this.slides,h=100,n=0;n<s.length&&s[n]!==this.slider.currentRealSlide;n++)r.MW.R(s[n].element).zIndex=++h;for(r.MW.R(s[n].element).zIndex=++h,n++;n<s.length;n++)r.MW.R(s[n].element).zIndex=--h},t})),r.d("ss-showcase",["SmartSliderShowcase","SmartSliderResponsiveShowcase","SmartSliderMainAnimationShowcase"])}(window);PK��[��� .Slider/SliderType/Showcase/Assets/style.n2lessnu�[���(~'div@{sliderid}')
{
.n2-ss-slider-1 {
position: relative;
display: grid;
}
.n2-ss-slider-2 {
display: grid;
grid-template-areas: 'full';
position: relative;
overflow: hidden;
border: @border solid @borderrgba;
box-sizing: border-box;
border-radius: @borderRadius;
background-repeat: repeat;
background-position: 50% 50%;
background-size: @backgroundSize;
background-attachment: @backgroundAttachment;
z-index: 1;
> * {
grid-area: full;
}
> .n2-ss-preserve-size {
max-width: @sliderwidth;
}
}
.n2-ss-slider-3 {
display: grid;
grid-template-areas: 'cover';
> * {
grid-area: cover;
}
position: relative;
overflow: hidden;
z-index: 20;
}
.n2-ss-showcase-slides {
place-self: center;
position: relative;
display: grid;
grid-template-areas: 'slide';
width: 100%;
max-width: @slideouterwidth;
perspective-origin: 50% 50%;
perspective: @perspective;
opacity: 0.001;
transform: translateX(-100000px);
> * {
grid-area: slide;
}
}
.n2-ss-showcase-slides--ready {
animation-name: showcase-fade-in;
animation-duration: 1s;
opacity: 1;
transform: none;
}
.n2-ss-slide {
display: block;
width: 100%;
border-radius: @slideBorderRadius;
border: @slideborderwidth solid @slidebordercolor;
box-sizing: border-box;
backface-visibility: hidden;
}
&.n2-ss-showcase-vertical .n2-ss-slide {
clear: left;
}
.n2-ss-slide-inner {
position: relative;
width: 100%;
height: 100%;
z-index: 20;
}
.n2-ss-showcase-overlay {
width: 100%;
height: 100%;
cursor: pointer;
position: absolute;
top: 0;
left: 0;
z-index: 2000000;
display: block;
}
.n2-ss-slide-active .n2-ss-showcase-overlay {
display: none;
}
.smart-slider-animate-in .n2-ss-showcase-overlay,
.smart-slider-animate-out .n2-ss-showcase-overlay {
display: block;
}
.n2-ss-slide-active {
z-index: 3;
display: block;
}
.ssPerspective() when (@hasPerspective = 1) {
.n2-ss-slide {
perspective: @perspective;
}
}
.ssPerspective();
}
@keyframes showcase-fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
PK��[��Ҥ�6Widget/Arrow/ArrowGrow/Assets/dist/w-arrow-grow.min.jsnu�[���!function(t){var
i=t;i._N2=i._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
n,h=t.document,s=(h.documentElement,t.setTimeout,t.clearTimeout,i._N2),o=(t.requestAnimationFrame,h.createElement.bind(h),Object.assign,function(t,i,n){t.style.setProperty(i,n)}),r=function(t,i,n,h){h=h||{},t.addEventListener(i,n,h)};n=function(){h.body},"complete"===h.readyState||"interactive"===h.readyState?n():h.addEventListener("DOMContentLoaded",n),s.d("SmartSliderWidgetArrowGrow","SmartSliderWidget",(function(){function
t(t,i,n){this.size=48,this.sidePadding=25,this.delay=n,s.SmartSliderWidget.prototype.constructor.call(this,t,i,"#"+t.elementID+"-arrow-"+i)}function
i(i,n){t.prototype.constructor.call(this,i,"previous",n)}function
n(i,n){t.prototype.constructor.call(this,i,"next",n)}return
t.prototype=Object.create(s.SmartSliderWidget.prototype),t.prototype.constructor=t,t.prototype.onStart=function(){var
t,i,n;r(this.widget,"click",function(e){e.stopPropagation(),this.action()}.bind(this)),this._title=this.widget.querySelector(".nextend-arrow-title"),t=this.widget,i="pointerover",n=this.lazyInit.bind(this),t.addEventListener(i,n,{once:!0})},t.prototype.lazyInit=function(){this.onRefresh(),r(this.slider.sliderElement,"CurrentSlideChanged",this.onRefresh.bind(this)),r(this.slider.sliderElement,"visibleSlidesChanged",this.onRefresh.bind(this)),r(this.slider.sliderElement,"mainAnimationComplete",this.onRefresh.bind(this))},t.prototype.onRefresh=function(){var
t=this.slider.currentSlide;if(this.slider.getDirectionPrevious()===this.key){var
i=t.getPrevious();i&&(this._title.innerHTML=i.getTitle())}else
if(this.slider.getDirectionNext()===this.key){var
n=t.getNext();n&&(this._title.innerHTML=n.getTitle())}o(this.widget,"--arrow-width",Math.round(this.size+this.sidePadding+this._title.getBoundingClientRect().width)+"px")},i.prototype=Object.create(t.prototype),i.prototype.constructor=i,i.prototype.action=function(){this.slider.previousWithDirection()},n.prototype=Object.create(t.prototype),n.prototype.constructor=n,n.prototype.action=function(){this.slider.nextWithDirection()},function(t,h){this.previous=new
i(t,h),this.next=new
n(t,h)}}))}(window);PK��[�tV͈ � &Widget/Arrow/ArrowGrow/Assets/grow.pngnu�[����PNG
IHDRxPқ��sRGB��� BIDATx�\lU���(+m��d�t�d
�BW�s (%
2]R����&,���ձelٲ-�i:�a!q�8VԵR%2��P2���0�ә��P�����w{��}���;s��K�{��s�w��߹���AYl�c�2�0�%p�;�X sb�<�J�3��)Vǜ��7Oy�8�ļyʃ��1g
��S��91o��`%p��y�+�c�@̛�<X sb�<�J�3��)Vǜ��7ό�>۶q��:tG�E__����"���QQQ���*L�>�'O���v�`���Sx�/���;��8�X���4�W���k��:j>�A�
��
�����ݻq��`0����a���7o�D�ᓜ�������s�;1ö~�X
�~�@�l���\�<x---8v�Xpi>)*++�|�r̜9��i�[�/����$��?���ejb���M,���?��?YjkkC{{{n�E]/Z�K�,���P���������e�/��W�w���8p�[�H|�����ի��[�Z���O��x`��Ⱦ�
z�H�ˊ�L���J���r�g��;w��e?@�M���w����"G�*ײ�l��R1�d�-sB�,䊜y-K`.���-{
�Nb�Bg�l9�#�srEμ�
�M�se����8�p��,��;P�s�*�&�$���~�|�����;Ta61*��L�^z]�I
��e�ˇ���5�?{(�� p�F�Il���>�V�9
���
�n�����g�r�3r�1W`n?c\\����Gwww�"
ar�1�]:Q�#� 4�r���Zw\�b�c��b�,������Gw�5��������e�N���U��o���d��j�~N���z�ƪ�~�Ā��z�sQ����@cc#jkk�}�vtvvF*�&����2~xS�p�%:�kt>]�ݧc��N�-��Xx<��B��Lxk�F�tLO���J�ƭI\8A�g��q��6N
� '����&��I���Ov������QG�D�Xj�y�;7��i�X�f
f̘�m۶��4�_�Q�^�^o���鿹�t<�>s{�.��pH��_7M�Z��F_
�Ƥǟ�eyE�}'�t������RX�]�X=���8D�8���ā��N�q�����'���sK���=na�ؒ��r3���;W�̩��߽��&TWWc˖-طo�_��{�0y*�6tZ(�a��Cl��(��l���H�:l�w��76�1p��6�p����¯ĦA��l�G��G
�x��ٯ��5�:��=� nۑ�w���On���?��X�G_���A!r�y�NP�G�[(:��N�v&�"ޡ��K�Mq�9E���W^���5��������b��㸿�V�}ϡ��щ��!���xB�~6e�����H����^�>~�x�e����f����z0�s�ئM���ۋ��̝;7JV7m!L�z�L��lL�T�Y=�c9\=}8�á���i�� O?z�g�)ܳ0����k|���J8C�9b]&F�sO�Y�=u��Su\P|M�.T/^�E�]o`�hGS�罐�p��O=p�a}K&�ظq#zzzP__�̢��g�B�<�.���k���gQʟ�������5��n
\�p"��zdR㺳�zY�g�^���d�3��~B��E���ܙ��g�b�c��C�����K�#u}3���d�S嫏)黫Ĺ�/�5�g�
��2|��/��;�4iǎEmtp�^�b���s�Nttt�a��c@��e�|��8�\�|�;�ԅ��QuX�8�>�DN��p��Q�YN��9�X��h9d��,g�0�B>7�Qg�bnAs=�a6���n݊={��ǁQ�&�SF҂��b��i˴���0���_-|gWxqY6G����,�P1̦�ݬ���L��>�E�|��#������W��}���9#ws�f��LYF�BAy�"c��Ec��
���Y�CUj#����e�3ڠ<g�srEμ�u��G�ڈ&ҒQ�,S�r�i�%0�a�#�Je,;J�%�X��0��/�r��,�яQgą��OY&ˎj�d`�2�M��Jw��U���2��.*l����e���#�{��~��e��}���m�������7E!���Yt��T��P��\*�X*���9����J�|0%�|Υ"*���-L ,�s��J`�t�S��\*�X*���9����J�|0%�|Υ"*���-L ,�s��J`�t�S��\*�X*���9����J�|0%�|Υ"*���-L ,�s����X`�gbIEND�B`�PK��[;�Y��4Widget/Arrow/ArrowGrow/Assets/next/circle-stroke.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M18.19 11.087c-.235-.206-.54-.337-.878-.337-.724
0-1.312.588-1.312 1.313 0 .387.17.73.438.972l1.83 1.652H10.31C9.588 14.687
9 15.275 9 16s.588 1.313 1.313 1.313h7.954l-1.833
1.65c-.263.243-.434.587-.434.974 0 .725.588 1.313 1.313 1.313.337 0
.642-.13.875-.34l4.378-3.934c.263-.244.434-.588.434-.976s-.17-.732-.438-.972l-4.37-3.94zM16
2C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14S23.732 2 16 2zm0
25.375C9.718 27.375 4.625 22.282 4.625 16S9.718 4.625 16 4.625 27.375 9.718
27.375 16 22.282 27.375 16 27.375z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�-c�[[+Widget/Arrow/ArrowGrow/Assets/next/full.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M12 8.99c0-.423.204-.722.61-.897.408-.173.772-.104
1.092.21l7.006 6.974c.202.2.298.437.287.716 0 .267-.096.498-.287.69l-7.006
7c-.32.32-.684.39-1.092.21-.406-.175-.61-.483-.61-.923V8.99z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�L���-Widget/Arrow/ArrowGrow/Assets/next/normal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M13.286 25.61c-.24.253-.52.377-.84.377-.318
0-.6-.124-.84-.376l-1.245-1.297c-.24-.252-.36-.544-.36-.878
0-.334.12-.626.36-.878l6.328-6.6L10.36 9.43c-.24-.25-.36-.54-.36-.864
0-.323.12-.612.36-.864l1.245-1.325c.24-.252.523-.377.848-.377.323 0
.602.125.833.377l8.366 8.746c.24.25.363.546.363.882 0
.34-.122.634-.363.886l-8.366 8.72z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�.���8Widget/Arrow/ArrowGrow/Assets/next/simple-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M22
15.997v-.003c0-.404-.176-.768-.46-1.028h.002l-9-8.572-.004.004C12.268 6.15
11.902 6 11.5 6c-.83 0-1.5.64-1.5 1.43 0 .432.203.82.523 1.082l7.86
7.485-7.963 7.583c-.26.257-.42.606-.42.99 0 .79.67 1.43 1.5 1.43.404 0
.77-.153 1.04-.4l9.002-8.57v-.002c.282-.26.458-.624.458-1.028v-.003z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[q�t�yy6Widget/Arrow/ArrowGrow/Assets/next/thin-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M10.722 4.293c-.394-.39-1.032-.39-1.427 0-.393.39-.393
1.03 0 1.42l11.283 10.28-11.283 10.29c-.393.39-.393 1.02 0 1.42.395.39
1.033.39 1.427
0l12.007-10.94c.21-.21.3-.49.284-.77.014-.27-.076-.55-.286-.76L10.72
4.293z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[z}���8Widget/Arrow/ArrowGrow/Assets/previous/circle-stroke.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M21.688
14.688h-7.955l1.833-1.65-.004-.003c.267-.24.438-.585.438-.973
0-.724-.588-1.312-1.313-1.312-.337 0-.642.13-.874.34l-.004-.003-4.376
3.937.004.004C9.17 15.268 9 15.612 9 16s.17.732.438.972l-.004.004 4.375
3.937.002-.003c.233.21.538.34.876.34.724 0 1.312-.588 1.312-1.313
0-.387-.17-.73-.438-.972l.004-.003-1.833-1.65h7.954c.725 0 1.313-.587
1.313-1.312 0-.725-.588-1.313-1.313-1.313zM16 2C8.268 2 2 8.268 2 16s6.268
14 14 14 14-6.268 14-14S23.732 2 16 2zm0 25.375C9.718 27.375 4.625 22.282
4.625 16S9.718 4.625 16 4.625 27.375 9.718 27.375 16 22.282 27.375 16
27.375z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[j2�pp/Widget/Arrow/ArrowGrow/Assets/previous/full.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" width="32"
height="32" viewBox="0 0 32 32">
<path fill="#FFF" opacity="1"
fill-rule="evenodd"
d="M18.9958
8.9907c0-.424-.204-.723-.61-.898-.409-.173-.772-.104-1.093.209l-7.006
6.975c-.201.199-.297.437-.286.716 0 .267.096.498.286.689l7.006
7.001c.321.321.684.389
1.093.209.406-.174.61-.482.61-.922V8.9907z"/>
</svg>PK��[�3t��1Widget/Arrow/ArrowGrow/Assets/previous/normal.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" width="32"
height="32" viewBox="0 0 32 32">
<path fill="#FFF" fill-rule="evenodd"
d="M20.654 9.43l-6.326 6.525 6.326 6.6c.242.253.36.545.36.88
0 .333-.118.625-.36.877l-1.244 1.3c-.24.25-.523.375-.84.375-.32
0-.6-.124-.84-.376l-8.367-8.72c-.24-.25-.363-.54-.363-.88
0-.334.122-.63.363-.88l8.367-8.75c.23-.252.51-.377.83-.377.325 0
.607.126.85.378l1.242 1.326c.242.252.36.54.36.864 0
.32-.118.61-.36.86z"
opacity="1"/>
</svg>
PK��[Z�B���<Widget/Arrow/ArrowGrow/Assets/previous/simple-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M21.58 23.58l-7.962-7.583
7.86-7.485c.32-.262.522-.65.522-1.083C22 6.64 21.328 6 20.5 6c-.403
0-.768.15-1.038.398l-.004-.004-9 8.57v.002c-.282.26-.458.624-.458
1.028V16c0 .404.176.77.46 1.03h-.002l9 8.57c.27.247.638.4 1.042.4.83 0
1.5-.64 1.5-1.43 0-.384-.16-.733-.42-.99z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�k]�qq:Widget/Arrow/ArrowGrow/Assets/previous/thin-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M11.433 15.992L22.69 5.712c.393-.39.393-1.03
0-1.42-.393-.39-1.03-.39-1.423 0l-11.98
10.94c-.21.21-.3.49-.285.76-.015.28.075.56.284.77l11.98 10.94c.393.39
1.03.39 1.424 0 .393-.4.393-1.03 0-1.42l-11.257-10.29"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[,|..*Widget/Arrow/ArrowGrow/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.nextend-arrow-grow {
cursor: pointer;
z-index: 20;
position: relative;
height: 48px;
width: 48px;
overflow: hidden;
transition: all 0.4s;
display: grid;
grid-template-columns: 48px auto;
}
.nextend-arrow-grow:HOVER,
.nextend-arrow-grow:FOCUS {
width: var(--arrow-width, 48px);
}
.nextend-arrow-grow .nextend-arrow-arrow {
background-repeat: no-repeat;
background-position: center center;
}
.nextend-arrow-grow.nextend-arrow-previous .nextend-arrow-title {
order: 2;
}
.nextend-arrow-grow.nextend-arrow-next {
grid-template-columns: auto 48px;
justify-content: flex-end;
}
.nextend-arrow-grow .nextend-arrow-title {
white-space: nowrap;
line-height: 48px !important;
padding: 0 10px;
}
}PK��[fj
� >Widget/Arrow/ArrowImageBar/Assets/dist/w-arrow-imagebar.min.jsnu�[���!function(i){var
t=i;t._N2=t._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
n,s=i.document,h=(s.documentElement,i.setTimeout),o=(i.clearTimeout,t._N2),r=(i.requestAnimationFrame,s.createElement.bind(s)),c=(Object.assign,function(i,t,n){i.style.setProperty(t,n)}),a=function(i){i&&i.parentNode&&i.parentNode.removeChild(i)},u=function(i,t){i.classList.remove(t)},f=function(i,t,n,s){s=s||{},i.addEventListener(t,n,s)};n=function(){s.body},"complete"===s.readyState||"interactive"===s.readyState?n():s.addEventListener("DOMContentLoaded",n),o.d("SmartSliderWidgetArrowImageBar","SmartSliderWidget",(function(){function
i(i,t){o.SmartSliderWidget.prototype.constructor.call(this,i,t,"#"+i.elementID+"-arrow-"+t)}function
t(t){i.prototype.constructor.call(this,t,"previous")}function
n(t){i.prototype.constructor.call(this,t,"next")}return
i.prototype=Object.create(o.SmartSliderWidget.prototype),i.prototype.constructor=i,i.prototype.onStart=function(){f(this.widget,"click",function(e){e.stopPropagation(),this.action()}.bind(this)),this.ei=this.widget.querySelector(".nextend-arrow-image"),this.slider.stages.done("BeforeShow",this.onBeforeShow.bind(this))},i.prototype.onBeforeShow=function(){this.onRefresh(),f(this.slider.sliderElement,"CurrentSlideChanged",this.onRefresh.bind(this)),f(this.slider.sliderElement,"visibleSlidesChanged",this.onRefresh.bind(this)),f(this.slider.sliderElement,"mainAnimationComplete",this.onRefresh.bind(this))},i.prototype.onRefresh=function(){var
i,t=this.slider.currentSlide;if(h(a.bind(null,this.ei),500),this.slider.getDirectionPrevious()===this.key){var
n=t.getPrevious();n&&(i=n.getThumbnail())}else
if(this.slider.getDirectionNext()===this.key){var
s=t.getNext();s&&(i=s.getThumbnail())}if(i){var
o=this.ei=r("div");o.className="nextend-arrow-image
nextend-arrow-image--locked",c(o,"background-image","url("+i+")"),this.widget.appendChild(o),requestAnimationFrame(u.bind(null,o,"nextend-arrow-image--locked"))}},t.prototype=Object.create(i.prototype),t.prototype.constructor=t,t.prototype.action=function(){this.slider.previousWithDirection()},n.prototype=Object.create(i.prototype),n.prototype.constructor=n,n.prototype.action=function(){this.slider.nextWithDirection()},function(i){this.previous=new
t(i),this.next=new
n(i)}}))}(window);PK��[Ŀ Q��.Widget/Arrow/ArrowImageBar/Assets/imagebar.pngnu�[����PNG
IHDRxPқ��sRGB����IDATx�MOSA��-��b[��
��-(P��`�hd�֝����0q��
��n���j�UB�11.���h�̙�IC�}ϙ���{KH�V���9K
���0�2v����8ǧ���p|zX��8ǧ���p|zX��8ǧ���p|z��_����گu��Z#���h���`���W�`���`���W�`���`���W�`���`���W�`���`���W�`���`���W�`���`���W�`���`���W�`���`���W���dg;����4t<]~h�P����vO�v���hj�n�M�@Wr��)�*�Y���X%X}�Ƚ�E�|;G��MB�n��+�w��~��^�Lݝԗle!��_�}/��}�6+�?VVid|��/,���e-l�9����Uyϣ˃y�_�B
3U�ٶc�
������gX��$��9B�p�r�)�ذ�Ӭ�B0��S�7z����2�#���|*�>n�+_<����y���K�윇zRt�\?���`�nR�*����]~eܖ�V�x4|*G���,R���X$L�_+v�;I�Gۨ.��E���⍙�!��@_8�-�x�b�&�|���Ig��6u(V�Z���m��ě)��2nÀ5�L��lo�z:Zi��b�|{����sԊ�Kڹ������鮎�C�������i���
�m����
߸��+Jl�U�h�7���p��g@�`9�A0E�,XGk�AQp���sP����p��g@�`9�A0E�,XGk�AQp���sP����p���Ds`���,�
KĝQn�u���`��rݰt�,�@�\7,�A0F�!,�
KĝQn�u���`��rݰt�,��qC�[��IEND�B`�PK��[;�Y��8Widget/Arrow/ArrowImageBar/Assets/next/circle-stroke.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M18.19 11.087c-.235-.206-.54-.337-.878-.337-.724
0-1.312.588-1.312 1.313 0 .387.17.73.438.972l1.83 1.652H10.31C9.588 14.687
9 15.275 9 16s.588 1.313 1.313 1.313h7.954l-1.833
1.65c-.263.243-.434.587-.434.974 0 .725.588 1.313 1.313 1.313.337 0
.642-.13.875-.34l4.378-3.934c.263-.244.434-.588.434-.976s-.17-.732-.438-.972l-4.37-3.94zM16
2C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14S23.732 2 16 2zm0
25.375C9.718 27.375 4.625 22.282 4.625 16S9.718 4.625 16 4.625 27.375 9.718
27.375 16 22.282 27.375 16 27.375z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�-c�[[/Widget/Arrow/ArrowImageBar/Assets/next/full.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M12 8.99c0-.423.204-.722.61-.897.408-.173.772-.104
1.092.21l7.006 6.974c.202.2.298.437.287.716 0 .267-.096.498-.287.69l-7.006
7c-.32.32-.684.39-1.092.21-.406-.175-.61-.483-.61-.923V8.99z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�L���1Widget/Arrow/ArrowImageBar/Assets/next/normal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M13.286 25.61c-.24.253-.52.377-.84.377-.318
0-.6-.124-.84-.376l-1.245-1.297c-.24-.252-.36-.544-.36-.878
0-.334.12-.626.36-.878l6.328-6.6L10.36 9.43c-.24-.25-.36-.54-.36-.864
0-.323.12-.612.36-.864l1.245-1.325c.24-.252.523-.377.848-.377.323 0
.602.125.833.377l8.366 8.746c.24.25.363.546.363.882 0
.34-.122.634-.363.886l-8.366 8.72z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�.���<Widget/Arrow/ArrowImageBar/Assets/next/simple-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M22
15.997v-.003c0-.404-.176-.768-.46-1.028h.002l-9-8.572-.004.004C12.268 6.15
11.902 6 11.5 6c-.83 0-1.5.64-1.5 1.43 0 .432.203.82.523 1.082l7.86
7.485-7.963 7.583c-.26.257-.42.606-.42.99 0 .79.67 1.43 1.5 1.43.404 0
.77-.153 1.04-.4l9.002-8.57v-.002c.282-.26.458-.624.458-1.028v-.003z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[q�t�yy:Widget/Arrow/ArrowImageBar/Assets/next/thin-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M10.722 4.293c-.394-.39-1.032-.39-1.427 0-.393.39-.393
1.03 0 1.42l11.283 10.28-11.283 10.29c-.393.39-.393 1.02 0 1.42.395.39
1.033.39 1.427
0l12.007-10.94c.21-.21.3-.49.284-.77.014-.27-.076-.55-.286-.76L10.72
4.293z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[z}���<Widget/Arrow/ArrowImageBar/Assets/previous/circle-stroke.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M21.688
14.688h-7.955l1.833-1.65-.004-.003c.267-.24.438-.585.438-.973
0-.724-.588-1.312-1.313-1.312-.337 0-.642.13-.874.34l-.004-.003-4.376
3.937.004.004C9.17 15.268 9 15.612 9 16s.17.732.438.972l-.004.004 4.375
3.937.002-.003c.233.21.538.34.876.34.724 0 1.312-.588 1.312-1.313
0-.387-.17-.73-.438-.972l.004-.003-1.833-1.65h7.954c.725 0 1.313-.587
1.313-1.312 0-.725-.588-1.313-1.313-1.313zM16 2C8.268 2 2 8.268 2 16s6.268
14 14 14 14-6.268 14-14S23.732 2 16 2zm0 25.375C9.718 27.375 4.625 22.282
4.625 16S9.718 4.625 16 4.625 27.375 9.718 27.375 16 22.282 27.375 16
27.375z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[j2�pp3Widget/Arrow/ArrowImageBar/Assets/previous/full.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" width="32"
height="32" viewBox="0 0 32 32">
<path fill="#FFF" opacity="1"
fill-rule="evenodd"
d="M18.9958
8.9907c0-.424-.204-.723-.61-.898-.409-.173-.772-.104-1.093.209l-7.006
6.975c-.201.199-.297.437-.286.716 0 .267.096.498.286.689l7.006
7.001c.321.321.684.389
1.093.209.406-.174.61-.482.61-.922V8.9907z"/>
</svg>PK��[�3t��5Widget/Arrow/ArrowImageBar/Assets/previous/normal.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" width="32"
height="32" viewBox="0 0 32 32">
<path fill="#FFF" fill-rule="evenodd"
d="M20.654 9.43l-6.326 6.525 6.326 6.6c.242.253.36.545.36.88
0 .333-.118.625-.36.877l-1.244 1.3c-.24.25-.523.375-.84.375-.32
0-.6-.124-.84-.376l-8.367-8.72c-.24-.25-.363-.54-.363-.88
0-.334.122-.63.363-.88l8.367-8.75c.23-.252.51-.377.83-.377.325 0
.607.126.85.378l1.242 1.326c.242.252.36.54.36.864 0
.32-.118.61-.36.86z"
opacity="1"/>
</svg>
PK��[Z�B���@Widget/Arrow/ArrowImageBar/Assets/previous/simple-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M21.58 23.58l-7.962-7.583
7.86-7.485c.32-.262.522-.65.522-1.083C22 6.64 21.328 6 20.5 6c-.403
0-.768.15-1.038.398l-.004-.004-9 8.57v.002c-.282.26-.458.624-.458
1.028V16c0 .404.176.77.46 1.03h-.002l9 8.57c.27.247.638.4 1.042.4.83 0
1.5-.64 1.5-1.43 0-.384-.16-.733-.42-.99z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�k]�qq>Widget/Arrow/ArrowImageBar/Assets/previous/thin-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M11.433 15.992L22.69 5.712c.393-.39.393-1.03
0-1.42-.393-.39-1.03-.39-1.423 0l-11.98
10.94c-.21.21-.3.49-.285.76-.015.28.075.56.284.77l11.98 10.94c.393.39
1.03.39 1.424 0 .393-.4.393-1.03 0-1.42l-11.257-10.29"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[n��.Widget/Arrow/ArrowImageBar/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.nextend-arrow-imagebar {
cursor: pointer;
z-index: 20;
overflow: hidden;
height: 100%;
position: relative;
}
.nextend-arrow-imagebar .nextend-arrow-arrow {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
background-position: 50% 50%;
background-repeat: no-repeat;
background-size: 48px auto;
z-index: 2;
}
.nextend-arrow-imagebar .nextend-arrow-image {
position: absolute;
top: 10%;
width: 100%;
height: 80%;
background-size: cover;
background-position: 50% 50%;
transition: transform 0.4s, opacity 0.4s;
opacity: 0;
transform: translateX(-100%);
}
.nextend-arrow-imagebar.nextend-arrow-next .nextend-arrow-image {
transform: translateX(100%);
}
.nextend-arrow-imagebar:HOVER
.nextend-arrow-image:not(.nextend-arrow-image--locked),
.nextend-arrow-imagebar:FOCUS
.nextend-arrow-image:not(.nextend-arrow-image--locked) {
opacity: 1;
transform: translateX(0%);
}
}PK��[#��0:Widget/Arrow/ArrowReveal/Assets/dist/w-arrow-reveal.min.jsnu�[���!function(i){var
t=i;t._N2=t._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
s,h=i.document,n=(h.documentElement,i.setTimeout,i.clearTimeout,t._N2),o=(i.requestAnimationFrame,h.createElement.bind(h),Object.assign,function(i,t,s){i.style.setProperty(t,s)}),a=function(i,t,s,h){h=h||{},i.addEventListener(t,s,h)};s=function(){h.body},"complete"===h.readyState||"interactive"===h.readyState?s():h.addEventListener("DOMContentLoaded",s),n.d("SmartSliderWidgetArrowReveal","SmartSliderWidget",(function(){function
i(i,t,s){this.oi=32,this.ai=s,n.SmartSliderWidget.prototype.constructor.call(this,i,t,"#"+i.elementID+"-arrow-"+t)}function
t(t,s){this.ci=1,i.prototype.constructor.call(this,t,"previous",s)}function
s(t,s){this.ci=-1,i.prototype.constructor.call(this,t,"next",s)}return
i.prototype=Object.create(n.SmartSliderWidget.prototype),i.prototype.constructor=i,i.prototype.onStart=function(){a(this.widget,"click",function(e){e.stopPropagation(),this.action()}.bind(this)),this.ri=n.MW.R(this.widget,{width:this.oi}),this.ei=this.widget.querySelector(".nextend-arrow-image"),this._t=n.MW.R(this.ei,{opacity:0}),this.ui=this.widget.querySelector(".nextend-arrow-title"),this.fi={focus:!1,mouse:!1},a(this.widget,"focus",this.mouseEnter.bind(this,"focus")),a(this.widget,"blur",this.mouseLeave.bind(this,"focus")),a(this.widget,"mouseenter",this.mouseEnter.bind(this,"mouse")),a(this.widget,"mouseleave",this.mouseLeave.bind(this,"mouse")),this.slider.stages.done("BeforeShow",this.onBeforeShow.bind(this))},i.prototype.onBeforeShow=function(){this.onRefresh(),a(this.slider.sliderElement,"SliderResize",this.onRefresh.bind(this)),a(this.slider.sliderElement,"CurrentSlideChanged",this.onRefresh.bind(this)),a(this.slider.sliderElement,"visibleSlidesChanged",this.onRefresh.bind(this)),a(this.slider.sliderElement,"mainAnimationComplete",this.onRefresh.bind(this))},i.prototype.onRefresh=function(){var
i=this.slider.currentSlide;if(this.slider.getDirectionPrevious()===this.key){var
t=i.getPrevious();if(t){var
s=t.getThumbnail();s&&o(this.ei,"background-image","url("+s+")"),this.ui&&(this.ui.innerHTML=t.getTitle())}}else
if(this.slider.getDirectionNext()===this.key){var h=i.getNext();if(h){var
n=h.getThumbnail();n&&o(this.ei,"background-image","url("+n+")"),this.ui&&(this.ui.innerHTML=h.getTitle())}}},i.prototype.mouseEnter=function(i){if(!this.fi.mouse&&!this.fi.focus)switch(this.tween&&this.tween.pause(),this.ai){case"turn":this.tween=n.J.to(this._t,.4,{rotationY:0,opacity:1});break;case"fade":this.ri.overflow="visible",this.tween=n.J.to(this._t,.4,{opacity:1});break;default:this.tween=new
n.H,this.tween.to(this.ri,.4,{width:(t=this.ei,t.getBoundingClientRect().width)},0),this.tween.to(this._t,.4,{opacity:1},0)}var
t;this.fi[i]=!0},i.prototype.mouseLeave=function(i){if(this.fi[i]=!1,!this.fi.mouse&&!this.fi.focus)switch(this.tween&&this.tween.pause(),this.ai){case"turn":this.tween=n.J.to(this._t,.4,{rotationY:90*this.ci,opacity:0});break;case"fade":this.tween=n.J.to(this._t,.4,{opacity:0}),this.tween.eventCallback("onComplete",function(){this.ri.overflow="hidden"}.bind(this));break;default:this.tween=new
n.H,this.tween.to(this.ri,.4,{width:this.oi},0),this.tween.to(this._t,.4,{opacity:0},0)}},t.prototype=Object.create(i.prototype),t.prototype.constructor=t,t.prototype.action=function(){this.slider.previousWithDirection()},s.prototype=Object.create(i.prototype),s.prototype.constructor=s,s.prototype.action=function(){this.slider.nextWithDirection()},function(i,h){this.previous=new
t(i,h),this.next=new
s(i,h)}}))}(window);PK��[;�Y��6Widget/Arrow/ArrowReveal/Assets/next/circle-stroke.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M18.19 11.087c-.235-.206-.54-.337-.878-.337-.724
0-1.312.588-1.312 1.313 0 .387.17.73.438.972l1.83 1.652H10.31C9.588 14.687
9 15.275 9 16s.588 1.313 1.313 1.313h7.954l-1.833
1.65c-.263.243-.434.587-.434.974 0 .725.588 1.313 1.313 1.313.337 0
.642-.13.875-.34l4.378-3.934c.263-.244.434-.588.434-.976s-.17-.732-.438-.972l-4.37-3.94zM16
2C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14S23.732 2 16 2zm0
25.375C9.718 27.375 4.625 22.282 4.625 16S9.718 4.625 16 4.625 27.375 9.718
27.375 16 22.282 27.375 16 27.375z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�-c�[[-Widget/Arrow/ArrowReveal/Assets/next/full.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M12 8.99c0-.423.204-.722.61-.897.408-.173.772-.104
1.092.21l7.006 6.974c.202.2.298.437.287.716 0 .267-.096.498-.287.69l-7.006
7c-.32.32-.684.39-1.092.21-.406-.175-.61-.483-.61-.923V8.99z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�L���/Widget/Arrow/ArrowReveal/Assets/next/normal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M13.286 25.61c-.24.253-.52.377-.84.377-.318
0-.6-.124-.84-.376l-1.245-1.297c-.24-.252-.36-.544-.36-.878
0-.334.12-.626.36-.878l6.328-6.6L10.36 9.43c-.24-.25-.36-.54-.36-.864
0-.323.12-.612.36-.864l1.245-1.325c.24-.252.523-.377.848-.377.323 0
.602.125.833.377l8.366 8.746c.24.25.363.546.363.882 0
.34-.122.634-.363.886l-8.366 8.72z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�.���:Widget/Arrow/ArrowReveal/Assets/next/simple-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M22
15.997v-.003c0-.404-.176-.768-.46-1.028h.002l-9-8.572-.004.004C12.268 6.15
11.902 6 11.5 6c-.83 0-1.5.64-1.5 1.43 0 .432.203.82.523 1.082l7.86
7.485-7.963 7.583c-.26.257-.42.606-.42.99 0 .79.67 1.43 1.5 1.43.404 0
.77-.153 1.04-.4l9.002-8.57v-.002c.282-.26.458-.624.458-1.028v-.003z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[q�t�yy8Widget/Arrow/ArrowReveal/Assets/next/thin-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M10.722 4.293c-.394-.39-1.032-.39-1.427 0-.393.39-.393
1.03 0 1.42l11.283 10.28-11.283 10.29c-.393.39-.393 1.02 0 1.42.395.39
1.033.39 1.427
0l12.007-10.94c.21-.21.3-.49.284-.77.014-.27-.076-.55-.286-.76L10.72
4.293z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[z}���:Widget/Arrow/ArrowReveal/Assets/previous/circle-stroke.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M21.688
14.688h-7.955l1.833-1.65-.004-.003c.267-.24.438-.585.438-.973
0-.724-.588-1.312-1.313-1.312-.337 0-.642.13-.874.34l-.004-.003-4.376
3.937.004.004C9.17 15.268 9 15.612 9 16s.17.732.438.972l-.004.004 4.375
3.937.002-.003c.233.21.538.34.876.34.724 0 1.312-.588 1.312-1.313
0-.387-.17-.73-.438-.972l.004-.003-1.833-1.65h7.954c.725 0 1.313-.587
1.313-1.312 0-.725-.588-1.313-1.313-1.313zM16 2C8.268 2 2 8.268 2 16s6.268
14 14 14 14-6.268 14-14S23.732 2 16 2zm0 25.375C9.718 27.375 4.625 22.282
4.625 16S9.718 4.625 16 4.625 27.375 9.718 27.375 16 22.282 27.375 16
27.375z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[j2�pp1Widget/Arrow/ArrowReveal/Assets/previous/full.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" width="32"
height="32" viewBox="0 0 32 32">
<path fill="#FFF" opacity="1"
fill-rule="evenodd"
d="M18.9958
8.9907c0-.424-.204-.723-.61-.898-.409-.173-.772-.104-1.093.209l-7.006
6.975c-.201.199-.297.437-.286.716 0 .267.096.498.286.689l7.006
7.001c.321.321.684.389
1.093.209.406-.174.61-.482.61-.922V8.9907z"/>
</svg>PK��[�3t��3Widget/Arrow/ArrowReveal/Assets/previous/normal.svgnu�[���<svg
xmlns="http://www.w3.org/2000/svg" width="32"
height="32" viewBox="0 0 32 32">
<path fill="#FFF" fill-rule="evenodd"
d="M20.654 9.43l-6.326 6.525 6.326 6.6c.242.253.36.545.36.88
0 .333-.118.625-.36.877l-1.244 1.3c-.24.25-.523.375-.84.375-.32
0-.6-.124-.84-.376l-8.367-8.72c-.24-.25-.363-.54-.363-.88
0-.334.122-.63.363-.88l8.367-8.75c.23-.252.51-.377.83-.377.325 0
.607.126.85.378l1.242 1.326c.242.252.36.54.36.864 0
.32-.118.61-.36.86z"
opacity="1"/>
</svg>
PK��[Z�B���>Widget/Arrow/ArrowReveal/Assets/previous/simple-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M21.58 23.58l-7.962-7.583
7.86-7.485c.32-.262.522-.65.522-1.083C22 6.64 21.328 6 20.5 6c-.403
0-.768.15-1.038.398l-.004-.004-9 8.57v.002c-.282.26-.458.624-.458
1.028V16c0 .404.176.77.46 1.03h-.002l9 8.57c.27.247.638.4 1.042.4.83 0
1.5-.64 1.5-1.43 0-.384-.16-.733-.42-.99z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�k]�qq<Widget/Arrow/ArrowReveal/Assets/previous/thin-horizontal.svgnu�[���<svg
width="32" height="32" viewBox="0 0 32 32"
xmlns="http://www.w3.org/2000/svg">
<path d="M11.433 15.992L22.69 5.712c.393-.39.393-1.03
0-1.42-.393-.39-1.03-.39-1.423 0l-11.98
10.94c-.21.21-.3.49-.285.76-.015.28.075.56.284.77l11.98 10.94c.393.39
1.03.39 1.424 0 .393-.4.393-1.03 0-1.42l-11.257-10.29"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[4q�*Widget/Arrow/ArrowReveal/Assets/reveal.pngnu�[����PNG
IHDRxPқ��sRGB����IDATx��Kaƿ�n�%��4�6�P
��-Bx��Ko����
��P�!�c�X,:)���ct)�����wj�����}��yap�ݙg�������
����l�V�¼��7�� 8^;��O�����x���&`�p�<v0;���屃 ��/�L��'�xy�`v<��c�� 8^^D�����d���ӗ�λ:����x��)�
c��G�%H�X<��!`�b 0�n�z�X���ú�)�
c��G�%H�X<��!`�b ��6����%�����I����������y��~'�?}Q?g9N�[�B!������Q���,G��i��T���<�;8��K��aI�R2<<,��������JyxgP>�~�g�o���˜zG"������!YYY��k.�߾���^<�ۥ�\��^h�Φ�����333���/��˲�����3������Z�O�vɇϻ���wp>sF]�Q1+���h��7�#�m��f�~�^XX�������d2 ��9
���x�1�w�o��͚7@P�:ཽ=����l6+�S4JX#H$�;��X�\jk�X{�{ݭ
�TWsd>�M������$b>����=�X{�t�4|�K�\7WF
�╠v�/�MP�Ob��i�d2�H$���}�L�k����{9��њA�Y�)�p�kkk��|߾���}�Qʉ�C�ܽ8�}[�ae�.{�E�ה����{����O��c��ض- ��_v0,
c�*�$#�P�B�
�"I0
/�*�$#�P�B�
�"I0
/�*�$#�P�⿶SHH�C�
k�
�I�@04��F�@�C�
k�
�I�@04��F�@�C�
k�
�I�@04��F�@�C�
k�
�I�@04��F�@�C�
k�
�I�@04��F�@���0zm�U��IEND�B`�PK��[=$V'||,Widget/Arrow/ArrowReveal/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.nextend-arrow-reveal {
cursor: pointer;
z-index: 20;
position: relative;
height: 115px;
width: 32px;
background-color: @arrowBackgroundRGBA;
}
.nextend-arrow-reveal.n2-ss-arrow-animation-slide {
overflow: hidden;
}
.nextend-arrow-reveal .nextend-arrow-arrow {
width: 32px;
height: 100%;
background-repeat: no-repeat;
background-position: center center;
}
.nextend-arrow-reveal.nextend-arrow-next .nextend-arrow-arrow {
float: right;
}
.nextend-arrow-image {
width: 168px;
height: 100%;
background-size: cover;
background-position: 50% 50%;
position: absolute;
left: 0;
top: 0;
opacity: 0;
outline: 0;
}
.n2-ss-arrow-animation-fade .nextend-arrow-image,
.n2-ss-arrow-animation-turn .nextend-arrow-image {
left: 32px;
}
.n2-ss-arrow-animation-turn .nextend-arrow-image {
transform: rotateY(90deg);
transform-origin: top left;
}
.nextend-arrow-next .nextend-arrow-image {
left: auto;
right: 0;
}
.nextend-arrow-next.n2-ss-arrow-animation-fade .nextend-arrow-image,
.nextend-arrow-next.n2-ss-arrow-animation-turn .nextend-arrow-image {
right: 32px;
}
.nextend-arrow-next.n2-ss-arrow-animation-turn .nextend-arrow-image {
transform: rotateY(-90deg);
transform-origin: top right;
}
.nextend-arrow-reveal .nextend-arrow-title {
position: absolute;
left: 0;
bottom: 0;
padding: 5px 10px;
width: 100%;
box-sizing: border-box;
background-color: @titleBackgroundRGBA;
text-overflow: ellipsis;
overflow: hidden;
word-wrap: normal;
}
}PK��[?:����6Widget/Arrow/ArrowText/Assets/dist/w-arrow-text.min.jsnu�[���!function(t){var
i=t;i._N2=i._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
n,c=t.document,o=(c.documentElement,t.setTimeout,t.clearTimeout,i._N2);t.requestAnimationFrame,c.createElement.bind(c),Object.assign;n=function(){c.body},"complete"===c.readyState||"interactive"===c.readyState?n():c.addEventListener("DOMContentLoaded",n),o.d("SmartSliderWidgetArrowText","SmartSliderWidget",(function(){function
t(t,i){o.SmartSliderWidget.prototype.constructor.call(this,t,i,"#"+t.elementID+"-arrow-"+i)}function
i(i){t.prototype.constructor.call(this,i,"previous")}function
n(i){t.prototype.constructor.call(this,i,"next")}return
t.prototype=Object.create(o.SmartSliderWidget.prototype),t.prototype.constructor=t,t.prototype.onStart=function(){var
t,i,n,c;t=this.widget,i="click",n=function(e){e.stopPropagation(),this.action()}.bind(this),c=c||{},t.addEventListener(i,n,c)},i.prototype=Object.create(t.prototype),i.prototype.constructor=i,i.prototype.action=function(){this.slider.previousWithDirection()},n.prototype=Object.create(t.prototype),n.prototype.constructor=n,n.prototype.action=function(){this.slider.nextWithDirection()},function(t){this.previous=new
i(t),this.next=new
n(t)}}))}(window);PK��[�l)?jj*Widget/Arrow/ArrowText/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.nextend-arrow-text {
cursor: pointer;
z-index: 18;
padding: 5px 10px;
transition: all 0.4s ease-out;
}
.nextend-arrow-text-next-text-rounded,
.nextend-arrow-text-previous-text-rounded {
border-radius: 3px;
}
.nextend-arrow-text span {
color: white;
text-shadow: 0 1px 1px RGBA(0, 0, 0, .2);
}
}PK��[釤��&Widget/Arrow/ArrowText/Assets/text.pngnu�[����PNG
IHDRxPқ��sRGB���lIDATx�OWǿ��*��J�E����T1� Mj������j�����ڴ6j��j�V��Z���X[5
1�Z,�`T��!���
�kv�K�^wֽ7�q�>��9�Ϝ;wgW-�z
�h�@���q`B�������
hg0�\���f��+�yx��Xs4�3�k����q3`��<<�`�����̀5W@��8���
hg0�\���f��+�yx��Xs4�3Xs�V�ZZZp��i�˞�t���h`�̙�^�7�Xye-Z�'��Ɣ�g�m�XW(�E���߿?��z�
�EEE���ܠ��u�
;�V��^z����������)
x�|�
0��e���_dޓ0��e���_dޓH~THHHHÆ�����e�̘1C�B�����S�"66�G�O�����F����ݼϰq��X3�z����@�%u��(�^`��A��M\�BvL�����ύY(�������F���o�K�4����X�lzzz0e����mmmX�|9\.pTT���p��ydff";;}}}Fp����E���QRR"l�sɒ% 1�9�e��i�;ھ>�NY���8�^�~]p-w[�������6:��9�Q�y��9U�Û��CRx��o��
VdD�B���s�Ŷk;=�2b��i��N��� ��F)''G�>z���
�͆��B\�xQ�8�N=z�k.�
X�h(��&<<\WUU�gVe�m~wVⲻa�%V]Y��=�ƴ��oDI�7��A|��f����1'�H-��xn�b�ܮc��J����������BCCAS:�Պ��x���ʼn6����Dzz������Lnjju��:t��f}�Pϟ�evdrb�Ŗ/���=�8��O�ᝫ�Ǜ�nzS�EFF"--
555F`yyy��K�i��nL�ӦMS;
�gwii���,����O��]8����oB���a�� ��Զ�#�����%vw�ch�>0w7�o���}�]�LL����^9rD�)[�477cppIII�p�/-��O����؈��|q�������°1����ƥwQ�S�Kw����6�E��&L��l�}���Sxe�Kx-�U�yҰ ��S�s�@�<�ttt���V,�/^lt��r�Fu*n�[�����)�Yκj<��]b*}]Zp�3�6ZuSِ���1b!��}/��ނ萉����1��t��r�n�:/99Y�){Ŋ��E�4Mx�Á���G���5oC�k�h_��`�EӏY;1/j��m����a>v|�g�LS��(�_�ٳ�I�+u����I��*��T�vY���R=���|V��,�����|���,�����|���,�����|�Z0�U��0?��*���S0}��0�A8�|P��?�x:�?��?�S�H�ɒ�
�V���|5Y��r��1`E@ɺɀe�SĎ+J�M,��"vXP�n2`Y��c����u��*��V���XV9E��"�d�d���)bǀ%�&�UN;�(Y7��r��1`E@ɺɀe�SĎ+J�M,��"vXP�n2`Y��c����u�??5�}~���IEND�B`�PK��[�i�Bj
j
8Widget/Bar/BarVertical/Assets/dist/w-bar-vertical.min.jsnu�[���!function(t){var
i=t;i._N2=i._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
n,s,h=t.document,c=(h.documentElement,t.setTimeout,t.clearTimeout,i._N2),r=(t.requestAnimationFrame,h.createElement.bind(h)),o=function(){return
r("div")},a=Object.assign,u=function(t,i){return
t.dataset[i]},f=function(t,i,n){t.style.setProperty(i,n)},l=function(t){t&&t.parentNode&&t.parentNode.removeChild(t)},d=function(t,i){return
t.dispatchEvent(i)},v=function(t,i,n,s){s=s||{},t.addEventListener(i,n,s)};s=function(){h.body},"complete"===h.readyState||"interactive"===h.readyState?s():h.addEventListener("DOMContentLoaded",s),c.d("SmartSliderWidgetBarVertical","SmartSliderWidget",(function(){"use
strict";function
t(t,i){this.parameters=i,c.SmartSliderWidget.prototype.constructor.call(this,t,"bar",".nextend-bar")}return
t.prototype=Object.create(c.SmartSliderWidget.prototype),t.prototype.constructor=t,t.prototype.onStart=function(){this.Kt=0,this.Qt=null,this.$t=this.widget.querySelector("div"),this.ni=this.$t.querySelector(":scope
> div"),this.ti=c.MW.R(this.ni);var
t=!1;switch(this.parameters.area){case 5:t="left";break;case
8:t="right"}t&&(this.hi=+u(this.widget,"widthPercent"),this.Kt=parseFloat(u(this.widget,"offset")),this.slider.responsive.addHorizontalSpacingControl(t,this));var
i="click";this.slider.hasTouch()&&(i="n2click"),v(this.widget,"click",function(e){var
t,n,s,h=this.slider.sliderElement.querySelector(".n2-ss-slide-active
.n2-ss-layers-container");i&&(t=h,n=i,s=a({bubbles:!0,cancelable:!0},s),d(t,new
Event(n,s)))}.bind(this)),this.slider.stages.done("BeforeShow",this.onBeforeShow.bind(this))},t.prototype.onBeforeShow=function(){this.onSliderSwitchTo({detail:{targetSlide:this.slider.currentSlide}}),this.parameters.animate?v(this.slider.sliderElement,"mainAnimationStart",this.onSliderSwitchToAnimateStart.bind(this)):v(this.slider.sliderElement,"SlideWillChange",this.onSliderSwitchTo.bind(this))},t.prototype.renderBarContent=function(t){var
i,n=new
DocumentFragment;return""!==t.getTitle()&&((i=o()).className=this.parameters.fontTitle,i.innerHTML=t.getTitle(),n.appendChild(i)),""!==t.getDescription()&&((i=o()).className=this.parameters.fontDescription,i.innerHTML=t.getDescription(),n.appendChild(i)),n},t.prototype.onSliderSwitchTo=function(e){var
t=e.detail.targetSlide.slides[0],i=this.renderBarContent(t),n=!i.children.length;this.ni.innerHTML="",this.ni.appendChild(i),this.setCursor(t.hasLink()),this.slider.widgets.setState("hide.bar",n)},t.prototype.onSliderSwitchToAnimateStart=function(){var
t,i,n,s=new
Promise((function(t){this.Qt&&this.Qt.pause(),c.J.to(this.ti,.3,{opacity:0,onComplete:t})}));t=this.slider.sliderElement,i="mainAnimationComplete",n=this.onSliderSwitchToAnimateEnd.bind(this,s),t.addEventListener(i,n,{once:!0})},t.prototype.onSliderSwitchToAnimateEnd=function(t,e){var
i=this.slider.slides[e.detail.currentSlideIndex];t.then(function(){var
t=this.ni.clone();l(this.ni),t.appendChild(this.renderBarContent(i)),this.$t.appendChild(t),this.ni=t,this.ti=c.MW.R(t),this.ti.opacity=0,this.setCursor(i.hasLink()),this.Qt=c.J.to(this.ti,.3,{opacity:1})}.bind(this))},t.prototype.setCursor=function(t){f(this.widget,"cursor",t?"pointer":"inherit")},t.prototype.refreshSliderSize=function(t){this.hi!==n&&f(this.widget,"width",Math.floor(t*this.hi/100)+"px")},t.prototype.getSize=function(){return
this.getWidth()+this.Kt},t}))}(window);PK��[����*Widget/Bar/BarVertical/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.nextend-bar-vertical{
z-index: 10;
}
.nextend-bar-vertical > div {
height: 100%;
box-sizing: border-box !important;
overflow: hidden;
overflow-y: auto;
}
}PK��[��
^^*Widget/Bar/BarVertical/Assets/vertical.pngnu�[����PNG
IHDRxPқ��sRGB���IDATx�LUUǿ8�O��E��P�O&ZZ�j*hI���֔`J��V�)MmfӴ���:��dh��.]*��D�
�!��sܻ����a��9����s������{�}�-�ՄvP�F��M�����șt
`鐘6WO�`鐘6WO�`鐘6WO�`鐘�S����o߾�FJ����U�>}5a<�GD�j���s8��Y455a��i��X�m�@���x��YH|s)ZZZ:�"i�"���a_�N}wk�ؘ��\��̬P]]}7��'���i+���|444�f�M,~}!�Y�6�������y������e�
����c�~���{����E�5�����i�E�<�p���##F
+;{�er�JJJ�A����A�zHo����f>///�����m��
D������O���.};:$uu��ظ ���()-������K���b��a�UUը�qS&M���ɳ���`�;KHH0b����={��ǫ�Wa���ee�a��S��n
��OLER�b����ؘg�v�
Z�����G�>���D�T^�fk��nײk���0?.�����܌�'O!��A\�~݁�[M�c�p��v�a��x�:��y�q��/��m�y�kV����X7�*C��1/n.�
P[[۱��w(`0�+�2�?{N����mhMN]q��ۻ������B�����#��0����qa��&��&r��F^w��Ν�������NG�P[�)�'#'7W�V��I�ϝ�~�����2�c�k�K�ld(8s��6�e�:��zذ�nMM��,ތ��V݆*�0�bi��'gh����N��Ƴ��*��K����_�0'FE铲��f]���0m��6y��3��"�,;��jm�n��G�b���_QQI�a;��wfC��-�bFt4�.IBk[���JN�a��w{{���v|�%&,@��e8v�.kë�l߱o-y+R���P���s��d�ַ����ׯ�OJ\�����~m=Lűn]���"6<�i��6�fvlr�xz�LJ斖�/F�mf�e�pw�+س���2�l��b���wIeR��D� �`'�*�K,
'�B��
�L. �L4�v��2�$�2�pB,�_t��+'��縜��n�X��n��ޝ�pw�x�p�3Q�&W���.�kV�krկ��R�f��&W���.�kV�krկ��:��d�u��]�(���K#��]w�:R�)e��\L���&�����\L���&�����\L���&�����\L���:�U�d���<e�i�"�#����|9q�GE,��RX)\�`q͔�
�J���k��V
�x�X\3�,�R�ă%��)eA���%,�L)�.�` ��fJY`�p�K��5Sʂ+�K<X,��RX)\�`q͔�
�J���k��V
�x�X\3�,�R�ă%��)eA���%,�L)�.�`��节jɁ1IEND�B`�PK��[�7��.Widget/Bullet/BulletNumbers/Assets/numbers.pngnu�[����PNG
IHDRxPқ��sRGB���:IDATx�OHgƟ]w]��
E�5+j#�T�x+B@<��M0׀�\��=�xO! A�EH�h�`�P��c�-���?mf`rܬ����3�1�������w��5��\�&5�Ƃ��� �x�� �x�� �x�� �x�� �x�� �x�� �x�� �x�� �x�� �x�� �x�����믧�'�CE�̩���s��94�ENIm��Ų��$�� �(���I]�Q��-�0�&`�`C[&atM�F����~����ukk+��$���9U�ؒR�tU����g����X�~":�nĊ����Ԅ��F������_�p�����큁h4�X��4ye�}��/�/7�DEM�.�����xp�Y^�uww���
333�������y�����
N�///Gii)Q__/^�n�~T��a�~|�[7�@A,�n�B�W�pAA2�FGG177X���>�7����}���+�o��=�AI��1�>z�o{��������`J�{kjj��MOO;)�I;�T@4�Ep�b�'�1��_��/�wr:�fgg199��b9�<0W�^a�_�EEuW���9bq����~
������N&=�Fq�J-�R%�z�W���uf>��D�T
+++X[[Fuu5���Q\\,~�a�߹}�H~v��#_���6���蝝tvvb}}ccc�UtCCC��ŭ�y��>.����O��o�]|����.�lhiiAWWWp{������'u8<>>���K�?��wii ��D�ܨon��p
�]F����-���h�I*������*����T�C�J�H�E�RI*�!`�`��"`�$���R0ReE�_W��ԩ���E�*�R���"V�E�S��ur���Ţ�)D�:��UE�bQ�"`�\Ī"`�(u
�N.bU�X�:�X'��X,J�B���XU,�N!��E�*�R���"V�E�S��ur���Ţ�)D�:��UE�bQ�"`�\Ī�.��:��rIEND�B`�PK��[^hP==/Widget/Bullet/BulletNumbers/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-control-bullet {
visibility: hidden;
text-align: center;
justify-content: center;
z-index: 14;
}
.n2-ss-control-bullet--calculate-size {
left: 0 !important;
}
.n2-ss-control-bullet-horizontal.n2-ss-control-bullet-fullsize {
width: 100%;
}
.n2-ss-control-bullet-vertical.n2-ss-control-bullet-fullsize {
height: 100%;
flex-flow: column;
}
.nextend-bullet-bar {
display: inline-flex;
vertical-align: top;
visibility: visible;
align-items: center;
flex-wrap: wrap;
}
.n2-bar-justify-content-left {
justify-content: flex-start;
}
.n2-bar-justify-content-center {
justify-content: center;
}
.n2-bar-justify-content-right {
justify-content: flex-end;
}
.n2-ss-control-bullet-vertical > .nextend-bullet-bar {
flex-flow: column;
}
.n2-ss-control-bullet-fullsize > .nextend-bullet-bar {
display: flex;
}
.n2-ss-control-bullet-horizontal.n2-ss-control-bullet-fullsize >
.nextend-bullet-bar {
flex: 1 1 auto;
}
.n2-ss-control-bullet-vertical.n2-ss-control-bullet-fullsize >
.nextend-bullet-bar {
height: 100%;
}
.nextend-bullet-bar .n2-bullet {
cursor: pointer;
transition: background-color 0.4s;
}
.nextend-bullet-bar .n2-bullet.n2-active {
cursor: default;
}
div.n2-ss-bullet-thumbnail-container {
position: absolute;
z-index: 10000000;
}
.n2-ss-bullet-thumbnail-container .n2-ss-bullet-thumbnail {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
}PK��[^hP==,Widget/Bullet/BulletText/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-ss-control-bullet {
visibility: hidden;
text-align: center;
justify-content: center;
z-index: 14;
}
.n2-ss-control-bullet--calculate-size {
left: 0 !important;
}
.n2-ss-control-bullet-horizontal.n2-ss-control-bullet-fullsize {
width: 100%;
}
.n2-ss-control-bullet-vertical.n2-ss-control-bullet-fullsize {
height: 100%;
flex-flow: column;
}
.nextend-bullet-bar {
display: inline-flex;
vertical-align: top;
visibility: visible;
align-items: center;
flex-wrap: wrap;
}
.n2-bar-justify-content-left {
justify-content: flex-start;
}
.n2-bar-justify-content-center {
justify-content: center;
}
.n2-bar-justify-content-right {
justify-content: flex-end;
}
.n2-ss-control-bullet-vertical > .nextend-bullet-bar {
flex-flow: column;
}
.n2-ss-control-bullet-fullsize > .nextend-bullet-bar {
display: flex;
}
.n2-ss-control-bullet-horizontal.n2-ss-control-bullet-fullsize >
.nextend-bullet-bar {
flex: 1 1 auto;
}
.n2-ss-control-bullet-vertical.n2-ss-control-bullet-fullsize >
.nextend-bullet-bar {
height: 100%;
}
.nextend-bullet-bar .n2-bullet {
cursor: pointer;
transition: background-color 0.4s;
}
.nextend-bullet-bar .n2-bullet.n2-active {
cursor: default;
}
div.n2-ss-bullet-thumbnail-container {
position: absolute;
z-index: 10000000;
}
.n2-ss-bullet-thumbnail-container .n2-ss-bullet-thumbnail {
background-size: cover;
background-repeat: no-repeat;
background-position: center;
}
}PK��[{ �� � (Widget/Bullet/BulletText/Assets/text.pngnu�[����PNG
IHDRxPқ��sRGB��� qIDATx�[{PT���*�
H�bQj1�T�����m��tbkˌ#�h�>���4�L�S���̴�q2a�Q�2�U_(Ih�+,B!��N�+���s�+�ogg�=�����9�y�iPH1�̆m�l��$��/�$Xlp�y҃%�����'=Xlp�y҃%�����'=Xlp�y҃%�����'=Xlp�y҃%�����'=Xlp�y҃%�����'=Xlp�y҃%�����gm�n߾�k�����������Z���V+BBB�ٳgcy�:u���ɨ�W�w[N�T���ӄ[=�����Jպ��e���xھ��d!!p�j^��a����Ѐ�Ǐ������G�������L�6M�g]��K��Q�vF}�Q�a_��LOM|�Ԍ��~;v��GY)==k֬����C=���\�2^��D�O��d�Ϣ��`�n�)��Ȉ�����Ç��Z_�$oްa���}�~���W�����^�EHL���o�߀����(�<Wtr��4dN«U�sE'��B/�$�ZE3��-�0�ji�$�Z��e�=wh;'��*���J�1W����p�*sǓ^E4L��x-�)Z)��bg�K�������q�5{6��j������}.�T�>�t���<�'\��_����ʏ��E||<(�'��ʬY�@����v�u^P���&::��"��KJZJ}e���Zc�i�@�9Е�h�|Pz�)�L/B�%ԕ�H��!���;�<ߵ�{��2-��K0�P�$<<{���ƍ�~�z�߿6�
AAAشi[i
��Z��2T�'�iii(,,DVV�8�W�O+Tjb5YQ��1T�?����1�
[��~��_��?���|��w�����E�[�ߥ!�и�:v~�5�#/�'��)����p ��G����k�n݊�۷���˘9s�[���nܸqÕ�e˖
���gfff"!!�U�y���ܹsǙ�U�Oˏj�Ė��%��i<ue9�^����U������f�����-1�'�<��x><�y���f�����R+��k�Q���Q~��%�֖yR__�ֆW�\ "��ѣ�p�[����Z�����m���v�ZW9*SPP�<~������s��Ecc#��ك�&ub�VR�Ok�jR�ߏ�3Ѓ�q[�8d!����t�2�/��(B�5
i��f�y|Ƕo�|
V��&��,���2���:�Y�.�'�����~�K��K��
ZxT>j��Ou��=��WUU�C��V�������Ϻhg��orr2JJJp����>SRRP[[�^���2$%%!,,̳��ݷ�9����Hf�$��O�π�U_���W�V��>�ź��t�$�ʸJ:6��ךހ�dF���zO]�U�J�>w�<�ѽ3���L�L;7<����l|�NJ_�U�u \---,����U��g�ݎ��TF�s�@��hD
?�ܨI�Ŏ�mX��
�:?��~��3|OO�f��L��۸?p�]� V�H�r#����r8��{4�<%s�F~]N8�1,�3�k�]4.��-�"d˖-�`*
���^�����I�&12�+++����V��^����}��F�K5���O�c^k�LF��9p�g�����
]�� ��Q�]�n�ILR���[����8P�U㦇�K���<�}����X��p �=W�����q���m۶���S�|V;q���ݷo�ۚ�K��^�������NF�OE2��Q��l�E�����*n�\a���*]�_���u~���?dcv{_S�闵xS���?��o��|���;�%*�x�\�T�i�&��n�~*��M���;vx�zo6�ٸ�u����ʪ�^���k�.�h����~�Es�{*��$�o�����g�t��{��nC�j��^pvX��Y��S�E�櫮7r����ݗ_�[���3@�ZD+�����t��%�ZN{p &`tZb<��tZBK4*R� /��"���0tZb< ��r�����i��$�W�MS��(�֮�q�p^�BGa��x�Ix��f�)
��0��L��H6/���d瑝����Fўo
F�Н�U�=��cr�nh3�١�xt�c~lֳ)4O�=��u�}�ܹl����4O�=��u�={�
�Tn42�.z4�u�������&���$�zXQ`�`����$X+
�C,09z@��aE�uH�&Gh�`=�(�I����M���! �=�I�����:$���4I�VX�$X`r�& ��L��$�zXQ`�`����$X+
�C,09z@��aE�uH�&Gh�`=�(�I����M����?���!uIEND�B`�PK��[�\5��AWidget/FullScreen/FullScreenImage/Assets/dist/w-fullscreen.min.jsnu�[���!function(t){var
n=t;n._N2=n._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
i,c=t.document,u=(c.documentElement,t.setTimeout,t.clearTimeout,n._N2),o=(t.requestAnimationFrame,c.createElement.bind(c),Object.assign,function(t){t&&t.parentNode&&t.parentNode.removeChild(t)}),s=function(t,n){t.classList.add(n)},f=function(t,n){t.classList.remove(n)},r=function(t,n,i,c){c=c||{},t.addEventListener(n,i,c)};i=function(){c.body},"complete"===c.readyState||"interactive"===c.readyState?i():c.addEventListener("DOMContentLoaded",i),u.d("SmartSliderWidgetFullScreenImage","SmartSliderWidget",(function(){function
t(t){u.SmartSliderWidget.prototype.constructor.call(this,t,"fullscreen",".n2-full-screen-widget")}return
t.prototype=Object.create(u.SmartSliderWidget.prototype),t.prototype.constructor=t,t.prototype.onStart=function(){this.slider.controlFullscreen?(r(this.slider.sliderElement,"n2FullScreen",function(){s(this.widget,"n2-active")}.bind(this)),r(this.slider.sliderElement,"n2ExitFullScreen",function(){f(this.widget,"n2-active")}.bind(this)),r(this.widget,"click",this.slider.controlFullscreen.switchState.bind(this.slider.controlFullscreen))):o(this.widget)},t.prototype.destroy=function(){o(this.widget)},t}))}(window);PK��[�0��2Widget/FullScreen/FullScreenImage/Assets/image.pngnu�[����PNG
IHDRxPқ��sRGB����IDATx��m�0D��
p!n�߮��nɅ��KxZ#2�VV������g�iA����G�M�S��%`��O@�`����O@�`����O@�`����O@�`����O@�,�O����V��k����w��p8���T���k��Q��bH���>`U�ڑE�~���;wi���gs�{�q�%����/�rJ[��|���)m�Ӣ� �/��UN��'����V8-:��/�Ki_>��}]��1��Hm���6�>��#�տK�C�'O\=��j���kT_�����_?��b|��e��ǽ�����q�Zm�߃��q�R,��� �ۣ��O}��o���mnY;�t���}C~\3��o�O�L�
����l���<{�u�ڨ��[h�0Z}T j��
�u�+k�뷜��=R�ESo-/Y����89��|�J>��{��K(�<����p/���N�'����χ��Y�.�3-����%p�� Q�G�����#��5�����3OLykB:8oz����8��Co`=���Mz�15�l��X��q`���zL�#�8��cj�ġ7�S��&����G6q�
���8��Co`=���Mz�/��}�>IEND�B`�PK��[�
�SS6Widget/FullScreen/FullScreenImage/Assets/imageBlue.pngnu�[����PNG
IHDRxPқ��sRGB���
IDATx휡NA���mpU���`x�������T�)0$8�
�!�H-AK���q�L�7�����s3���%�����<�:��36��;�A
`v��8�����q� ع����s��� &`�8o�L��p�'���;�=N0;w�y{�`v��8��o#�[.�a�X��j�H/�9�x<�Ѩ���p�t^>^��k�p�
�_�����K�6;�N��&�"��l�.+磇u�IP��|��.;;C�h����Y�E{rs�(-��p��u��u��W'`�źX�xu�[�[��u��W'`�źX�xu�[�[��MZ����'�IeMS�|�y��[a�~�R�m���'�g�.�>���Ԧ�x��k��<����\�e�*m�eyl}���e��.�4�K}���W�Ϧ�$Jb$����w�\��~i�N��]y�������Ĥ{�:s��rZ���+��q�|Z�&5O������N[o4��]��i�TrMn�%�hW��6i��4݇Zkۂ��Q:$y9��
�!��I��ĥ�c�`x�,q��.�D:K\*8���'�N��
���_��r���tm�@i���MXgl_�F
QK���2��f�z��
�#B��@&�Rx�F�j('���B�W
�$`C0R᪡�lB
#\5���
�@H!`���r�!)�p�PN6!����I��`
�0�UC9 ��F�j('���B�W
�$`C0R�#Fn�*�&YIEND�B`�PK��[VAb�qq5Widget/FullScreen/FullScreenImage/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.n2-full-screen-widget {
cursor: pointer;
z-index: 16;
line-height: 1;
}
.n2-full-screen-widget img {
display: block;
}
.n2-full-screen-widget .n2-full-screen-widget-to-normal {
display: none;
}
.n2-full-screen-widget.n2-active .n2-full-screen-widget-to-normal {
display: block;
}
.n2-full-screen-widget.n2-active .n2-full-screen-widget-to-full {
display: none;
}
}
:-webkit-full-screen .n2-padding > div {
margin: auto !important;
float: none !important;
}
:fullscreen .n2-padding > div {
margin: auto !important;
float: none !important;
}PK��[̞�/~~9Widget/FullScreen/FullScreenImage/Assets/tofull/full1.svgnu�[���<svg
width="16" height="16" viewBox="0 0 16 16"
xmlns="http://www.w3.org/2000/svg">
<path d="M13 14v-1c0-.007 1.997-.007 2 0-.003-.007-.003-2
0-2h1v3h-3zm2-11c-.003.012-2 .012-2 0V2h3v3h-1c-.003 0-.003-1.988 0-2zM1
5H0V2h3v1c0 .012-2 .012-2 0v2zm1-1h12v8H2V4zm-1 9c0-.004 1.996-.004 2
0-.004-.004 0 1 0 1H0v-3h1v2z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[%����9Widget/FullScreen/FullScreenImage/Assets/tofull/full2.svgnu�[���<svg
width="16" height="16" viewBox="0 0 16 16"
xmlns="http://www.w3.org/2000/svg">
<path d="M10 2v2h3v3h2V2h-5zM6 2v2H3v3H1V2h5zm0
12v-2H3V9H1v5h5zm4 0v-2h3V9h2v5h-5z" fill="#FFF"
opacity="1"
fill-rule="evenodd"/>
</svg>PK��[��ww;Widget/FullScreen/FullScreenImage/Assets/tonormal/full1.svgnu�[���<svg
width="16" height="16" viewBox="0 0 16 16"
xmlns="http://www.w3.org/2000/svg">
<path d="M16 11v1c0 .006-1.997.006-2 0 .003.006.003 2 0
2h-1v-3h3zm-2-7c.003-.012 2-.012 2 0v1h-3V2h1c.003 0 .003 1.988 0 2zM3
2v3H0V4c0-.012 2-.012 2 0V2h1zm1 3h8v6H4V5zm-2 7c0 .004-1.996.004-2 0
.004.004 0-1 0-1h3v3H2v-2z"
fill="#FFF" opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�6����;Widget/FullScreen/FullScreenImage/Assets/tonormal/full2.svgnu�[���<svg
width="16" height="16" viewBox="0 0 16 16"
xmlns="http://www.w3.org/2000/svg">
<path d="M15 7V5h-3V2h-2v5h5zM1 7V5h3V2h2v5H1zm0
2v2h3v3h2V9H1zm14 0v2h-3v3h-2V9h5z" fill="#FFF"
opacity="1"
fill-rule="evenodd"/>
</svg>PK��[�5��$Widget/Html/HtmlCode/Assets/html.pngnu�[����PNG
IHDR�x{�gAMA���aPLTE�������������������ڦ�������������Ҿ�̺����������Υ�������������������������ä������������β����諶�����������������������߽�˩����������괾ĵ�ů�������������²�������߹����氻�������������������۳�������ϳ�ĩ����������Ȩ����������۬�������������������Ƣ���������{7S�IDATx����RBA�a�9�sEAEPr�N��k�{WTi[/���,>�V1C��>|���Ç>|���Ç>|���Ç>|�?Tݵ���w-)���Ç~K��W�Æ�w�95�O�Kp!���9~9]�%�!��S4W�ůWE���t�N�j��+�)M��H��j�e��Y�Õ�Ɗ��\���C������}���)Vwu�vo��;�F<���FH��~z�㯿4�@F��ic�
�X'����22��࣠�1����]�a���\w�~����͓~��a)��)�Sȗ�}=I�9���q�r�ݍ6K K�n/ɭky��VJ�ؕ�=r�B���y�w�,����u^�b��}�w�j.��"|���Ç���_��Ç>|���Ç>|���Ç>|���Ç��ߔ.<�*|`vIEND�B`�PK��[s���hh@Widget/Indicator/IndicatorPie/Assets/dist/w-indicator-pie.min.jsnu�[���!function(t){var
i=t;i._N2=i._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
n,o=t.document,s=(o.documentElement,t.setTimeout,t.clearTimeout,i._N2),r=(t.requestAnimationFrame,o.createElement.bind(o),Object.assign,function(t,i,n){t.style.setProperty(i,n)}),h=function(t,i){for(var
n in
i)r(t,n,i[n])},c=function(t){t&&t.parentNode&&t.parentNode.removeChild(t)},a=function(t,i,n){var
s=o.createElementNS("http://www.w3.org/2000/svg",t);return
i&&(f(s,i),n&&n.appendChild(s)),s},u=function(t,i,n){t.setAttributeNS(null,i,n)},f=function(t,i){for(var
n in
i)u(t,n,i[n])};n=function(){o.body},"complete"===o.readyState||"interactive"===o.readyState?n():o.addEventListener("DOMContentLoaded",n),s.d("SmartSliderWidgetIndicatorPie","SmartSliderWidget",(function(){"use
strict";function
t(t,i){this.options=i,s.SmartSliderWidget.prototype.constructor.call(this,t,"indicator",".nextend-indicator-pie")}return
t.prototype=Object.create(s.SmartSliderWidget.prototype),t.prototype.constructor=t,t.prototype.onStart=function(){this.di=[];var
t=this.options.size,i=t/2*this.options.thickness,n=t/2-i/2,o=t+4,s=o/2,r=a("svg",{width:o,height:o});h(r,{display:"block",transform:"rotate(-90deg)"}),a("circle",{cx:s,cy:s,r:n,"stroke-width":i,stroke:"#"+this.options.backstroke,"stroke-opacity":this.options.backstrokeopacity,fill:"none"},r),this.li=a("circle",{cx:s,cy:s,r:n,"stroke-width":i,stroke:"#"+this.options.frontstroke,"stroke-opacity":this.options.frontstrokeopacity,fill:"none"},r),this.widget.appendChild(r),this.vi=2*Math.PI*n,this.slider.stages.done("AutoplayReady",function(){var
t,i,n,o;this.slider.controls.autoplay.enableProgress(),this.di.push((t=this.slider.sliderElement,i="autoplay",n=this.onProgress.bind(this),o=o||{},t.addEventListener(i,n,o),t.removeEventListener.bind(t,i,n,o)))}.bind(this)),this.slider.stages.done("AutoplayDestroyed",this.destroy.bind(this))},t.prototype.onProgress=function(e){u(this.li,"stroke-dasharray",this.vi*e.detail.progress+"
"+this.vi)},t.prototype.destroy=function(){var
t;c(this.widget),(t=this.di).forEach((function(t){t()})),t.splice(0,t.length)},t}))}(window);PK��[�w++,Widget/Indicator/IndicatorPie/Assets/pie.pngnu�[����PNG
IHDRxPқ��sRGB����IDATx�OU���.�n�.�.o)O�EM*i,���m�il���/�`�1���1h�(U��-�v�%P(5�Yvaw�g`���P��ޜ�lv��9�|?{���hI����
��zF�
`��+����Q&��+��{Ԃ ��
(��`����G-�+����Q&��+��{Ԃ ��
(��`����G-�+����Q&��+��{n��K$p��
���![�^uOFT���ՠ�r?M�}�=���@h�;�T��Up��t��c���o�!��㐆F�j�R��S��c�����
pj�)��Ru��v�Y"_���0��C�d�1,����|]��O�al|&��B4���/h) {��큿{��Ҳ���r'N��������p���[YS�r����0=5��[&''�m������݊K��R�`�_}�ٶp]n�:+l�<>1��[���ee���5�
�VYeZ0�����_
@��&���۽�n�⦆�`�ђ�p�jk�-��5�{�nv��DKV0>s1,۟�n6��6�������q4����a�
A�RdffE�3��k���d%B4v���\������#q
nt|�h� õ�+��_z�8�=a�-x��~j���~p�k~���s���G�����;��PE:�Z�0Tgj +/�����76��ȧ���`�qIaA�#/[Fz�842�%ef�@�1���E�=��ӏf�>鷆B�t��w�dzں,?/�:��@z�kk��>��0X\\������H�@�#��3�?+�9�>++�C'�D���
�����J$�������aW�dNҏ���r�*+�
_��C����e�(1.)ʜ�o�Y��pD}U�x�ܴ=�z��Iz� �333������>=�Xx�ub�
s�������O]�WZ[������v�q�p�h︗�����rKl�
�-
}>/��|���r��Ǻ.��ٓ��o�����h��z�p-x�J�q`�k�7<��2�3�V]n����Ќ;;�W8.�&#}/�T:���~��σc脿5���~|<9 �����2�B�y���y�-��!�^l�I�2���.hj���++Lf�7�,�R3�{�ԑEO6h�Y��7}���g!/77�㖼}W�J��Q����`>��o�c<grs��m�}���bx�Fc�}�+ ���z�*&Eo`f�b��اo~���&[�_%z�;���L�gz6�E�;.�؏R.�ǧ#/SY�{o��+������f=�Уq�m�fB~����cmՁ�q�To��Hv�R�h��Q,Bu�6 0G�E�"�"T�h�s[�),Bu�6 0G�E�"�"T�h�s[�),Bu�6 0G�E�"�"T�h�s[�),Bu�6 0G�E�"�"T�h�s[�),Bu�6 0G�E�"�"T�h�s[���E��"�1�_IEND�B`�PK��[���0Widget/Indicator/IndicatorPie/Assets/pieFull.pngnu�[����PNG
IHDRxPқ��sRGB����IDATx�kOQ�g[z�PDH�"��Q������&m@��(^z��}���K��3��l���Ng�g�l�����c�[rn3cb��D
`v����X��\�鱂 ع��c�s���
&`�
8O�L��p�+���+�<=V0;W�yz�`v����X��\��MXʯ����o��4��K�X(��Ң<]
����/�4/�ًW�z�v�`�_���"O�Oo�亍��t��,�Fm+a�)�!���T�J�Ŗ�f
p:x�V�ԏ����c~vF�f*�l��ސ�?���#Z��H"��sRΗ�\.�������=��*�@����~b"/\�b��9O�]�����W��d�\��j�-�����T�T2�c��o-HE�|jk���z�2��S;� ����UL�}����v�����0��M�W��nK�ٔz�!��x�4h2�[6�q�DS�X�]��� l��K#�?jƀ-�y������⻚b��,S�\;�O`��ӓ��o"#���0�8n��|��U�ΖK�d�%D����,��u��LM��i���Ɛ��i����x��i��]�x���/k(�>q���z
��Qo�4�ŧ�
FҘ�q8�k1���usUV{�!�z3
h���z�B��H�u$�/p��<���qP�&���\�8?^�|OV*o�����O�ޱkU�uV�;��k�/'�`1܇�B8@�2�9/��������O�9\4nW����xS�K�P`,+q��)�w���䤾Ͻ�U�������'�a�[;ɏ�q�0���'�?\���z�?�Z0�D�7x��n��op��n��op��n��op��n��op��n��op��n��op��n��op��n��op��n��op��n��op���݉xc!IEND�B`�PK��[lMC�HH1Widget/Indicator/IndicatorPie/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.nextend-indicator-pie {
z-index: 16;
}
}PK��[��7�iiFWidget/Indicator/IndicatorStripe/Assets/dist/w-indicator-stripe.min.jsnu�[���!function(t){var
i=t;i._N2=i._N2||{_r:[],_d:[],r:function(){this._r.push(arguments)},d:function(){this._d.push(arguments)}};var
n,s=t.document,o=(s.documentElement,t.setTimeout,t.clearTimeout,i._N2),r=(t.requestAnimationFrame,s.createElement.bind(s),Object.assign,function(t){t&&t.parentNode&&t.parentNode.removeChild(t)});n=function(){s.body},"complete"===s.readyState||"interactive"===s.readyState?n():s.addEventListener("DOMContentLoaded",n),o.d("SmartSliderWidgetIndicatorStripe","SmartSliderWidget",(function(){"use
strict";function
t(t){o.SmartSliderWidget.prototype.constructor.call(this,t,"indicator",".nextend-indicator-stripe")}return
t.prototype=Object.create(o.SmartSliderWidget.prototype),t.prototype.constructor=t,t.prototype.onStart=function(){this.di=[],this.pi=o.MW.R(this.widget.querySelector("div")),this.yi({detail:{progress:0}}),this.slider.stages.done("AutoplayReady",function(){var
t,i,n,s;this.slider.controls.autoplay.enableProgress(),this.di.push((t=this.slider.sliderElement,i="autoplay",n=this.yi.bind(this),s=s||{},t.addEventListener(i,n,s),t.removeEventListener.bind(t,i,n,s)))}.bind(this)),this.slider.stages.done("AutoplayDestroyed",this.destroy.bind(this))},t.prototype.yi=function(e){this.pi.xP=100*-(1-e.detail.progress)},t.prototype.destroy=function(){var
t;r(this.widget),(t=this.di).forEach((function(t){t()})),t.splice(0,t.length)},t}))}(window);PK��[e�=���2Widget/Indicator/IndicatorStripe/Assets/stripe.pngnu�[����PNG
IHDRxPқ��sRGB����IDATx�m�Q���4�.�@��D���!��t36˓��s�%p�]ְ? �"$8����u� '0>�N�8��y]p�� ���<N`|^��q������'x����.8����u� '0>�N�8��y]p�� ���<N`|^��q������'x����.8�������{|��~����[�_/;����h��J��j�`��J��j�`����W�^y�yL(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�L(�3 �#�E�
�ő�UIEND�B`�PK��[��IJrr4Widget/Indicator/IndicatorStripe/Assets/style.n2lessnu�[���(~'div#@{sliderid}')
{
.nextend-indicator-stripe {
width: 100%;
overflow: hidden;
z-index: 14;
}
}PK'C�[}��r
r
1Application/Admin/PluggedApplicationTypeAdmin.phpnu�[���PK'C�[�
=||:�
Application/Admin/Slider/License/ControllerAjaxLicense.phpnu�[���PK'C�[[w6�Application/Admin/Slider/License/ControllerLicense.phpnu�[���PK'C�[�����8:Application/Admin/Slider/PluggedControllerAjaxSlider.phpnu�[���PK'C�[�@�L L 4},Application/Admin/Slider/PluggedControllerSlider.phpnu�[���PK'C�[�riUU/-6Application/Admin/Slider/Template/EditGroup.phpnu�[���PK'C�[�I�CC.�9Application/Admin/Slider/Template/Particle.phpnu�[���PK'C�[�����2�BApplication/Admin/Slider/Template/ShapeDivider.phpnu�[���PK'C�[&*`�||9�KApplication/Admin/Slider/Template/ShapeDividerPreview.phpnu�[���PK'C�[�{��''0�OApplication/Admin/Slider/ViewSliderEditGroup.phpnu�[���PK'C�[�Wj^^/#mApplication/Admin/Slider/ViewSliderParticle.phpnu�[���PK'C�[R�cff3�Application/Admin/Slider/ViewSliderShapeDivider.phpnu�[���PK'C�[�o�Y��:��Application/Admin/Slider/ViewSliderShapeDividerPreview.phpnu�[���PK'C�[BBύ��:�Application/Admin/Sliders/PluggedControllerAjaxSliders.phpnu�[���PK'C�[d]Xa��B$�Application/Admin/Visual/ControllerAjaxPostBackgroundAnimation.phpnu�[���PK'C�[G=b��=d�Application/Admin/Visual/ControllerAjaxSplitTextAnimation.phpnu�[���PK'C�[�?�ff7j�Application/Frontend/PluggedApplicationTypeFrontend.phpnu�[���PK'C�[�h�XX17�Application/PluggedApplicationSmartSlider3Pro.phpnu�[���PK'C�[_ʫ**�Form/Element/AutoplayPicker.phpnu�[���PK'C�[���BB(i�Form/Element/CanvasLayerParentPicker.phpnu�[���PK'C�[�NH���Form/Element/Particle.phpnu�[���PK'C�[�?�
�
��Form/Element/ParticleSkin.phpnu�[���PK'C�[py��vv(�Form/Element/PostBackgroundAnimation.phpnu�[���PK'C�[youX��*��Form/Element/Select/ShapeDividerSelect.phpnu�[���PK'C�[s昽����Form/Element/ShapeDivider.phpnu�[���PK'C�[�
�#��Form/Element/SplitTextAnimation.phpnu�[���PK'C�[S��+�+3T�Generator/Common/Facebook/ConfigurationFacebook.phpnu�[���PK'C�[7�mpBB8jGenerator/Common/Facebook/Elements/FacebookAlbumList.phpnu�[���PK'C�[nj��4$Generator/Common/Facebook/Elements/FacebookToken.phpnu�[���PK(C�[.`��A.(Generator/Common/Facebook/Facebook/Authentication/AccessToken.phpnu�[���PK(C�[�m�&&I?7Generator/Common/Facebook/Facebook/Authentication/AccessTokenMetadata.phpnu�[���PK(C�[�|�""B�]Generator/Common/Facebook/Facebook/Authentication/OAuth2Client.phpnu�[���PK(C�[�;�-o
o
/Q�Generator/Common/Facebook/Facebook/autoload.phpnu�[���PK(C�[��/���Q�Generator/Common/Facebook/Facebook/Exceptions/FacebookAuthenticationException.phpnu�[���PK(C�[Hd�W��P��Generator/Common/Facebook/Facebook/Exceptions/FacebookAuthorizationException.phpnu�[���PK(C�[M�/
��I��Generator/Common/Facebook/Facebook/Exceptions/FacebookClientException.phpnu�[���PK(C�[Ѣ+��HK�Generator/Common/Facebook/Facebook/Exceptions/FacebookOtherException.phpnu�[���PK(C�[��y��K��Generator/Common/Facebook/Facebook/Exceptions/FacebookResponseException.phpnu�[���PK(C�[�n��R�Generator/Common/Facebook/Facebook/Exceptions/FacebookResumableUploadException.phpnu�[���PK(C�[R��~��Fc�Generator/Common/Facebook/Facebook/Exceptions/FacebookSDKException.phpnu�[���PK(C�[I�a��I��Generator/Common/Facebook/Facebook/Exceptions/FacebookServerException.phpnu�[���PK(C�[�����K �Generator/Common/Facebook/Facebook/Exceptions/FacebookThrottleException.phpnu�[���PK(C�[��/�/G/G/d�Generator/Common/Facebook/Facebook/Facebook.phpnu�[���PK(C�[�z`��2�Generator/Common/Facebook/Facebook/FacebookApp.phpnu�[���PK(C�[�����
�
;;#Generator/Common/Facebook/Facebook/FacebookBatchRequest.phpnu�[���PK(C�[H1ۛ��5�DGenerator/Common/Facebook/Facebook/FacebookClient.phpnu�[���PK(C�[�I��2�26�bGenerator/Common/Facebook/Facebook/FacebookRequest.phpnu�[���PK*C�[HI���(�(7+�Generator/Common/Facebook/Facebook/FacebookResponse.phpnu�[���PK*C�[U��>s�Generator/Common/Facebook/Facebook/FileUpload/FacebookFile.phpnu�[���PK*C�[��1���Kt�Generator/Common/Facebook/Facebook/FileUpload/FacebookResumableUploader.phpnu�[���PK*C�[?6Xn��G��Generator/Common/Facebook/Facebook/FileUpload/FacebookTransferChunk.phpnu�[���PK*C�[�
va��?
�Generator/Common/Facebook/Facebook/FileUpload/FacebookVideo.phpnu�[���PK*C�[��}O��;9�Generator/Common/Facebook/Facebook/FileUpload/Mimetypes.phpnu�[���PK*C�[�5����:��Generator/Common/Facebook/Facebook/GraphNodes/Birthday.phpnu�[���PK*C�[bB��88<��Generator/Common/Facebook/Facebook/GraphNodes/Collection.phpnu�[���PK*C�[�q,�qqB��Generator/Common/Facebook/Facebook/GraphNodes/GraphAchievement.phpnu�[���PK*C�[xT�9��<u�Generator/Common/Facebook/Facebook/GraphNodes/GraphAlbum.phpnu�[���PK*C�[�_�jjB�Generator/Common/Facebook/Facebook/GraphNodes/GraphApplication.phpnu�[���PK*C�[ޒ���A��Generator/Common/Facebook/Facebook/GraphNodes/GraphCoverPhoto.phpnu�[���PK*C�[�]��;�Generator/Common/Facebook/Facebook/GraphNodes/GraphEdge.phpnu�[���PK*C�[��ž�<�
Generator/Common/Facebook/Facebook/GraphNodes/GraphEvent.phpnu�[���PK*C�[e���<�8Generator/Common/Facebook/Facebook/GraphNodes/GraphGroup.phpnu�[���PK*C�[}5���;KGenerator/Common/Facebook/Facebook/GraphNodes/GraphList.phpnu�[���PK*C�[4C�� � ?dPGenerator/Common/Facebook/Facebook/GraphNodes/GraphLocation.phpnu�[���PK*C�[��f�ww;�ZGenerator/Common/Facebook/Facebook/GraphNodes/GraphNode.phpnu�[���PK*C�[�
�k00BoGenerator/Common/Facebook/Facebook/GraphNodes/GraphNodeFactory.phpnu�[���PK*C�[
j��= �Generator/Common/Facebook/Facebook/GraphNodes/GraphObject.phpnu�[���PK*C�[
��7**Dt�Generator/Common/Facebook/Facebook/GraphNodes/GraphObjectFactory.phpnu�[���PK*C�[J�(���;�Generator/Common/Facebook/Facebook/GraphNodes/GraphPage.phpnu�[���PK*C�["i����>(�Generator/Common/Facebook/Facebook/GraphNodes/GraphPicture.phpnu�[���PK*C�[*�˽
B2�Generator/Common/Facebook/Facebook/GraphNodes/GraphSessionInfo.phpnu�[���PK*C�[r�qq;��Generator/Common/Facebook/Facebook/GraphNodes/GraphUser.phpnu�[���PK*C�[�݈Ԅ�C��Generator/Common/Facebook/Facebook/Helpers/FacebookCanvasHelper.phpnu�[���PK*C�[�#KϺ�G��Generator/Common/Facebook/Facebook/Helpers/FacebookJavaScriptHelper.phpnu�[���PK*C�[Lk
k
D��Generator/Common/Facebook/Facebook/Helpers/FacebookPageTabHelper.phpnu�[���PK*C�[/�y�*�*J��Generator/Common/Facebook/Facebook/Helpers/FacebookRedirectLoginHelper.phpnu�[���PK*C�[
��ZZS'Generator/Common/Facebook/Facebook/Helpers/FacebookSignedRequestFromInputHelper.phpnu�[���PK*C�[�Su��<�9Generator/Common/Facebook/Facebook/Http/GraphRawResponse.phpnu�[���PK*C�[�X�$''@�IGenerator/Common/Facebook/Facebook/Http/RequestBodyInterface.phpnu�[���PK*C�[Qs0��@�OGenerator/Common/Facebook/Facebook/Http/RequestBodyMultipart.phpnu�[���PK*C�[��A�`Generator/Common/Facebook/Facebook/Http/RequestBodyUrlEncoded.phpnu�[���PK+C�[aQ
WWV�gGenerator/Common/Facebook/Facebook/HttpClients/certs/DigiCertHighAssuranceEVRootCA.pemnu�[���PK+C�[�HI�66?�mGenerator/Common/Facebook/Facebook/HttpClients/FacebookCurl.phpnu�[���PK+C�[���CCI\yGenerator/Common/Facebook/Facebook/HttpClients/FacebookCurlHttpClient.phpnu�[���PK+C�[�u/���K�Generator/Common/Facebook/Facebook/HttpClients/FacebookGuzzleHttpClient.phpnu�[���PK+C�[�
:J\\N~�Generator/Common/Facebook/Facebook/HttpClients/FacebookHttpClientInterface.phpnu�[���PK+C�[,����AX�Generator/Common/Facebook/Facebook/HttpClients/FacebookStream.phpnu�[���PK+C�[��}��K��Generator/Common/Facebook/Facebook/HttpClients/FacebookStreamHttpClient.phpnu�[���PK+C�[�<ʖ
�
E��Generator/Common/Facebook/Facebook/HttpClients/HttpClientsFactory.phpnu�[���PK+C�[���~~Y��Generator/Common/Facebook/Facebook/PersistentData/FacebookMemoryPersistentDataHandler.phpnu�[���PK+C�[�D���Z��Generator/Common/Facebook/Facebook/PersistentData/FacebookSessionPersistentDataHandler.phpnu�[���PK+C�[�{�~~\�Generator/Common/Facebook/Facebook/PersistentData/FacebookWordPressPersistentDataHandler.phpnu�[���PK+C�[d���p p K%�Generator/Common/Facebook/Facebook/PersistentData/PersistentDataFactory.phpnu�[���PK+C�[�
�_M�Generator/Common/Facebook/Facebook/PersistentData/PersistentDataInterface.phpnu�[���PK+C�[��::0��Generator/Common/Facebook/Facebook/polyfills.phpnu�[���PK+C�[3��q��[5�Generator/Common/Facebook/Facebook/PseudoRandomString/McryptPseudoRandomStringGenerator.phpnu�[���PK+C�[}�+
+
\h�Generator/Common/Facebook/Facebook/PseudoRandomString/OpenSslPseudoRandomStringGenerator.phpnu�[���PK+C�[��~�\
Generator/Common/Facebook/Facebook/PseudoRandomString/PseudoRandomStringGeneratorFactory.phpnu�[���PK+C�[\�K���^�Generator/Common/Facebook/Facebook/PseudoRandomString/PseudoRandomStringGeneratorInterface.phpnu�[���PK+C�[iVܬ__Z�!Generator/Common/Facebook/Facebook/PseudoRandomString/PseudoRandomStringGeneratorTrait.phpnu�[���PK+C�[��)��`�*Generator/Common/Facebook/Facebook/PseudoRandomString/RandomBytesPseudoRandomStringGenerator.phpnu�[���PK+C�[��L0}
}
\73Generator/Common/Facebook/Facebook/PseudoRandomString/UrandomPseudoRandomStringGenerator.phpnu�[���PK+C�[���
�
4@>Generator/Common/Facebook/Facebook/SignedRequest.phpnu�[���PK+C�[^F�Z��F+_Generator/Common/Facebook/Facebook/Url/FacebookUrlDetectionHandler.phpnu�[���PK+C�[����UUA�tGenerator/Common/Facebook/Facebook/Url/FacebookUrlManipulator.phpnu�[���PK+C�[lL�b33@J�Generator/Common/Facebook/Facebook/Url/UrlDetectionInterface.phpnu�[���PK+C�[#�\�444�Generator/Common/Facebook/GeneratorGroupFacebook.phpnu�[���PK+C�[w����4��Generator/Common/Facebook/Sources/FacebookAlbums.phpnu�[���PK+C�[�E#�LL9أGenerator/Common/Facebook/Sources/FacebookPostsByPage.phpnu�[���PK+C�[(��;}`}`)��Generator/Common/Flickr/api/DPZFlickr.phpnu�[���PK+C�[�����/c!Generator/Common/Flickr/ConfigurationFlickr.phpnu�[���PK+C�[-��L��1�;Generator/Common/Flickr/Elements/FlickrAlbums.phpnu�[���PK+C�[�>`��4�@Generator/Common/Flickr/Elements/FlickrGalleries.phpnu�[���PK+C�[����0�EGenerator/Common/Flickr/Elements/FlickrToken.phpnu�[���PK+C�[�w����0�IGenerator/Common/Flickr/GeneratorGroupFlickr.phpnu�[���PK+C�[��V�zz5$OGenerator/Common/Flickr/Sources/FlickrPeopleAlbum.phpnu�[���PK+C�[�Y����<fGenerator/Common/Flickr/Sources/FlickrPeoplePhotoGallery.phpnu�[���PK+C�[.� ;>}Generator/Common/Flickr/Sources/FlickrPeoplePhotoStream.phpnu�[���PK+C�[�9�H��6��Generator/Common/Flickr/Sources/FlickrPhotosSearch.phpnu�[���PK+C�[�}�.��*ġGenerator/Common/GeneratorCommonLoader.phpnu�[���PK+C�[����@٢Generator/Common/ImagesInFolder/GeneratorGroupImagesInFolder.phpnu�[���PK,C�[3Y���@;�Generator/Common/ImagesInFolder/Sources/ImagesInFolderImages.phpnu�[���PK,C�[;�� ))D��Generator/Common/ImagesInFolder/Sources/ImagesInFolderSubfolders.phpnu�[���PK,C�[Ӹ�=��@7�Generator/Common/ImagesInFolder/Sources/ImagesInFolderVideos.phpnu�[���PK,C�[r�n��,jGenerator/Common/Json/GeneratorGroupJson.phpnu�[���PK,C�[H��z��+{Generator/Common/Json/Sources/JsonInput.phpnu�[���PK,C�[���%%)�Generator/Common/Json/Sources/JsonUrl.phpnu�[���PK,C�[�;�scc62Generator/Common/Pinterest/GeneratorGroupPinterest.phpnu�[���PK,C�[��6�4Generator/Common/Pinterest/Sources/PinterestImages.phpnu�[���PK,C�[P���""*XMGenerator/Common/Rss/GeneratorGroupRss.phpnu�[���PK,C�[������(�OGenerator/Common/Rss/Sources/RSSFeed.phpnu�[���PK,C�[��?���,�lGenerator/Common/Text/GeneratorGroupText.phpnu�[���PK,C�[w��FF+�oGenerator/Common/Text/Sources/TextInput.phpnu�[���PK,C�[C�*gwGenerator/Common/Text/Sources/TextText.phpnu�[���PK,C�[�m�
@�@�)�Generator/Common/Twitter/api/tmhOAuth.phpnu�[���PK,C�[��ߔ1\ Generator/Common/Twitter/ConfigurationTwitter.phpnu�[���PK,C�[�֘��2� Generator/Common/Twitter/Elements/TwitterToken.phpnu�[���PK,C�[�D��2�! Generator/Common/Twitter/GeneratorGroupTwitter.phpnu�[���PK,C�[�$AA4D% Generator/Common/Twitter/Sources/TwitterTimeline.phpnu�[���PK,C�[��
dd<�< Generator/Common/Vimeo/api/Exceptions/ExceptionInterface.phpnu�[���PK,C�[��/���?�= Generator/Common/Vimeo/api/Exceptions/VimeoRequestException.phpnu�[���PK,C�[�r����>�> Generator/Common/Vimeo/api/Exceptions/VimeoUploadException.phpnu�[���PK,C�[Pf��KRKR$.@ Generator/Common/Vimeo/api/Vimeo.phpnu�[���PK,C�[X/X���-͒ Generator/Common/Vimeo/ConfigurationVimeo.phpnu�[���PK,C�[����/� Generator/Common/Vimeo/Elements/VimeoAlbums.phpnu�[���PK,C�[z1�F��.@� Generator/Common/Vimeo/Elements/VimeoToken.phpnu�[���PK,C�[
�@���.@� Generator/Common/Vimeo/GeneratorGroupVimeo.phpnu�[���PK,C�[i��
�
-�� Generator/Common/Vimeo/Sources/VimeoAlbum.phpnu�[���PK,C�[�|��$�$1s� Generator/Common/YouTube/ConfigurationYoutube.phpnu�[���PK,C�[��G��;�� Generator/Common/YouTube/Elements/YouTubePlaylistByUser.phpnu�[���PK,C�[C�?���2�� Generator/Common/YouTube/Elements/YouTubeToken.phpnu�[���PK,C�[��K��2�� Generator/Common/YouTube/GeneratorGroupYouTube.phpnu�[���PK,C�[䦻C�� Generator/Common/YouTube/googleclient/Auth/Google_Auth_Abstract.phpnu�[���PK,C�[�
#��D;� Generator/Common/YouTube/googleclient/Auth/Google_Auth_Exception.phpnu�[���PK,C�[��Z^�N�NA�
Generator/Common/YouTube/googleclient/Auth/Google_Auth_OAuth2.phpnu�[���PK,C�[XF`Q`Q7�O
Generator/Common/YouTube/googleclient/Google_Client.phpnu�[���PK,C�[��@�
�
;��
Generator/Common/YouTube/googleclient/Google_Collection.phpnu�[���PK,C�[�*y��;�;7Ϭ
Generator/Common/YouTube/googleclient/Google_Config.phpnu�[���PK,C�[��:�
Generator/Common/YouTube/googleclient/Google_Exception.phpnu�[���PK,C�[�(=tO
O 6��
Generator/Common/YouTube/googleclient/Google_Model.phpnu�[���PK,C�[TY�CC8�
Generator/Common/YouTube/googleclient/Google_Service.phpnu�[���PK,C�[O���336ZGenerator/Common/YouTube/googleclient/Google_Utils.phpnu�[���PK.C�[��{[[F�Generator/Common/YouTube/googleclient/Http/Google_Http_CacheParser.phpnu�[���PK.C�[m-��.�.B�8Generator/Common/YouTube/googleclient/Http/Google_Http_Request.phpnu�[���PK.C�[_�ƕ��?hGenerator/Common/YouTube/googleclient/Http/Google_Http_REST.phpnu�[���PK.C�[�k��-�-?q�Generator/Common/YouTube/googleclient/IO/Google_IO_Abstract.phpnu�[���PK.C�[���MM;��Generator/Common/YouTube/googleclient/IO/Google_IO_Curl.phpnu�[���PK.C�[o���YY@r�Generator/Common/YouTube/googleclient/IO/Google_IO_Exception.phpnu�[���PK.C�[7U�ɺ'�'G;�Generator/Common/YouTube/googleclient/Logger/Google_Logger_Abstract.phpnu�[���PK.C�[�-����Cl�Generator/Common/YouTube/googleclient/Logger/Google_Logger_Null.phpnu�[���PK.C�[2sH
R R J��Generator/Common/YouTube/googleclient/Service/Google_Service_Exception.phpnu�[���PK.C�[J���##I��Generator/Common/YouTube/googleclient/Service/Google_Service_Resource.phpnu�[���PK.C�[5���!L!LH"Generator/Common/YouTube/googleclient/Service/Google_Service_YouTube.phpnu�[���PK/C�[+�w��D�nGenerator/Common/YouTube/googleclient/Task/Google_Task_Exception.phpnu�[���PK/C�[M�tm��D pGenerator/Common/YouTube/googleclient/Task/Google_Task_Retryable.phpnu�[���PK/C�[{K�AArGenerator/Common/YouTube/googleclient/Task/Google_Task_Runner.phpnu�[���PK/C�[�Sc��6ϋGenerator/Common/YouTube/Sources/YouTubeByPlaylist.phpnu�[���PK/C�[7���114-�Generator/Common/YouTube/Sources/YouTubeBySearch.phpnu�[���PK/C�[T���³Generator/GeneratorLoader.phpnu�[���PK/C�[59!C�Generator/Joomla/Djclassifieds/Elements/DjclassifiedsCategories.phpnu�[���PK/C�[�P¤Bp�Generator/Joomla/Djclassifieds/Elements/DjclassifiedsLocations.phpnu�[���PK/C�[�䫿�>��Generator/Joomla/Djclassifieds/Elements/DjclassifiedsTypes.phpnu�[���PK/C�[fgVV>�Generator/Joomla/Djclassifieds/GeneratorGroupDjclassifieds.phpnu�[���PK/C�[*I\"k*k*=��Generator/Joomla/Djclassifieds/Sources/DjclassifiedsItems.phpnu�[���PK/C�[�j����9��Generator/Joomla/Easyblog/Elements/EasyblogCategories.phpnu�[���PK/C�[�²�$$3�Generator/Joomla/Easyblog/Elements/EasyblogTags.phpnu�[���PK/C�[������4��Generator/Joomla/Easyblog/GeneratorGroupEasyblog.phpnu�[���PK/C�[4����(�(3�Generator/Joomla/Easyblog/Sources/EasyblogPosts.phpnu�[���PK/C�[�r��?�+Generator/Joomla/Easydiscuss/Elements/EasydiscussCategories.phpnu�[���PK/C�[����9^1Generator/Joomla/Easydiscuss/Elements/EasydiscussTags.phpnu�[���PK0C�[��YY:�4Generator/Joomla/Easydiscuss/GeneratorGroupEasydiscuss.phpnu�[���PK1C�[�AV�bb?�9Generator/Joomla/Easydiscuss/Sources/EasydiscussDiscussions.phpnu�[���PK1C�[=�CC=uPGenerator/Joomla/Easysocial/Elements/EasysocialCategories.phpnu�[���PK1C�[����8%YGenerator/Joomla/Easysocial/GeneratorGroupEasysocial.phpnu�[���PK1C�[��"i
i
8h`Generator/Joomla/Easysocial/Sources/EasysocialAlbums.phpnu�[���PK1C�[��,ށ(�(89�Generator/Joomla/Easysocial/Sources/EasysocialEvents.phpnu�[���PK1C�[�-��{{8"�Generator/Joomla/Easysocial/Sources/EasysocialGroups.phpnu�[���PK1C�[�
����7�Generator/Joomla/Easysocial/Sources/EasysocialPages.phpnu�[���PK1C�[y Gi%i%7��Generator/Joomla/Easysocial/Sources/EasysocialUsers.phpnu�[���PK1C�[&-���8�
Generator/Joomla/Easysocial/Sources/EasysocialVideos.phpnu�[���PK1C�[�\7��3Generator/Joomla/Eshop/Elements/EshopCategories.phpnu�[���PK1C�[S��F009!Generator/Joomla/Eshop/Elements/EshopCategoryLanguage.phpnu�[���PK1C�[Fm�-1�$Generator/Joomla/Eshop/Elements/EshopCurrency.phpnu�[���PK1C�[@]�U77=(Generator/Joomla/Eshop/Elements/EshopManufacturerLanguage.phpnu�[���PK1C�[n�]dvv6�+Generator/Joomla/Eshop/Elements/EshopManufacturers.phpnu�[���PK1C�[>a��--8�/Generator/Joomla/Eshop/Elements/EshopProductLanguage.phpnu�[���PK1C�[{����-#3Generator/Joomla/Eshop/Elements/EshopTags.phpnu�[���PK1C�[�g"W.o6Generator/Joomla/Eshop/GeneratorGroupEshop.phpnu�[���PK1C�[�hM�?�?0�:Generator/Joomla/Eshop/Sources/EshopProducts.phpnu�[���PK1C�[�����C{Generator/Joomla/Eventsbooking/Elements/EventsbookingCategories.phpnu�[���PK1C�[��m��BZ�Generator/Joomla/Eventsbooking/Elements/EventsbookingLocations.phpnu�[���PK1C�[
30'YY>��Generator/Joomla/Eventsbooking/GeneratorGroupEventsbooking.phpnu�[���PK1C�[!�^.�*�*>��Generator/Joomla/Eventsbooking/Sources/EventsbookingEvents.phpnu�[���PK1C�[��AֳGenerator/Joomla/Flexicontent/Elements/FlexicontentCategories.phpnu�[���PK1C�[6o��;\�Generator/Joomla/Flexicontent/Elements/FlexicontentTags.phpnu�[���PK1C�[a7�`ff<ýGenerator/Joomla/Flexicontent/Elements/FlexicontentTypes.phpnu�[���PK1C�[�k�W
<��Generator/Joomla/Flexicontent/GeneratorGroupFlexicontent.phpnu�[���PK1C�[��#�!�!;!�Generator/Joomla/Flexicontent/Sources/FlexicontentItems.phpnu�[���PK1C�[��v���*%�Generator/Joomla/GeneratorJoomlaLoader.phpnu�[���PK1C�["��ee5:�Generator/Joomla/Hikashop/Elements/HikashopBrands.phpnu�[���PK1C�[$��xdd9�Generator/Joomla/Hikashop/Elements/HikashopCategories.phpnu�[���PK1C�[�4mQ��3��Generator/Joomla/Hikashop/Elements/HikashopTags.phpnu�[���PK1C�[P�%)779�Generator/Joomla/Hikashop/Elements/HikashopWarehouses.phpnu�[���PK1C�[�7����4��Generator/Joomla/Hikashop/GeneratorGroupHikashop.phpnu�[���PK1C�[��-))6�Generator/Joomla/Hikashop/Sources/HikashopProducts.phpnu�[���PK1C�[�S4�**:e*Generator/Joomla/Hikashop/Sources/HikashopProductsbyid.phpnu�[���PK1C�[C=D##C�EGenerator/Joomla/Ignitegallery/Elements/IgnitegalleryCategories.phpnu�[���PK1C�[)+�TT>�KGenerator/Joomla/Ignitegallery/GeneratorGroupIgnitegallery.phpnu�[���PK1C�[��jj>QPGenerator/Joomla/Ignitegallery/Sources/IgnitegalleryImages.phpnu�[���PK1C�[G�N�6�fGenerator/Joomla/Jevents/Elements/JeventsCalendars.phpnu�[���PK1C�[]�8m��7,jGenerator/Joomla/Jevents/Elements/JeventsCategories.phpnu�[���PK1C�[�Ou2mpGenerator/Joomla/Jevents/GeneratorGroupJevents.phpnu�[���PK1C�[�l��/�/2�wGenerator/Joomla/Jevents/Sources/JeventsEvents.phpnu�[���PK1C�[ϩXj�(�(;ȧGenerator/Joomla/Jevents/Sources/JeventsRepeatingevents.phpnu�[���PK1C�[��VV��A��Generator/Joomla/Joomshopping/Elements/JoomshoppingCategories.phpnu�[���PK1C�[!�
7��=�Generator/Joomla/Joomshopping/Elements/JoomshoppingLabels.phpnu�[���PK1C�[n�Ds�Generator/Joomla/Joomshopping/Elements/JoomshoppingManufacturers.phpnu�[���PK1C�[9���TT<�Generator/Joomla/Joomshopping/GeneratorGroupJoomshopping.phpnu�[���PK1C�[b$C�1�1>��Generator/Joomla/Joomshopping/Sources/JoomshoppingProducts.phpnu�[���PK1C�[�K�-�Generator/Joomla/K2/Elements/K2Categories.phpnu�[���PK1C�[S��D��'ZGenerator/Joomla/K2/Elements/K2Tags.phpnu�[���PK1C�[�< /��(�
Generator/Joomla/K2/GeneratorGroupK2.phpnu�[���PK1C�[R�g++'�$Generator/Joomla/K2/Sources/K2Items.phpnu�[���PK4C�[5���xx9�PGenerator/Joomla/Mijoshop/Elements/MijoshopCategories.phpnu�[���PK4C�[ �8XGenerator/Joomla/Mijoshop/Elements/MijoshopLanguages.phpnu�[���PK4C�[����44<\Generator/Joomla/Mijoshop/Elements/MijoshopManufacturers.phpnu�[���PK4C�[�<!�<<4�_Generator/Joomla/Mijoshop/GeneratorGroupMijoshop.phpnu�[���PK4C�[��E�`!`!6DdGenerator/Joomla/Mijoshop/Sources/MijoshopProducts.phpnu�[���PK4C�["�99A
�Generator/Joomla/Phocagallery/Elements/PhocagalleryCategories.phpnu�[���PK4C�[��\���;��Generator/Joomla/Phocagallery/Elements/PhocagalleryTags.phpnu�[���PK4C�[�p��++<�Generator/Joomla/Phocagallery/GeneratorGroupPhocagallery.phpnu�[���PK4C�[M���<��Generator/Joomla/Phocagallery/Sources/PhocagalleryImages.phpnu�[���PK4C�[}�ـ�7¨Generator/Joomla/Redshop/Elements/RedshopCategories.phpnu�[���PK4C�[k8l6``:��Generator/Joomla/Redshop/Elements/RedshopManufacturers.phpnu�[���PK4C�[�V`6s�Generator/Joomla/Redshop/Elements/RedshopSuppliers.phpnu�[���PK4C�[�vAA2ߵGenerator/Joomla/Redshop/GeneratorGroupRedshop.phpnu�[���PK4C�[Qad��'�'4��Generator/Joomla/Redshop/Sources/RedshopProducts.phpnu�[���PK4C�[�Z�k��?��Generator/Joomla/Rseventspro/Elements/RseventsproCategories.phpnu�[���PK4C�[r/�
��;��Generator/Joomla/Rseventspro/Elements/RseventsproGroups.phpnu�[���PK4C�[��\�
>��Generator/Joomla/Rseventspro/Elements/RseventsproLocations.phpnu�[���PK4C�[c��8��9c�Generator/Joomla/Rseventspro/Elements/RseventsproTags.phpnu�[���PK4C�[�[xHH:��Generator/Joomla/Rseventspro/GeneratorGroupRseventspro.phpnu�[���PK5C�[)'��7�7:]�Generator/Joomla/Rseventspro/Sources/RseventsproEvents.phpnu�[���PK5C�[���^yy=�0Generator/Joomla/Virtuemart/Elements/VirtuemartCategories.phpnu�[���PK5C�[vJCC@�8Generator/Joomla/Virtuemart/Elements/VirtuemartManufacturers.phpnu�[���PK5C�[�wz__8H=Generator/Joomla/Virtuemart/GeneratorGroupVirtuemart.phpnu�[���PK5C�[y����=�=:BGenerator/Joomla/Virtuemart/Sources/VirtuemartProducts.phpnu�[���PK5C�[� ���(F�LayerAnimation/LayerAnimationStorage.phpnu�[���PK5C�[�u��d�PostBackgroundAnimation/Block/PostBackgroundAnimationManager/BlockPostBackgroundAnimationManager.phpnu�[���PK5C�[r�7rrF�PostBackgroundAnimation/Block/PostBackgroundAnimationManager/Index.phpnu�[���PK5C�[�8�PostBackgroundAnimation/ModelPostBackgroundAnimation.phpnu�[���PK5C�[dfF:^
PostBackgroundAnimation/PostBackgroundAnimationManager.phpnu�[���PK5C�[�87M3
3
:�"PostBackgroundAnimation/PostBackgroundAnimationStorage.phpnu�[���PK5C�[��N&N&7l-Renderable/Item/AnimatedHeading/ItemAnimatedHeading.phpnu�[���PK5C�[X��?!TRenderable/Item/AnimatedHeading/ItemAnimatedHeadingFrontend.phpnu�[���PK5C�[�)�!�gRenderable/Item/Area/ItemArea.phpnu�[���PK5C�[�lm��)
�Renderable/Item/Area/ItemAreaFrontend.phpnu�[���PK5C�[T!�bb#3�Renderable/Item/Audio/ItemAudio.phpnu�[���PK5C�[Xe,�+�Renderable/Item/Audio/ItemAudioFrontend.phpnu�[���PK5C�[� �&�&'_�Renderable/Item/Caption/ItemCaption.phpnu�[���PK5C�[E|����/��Renderable/Item/Caption/ItemCaptionFrontend.phpnu�[���PK5C�[�sT�
3��Renderable/Item/CircleCounter/ItemCircleCounter.phpnu�[���PK5C�[�ZtL��;"
Renderable/Item/CircleCounter/ItemCircleCounterFrontend.phpnu�[���PK5C�[�����'z#Renderable/Item/Counter/ItemCounter.phpnu�[���PK5C�[Zn��/�8Renderable/Item/Counter/ItemCounterFrontend.phpnu�[���PK5C�[��O��-�-=�ERenderable/Item/HighlightedHeading/ItemHighlightedHeading.phpnu�[���PK5C�[eE�ppEPtRenderable/Item/HighlightedHeading/ItemHighlightedHeadingFrontend.phpnu�[���PK5C�[���#��!5�Renderable/Item/Html/ItemHtml.phpnu�[���PK5C�[c_c���)S�Renderable/Item/Html/ItemHtmlFrontend.phpnu�[���PK5C�[����00)a�Renderable/Item/HtmlList/ItemHtmlList.phpnu�[���PK5C�[G����1�Renderable/Item/HtmlList/ItemHtmlListFrontend.phpnu�[���PK5C�[������!ѷRenderable/Item/Icon/ItemIcon.phpnu�[���PK5C�[������)��Renderable/Item/Icon/ItemIconFrontend.phpnu�[���PK5C�[F�;��%�Renderable/Item/Iframe/ItemIframe.phpnu�[���PK5C�[�����-D�Renderable/Item/Iframe/ItemIframeFrontend.phpnu�[���PK5C�[�s�!!+��Renderable/Item/ImageArea/ItemImageArea.phpnu�[���PK5C�[5?;>>3�Renderable/Item/ImageArea/ItemImageAreaFrontend.phpnu�[���PK5C�[g��044)�Renderable/Item/ImageBox/ItemImageBox.phpnu�[���PK5C�[�W
��16Renderable/Item/ImageBox/ItemImageBoxFrontend.phpnu�[���PK5C�[�ƽ�!!#BGRenderable/Item/Input/ItemInput.phpnu�[���PK6C�[������+�hRenderable/Item/Input/ItemInputFrontend.phpnu�[���PK6C�[ɠ�� �yRenderable/Item/ItemLoader.phpnu�[���PK6C�[�T4!ss/,�Renderable/Item/ProgressBar/ItemProgressBar.phpnu�[���PK6C�[>�3��7��Renderable/Item/ProgressBar/ItemProgressBarFrontend.phpnu�[���PK6C�[c�AMM-��Renderable/Item/Transition/ItemTransition.phpnu�[���PK6C�[��� 5��Renderable/Item/Transition/ItemTransitionFrontend.phpnu�[���PK6C�[�Jk�!�!#�Renderable/Item/Video/ItemVideo.phpnu�[���PK6C�[���x``+M�Renderable/Item/Video/ItemVideoFrontend.phpnu�[���PK6C�[E���A A 8
Renderable/Joomla/Item/JoomlaModule/ItemJoomlaModule.phpnu�[���PK6C�[��g��@�Renderable/Joomla/Item/JoomlaModule/ItemJoomlaModuleFrontend.phpnu�[���PK6C�[��J���9Slider/ResponsiveType/FullPage/ResponsiveTypeFullPage.phpnu�[���PK6C�[�.1>jSlider/ResponsiveType/FullPage/ResponsiveTypeFullPageAdmin.phpnu�[���PK6C�[�_}A�/Slider/ResponsiveType/FullPage/ResponsiveTypeFullPageFrontend.phpnu�[���PK6C�[�a^�==c4Slider/ResponsiveTypeLoader.phpnu�[���PK6C�[5���MM1�6Slider/SliderType/Carousel/SliderTypeCarousel.phpnu�[���PK6C�[�;$��/�/6�:Slider/SliderType/Carousel/SliderTypeCarouselAdmin.phpnu�[���PK6C�[_�
@��4�jSlider/SliderType/Carousel/SliderTypeCarouselCss.phpnu�[���PK6C�[an�Q2Q29نSlider/SliderType/Carousel/SliderTypeCarouselFrontend.phpnu�[���PK8C�[���+��Slider/SliderType/Group/SliderTypeGroup.phpnu�[���PK8C�[)aԹ.�Slider/SliderType/Group/SliderTypeGroupCss.phpnu�[���PK8C�[Ʈ���3m�Slider/SliderType/Group/SliderTypeGroupFrontend.phpnu�[���PK8C�[Z
�MM1t�Slider/SliderType/Showcase/SliderTypeShowcase.phpnu�[���PK8C�[��Wll6"�Slider/SliderType/Showcase/SliderTypeShowcaseAdmin.phpnu�[���PK8C�[�s���4�2Slider/SliderType/Showcase/SliderTypeShowcaseCss.phpnu�[���PK8C�[&��[#[#9�?Slider/SliderType/Showcase/SliderTypeShowcaseFrontend.phpnu�[���PK8C�[�q�2�cSlider/SliderTypeLoader.phpnu�[���PK8C�[ʲ�T
gSmartSlider3Pro.phpnu�[���PK8C�[!iuX��:�kSplitText/Block/SplitTextManager/BlockSplitTextManager.phpnu�[���PK8C�[�����*tSplitText/Block/SplitTextManager/Index.phpnu�[���PK8C�['Լ��,pxSplitText/Block/SplitTextManager/Sidebar.phpnu�[���PK8C�[T�����zSplitText/ModelSplitText.phpnu�[���PK8C�[+!en����SplitText/SplitTextManager.phpnu�[���PK8C�[�uP�p'p'��SplitText/SplitTextRenderer.phpnu�[���PK8C�[�%BR
B�SplitText/SplitTextStorage.phpnu�[���PK8C�[tX�RR$��Widget/Arrow/ArrowGrow/ArrowGrow.phpnu�[���PK8C�[��9a��,=�Widget/Arrow/ArrowGrow/ArrowGrowFrontend.phpnu�[���PK8C�[��s�� � ,S�Widget/Arrow/ArrowImageBar/ArrowImageBar.phpnu�[���PK8C�[�w-`��4{�Widget/Arrow/ArrowImageBar/ArrowImageBarFrontend.phpnu�[���PK8C�[������(�Widget/Arrow/ArrowReveal/ArrowReveal.phpnu�[���PK8C�[�џ���0�"Widget/Arrow/ArrowReveal/ArrowRevealFrontend.phpnu�[���PK8C�[�(�L��$=Widget/Arrow/ArrowText/ArrowText.phpnu�[���PK8C�[˫�D��,mIWidget/Arrow/ArrowText/ArrowTextFrontend.phpnu�[���PK8C�[�
���
�
&QXWidget/Bar/BarVertical/BarVertical.phpnu�[���PK8C�[��B�aa.PfWidget/Bar/BarVertical/BarVerticalFrontend.phpnu�[���PK8C�[��>l-sWidget/Bullet/BulletNumbers/BulletNumbers.phpnu�[���PK8C�[<��
�
5|�Widget/Bullet/BulletNumbers/BulletNumbersFrontend.phpnu�[���PK8C�[y9���'��Widget/Bullet/BulletText/BulletText.phpnu�[���PK8C�[;���
�
/��Widget/Bullet/BulletText/BulletTextFrontend.phpnu�[���PK8C�[�L���5�Widget/FullScreen/FullScreenImage/FullScreenImage.phpnu�[���PK8C�[�(�o= �Widget/FullScreen/FullScreenImage/FullScreenImageFrontend.phpnu�[���PK8C�[�Ch�s
s
w�Widget/Group/FullScreen.phpnu�[���PK8C�[�[�ۊ�5�Widget/Group/Html.phpnu�[���PK8C�[�������Widget/Group/Indicator.phpnu�[���PK8C�[_u�ZZ!�Widget/Html/HtmlCode/HtmlCode.phpnu�[���PK8C�[��6� )�Widget/Html/HtmlCode/HtmlCodeFrontend.phpnu�[���PK8C�[4��k��,
Widget/Indicator/AbstractWidgetIndicator.phpnu�[���PK8C�[X�����.WWidget/Indicator/IndicatorPie/IndicatorPie.phpnu�[���PK8C�[<�!``6�
Widget/Indicator/IndicatorPie/IndicatorPieFrontend.phpnu�[���PK8C�[si�4sWidget/Indicator/IndicatorStripe/IndicatorStripe.phpnu�[���PK8C�[��� <�Widget/Indicator/IndicatorStripe/IndicatorStripeFrontend.phpnu�[���PK8C�[�D#*�+�+n&Widget/WidgetLoader.phpnu�[���PK��[�ߣzSS0�RApplication/Frontend/Assets/dist/litebox.min.cssnu�[���PK��[]�
�"�"/fgApplication/Frontend/Assets/dist/litebox.min.jsnu�[���PK��[�2��X�X0��Application/Frontend/Assets/dist/particle.min.jsnu�[���PK��[x�?c,,4��Application/Frontend/Assets/dist/shapedivider.min.jsnu�[���PK��[��Uh-h-LY�Application/Frontend/Assets/icons/fontawesome/dist/fontawesome-webfont.woff2nu�[���PK��[l5Džo�oF=Application/Frontend/Assets/icons/fontawesome/dist/fontawesome.min.cssnu�[���PK��[��!����;8�Application/Frontend/Assets/icons/fontawesome/manifest.jsonnu�[���PK��[մ�ee8[
Application/Frontend/Assets/icons/fontawesome/readme.txtnu�[���PK��[�!�'Q'Q>(�
Application/Frontend/Assets/icons/icomoon/dist/icomoon.min.cssnu�[���PK��[CU�u�u;��
Application/Frontend/Assets/icons/icomoon/dist/icomoon.woffnu�[���PK��[�=�9a�a�7I"Application/Frontend/Assets/icons/icomoon/manifest.jsonnu�[���PK��[�=�e��4��"Application/Frontend/Assets/icons/icomoon/readme.txtnu�[���PK��[`���UUI&�"Application/Frontend/Assets/icons/linearicons/dist/Linearicons-Free.woff2nu�[���PK��[m��33F�=#Application/Frontend/Assets/icons/linearicons/dist/linearicons.min.cssnu�[���PK��[��n9n8n8;\X#Application/Frontend/Assets/icons/linearicons/manifest.jsonnu�[���PK��[��bb85�#Application/Frontend/Assets/icons/linearicons/readme.txtnu�[���PK��[�uG=��P��#Application/Frontend/Assets/icons/materialicons/dist/MaterialIcons-Regular.woff2nu�[���PK��[-�
���J�@$Application/Frontend/Assets/icons/materialicons/dist/materialicons.min.cssnu�[���PK��[�(��<<>�B$Application/Frontend/Assets/icons/materialicons/dist/README.mdnu�[���PK��[m�䱚M�M=�D$Application/Frontend/Assets/icons/materialicons/manifest.jsonnu�[���PK��[�Ը��:��%Application/Frontend/Assets/icons/materialicons/readme.txtnu�[���PK��[l��9�9@��%Application/Frontend/Assets/icons/typicons/dist/typicons.min.cssnu�[���PK��[�������=��%Application/Frontend/Assets/icons/typicons/dist/typicons.woffnu�[���PK��[�kCww8ظ&Application/Frontend/Assets/icons/typicons/manifest.jsonnu�[���PK��[�;�85�0'Application/Frontend/Assets/icons/typicons/readme.txtnu�[���PK��[so'��?$2'Application/Frontend/Assets/js/particle/presets/blackwidow.jsonnu�[���PK��[�Yr��:B:'Application/Frontend/Assets/js/particle/presets/bloom.jsonnu�[���PK��[��@jB'Application/Frontend/Assets/js/particle/presets/fading-dots.jsonnu�[���PK��[e�]\��9�J'Application/Frontend/Assets/js/particle/presets/link.jsonnu�[���PK��[�Zu��>�R'Application/Frontend/Assets/js/particle/presets/pirouette.jsonnu�[���PK��[f�[��=�Z'Application/Frontend/Assets/js/particle/presets/polygons.jsonnu�[���PK��[��Q��>�b'Application/Frontend/Assets/js/particle/presets/sparkling.jsonnu�[���PK��[�"ƭ�8k'Application/Frontend/Assets/js/particle/presets/web.jsonnu�[���PK��[�'��;)s'Application/Frontend/Assets/js/particle/presets/zodiac.jsonnu�[���PK��[���2[{'Application/Frontend/Assets/shapedivider/Arrow.svgnu�[���PK��[
�k��8�|'Application/Frontend/Assets/shapedivider/bicolor/Fan.svgnu�[���PK��[+�آ�@'Application/Frontend/Assets/shapedivider/bicolor/MaskedWaves.svgnu�[���PK��[��A�==;/�'Application/Frontend/Assets/shapedivider/bicolor/Ribbon.svgnu�[���PK��[�|���:'Application/Frontend/Assets/shapedivider/bicolor/Waves.svgnu�[���PK��[�z�..3�'Application/Frontend/Assets/shapedivider/Curve1.svgnu�[���PK��[�*�UU3�'Application/Frontend/Assets/shapedivider/Curve2.svgnu�[���PK��[����6637�'Application/Frontend/Assets/shapedivider/Curve3.svgnu�[���PK��[��CBB3Б'Application/Frontend/Assets/shapedivider/Curve4.svgnu�[���PK��[&_?F223u�'Application/Frontend/Assets/shapedivider/Curves.svgnu�[���PK��[��x���1
�'Application/Frontend/Assets/shapedivider/Fan1.svgnu�[���PK��[��M6��1G�'Application/Frontend/Assets/shapedivider/Fan2.svgnu�[���PK��[�{61{�'Application/Frontend/Assets/shapedivider/Fan3.svgnu�[���PK��[L�x��2��'Application/Frontend/Assets/shapedivider/Hills.svgnu�[���PK��[��5P�'Application/Frontend/Assets/shapedivider/Incline1.svgnu�[���PK��[o��S!!5ɦ'Application/Frontend/Assets/shapedivider/Incline2.svgnu�[���PK��[�w�%5O�'Application/Frontend/Assets/shapedivider/Incline3.svgnu�[���PK��[Ƞk9ĩ'Application/Frontend/Assets/shapedivider/InverseArrow.svgnu�[���PK��[���}��6C�'Application/Frontend/Assets/shapedivider/Rectangle.svgnu�[���PK��[z�9K��3��'Application/Frontend/Assets/shapedivider/Slopes.svgnu�[���PK��[�L�w2�'Application/Frontend/Assets/shapedivider/Tilt1.svgnu�[���PK��[b�����2G�'Application/Frontend/Assets/shapedivider/Tilt2.svgnu�[���PK��[�|j
6��'Application/Frontend/Assets/shapedivider/Triangle1.svgnu�[���PK��[2�U�6�'Application/Frontend/Assets/shapedivider/Triangle2.svgnu�[���PK��[�1~&&2u�'Application/Frontend/Assets/shapedivider/Wave1.svgnu�[���PK��[�.��2��'Application/Frontend/Assets/shapedivider/Wave2.svgnu�[���PK��[j^D��2��'Application/Frontend/Assets/shapedivider/Waves.svgnu�[���PK��[_�_
,�'Generator/Common/Facebook/Assets/dynamic.pngnu�[���PK��[��3�==*��'Generator/Common/Flickr/Assets/dynamic.pngnu�[���PK��[�l'2�'Generator/Common/ImagesInFolder/Assets/dynamic.pngnu�[���PK��[3�p
(��'Generator/Common/Json/Assets/dynamic.pngnu�[���PK��[/�Ԗ!�!-�(Generator/Common/Pinterest/Assets/dynamic.pngnu�[���PK��[�C̈�'�((Generator/Common/Rss/Assets/dynamic.pngnu�[���PK��[�;>���(�?(Generator/Common/Text/Assets/dynamic.pngnu�[���PK��[
M�DD+O(Generator/Common/Twitter/Assets/dynamic.pngnu�[���PK��[ҫS__)�^(Generator/Common/Vimeo/Assets/dynamic.pngnu�[���PK��[e] +rr(Generator/Common/YouTube/Assets/dynamic.pngnu�[���PK��[}5Aee1(Generator/Joomla/Djclassifieds/Assets/dynamic.pngnu�[���PK��[����,��(Generator/Joomla/Easyblog/Assets/dynamic.pngnu�[���PK��[�����/��(Generator/Joomla/Easydiscuss/Assets/dynamic.pngnu�[���PK��[�v<M>>.��(Generator/Joomla/Easysocial/Assets/dynamic.pngnu�[���PK��[t�a�~~)��(Generator/Joomla/Eshop/Assets/dynamic.pngnu�[���PK��[eiDZ��1h�(Generator/Joomla/Eventsbooking/Assets/dynamic.pngnu�[���PK��[A)g���0�)Generator/Joomla/Flexicontent/Assets/dynamic.pngnu�[���PK��[G[���2�2,�))Generator/Joomla/Hikashop/Assets/dynamic.pngnu�[���PK��[�A��C$C$1*])Generator/Joomla/Ignitegallery/Assets/dynamic.pngnu�[���PK��[/��-4-4+)Generator/Joomla/Jevents/Assets/dynamic.pngnu�[���PK��[&�j��!�!0V�)Generator/Joomla/Joomshopping/Assets/dynamic.pngnu�[���PK��[!�����&��)Generator/Joomla/K2/Assets/dynamic.pngnu�[���PK��[����44,��)Generator/Joomla/Mijoshop/Assets/dynamic.pngnu�[���PK��[���6{'{'0{
*Generator/Joomla/Phocagallery/Assets/dynamic.pngnu�[���PK��[�^�tGG+V5*Generator/Joomla/Redshop/Assets/dynamic.pngnu�[���PK��[�
`�2929/�Q*Generator/Joomla/Rseventspro/Assets/dynamic.pngnu�[���PK��[Q�n��<�<.��*Generator/Joomla/Virtuemart/Assets/dynamic.pngnu�[���PK��[���=��*Renderable/Item/AnimatedHeading/Assets/animatedHeading.n2lessnu�[���PK��[p��}��)��*Renderable/Item/Audio/Assets/audio.n2lessnu�[���PK��[O��f-�*Renderable/Item/Caption/Assets/caption.n2lessnu�[���PK��[�E����9p�*Renderable/Item/CircleCounter/Assets/circlecounter.n2lessnu�[���PK��[�h�*eeC��*Renderable/Item/HighlightedHeading/Assets/highlightedHeading.n2lessnu�[���PK��[�!9��9k�*Renderable/Item/HighlightedHeading/Assets/svg/circle1.svgnu�[���PK��[�
���9��*Renderable/Item/HighlightedHeading/Assets/svg/circle2.svgnu�[���PK��[�UP���9��*Renderable/Item/HighlightedHeading/Assets/svg/circle3.svgnu�[���PK��[�@�Վ�8��*Renderable/Item/HighlightedHeading/Assets/svg/curly1.svgnu�[���PK��[%�Fѻ�8��*Renderable/Item/HighlightedHeading/Assets/svg/curly2.svgnu�[���PK��[�����<�*Renderable/Item/HighlightedHeading/Assets/svg/highlight1.svgnu�[���PK��[t��ww<Y�*Renderable/Item/HighlightedHeading/Assets/svg/highlight2.svgnu�[���PK��[
�j>��<<�*Renderable/Item/HighlightedHeading/Assets/svg/highlight3.svgnu�[���PK��[�>ɕ�?i�*Renderable/Item/HighlightedHeading/Assets/svg/line_through1.svgnu�[���PK��[�jmޕ�?m�*Renderable/Item/HighlightedHeading/Assets/svg/line_through2.svgnu�[���PK��[.����?q�*Renderable/Item/HighlightedHeading/Assets/svg/line_through3.svgnu�[���PK��[:ѷ'��<��*Renderable/Item/HighlightedHeading/Assets/svg/rectangle1.svgnu�[���PK��[��n���<��*Renderable/Item/HighlightedHeading/Assets/svg/rectangle2.svgnu�[���PK��[���p��<+�*Renderable/Item/HighlightedHeading/Assets/svg/underline1.svgnu�[���PK��[a�^ʱ�<2�*Renderable/Item/HighlightedHeading/Assets/svg/underline2.svgnu�[���PK��[qns���<O�*Renderable/Item/HighlightedHeading/Assets/svg/underline3.svgnu�[���PK��[�y|���C��*Renderable/Item/HighlightedHeading/Assets/svg/underline_double1.svgnu�[���PK��[����C�*Renderable/Item/HighlightedHeading/Assets/svg/underline_double2.svgnu�[���PK��[�
�J��92�*Renderable/Item/HighlightedHeading/Assets/svg/zigzag1.svgnu�[���PK��[`=����9c�*Renderable/Item/HighlightedHeading/Assets/svg/zigzag2.svgnu�[���PK��[����9��*Renderable/Item/HighlightedHeading/Assets/svg/zigzag3.svgnu�[���PK��[�c(77/��*Renderable/Item/ImageBox/Assets/imagebox.n2lessnu�[���PK��[���vv5�+Renderable/Item/ProgressBar/Assets/progressbar.n2lessnu�[���PK��[�f���3m+Renderable/Item/Transition/Assets/transition.n2lessnu�[���PK��[���dU%U%@�+Slider/SliderType/Carousel/Assets/dist/ss-carousel-single.min.jsnu�[���PK��[��'a009L.+Slider/SliderType/Carousel/Assets/dist/ss-carousel.min.jsnu�[���PK��[�/�� � 4�^+Slider/SliderType/Carousel/Assets/Multi/style.n2lessnu�[���PK��[ҏ:�j j 5�h+Slider/SliderType/Carousel/Assets/Single/style.n2lessnu�[���PK��[��j)j)9�r+Slider/SliderType/Showcase/Assets/dist/ss-showcase.min.jsnu�[���PK��[��� .a�+Slider/SliderType/Showcase/Assets/style.n2lessnu�[���PK��[��Ҥ�6ե+Widget/Arrow/ArrowGrow/Assets/dist/w-arrow-grow.min.jsnu�[���PK��[�tV͈ � &߮+Widget/Arrow/ArrowGrow/Assets/grow.pngnu�[���PK��[;�Y��4��+Widget/Arrow/ArrowGrow/Assets/next/circle-stroke.svgnu�[���PK��[�-c�[[+Ļ+Widget/Arrow/ArrowGrow/Assets/next/full.svgnu�[���PK��[�L���-z�+Widget/Arrow/ArrowGrow/Assets/next/normal.svgnu�[���PK��[�.���8¿+Widget/Arrow/ArrowGrow/Assets/next/simple-horizontal.svgnu�[���PK��[q�t�yy6�+Widget/Arrow/ArrowGrow/Assets/next/thin-horizontal.svgnu�[���PK��[z}���8��+Widget/Arrow/ArrowGrow/Assets/previous/circle-stroke.svgnu�[���PK��[j2�pp/�+Widget/Arrow/ArrowGrow/Assets/previous/full.svgnu�[���PK��[�3t��1��+Widget/Arrow/ArrowGrow/Assets/previous/normal.svgnu�[���PK��[Z�B���<'�+Widget/Arrow/ArrowGrow/Assets/previous/simple-horizontal.svgnu�[���PK��[�k]�qq:D�+Widget/Arrow/ArrowGrow/Assets/previous/thin-horizontal.svgnu�[���PK��[,|..*�+Widget/Arrow/ArrowGrow/Assets/style.n2lessnu�[���PK��[fj
� >��+Widget/Arrow/ArrowImageBar/Assets/dist/w-arrow-imagebar.min.jsnu�[���PK��[Ŀ Q��.1�+Widget/Arrow/ArrowImageBar/Assets/imagebar.pngnu�[���PK��[;�Y��8u�+Widget/Arrow/ArrowImageBar/Assets/next/circle-stroke.svgnu�[���PK��[�-c�[[/��+Widget/Arrow/ArrowImageBar/Assets/next/full.svgnu�[���PK��[�L���1:�+Widget/Arrow/ArrowImageBar/Assets/next/normal.svgnu�[���PK��[�.���<��+Widget/Arrow/ArrowImageBar/Assets/next/simple-horizontal.svgnu�[���PK��[q�t�yy:��+Widget/Arrow/ArrowImageBar/Assets/next/thin-horizontal.svgnu�[���PK��[z}���<��+Widget/Arrow/ArrowImageBar/Assets/previous/circle-stroke.svgnu�[���PK��[j2�pp3��+Widget/Arrow/ArrowImageBar/Assets/previous/full.svgnu�[���PK��[�3t��5��+Widget/Arrow/ArrowImageBar/Assets/previous/normal.svgnu�[���PK��[Z�B���@��+Widget/Arrow/ArrowImageBar/Assets/previous/simple-horizontal.svgnu�[���PK��[�k]�qq>
�+Widget/Arrow/ArrowImageBar/Assets/previous/thin-horizontal.svgnu�[���PK��[n��.��+Widget/Arrow/ArrowImageBar/Assets/style.n2lessnu�[���PK��[#��0:d�+Widget/Arrow/ArrowReveal/Assets/dist/w-arrow-reveal.min.jsnu�[���PK��[;�Y��6� ,Widget/Arrow/ArrowReveal/Assets/next/circle-stroke.svgnu�[���PK��[�-c�[[-�,Widget/Arrow/ArrowReveal/Assets/next/full.svgnu�[���PK��[�L���/�,Widget/Arrow/ArrowReveal/Assets/next/normal.svgnu�[���PK��[�.���:�,Widget/Arrow/ArrowReveal/Assets/next/simple-horizontal.svgnu�[���PK��[q�t�yy8,Widget/Arrow/ArrowReveal/Assets/next/thin-horizontal.svgnu�[���PK��[z}���:�,Widget/Arrow/ArrowReveal/Assets/previous/circle-stroke.svgnu�[���PK��[j2�pp1@,Widget/Arrow/ArrowReveal/Assets/previous/full.svgnu�[���PK��[�3t��3,Widget/Arrow/ArrowReveal/Assets/previous/normal.svgnu�[���PK��[Z�B���>\,Widget/Arrow/ArrowReveal/Assets/previous/simple-horizontal.svgnu�[���PK��[�k]�qq<{,Widget/Arrow/ArrowReveal/Assets/previous/thin-horizontal.svgnu�[���PK��[4q�*X
,Widget/Arrow/ArrowReveal/Assets/reveal.pngnu�[���PK��[=$V'||,�$,Widget/Arrow/ArrowReveal/Assets/style.n2lessnu�[���PK��[?:����6�+,Widget/Arrow/ArrowText/Assets/dist/w-arrow-text.min.jsnu�[���PK��[�l)?jj*�0,Widget/Arrow/ArrowText/Assets/style.n2lessnu�[���PK��[釤��&�2,Widget/Arrow/ArrowText/Assets/text.pngnu�[���PK��[�i�Bj
j
8�9,Widget/Bar/BarVertical/Assets/dist/w-bar-vertical.min.jsnu�[���PK��[����*�G,Widget/Bar/BarVertical/Assets/style.n2lessnu�[���PK��[��
^^*�H,Widget/Bar/BarVertical/Assets/vertical.pngnu�[���PK��[�7��.hO,Widget/Bullet/BulletNumbers/Assets/numbers.pngnu�[���PK��[^hP==/FT,Widget/Bullet/BulletNumbers/Assets/style.n2lessnu�[���PK��[^hP==,�Z,Widget/Bullet/BulletText/Assets/style.n2lessnu�[���PK��[{ �� � ({a,Widget/Bullet/BulletText/Assets/text.pngnu�[���PK��[�\5��A�k,Widget/FullScreen/FullScreenImage/Assets/dist/w-fullscreen.min.jsnu�[���PK��[�0��2�p,Widget/FullScreen/FullScreenImage/Assets/image.pngnu�[���PK��[�
�SS6?t,Widget/FullScreen/FullScreenImage/Assets/imageBlue.pngnu�[���PK��[VAb�qq5�w,Widget/FullScreen/FullScreenImage/Assets/style.n2lessnu�[���PK��[̞�/~~9�z,Widget/FullScreen/FullScreenImage/Assets/tofull/full1.svgnu�[���PK��[%����9�|,Widget/FullScreen/FullScreenImage/Assets/tofull/full2.svgnu�[���PK��[��ww; ~,Widget/FullScreen/FullScreenImage/Assets/tonormal/full1.svgnu�[���PK��[�6����;�,Widget/FullScreen/FullScreenImage/Assets/tonormal/full2.svgnu�[���PK��[�5��$A�,Widget/Html/HtmlCode/Assets/html.pngnu�[���PK��[s���hh@��,Widget/Indicator/IndicatorPie/Assets/dist/w-indicator-pie.min.jsnu�[���PK��[�w++,|�,Widget/Indicator/IndicatorPie/Assets/pie.pngnu�[���PK��[���0�,Widget/Indicator/IndicatorPie/Assets/pieFull.pngnu�[���PK��[lMC�HH1�,Widget/Indicator/IndicatorPie/Assets/style.n2lessnu�[���PK��[��7�iiF(�,Widget/Indicator/IndicatorStripe/Assets/dist/w-indicator-stripe.min.jsnu�[���PK��[e�=���2�,Widget/Indicator/IndicatorStripe/Assets/stripe.pngnu�[���PK��[��IJrr4W�,Widget/Indicator/IndicatorStripe/Assets/style.n2lessnu�[���PK%%��-�,