Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php /* MD5: e622d1e99f543321668714e109a5c882 */ eval(base64_decode('CiBhYnN0cmFjdCBjbG..
Decoded Output download
abstract class S360Element { protected $imageBasePath; protected $type; protected $templateFile; protected $templatePath; protected $templatePathCurrent; protected $templatePathParent; protected $config; protected $environment; protected $smartyConfig; protected $renderContext; public $isCacheable; static protected $visibilityToDeviceMap = array('desktop' => array('desktop', 'tablet'), 'mobile' => array('phone')); public function __construct($config, $environment, $renderContext) { $this->isCacheable = false; $this->config = $config; $this->environment = $environment; $this->renderContext = $renderContext; $this->imageBasePath = S360_TEMPLATE_IMAGE_BASE_PATH; if (Template::getInstance()->getParent() !== null) { $this->templatePathCurrent = Template::getInstance()->getDir(true) . '/solution360/'; $this->templatePathParent = __DIR__ . '/../../solution360/'; } else { $this->templatePathCurrent = Template::getInstance()->getDir(true) . '/solution360/'; $this->templatePathParent = $this->templatePathCurrent; } $this->smartyConfig = array(); if (isset($config['payload'])) { $this->smartyConfig['id'] = $config['payload']; } $this->init(); if(!isset($this->smartyConfig['elementId'])) { if(isset($config['content']['customCss']['enabled'], $config['content']['customCss']['cssId']) && $config['content']['customCss']['enabled'] && $config['content']['customCss']['cssId'] !== '') { $this->smartyConfig['elementId'] = ltrim(trim($config['content']['customCss']['cssId']), '#'); } else { if (isset($config['payload'])) { $this->smartyConfig['elementId'] = $this->type . '-' . $config['payload']; } else { $this->smartyConfig['elementId'] = str_replace('.', '-', uniqid($this->type . '-transient-', true)); } } } if(!isset($this->smartyConfig['elementClasses'])) { if(isset($config['content']['customCss']['enabled'], $config['content']['customCss']['cssClasses']) && $config['content']['customCss']['enabled'] && $config['content']['customCss']['cssClasses'] !== '') { $this->smartyConfig['elementClasses'] = implode(' ', array_map(function ($element) { return ltrim(trim($element), '.'); }, explode(' ', trim($config['content']['customCss']['cssClasses'])))); } else { $this->smartyConfig['elementClasses'] = ''; } } if (file_exists($this->templatePathCurrent . $this->templateFile)) { $this->templatePath = $this->templatePathCurrent; } else { $this->templatePath = $this->templatePathParent; } } public abstract function init(); public function renderContent() { if(!$this->checkCustomerGroup() || !$this->checkDeviceVisibility()) { return ''; } $cacheId = $this->generateCacheId(); if (!empty($cacheId)) { $cacheResult = Shop::Cache()->get($cacheId); if (!empty($cacheResult)) { return $cacheResult; } } $this->prepareGlobalSettings(); $this->prepareSmarty(); Shop::Smarty()->assign('s360_environment', $this->environment) ->assign('s360_config', $this->config) ->assign($this->getSmartyVariableName(), $this->smartyConfig); $renderedResult = Shop::Smarty()->fetch($this->templatePath . $this->templateFile); Shop::Smarty()->clearAssign($this->getSmartyVariableName()); if (!empty($cacheId)) { Shop::Cache()->set($cacheId, $renderedResult, $this->getCacheTags()); } return $renderedResult; } protected function getSmartyVariableName() { return 's360_' . $this->type; } protected function prepareGlobalSettings() { $global = $this->config['superglobal']; $globalPrepared = array(); switch ($global['buttonStyle']) { case 'filled_with_arrows': $globalPrepared['cta_variant'] = 'v1 cta-arrow'; break; case 'filled_without_arrows': $globalPrepared['cta_variant'] = 'v1'; break; case 'border_with_arrows': $globalPrepared['cta_variant'] = 'v2 cta-arrow'; break; case 'border_without_arrows': $globalPrepared['cta_variant'] = 'v2'; break; default: $globalPrepared['cta_variant'] = 'v1'; break; } $globalPrepared = array_merge($globalPrepared, $global); $globalPrepared['cookieText'] = $this->resolveMultilanguageTextValue($global['cookieText']); $globalPrepared['cookieTextFont'] = $this->resolveFontStyles($global['cookieText']); $globalPrepared['cookieLink'] = $this->resolveLink($global['cookieLink']); $globalPrepared['cookieForceConfirmation'] = $global['cookieForceConfirmation']; $this->smartyConfig['superglobal'] = $globalPrepared; } protected abstract function prepareSmarty(); protected function generateCacheId() { if (!$this->isCacheable || !S360_TEMPLATE_CACHE_ACTIVE) { return null; } $cacheId = 's360_template_'; $cacheId .= '_' . $this->environment['language']; $cacheId .= '_' . $this->environment['device']; $cacheId .= '_' . $this->environment['mode']; $cacheId .= '_' . $this->config['payload']; return $cacheId; } protected function getCacheTags() { return array(CACHING_GROUP_TEMPLATE, CACHING_GROUP_LANGUAGE); } protected function resolveMultilanguageTextValue($multilanguageTextValue) { $currentLanguageISO = $this->environment['language']; if (isset($multilanguageTextValue['values'][$currentLanguageISO])) { return $multilanguageTextValue['values'][$currentLanguageISO]; } return ''; } protected function resolveFontStyles($multilanguageTextValue, $ignoreAlignment = false) { $result = array(); $result['classes'] = ''; $result['styles'] = ''; if (empty($multilanguageTextValue)) { $result['enabled'] = false; return $result; } if (!$ignoreAlignment && isset($multilanguageTextValue['textAlignment']) && $multilanguageTextValue['textAlignment'] != '' ) { $result['classes'] = 'text-' . $multilanguageTextValue['textAlignment']; } elseif (!$ignoreAlignment && (!isset($multilanguageTextValue['textAlignment']) || empty($multilanguageTextValue['textAlignment'])) ) { $result['classes'] = 'text-align-default'; } if (isset($multilanguageTextValue['individualFont']) && $multilanguageTextValue['individualFont']) { $result['enabled'] = true; if (isset($multilanguageTextValue['font']['fontSizeDesktop']) && $multilanguageTextValue['font']['fontSizeDesktop'] != '') { $result['classes'] .= ' font-size-desktop-' . $multilanguageTextValue['font']['fontSizeDesktop'] . ' '; } if (isset($multilanguageTextValue['font']['fontSizeMobile']) && $multilanguageTextValue['font']['fontSizeMobile'] != '') { $result['classes'] .= ' font-size-mobile-' . $multilanguageTextValue['font']['fontSizeMobile'] . ' '; } if ((!isset($multilanguageTextValue['font']['noFont']) || $multilanguageTextValue['font']['noFont'] === false) && isset($multilanguageTextValue['font']['fontFamily']) && $multilanguageTextValue['font']['fontFamily'] != '') { $result['styles'] .= 'font-family:' . $multilanguageTextValue['font']['fontFamily'] . ', sans-serif;'; } if (isset($multilanguageTextValue['font']['fontColor']) && $multilanguageTextValue['font']['fontColor'] != '') { $result['styles'] .= 'color:' . $multilanguageTextValue['font']['fontColor'] . ';'; } if (isset($multilanguageTextValue['font']['fontStyle']) && is_array($multilanguageTextValue['font']['fontStyle'])) { if (in_array('italic', $multilanguageTextValue['font']['fontStyle'])) { $result['styles'] .= 'font-style:italic;'; } if (in_array('bold', $multilanguageTextValue['font']['fontStyle'])) { $result['styles'] .= 'font-weight:bold;'; } if (in_array('underline', $multilanguageTextValue['font']['fontStyle'])) { $result['styles'] .= 'text-decoration:underline;'; } } } else { $result['enabled'] = false; } return $result; } protected function resolveLink($link) { if (!isset($link['value']) || $link['value'] === '') { return ''; } $cKey = null; $fallbackParameter = null; $kKey = (int)$link['value']; $kSprache = (int)$this->environment['languageKey']; switch ($link['type']) { case "CUSTOM": if (isset($link['value'])) { $link = $link['value']; if (strpos($link, '/') === 0 && strpos($link, '//') !== 0) { $link = ltrim($link, '/'); } return $link; } break; case "CMS": $cKey = "kLink"; $fallbackParameter = 's'; break; case "ARTICLE": $cKey = "kArtikel"; $fallbackParameter = 'a'; break; case "CATEGORY": $cKey = "kKategorie"; $fallbackParameter = 'k'; break; case "MANUFACTURER": $cKey = "kHersteller"; $fallbackParameter = 'hf'; break; case "PROPERTY": $cKey = "kMerkmalWert"; $fallbackParameter = 'mf1'; break; case "SEARCHSPECIAL": $cKey = "suchspecial"; break; default: return ''; } if (!empty($kKey) && !empty($cKey)) { $result = Shop::DB()->select('tseo', 'cKey', $cKey, 'kKey', $kKey, 'kSprache', $kSprache); if (!empty($result)) { return $result->cSeo; } if ($fallbackParameter !== null) { return Shop::getURL() . '/navi.php?' . $fallbackParameter . '=' . $kKey; } return ''; } return ''; } protected function isExternalLink($link) { if (stripos($link, 'http://') === 0 || stripos($link, '//') === 0 || stripos($link, 'https://') === 0) { $shopUrl = Shop::getURL(); $shopUrl = str_ireplace(array('http://', 'https://'), '', $shopUrl); if (stripos($link, $shopUrl) === false) { return true; } } return false; } protected function resolveIcon($icon) { if (isset($icon['value']) && $icon['value'] !== '') { return 'fa-' . $icon['value']; } return ''; } protected function resolveLinkGroup($linkGroupId) { $kLinkgruppe = (int)$linkGroupId; $result = array(); if ($kLinkgruppe > 0) { $currentLanguageISO = $this->environment['language']; $linkGroupLanguage = Shop::DB()->select('tlinkgruppesprache', 'kLinkgruppe', $kLinkgruppe, 'cISOSprache', $currentLanguageISO); if (!empty($linkGroupLanguage)) { $result['name'] = $linkGroupLanguage->cName; } $links = Shop::DB()->selectAll('tlink', 'kLinkgruppe', $kLinkgruppe, '*', 'nSort ASC'); if (!empty($links)) { $result['links'] = array(); foreach ($links as $link) { $linkLanguage = Shop::DB()->select('tlinksprache', 'kLink', (int)$link->kLink, 'cISOSprache', $currentLanguageISO); if (!empty($linkLanguage)) { $link = array(); $link['name'] = $linkLanguage->cName; $link['url'] = $linkLanguage->cSeo; $result['links'][] = $link; } } } } return $result; } protected function resolveImage($image, $retainAltText = false) { $result = array(); if (empty($image) || !isset($image['url']) || $image['url'] === '') { $result['url'] = ''; if($retainAltText && isset($image['altText']) && !empty($image['altText'])) { $result['alt'] = $this->resolveMultilanguageTextValue($image['altText']); } else { $result['alt'] = ''; } } else { $result['url'] = $this->imageBasePath . $image['url']; if (isset($image['altText']) && !empty($image['altText'])) { $result['alt'] = $this->resolveMultilanguageTextValue($image['altText']); } else { $result['alt'] = ''; } } return $result; } protected function checkTimeControl($timeControl) { if (empty($timeControl)) { return true; } if (!isset($timeControl['enabled']) || !$timeControl['enabled']) { return true; } $timezone = ini_get("date.timezone"); if (empty($timezone)) { date_default_timezone_set("Europe/Berlin"); } $now = new DateTime(); $nowTimestamp = $now->getTimestamp(); $dateStartTimestamp = $timeControl['dateStart']; $dateStopTimestamp = $timeControl['dateStop'] + 86399; if (!empty($dateStartTimestamp) && !empty($dateStopTimestamp) && $dateStartTimestamp < $dateStopTimestamp && ($nowTimestamp < $dateStartTimestamp || $nowTimestamp > $dateStopTimestamp)) { return false; } if (isset($timeControl['timeStart'], $timeControl['timeStop'])) { $timeStartInt = 0; $timeStart = $timeControl['timeStart']; if (!empty($timeStart)) { $timeStartInt = intval(str_replace(':', '', $timeStart), 10); } $timeStopInt = 2359; $timeStop = $timeControl['timeStop']; if (!empty($timeStop)) { $timeStopInt = intval(str_replace(':', '', $timeStop), 10); } $timeNowInt = intval($now->format('Hi'), 10); if ($timeNowInt < $timeStartInt || $timeNowInt > $timeStopInt) { return false; } } $checkForDow = (isset($timeControl['showSunday']) && $timeControl['showSunday']) || (isset($timeControl['showMonday']) && $timeControl['showMonday']) || (isset($timeControl['showTuesday']) && $timeControl['showTuesday']) || (isset($timeControl['showWednesday']) && $timeControl['showWednesday']) || (isset($timeControl['showThursday']) && $timeControl['showThursday']) || (isset($timeControl['showFriday']) && $timeControl['showFriday']) || (isset($timeControl['showSaturday']) && $timeControl['showSaturday']); if ($checkForDow) { $dowNow = (int)$now->format('w'); switch ($dowNow) { case 0: if (!isset($timeControl['showSunday']) || !$timeControl['showSunday']) { return false; } break; case 1: if (!isset($timeControl['showMonday']) || !$timeControl['showMonday']) { return false; } break; case 2: if (!isset($timeControl['showTuesday']) || !$timeControl['showTuesday']) { return false; } break; case 3: if (!isset($timeControl['showWednesday']) || !$timeControl['showWednesday']) { return false; } break; case 4: if (!isset($timeControl['showThursday']) || !$timeControl['showThursday']) { return false; } break; case 5: if (!isset($timeControl['showFriday']) || !$timeControl['showFriday']) { return false; } break; case 6: if (!isset($timeControl['showSaturday']) || !$timeControl['showSaturday']) { return false; } break; default: break; } } return true; } protected function resolveManufacturer($key) { $manufacturer = new Hersteller($key); if (isset($manufacturer->kHersteller) && $manufacturer->kHersteller > 0) { return (array)$manufacturer; } return null; } protected function resolveColorValue($value) { if (empty($value)) { return ''; } return $value; } protected function checkCustomerGroup() { if(isset($this->config['content']['customerGroups']['enabled']) && $this->config['content']['customerGroups']['enabled']) { foreach($this->config['content']['customerGroups']['groups'] as $allowedGroup) { if($this->environment['customerGroup'] === (int) $allowedGroup['id']) { return true; } } return false; } return true; } protected function checkDeviceVisibility() { if(isset($this->config['deviceVisibility'])) { if($this->config['deviceVisibility'] === 'all') { return true; } if(!array_key_exists($this->config['deviceVisibility'], self::$visibilityToDeviceMap)) { return true; } if(isset($this->environment['device'])) { if(!in_array($this->environment['device'], self::$visibilityToDeviceMap[$this->config['deviceVisibility']])) { return false; } return true; } return true; } return true; } }
Did this file decode correctly?
Original Code
<?php
/* MD5: e622d1e99f543321668714e109a5c882 */
eval(base64_decode('CiBhYnN0cmFjdCBjbGFzcyBTMzYwRWxlbWVudCB7IHByb3RlY3RlZCAkaW1hZ2VCYXNlUGF0aDsgcHJvdGVjdGVkICR0eXBlOyBwcm90ZWN0ZWQgJHRlbXBsYXRlRmlsZTsgcHJvdGVjdGVkICR0ZW1wbGF0ZVBhdGg7IHByb3RlY3RlZCAkdGVtcGxhdGVQYXRoQ3VycmVudDsgcHJvdGVjdGVkICR0ZW1wbGF0ZVBhdGhQYXJlbnQ7IHByb3RlY3RlZCAkY29uZmlnOyBwcm90ZWN0ZWQgJGVudmlyb25tZW50OyBwcm90ZWN0ZWQgJHNtYXJ0eUNvbmZpZzsgcHJvdGVjdGVkICRyZW5kZXJDb250ZXh0OyBwdWJsaWMgJGlzQ2FjaGVhYmxlOyBzdGF0aWMgcHJvdGVjdGVkICR2aXNpYmlsaXR5VG9EZXZpY2VNYXAgPSBhcnJheSgnZGVza3RvcCcgPT4gYXJyYXkoJ2Rlc2t0b3AnLCAndGFibGV0JyksICdtb2JpbGUnID0+IGFycmF5KCdwaG9uZScpKTsgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb25maWcsICRlbnZpcm9ubWVudCwgJHJlbmRlckNvbnRleHQpIHsgJHRoaXMtPmlzQ2FjaGVhYmxlID0gZmFsc2U7ICR0aGlzLT5jb25maWcgPSAkY29uZmlnOyAkdGhpcy0+ZW52aXJvbm1lbnQgPSAkZW52aXJvbm1lbnQ7ICR0aGlzLT5yZW5kZXJDb250ZXh0ID0gJHJlbmRlckNvbnRleHQ7ICR0aGlzLT5pbWFnZUJhc2VQYXRoID0gUzM2MF9URU1QTEFURV9JTUFHRV9CQVNFX1BBVEg7IGlmIChUZW1wbGF0ZTo6Z2V0SW5zdGFuY2UoKS0+Z2V0UGFyZW50KCkgIT09IG51bGwpIHsgJHRoaXMtPnRlbXBsYXRlUGF0aEN1cnJlbnQgPSBUZW1wbGF0ZTo6Z2V0SW5zdGFuY2UoKS0+Z2V0RGlyKHRydWUpIC4gJy9zb2x1dGlvbjM2MC8nOyAkdGhpcy0+dGVtcGxhdGVQYXRoUGFyZW50ID0gX19ESVJfXyAuICcvLi4vLi4vc29sdXRpb24zNjAvJzsgfSBlbHNlIHsgJHRoaXMtPnRlbXBsYXRlUGF0aEN1cnJlbnQgPSBUZW1wbGF0ZTo6Z2V0SW5zdGFuY2UoKS0+Z2V0RGlyKHRydWUpIC4gJy9zb2x1dGlvbjM2MC8nOyAkdGhpcy0+dGVtcGxhdGVQYXRoUGFyZW50ID0gJHRoaXMtPnRlbXBsYXRlUGF0aEN1cnJlbnQ7IH0gJHRoaXMtPnNtYXJ0eUNvbmZpZyA9IGFycmF5KCk7IGlmIChpc3NldCgkY29uZmlnWydwYXlsb2FkJ10pKSB7ICR0aGlzLT5zbWFydHlDb25maWdbJ2lkJ10gPSAkY29uZmlnWydwYXlsb2FkJ107IH0gJHRoaXMtPmluaXQoKTsgaWYoIWlzc2V0KCR0aGlzLT5zbWFydHlDb25maWdbJ2VsZW1lbnRJZCddKSkgeyBpZihpc3NldCgkY29uZmlnWydjb250ZW50J11bJ2N1c3RvbUNzcyddWydlbmFibGVkJ10sICRjb25maWdbJ2NvbnRlbnQnXVsnY3VzdG9tQ3NzJ11bJ2Nzc0lkJ10pICYmICRjb25maWdbJ2NvbnRlbnQnXVsnY3VzdG9tQ3NzJ11bJ2VuYWJsZWQnXSAmJiAkY29uZmlnWydjb250ZW50J11bJ2N1c3RvbUNzcyddWydjc3NJZCddICE9PSAnJykgeyAkdGhpcy0+c21hcnR5Q29uZmlnWydlbGVtZW50SWQnXSA9IGx0cmltKHRyaW0oJGNvbmZpZ1snY29udGVudCddWydjdXN0b21Dc3MnXVsnY3NzSWQnXSksICcjJyk7IH0gZWxzZSB7IGlmIChpc3NldCgkY29uZmlnWydwYXlsb2FkJ10pKSB7ICR0aGlzLT5zbWFydHlDb25maWdbJ2VsZW1lbnRJZCddID0gJHRoaXMtPnR5cGUgLiAnLScgLiAkY29uZmlnWydwYXlsb2FkJ107IH0gZWxzZSB7ICR0aGlzLT5zbWFydHlDb25maWdbJ2VsZW1lbnRJZCddID0gc3RyX3JlcGxhY2UoJy4nLCAnLScsIHVuaXFpZCgkdGhpcy0+dHlwZSAuICctdHJhbnNpZW50LScsIHRydWUpKTsgfSB9IH0gaWYoIWlzc2V0KCR0aGlzLT5zbWFydHlDb25maWdbJ2VsZW1lbnRDbGFzc2VzJ10pKSB7IGlmKGlzc2V0KCRjb25maWdbJ2NvbnRlbnQnXVsnY3VzdG9tQ3NzJ11bJ2VuYWJsZWQnXSwgJGNvbmZpZ1snY29udGVudCddWydjdXN0b21Dc3MnXVsnY3NzQ2xhc3NlcyddKSAmJiAkY29uZmlnWydjb250ZW50J11bJ2N1c3RvbUNzcyddWydlbmFibGVkJ10gJiYgJGNvbmZpZ1snY29udGVudCddWydjdXN0b21Dc3MnXVsnY3NzQ2xhc3NlcyddICE9PSAnJykgeyAkdGhpcy0+c21hcnR5Q29uZmlnWydlbGVtZW50Q2xhc3NlcyddID0gaW1wbG9kZSgnICcsIGFycmF5X21hcChmdW5jdGlvbiAoJGVsZW1lbnQpIHsgcmV0dXJuIGx0cmltKHRyaW0oJGVsZW1lbnQpLCAnLicpOyB9LCBleHBsb2RlKCcgJywgdHJpbSgkY29uZmlnWydjb250ZW50J11bJ2N1c3RvbUNzcyddWydjc3NDbGFzc2VzJ10pKSkpOyB9IGVsc2UgeyAkdGhpcy0+c21hcnR5Q29uZmlnWydlbGVtZW50Q2xhc3NlcyddID0gJyc7IH0gfSBpZiAoZmlsZV9leGlzdHMoJHRoaXMtPnRlbXBsYXRlUGF0aEN1cnJlbnQgLiAkdGhpcy0+dGVtcGxhdGVGaWxlKSkgeyAkdGhpcy0+dGVtcGxhdGVQYXRoID0gJHRoaXMtPnRlbXBsYXRlUGF0aEN1cnJlbnQ7IH0gZWxzZSB7ICR0aGlzLT50ZW1wbGF0ZVBhdGggPSAkdGhpcy0+dGVtcGxhdGVQYXRoUGFyZW50OyB9IH0gcHVibGljIGFic3RyYWN0IGZ1bmN0aW9uIGluaXQoKTsgcHVibGljIGZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoKSB7IGlmKCEkdGhpcy0+Y2hlY2tDdXN0b21lckdyb3VwKCkgfHwgISR0aGlzLT5jaGVja0RldmljZVZpc2liaWxpdHkoKSkgeyByZXR1cm4gJyc7IH0gJGNhY2hlSWQgPSAkdGhpcy0+Z2VuZXJhdGVDYWNoZUlkKCk7IGlmICghZW1wdHkoJGNhY2hlSWQpKSB7ICRjYWNoZVJlc3VsdCA9IFNob3A6OkNhY2hlKCktPmdldCgkY2FjaGVJZCk7IGlmICghZW1wdHkoJGNhY2hlUmVzdWx0KSkgeyByZXR1cm4gJGNhY2hlUmVzdWx0OyB9IH0gJHRoaXMtPnByZXBhcmVHbG9iYWxTZXR0aW5ncygpOyAkdGhpcy0+cHJlcGFyZVNtYXJ0eSgpOyBTaG9wOjpTbWFydHkoKS0+YXNzaWduKCdzMzYwX2Vudmlyb25tZW50JywgJHRoaXMtPmVudmlyb25tZW50KSAtPmFzc2lnbignczM2MF9jb25maWcnLCAkdGhpcy0+Y29uZmlnKSAtPmFzc2lnbigkdGhpcy0+Z2V0U21hcnR5VmFyaWFibGVOYW1lKCksICR0aGlzLT5zbWFydHlDb25maWcpOyAkcmVuZGVyZWRSZXN1bHQgPSBTaG9wOjpTbWFydHkoKS0+ZmV0Y2goJHRoaXMtPnRlbXBsYXRlUGF0aCAuICR0aGlzLT50ZW1wbGF0ZUZpbGUpOyBTaG9wOjpTbWFydHkoKS0+Y2xlYXJBc3NpZ24oJHRoaXMtPmdldFNtYXJ0eVZhcmlhYmxlTmFtZSgpKTsgaWYgKCFlbXB0eSgkY2FjaGVJZCkpIHsgU2hvcDo6Q2FjaGUoKS0+c2V0KCRjYWNoZUlkLCAkcmVuZGVyZWRSZXN1bHQsICR0aGlzLT5nZXRDYWNoZVRhZ3MoKSk7IH0gcmV0dXJuICRyZW5kZXJlZFJlc3VsdDsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U21hcnR5VmFyaWFibGVOYW1lKCkgeyByZXR1cm4gJ3MzNjBfJyAuICR0aGlzLT50eXBlOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBwcmVwYXJlR2xvYmFsU2V0dGluZ3MoKSB7ICRnbG9iYWwgPSAkdGhpcy0+Y29uZmlnWydzdXBlcmdsb2JhbCddOyAkZ2xvYmFsUHJlcGFyZWQgPSBhcnJheSgpOyBzd2l0Y2ggKCRnbG9iYWxbJ2J1dHRvblN0eWxlJ10pIHsgY2FzZSAnZmlsbGVkX3dpdGhfYXJyb3dzJzogJGdsb2JhbFByZXBhcmVkWydjdGFfdmFyaWFudCddID0gJ3YxIGN0YS1hcnJvdyc7IGJyZWFrOyBjYXNlICdmaWxsZWRfd2l0aG91dF9hcnJvd3MnOiAkZ2xvYmFsUHJlcGFyZWRbJ2N0YV92YXJpYW50J10gPSAndjEnOyBicmVhazsgY2FzZSAnYm9yZGVyX3dpdGhfYXJyb3dzJzogJGdsb2JhbFByZXBhcmVkWydjdGFfdmFyaWFudCddID0gJ3YyIGN0YS1hcnJvdyc7IGJyZWFrOyBjYXNlICdib3JkZXJfd2l0aG91dF9hcnJvd3MnOiAkZ2xvYmFsUHJlcGFyZWRbJ2N0YV92YXJpYW50J10gPSAndjInOyBicmVhazsgZGVmYXVsdDogJGdsb2JhbFByZXBhcmVkWydjdGFfdmFyaWFudCddID0gJ3YxJzsgYnJlYWs7IH0gJGdsb2JhbFByZXBhcmVkID0gYXJyYXlfbWVyZ2UoJGdsb2JhbFByZXBhcmVkLCAkZ2xvYmFsKTsgJGdsb2JhbFByZXBhcmVkWydjb29raWVUZXh0J10gPSAkdGhpcy0+cmVzb2x2ZU11bHRpbGFuZ3VhZ2VUZXh0VmFsdWUoJGdsb2JhbFsnY29va2llVGV4dCddKTsgJGdsb2JhbFByZXBhcmVkWydjb29raWVUZXh0Rm9udCddID0gJHRoaXMtPnJlc29sdmVGb250U3R5bGVzKCRnbG9iYWxbJ2Nvb2tpZVRleHQnXSk7ICRnbG9iYWxQcmVwYXJlZFsnY29va2llTGluayddID0gJHRoaXMtPnJlc29sdmVMaW5rKCRnbG9iYWxbJ2Nvb2tpZUxpbmsnXSk7ICRnbG9iYWxQcmVwYXJlZFsnY29va2llRm9yY2VDb25maXJtYXRpb24nXSA9ICRnbG9iYWxbJ2Nvb2tpZUZvcmNlQ29uZmlybWF0aW9uJ107ICR0aGlzLT5zbWFydHlDb25maWdbJ3N1cGVyZ2xvYmFsJ10gPSAkZ2xvYmFsUHJlcGFyZWQ7IH0gcHJvdGVjdGVkIGFic3RyYWN0IGZ1bmN0aW9uIHByZXBhcmVTbWFydHkoKTsgcHJvdGVjdGVkIGZ1bmN0aW9uIGdlbmVyYXRlQ2FjaGVJZCgpIHsgaWYgKCEkdGhpcy0+aXNDYWNoZWFibGUgfHwgIVMzNjBfVEVNUExBVEVfQ0FDSEVfQUNUSVZFKSB7IHJldHVybiBudWxsOyB9ICRjYWNoZUlkID0gJ3MzNjBfdGVtcGxhdGVfJzsgJGNhY2hlSWQgLj0gJ18nIC4gJHRoaXMtPmVudmlyb25tZW50WydsYW5ndWFnZSddOyAkY2FjaGVJZCAuPSAnXycgLiAkdGhpcy0+ZW52aXJvbm1lbnRbJ2RldmljZSddOyAkY2FjaGVJZCAuPSAnXycgLiAkdGhpcy0+ZW52aXJvbm1lbnRbJ21vZGUnXTsgJGNhY2hlSWQgLj0gJ18nIC4gJHRoaXMtPmNvbmZpZ1sncGF5bG9hZCddOyByZXR1cm4gJGNhY2hlSWQ7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENhY2hlVGFncygpIHsgcmV0dXJuIGFycmF5KENBQ0hJTkdfR1JPVVBfVEVNUExBVEUsIENBQ0hJTkdfR1JPVVBfTEFOR1VBR0UpOyB9IHByb3RlY3RlZCBmdW5jdGlvbiByZXNvbHZlTXVsdGlsYW5ndWFnZVRleHRWYWx1ZSgkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZSkgeyAkY3VycmVudExhbmd1YWdlSVNPID0gJHRoaXMtPmVudmlyb25tZW50WydsYW5ndWFnZSddOyBpZiAoaXNzZXQoJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ3ZhbHVlcyddWyRjdXJyZW50TGFuZ3VhZ2VJU09dKSkgeyByZXR1cm4gJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ3ZhbHVlcyddWyRjdXJyZW50TGFuZ3VhZ2VJU09dOyB9IHJldHVybiAnJzsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVzb2x2ZUZvbnRTdHlsZXMoJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWUsICRpZ25vcmVBbGlnbm1lbnQgPSBmYWxzZSkgeyAkcmVzdWx0ID0gYXJyYXkoKTsgJHJlc3VsdFsnY2xhc3NlcyddID0gJyc7ICRyZXN1bHRbJ3N0eWxlcyddID0gJyc7IGlmIChlbXB0eSgkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZSkpIHsgJHJlc3VsdFsnZW5hYmxlZCddID0gZmFsc2U7IHJldHVybiAkcmVzdWx0OyB9IGlmICghJGlnbm9yZUFsaWdubWVudCAmJiBpc3NldCgkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsndGV4dEFsaWdubWVudCddKSAmJiAkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsndGV4dEFsaWdubWVudCddICE9ICcnICkgeyAkcmVzdWx0WydjbGFzc2VzJ10gPSAndGV4dC0nIC4gJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ3RleHRBbGlnbm1lbnQnXTsgfSBlbHNlaWYgKCEkaWdub3JlQWxpZ25tZW50ICYmICghaXNzZXQoJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ3RleHRBbGlnbm1lbnQnXSkgfHwgZW1wdHkoJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ3RleHRBbGlnbm1lbnQnXSkpICkgeyAkcmVzdWx0WydjbGFzc2VzJ10gPSAndGV4dC1hbGlnbi1kZWZhdWx0JzsgfSBpZiAoaXNzZXQoJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ2luZGl2aWR1YWxGb250J10pICYmICRtdWx0aWxhbmd1YWdlVGV4dFZhbHVlWydpbmRpdmlkdWFsRm9udCddKSB7ICRyZXN1bHRbJ2VuYWJsZWQnXSA9IHRydWU7IGlmIChpc3NldCgkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsnZm9udCddWydmb250U2l6ZURlc2t0b3AnXSkgJiYgJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ2ZvbnQnXVsnZm9udFNpemVEZXNrdG9wJ10gIT0gJycpIHsgJHJlc3VsdFsnY2xhc3NlcyddIC49ICcgZm9udC1zaXplLWRlc2t0b3AtJyAuICRtdWx0aWxhbmd1YWdlVGV4dFZhbHVlWydmb250J11bJ2ZvbnRTaXplRGVza3RvcCddIC4gJyAnOyB9IGlmIChpc3NldCgkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsnZm9udCddWydmb250U2l6ZU1vYmlsZSddKSAmJiAkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsnZm9udCddWydmb250U2l6ZU1vYmlsZSddICE9ICcnKSB7ICRyZXN1bHRbJ2NsYXNzZXMnXSAuPSAnIGZvbnQtc2l6ZS1tb2JpbGUtJyAuICRtdWx0aWxhbmd1YWdlVGV4dFZhbHVlWydmb250J11bJ2ZvbnRTaXplTW9iaWxlJ10gLiAnICc7IH0gaWYgKCghaXNzZXQoJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ2ZvbnQnXVsnbm9Gb250J10pIHx8ICRtdWx0aWxhbmd1YWdlVGV4dFZhbHVlWydmb250J11bJ25vRm9udCddID09PSBmYWxzZSkgJiYgaXNzZXQoJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ2ZvbnQnXVsnZm9udEZhbWlseSddKSAmJiAkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsnZm9udCddWydmb250RmFtaWx5J10gIT0gJycpIHsgJHJlc3VsdFsnc3R5bGVzJ10gLj0gJ2ZvbnQtZmFtaWx5OicgLiAkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsnZm9udCddWydmb250RmFtaWx5J10gLiAnLCBzYW5zLXNlcmlmOyc7IH0gaWYgKGlzc2V0KCRtdWx0aWxhbmd1YWdlVGV4dFZhbHVlWydmb250J11bJ2ZvbnRDb2xvciddKSAmJiAkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsnZm9udCddWydmb250Q29sb3InXSAhPSAnJykgeyAkcmVzdWx0WydzdHlsZXMnXSAuPSAnY29sb3I6JyAuICRtdWx0aWxhbmd1YWdlVGV4dFZhbHVlWydmb250J11bJ2ZvbnRDb2xvciddIC4gJzsnOyB9IGlmIChpc3NldCgkbXVsdGlsYW5ndWFnZVRleHRWYWx1ZVsnZm9udCddWydmb250U3R5bGUnXSkgJiYgaXNfYXJyYXkoJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ2ZvbnQnXVsnZm9udFN0eWxlJ10pKSB7IGlmIChpbl9hcnJheSgnaXRhbGljJywgJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ2ZvbnQnXVsnZm9udFN0eWxlJ10pKSB7ICRyZXN1bHRbJ3N0eWxlcyddIC49ICdmb250LXN0eWxlOml0YWxpYzsnOyB9IGlmIChpbl9hcnJheSgnYm9sZCcsICRtdWx0aWxhbmd1YWdlVGV4dFZhbHVlWydmb250J11bJ2ZvbnRTdHlsZSddKSkgeyAkcmVzdWx0WydzdHlsZXMnXSAuPSAnZm9udC13ZWlnaHQ6Ym9sZDsnOyB9IGlmIChpbl9hcnJheSgndW5kZXJsaW5lJywgJG11bHRpbGFuZ3VhZ2VUZXh0VmFsdWVbJ2ZvbnQnXVsnZm9udFN0eWxlJ10pKSB7ICRyZXN1bHRbJ3N0eWxlcyddIC49ICd0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyc7IH0gfSB9IGVsc2UgeyAkcmVzdWx0WydlbmFibGVkJ10gPSBmYWxzZTsgfSByZXR1cm4gJHJlc3VsdDsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVzb2x2ZUxpbmsoJGxpbmspIHsgaWYgKCFpc3NldCgkbGlua1sndmFsdWUnXSkgfHwgJGxpbmtbJ3ZhbHVlJ10gPT09ICcnKSB7IHJldHVybiAnJzsgfSAkY0tleSA9IG51bGw7ICRmYWxsYmFja1BhcmFtZXRlciA9IG51bGw7ICRrS2V5ID0gKGludCkkbGlua1sndmFsdWUnXTsgJGtTcHJhY2hlID0gKGludCkkdGhpcy0+ZW52aXJvbm1lbnRbJ2xhbmd1YWdlS2V5J107IHN3aXRjaCAoJGxpbmtbJ3R5cGUnXSkgeyBjYXNlICJDVVNUT00iOiBpZiAoaXNzZXQoJGxpbmtbJ3ZhbHVlJ10pKSB7ICRsaW5rID0gJGxpbmtbJ3ZhbHVlJ107IGlmIChzdHJwb3MoJGxpbmssICcvJykgPT09IDAgJiYgc3RycG9zKCRsaW5rLCAnLy8nKSAhPT0gMCkgeyAkbGluayA9IGx0cmltKCRsaW5rLCAnLycpOyB9IHJldHVybiAkbGluazsgfSBicmVhazsgY2FzZSAiQ01TIjogJGNLZXkgPSAia0xpbmsiOyAkZmFsbGJhY2tQYXJhbWV0ZXIgPSAncyc7IGJyZWFrOyBjYXNlICJBUlRJQ0xFIjogJGNLZXkgPSAia0FydGlrZWwiOyAkZmFsbGJhY2tQYXJhbWV0ZXIgPSAnYSc7IGJyZWFrOyBjYXNlICJDQVRFR09SWSI6ICRjS2V5ID0gImtLYXRlZ29yaWUiOyAkZmFsbGJhY2tQYXJhbWV0ZXIgPSAnayc7IGJyZWFrOyBjYXNlICJNQU5VRkFDVFVSRVIiOiAkY0tleSA9ICJrSGVyc3RlbGxlciI7ICRmYWxsYmFja1BhcmFtZXRlciA9ICdoZic7IGJyZWFrOyBjYXNlICJQUk9QRVJUWSI6ICRjS2V5ID0gImtNZXJrbWFsV2VydCI7ICRmYWxsYmFja1BhcmFtZXRlciA9ICdtZjEnOyBicmVhazsgY2FzZSAiU0VBUkNIU1BFQ0lBTCI6ICRjS2V5ID0gInN1Y2hzcGVjaWFsIjsgYnJlYWs7IGRlZmF1bHQ6IHJldHVybiAnJzsgfSBpZiAoIWVtcHR5KCRrS2V5KSAmJiAhZW1wdHkoJGNLZXkpKSB7ICRyZXN1bHQgPSBTaG9wOjpEQigpLT5zZWxlY3QoJ3RzZW8nLCAnY0tleScsICRjS2V5LCAna0tleScsICRrS2V5LCAna1NwcmFjaGUnLCAka1NwcmFjaGUpOyBpZiAoIWVtcHR5KCRyZXN1bHQpKSB7IHJldHVybiAkcmVzdWx0LT5jU2VvOyB9IGlmICgkZmFsbGJhY2tQYXJhbWV0ZXIgIT09IG51bGwpIHsgcmV0dXJuIFNob3A6OmdldFVSTCgpIC4gJy9uYXZpLnBocD8nIC4gJGZhbGxiYWNrUGFyYW1ldGVyIC4gJz0nIC4gJGtLZXk7IH0gcmV0dXJuICcnOyB9IHJldHVybiAnJzsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gaXNFeHRlcm5hbExpbmsoJGxpbmspIHsgaWYgKHN0cmlwb3MoJGxpbmssICdodHRwOi8vJykgPT09IDAgfHwgc3RyaXBvcygkbGluaywgJy8vJykgPT09IDAgfHwgc3RyaXBvcygkbGluaywgJ2h0dHBzOi8vJykgPT09IDApIHsgJHNob3BVcmwgPSBTaG9wOjpnZXRVUkwoKTsgJHNob3BVcmwgPSBzdHJfaXJlcGxhY2UoYXJyYXkoJ2h0dHA6Ly8nLCAnaHR0cHM6Ly8nKSwgJycsICRzaG9wVXJsKTsgaWYgKHN0cmlwb3MoJGxpbmssICRzaG9wVXJsKSA9PT0gZmFsc2UpIHsgcmV0dXJuIHRydWU7IH0gfSByZXR1cm4gZmFsc2U7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIHJlc29sdmVJY29uKCRpY29uKSB7IGlmIChpc3NldCgkaWNvblsndmFsdWUnXSkgJiYgJGljb25bJ3ZhbHVlJ10gIT09ICcnKSB7IHJldHVybiAnZmEtJyAuICRpY29uWyd2YWx1ZSddOyB9IHJldHVybiAnJzsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVzb2x2ZUxpbmtHcm91cCgkbGlua0dyb3VwSWQpIHsgJGtMaW5rZ3J1cHBlID0gKGludCkkbGlua0dyb3VwSWQ7ICRyZXN1bHQgPSBhcnJheSgpOyBpZiAoJGtMaW5rZ3J1cHBlID4gMCkgeyAkY3VycmVudExhbmd1YWdlSVNPID0gJHRoaXMtPmVudmlyb25tZW50WydsYW5ndWFnZSddOyAkbGlua0dyb3VwTGFuZ3VhZ2UgPSBTaG9wOjpEQigpLT5zZWxlY3QoJ3RsaW5rZ3J1cHBlc3ByYWNoZScsICdrTGlua2dydXBwZScsICRrTGlua2dydXBwZSwgJ2NJU09TcHJhY2hlJywgJGN1cnJlbnRMYW5ndWFnZUlTTyk7IGlmICghZW1wdHkoJGxpbmtHcm91cExhbmd1YWdlKSkgeyAkcmVzdWx0WyduYW1lJ10gPSAkbGlua0dyb3VwTGFuZ3VhZ2UtPmNOYW1lOyB9ICRsaW5rcyA9IFNob3A6OkRCKCktPnNlbGVjdEFsbCgndGxpbmsnLCAna0xpbmtncnVwcGUnLCAka0xpbmtncnVwcGUsICcqJywgJ25Tb3J0IEFTQycpOyBpZiAoIWVtcHR5KCRsaW5rcykpIHsgJHJlc3VsdFsnbGlua3MnXSA9IGFycmF5KCk7IGZvcmVhY2ggKCRsaW5rcyBhcyAkbGluaykgeyAkbGlua0xhbmd1YWdlID0gU2hvcDo6REIoKS0+c2VsZWN0KCd0bGlua3NwcmFjaGUnLCAna0xpbmsnLCAoaW50KSRsaW5rLT5rTGluaywgJ2NJU09TcHJhY2hlJywgJGN1cnJlbnRMYW5ndWFnZUlTTyk7IGlmICghZW1wdHkoJGxpbmtMYW5ndWFnZSkpIHsgJGxpbmsgPSBhcnJheSgpOyAkbGlua1snbmFtZSddID0gJGxpbmtMYW5ndWFnZS0+Y05hbWU7ICRsaW5rWyd1cmwnXSA9ICRsaW5rTGFuZ3VhZ2UtPmNTZW87ICRyZXN1bHRbJ2xpbmtzJ11bXSA9ICRsaW5rOyB9IH0gfSB9IHJldHVybiAkcmVzdWx0OyB9IHByb3RlY3RlZCBmdW5jdGlvbiByZXNvbHZlSW1hZ2UoJGltYWdlLCAkcmV0YWluQWx0VGV4dCA9IGZhbHNlKSB7ICRyZXN1bHQgPSBhcnJheSgpOyBpZiAoZW1wdHkoJGltYWdlKSB8fCAhaXNzZXQoJGltYWdlWyd1cmwnXSkgfHwgJGltYWdlWyd1cmwnXSA9PT0gJycpIHsgJHJlc3VsdFsndXJsJ10gPSAnJzsgaWYoJHJldGFpbkFsdFRleHQgJiYgaXNzZXQoJGltYWdlWydhbHRUZXh0J10pICYmICFlbXB0eSgkaW1hZ2VbJ2FsdFRleHQnXSkpIHsgJHJlc3VsdFsnYWx0J10gPSAkdGhpcy0+cmVzb2x2ZU11bHRpbGFuZ3VhZ2VUZXh0VmFsdWUoJGltYWdlWydhbHRUZXh0J10pOyB9IGVsc2UgeyAkcmVzdWx0WydhbHQnXSA9ICcnOyB9IH0gZWxzZSB7ICRyZXN1bHRbJ3VybCddID0gJHRoaXMtPmltYWdlQmFzZVBhdGggLiAkaW1hZ2VbJ3VybCddOyBpZiAoaXNzZXQoJGltYWdlWydhbHRUZXh0J10pICYmICFlbXB0eSgkaW1hZ2VbJ2FsdFRleHQnXSkpIHsgJHJlc3VsdFsnYWx0J10gPSAkdGhpcy0+cmVzb2x2ZU11bHRpbGFuZ3VhZ2VUZXh0VmFsdWUoJGltYWdlWydhbHRUZXh0J10pOyB9IGVsc2UgeyAkcmVzdWx0WydhbHQnXSA9ICcnOyB9IH0gcmV0dXJuICRyZXN1bHQ7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrVGltZUNvbnRyb2woJHRpbWVDb250cm9sKSB7IGlmIChlbXB0eSgkdGltZUNvbnRyb2wpKSB7IHJldHVybiB0cnVlOyB9IGlmICghaXNzZXQoJHRpbWVDb250cm9sWydlbmFibGVkJ10pIHx8ICEkdGltZUNvbnRyb2xbJ2VuYWJsZWQnXSkgeyByZXR1cm4gdHJ1ZTsgfSAkdGltZXpvbmUgPSBpbmlfZ2V0KCJkYXRlLnRpbWV6b25lIik7IGlmIChlbXB0eSgkdGltZXpvbmUpKSB7IGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoIkV1cm9wZS9CZXJsaW4iKTsgfSAkbm93ID0gbmV3IERhdGVUaW1lKCk7ICRub3dUaW1lc3RhbXAgPSAkbm93LT5nZXRUaW1lc3RhbXAoKTsgJGRhdGVTdGFydFRpbWVzdGFtcCA9ICR0aW1lQ29udHJvbFsnZGF0ZVN0YXJ0J107ICRkYXRlU3RvcFRpbWVzdGFtcCA9ICR0aW1lQ29udHJvbFsnZGF0ZVN0b3AnXSArIDg2Mzk5OyBpZiAoIWVtcHR5KCRkYXRlU3RhcnRUaW1lc3RhbXApICYmICFlbXB0eSgkZGF0ZVN0b3BUaW1lc3RhbXApICYmICRkYXRlU3RhcnRUaW1lc3RhbXAgPCAkZGF0ZVN0b3BUaW1lc3RhbXAgJiYgKCRub3dUaW1lc3RhbXAgPCAkZGF0ZVN0YXJ0VGltZXN0YW1wIHx8ICRub3dUaW1lc3RhbXAgPiAkZGF0ZVN0b3BUaW1lc3RhbXApKSB7IHJldHVybiBmYWxzZTsgfSBpZiAoaXNzZXQoJHRpbWVDb250cm9sWyd0aW1lU3RhcnQnXSwgJHRpbWVDb250cm9sWyd0aW1lU3RvcCddKSkgeyAkdGltZVN0YXJ0SW50ID0gMDsgJHRpbWVTdGFydCA9ICR0aW1lQ29udHJvbFsndGltZVN0YXJ0J107IGlmICghZW1wdHkoJHRpbWVTdGFydCkpIHsgJHRpbWVTdGFydEludCA9IGludHZhbChzdHJfcmVwbGFjZSgnOicsICcnLCAkdGltZVN0YXJ0KSwgMTApOyB9ICR0aW1lU3RvcEludCA9IDIzNTk7ICR0aW1lU3RvcCA9ICR0aW1lQ29udHJvbFsndGltZVN0b3AnXTsgaWYgKCFlbXB0eSgkdGltZVN0b3ApKSB7ICR0aW1lU3RvcEludCA9IGludHZhbChzdHJfcmVwbGFjZSgnOicsICcnLCAkdGltZVN0b3ApLCAxMCk7IH0gJHRpbWVOb3dJbnQgPSBpbnR2YWwoJG5vdy0+Zm9ybWF0KCdIaScpLCAxMCk7IGlmICgkdGltZU5vd0ludCA8ICR0aW1lU3RhcnRJbnQgfHwgJHRpbWVOb3dJbnQgPiAkdGltZVN0b3BJbnQpIHsgcmV0dXJuIGZhbHNlOyB9IH0gJGNoZWNrRm9yRG93ID0gKGlzc2V0KCR0aW1lQ29udHJvbFsnc2hvd1N1bmRheSddKSAmJiAkdGltZUNvbnRyb2xbJ3Nob3dTdW5kYXknXSkgfHwgKGlzc2V0KCR0aW1lQ29udHJvbFsnc2hvd01vbmRheSddKSAmJiAkdGltZUNvbnRyb2xbJ3Nob3dNb25kYXknXSkgfHwgKGlzc2V0KCR0aW1lQ29udHJvbFsnc2hvd1R1ZXNkYXknXSkgJiYgJHRpbWVDb250cm9sWydzaG93VHVlc2RheSddKSB8fCAoaXNzZXQoJHRpbWVDb250cm9sWydzaG93V2VkbmVzZGF5J10pICYmICR0aW1lQ29udHJvbFsnc2hvd1dlZG5lc2RheSddKSB8fCAoaXNzZXQoJHRpbWVDb250cm9sWydzaG93VGh1cnNkYXknXSkgJiYgJHRpbWVDb250cm9sWydzaG93VGh1cnNkYXknXSkgfHwgKGlzc2V0KCR0aW1lQ29udHJvbFsnc2hvd0ZyaWRheSddKSAmJiAkdGltZUNvbnRyb2xbJ3Nob3dGcmlkYXknXSkgfHwgKGlzc2V0KCR0aW1lQ29udHJvbFsnc2hvd1NhdHVyZGF5J10pICYmICR0aW1lQ29udHJvbFsnc2hvd1NhdHVyZGF5J10pOyBpZiAoJGNoZWNrRm9yRG93KSB7ICRkb3dOb3cgPSAoaW50KSRub3ctPmZvcm1hdCgndycpOyBzd2l0Y2ggKCRkb3dOb3cpIHsgY2FzZSAwOiBpZiAoIWlzc2V0KCR0aW1lQ29udHJvbFsnc2hvd1N1bmRheSddKSB8fCAhJHRpbWVDb250cm9sWydzaG93U3VuZGF5J10pIHsgcmV0dXJuIGZhbHNlOyB9IGJyZWFrOyBjYXNlIDE6IGlmICghaXNzZXQoJHRpbWVDb250cm9sWydzaG93TW9uZGF5J10pIHx8ICEkdGltZUNvbnRyb2xbJ3Nob3dNb25kYXknXSkgeyByZXR1cm4gZmFsc2U7IH0gYnJlYWs7IGNhc2UgMjogaWYgKCFpc3NldCgkdGltZUNvbnRyb2xbJ3Nob3dUdWVzZGF5J10pIHx8ICEkdGltZUNvbnRyb2xbJ3Nob3dUdWVzZGF5J10pIHsgcmV0dXJuIGZhbHNlOyB9IGJyZWFrOyBjYXNlIDM6IGlmICghaXNzZXQoJHRpbWVDb250cm9sWydzaG93V2VkbmVzZGF5J10pIHx8ICEkdGltZUNvbnRyb2xbJ3Nob3dXZWRuZXNkYXknXSkgeyByZXR1cm4gZmFsc2U7IH0gYnJlYWs7IGNhc2UgNDogaWYgKCFpc3NldCgkdGltZUNvbnRyb2xbJ3Nob3dUaHVyc2RheSddKSB8fCAhJHRpbWVDb250cm9sWydzaG93VGh1cnNkYXknXSkgeyByZXR1cm4gZmFsc2U7IH0gYnJlYWs7IGNhc2UgNTogaWYgKCFpc3NldCgkdGltZUNvbnRyb2xbJ3Nob3dGcmlkYXknXSkgfHwgISR0aW1lQ29udHJvbFsnc2hvd0ZyaWRheSddKSB7IHJldHVybiBmYWxzZTsgfSBicmVhazsgY2FzZSA2OiBpZiAoIWlzc2V0KCR0aW1lQ29udHJvbFsnc2hvd1NhdHVyZGF5J10pIHx8ICEkdGltZUNvbnRyb2xbJ3Nob3dTYXR1cmRheSddKSB7IHJldHVybiBmYWxzZTsgfSBicmVhazsgZGVmYXVsdDogYnJlYWs7IH0gfSByZXR1cm4gdHJ1ZTsgfSBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVzb2x2ZU1hbnVmYWN0dXJlcigka2V5KSB7ICRtYW51ZmFjdHVyZXIgPSBuZXcgSGVyc3RlbGxlcigka2V5KTsgaWYgKGlzc2V0KCRtYW51ZmFjdHVyZXItPmtIZXJzdGVsbGVyKSAmJiAkbWFudWZhY3R1cmVyLT5rSGVyc3RlbGxlciA+IDApIHsgcmV0dXJuIChhcnJheSkkbWFudWZhY3R1cmVyOyB9IHJldHVybiBudWxsOyB9IHByb3RlY3RlZCBmdW5jdGlvbiByZXNvbHZlQ29sb3JWYWx1ZSgkdmFsdWUpIHsgaWYgKGVtcHR5KCR2YWx1ZSkpIHsgcmV0dXJuICcnOyB9IHJldHVybiAkdmFsdWU7IH0gcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrQ3VzdG9tZXJHcm91cCgpIHsgaWYoaXNzZXQoJHRoaXMtPmNvbmZpZ1snY29udGVudCddWydjdXN0b21lckdyb3VwcyddWydlbmFibGVkJ10pICYmICR0aGlzLT5jb25maWdbJ2NvbnRlbnQnXVsnY3VzdG9tZXJHcm91cHMnXVsnZW5hYmxlZCddKSB7IGZvcmVhY2goJHRoaXMtPmNvbmZpZ1snY29udGVudCddWydjdXN0b21lckdyb3VwcyddWydncm91cHMnXSBhcyAkYWxsb3dlZEdyb3VwKSB7IGlmKCR0aGlzLT5lbnZpcm9ubWVudFsnY3VzdG9tZXJHcm91cCddID09PSAoaW50KSAkYWxsb3dlZEdyb3VwWydpZCddKSB7IHJldHVybiB0cnVlOyB9IH0gcmV0dXJuIGZhbHNlOyB9IHJldHVybiB0cnVlOyB9IHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0RldmljZVZpc2liaWxpdHkoKSB7IGlmKGlzc2V0KCR0aGlzLT5jb25maWdbJ2RldmljZVZpc2liaWxpdHknXSkpIHsgaWYoJHRoaXMtPmNvbmZpZ1snZGV2aWNlVmlzaWJpbGl0eSddID09PSAnYWxsJykgeyByZXR1cm4gdHJ1ZTsgfSBpZighYXJyYXlfa2V5X2V4aXN0cygkdGhpcy0+Y29uZmlnWydkZXZpY2VWaXNpYmlsaXR5J10sIHNlbGY6OiR2aXNpYmlsaXR5VG9EZXZpY2VNYXApKSB7IHJldHVybiB0cnVlOyB9IGlmKGlzc2V0KCR0aGlzLT5lbnZpcm9ubWVudFsnZGV2aWNlJ10pKSB7IGlmKCFpbl9hcnJheSgkdGhpcy0+ZW52aXJvbm1lbnRbJ2RldmljZSddLCBzZWxmOjokdmlzaWJpbGl0eVRvRGV2aWNlTWFwWyR0aGlzLT5jb25maWdbJ2RldmljZVZpc2liaWxpdHknXV0pKSB7IHJldHVybiBmYWxzZTsgfSByZXR1cm4gdHJ1ZTsgfSByZXR1cm4gdHJ1ZTsgfSByZXR1cm4gdHJ1ZTsgfSB9IA=='));
Function Calls
base64_decode | 1 |
Stats
MD5 | 8475b66bb956ba0275bd6197f6dd3518 |
Eval Count | 1 |
Decode Time | 95 ms |