Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
eval("?>".base64_decode("PD9waHANCg0KaWYgKCFkZWZpbmVkKCdCQVNFUEFUSCcpKSBleGl0KCdObyBkaXJlY..
Decoded Output download
?>b'<?php
if (!defined(\'BASEPATH\')) exit(\'No direct script access allowed\');
class Accesscontrol_Helper
{
// IdUnique, CodeName, UsrName, UsrId, Name, Data
public static function LoginActivity_Log($ActivityLogIdUnique, $ActivityLogCodeName, $ActivityLogUsrName, $ActivityLogUsrId, $ActivityLogName, $ActivityLogData, $ActivityLogStatus)
{
$CI = &get_instance();
// load model
$CI->load->model(\'M_Activity\');
if (strtolower($ActivityLogCodeName) == \'login\') {
$ActivityLogCode = 0;
} else if (strtolower($ActivityLogCodeName) == \'logout\') {
$ActivityLogCode = 1;
}
$param[\'LAL_IdUnique\'] = $ActivityLogIdUnique;
$param[\'LAL_Code\'] = $ActivityLogCode;
$param[\'LAL_CodeName\'] = $ActivityLogCodeName;
$param[\'LAL_UsrName\'] = $ActivityLogUsrName;
$param[\'LAL_Name\'] = $ActivityLogName;
$param[\'LAL_Data\'] = $ActivityLogData;
$param[\'LAL_Status\'] = $ActivityLogStatus;
$param[\'LAL_UsrId\'] = $ActivityLogUsrId;
$param[\'LAL_Created_TypeID\'] = date(\'d-F-Y H:i:s\');
// save to db
$CI->M_Activity->Save_LoginActivityLog($param);
}
// IdUnique, CodeName, UsrName, UsrId, Name, Data
public static function Activity_Log($ActivityLogIdUnique, $ActivityLogCodeName, $ActivityLogUsrName, $ActivityLogUsrId, $ActivityLogName, $ActivityLogData, $ActivityLogStatus)
{
$CI = &get_instance();
// load model
$CI->load->model(\'M_Activity\');
if (strtolower($ActivityLogCodeName) == \'login\') {
$ActivityLogCode = 0;
} else if (strtolower($ActivityLogCodeName) == \'logout\') {
$ActivityLogCode = 1;
} else if (strtolower($ActivityLogCodeName) == \'add\') {
$ActivityLogCode = 2;
} else if (strtolower($ActivityLogCodeName) == \'update\') {
$ActivityLogCode = 3;
} else if (strtolower($ActivityLogCodeName) == \'delete\') {
$ActivityLogCode = 4;
}
$param[\'AL_IdUnique\'] = $ActivityLogIdUnique;
$param[\'AL_Code\'] = $ActivityLogCode;
$param[\'AL_CodeName\'] = $ActivityLogCodeName;
$param[\'AL_UsrName\'] = $ActivityLogUsrName;
$param[\'AL_Name\'] = $ActivityLogName;
$param[\'AL_Data\'] = $ActivityLogData;
$param[\'AL_Status\'] = $ActivityLogStatus;
$param[\'AL_UsrId\'] = $ActivityLogUsrId;
$param[\'AL_Created_TypeID\'] = date(\'d-F-Y H:i:s\');
// save to db
$CI->M_Activity->Save_ActivityLog($param);
}
// Page / Controller
public static function Visitor_Counter($VisitorCounter_Page)
{
$CI = &get_instance();
// load model
$CI->load->library(\'user_agent\');
$param[\'VC_Page\'] = $VisitorCounter_Page;
$param[\'VC_Version\'] = $CI->agent->version();
$param[\'VC_Browser\'] = $CI->agent->browser();
$param[\'VC_Platform\'] = $CI->agent->platform();
$param[\'VC_IP_Address\'] = $CI->input->ip_address();
$param[\'VC_UserAgent\'] = $CI->agent->agent_string();
$param[\'VC_Date_TypeID\'] = date(\'d-F-Y H:i:s\');
$param[\'VC_Counter\'] = 1;
// save to db
$CI->M_Activity->Save_VisitorCounter($param);
}
public static function Is_Mode()
{
$CI = &get_instance();
// load model
$CI->load->model(\'M_IsMode\');
if (@count($CI->M_IsMode->isSetting_Get(\'Status\')) > 0) {
if ($CI->M_IsMode->isSetting_Get(\'Status\')->SettingValue == \'Default Mode\') {
return true;
} else {
return false;
}
} else {
return false;
}
}
public static function Get_Is_Mode($Sttg_Name)
{
$CI = &get_instance();
// load model
$CI->load->model(\'M_IsMode\');
return $CI->M_IsMode->isSetting_Get($Sttg_Name);
}
public static function GettingsMsg()
{
$time = date("H");
$timeZone = date("e");
$msg = \'\';
if ($time < "06") {
$msg = "Selamat Dini Hari";
} else
if ($time >= "06" && $time < "10") {
$msg = "Selamat Pagi";
} else
if ($time >= "10" && $time < "15") {
$msg = "Selamat Siang";
} else
if ($time >= "15" && $time < "18") {
$msg = "Selamat Sore";
} else
if ($time >= "18" && $time < "19") {
$msg = "Selamat Petang";
} else
if ($time >= "19") {
$msg = "Selamat Malam";
}
return $msg;
}
public static function Is_Loggin_In()
{
$CI = &get_instance();
if (!empty($CI->session->userdata[\'UsrName\']) && $CI->session->userdata[\'is_logged_in\'] == TRUE && $CI->session->userdata[\'loggin_in_bmt2_payroll_system\'] == TRUE) {
return true;
} else {
return false;
}
}
public static function AddZero_BeforeTen($number = null)
{
$numberDefault = !$number ? \'10\' : $number;
return ($numberDefault < 10 ? \'0\' . $numberDefault : $numberDefault);
}
public static function Array_Month_Short_English($data = null)
{
$months = [
1 => \'Jan\',
2 => \'Feb\',
3 => \'Mar\',
4 => \'Apr\',
5 => \'May\',
6 => \'Jun\',
7 => \'Jul\',
8 => \'Aug\',
9 => \'Sep\',
10 => \'Oct\',
11 => \'Nov\',
12 => \'Dec\',
];
return $months[(int) $data];
}
public static function Array_Month_Indonesian($data = null)
{
$months = [
1 => \'Januari\',
2 => \'Februari\',
3 => \'Maret\',
4 => \'April\',
5 => \'Mei\',
6 => \'Juni\',
7 => \'Juli\',
8 => \'Agustus\',
9 => \'September\',
10 => \'Oktober\',
11 => \'November\',
12 => \'Desember\',
];
return $months[(int) $data];
}
public static function Array_Month_English($data = null)
{
$months = [
0 => \'December\',
1 => \'January\',
2 => \'February\',
3 => \'March\',
4 => \'April\',
5 => \'May \',
6 => \'June\',
7 => \'July\',
8 => \'August\',
9 => \'September\',
10 => \'October\',
11 => \'November\',
12 => \'December\',
];
return $months[(int) $data];
}
public static function Array_Day_Indonesian($data = null)
{
$days = [
\'Sunday\' => \'Minggu\',
\'Monday\' => \'Senin\',
\'Tuesday\' => \'Selasa\',
\'Wednesday\' => \'Rabu\',
\'Thursday\' => \'Kamis\',
\'Friday\' => \'Jumat\',
\'Saturday\' => \'Sabtu\',
];
return $days[$data];
}
public static function DateReplace_Ymd_to_dmY($date = null)
{
// var date eg-> 2019-07-17
$dateExplode = explode(\'-\', $date);
@$dateNew = $dateExplode[2] . \'-\' . $this->array_Month_Indonesian($dateExplode[1]) . \'-\' . $dateExplode[2];
return $dateNew;
}
public static function DateReplace_to_Ymd($date = null)
{
$dateDefault = strtotime($date);
$newFormat = date(\'Y-m-d\', $dateDefault);
return $newFormat;
}
public static function DateTimeReplace_to_12Hours_Format($date = null)
{
// var date eg = \'2019-07-17 22:15:00\' \'2019-07-17 22:35:00\'
$new_DateTime = date(\'h:i A\', strtotime($date));
return $new_DateTime;
}
public static function Base64URL_Encode($data)
{
return rtrim(strtr(base64_encode($data), \'+/\', \'-_\'), \'=\');
}
public static function Base64URL_Decode($data)
{
return base64_decode(str_pad(strtr($data, \'-_\', \'+/\'), strlen($data) % 4, \'=\', STR_PAD_RIGHT));
}
public static function Encrypt($str)
{
$rslt = \'\';
$key = \'QXJpZ2hvIEd1bWVyeSBTYW1vc2lyBMT2ReportPayrollSystem\';
for ($i = 0; $i < strlen($str); $i++) {
$character = substr($str, $i, 1);
$character_key = substr($key, ($i % strlen($key)) - 1, 1);
$character = chr(ord($character) + ord($character_key));
$rslt .= $character;
}
return urlencode(base64_encode($rslt));
}
public static function Decrypt($str)
{
$str = base64_decode(urldecode($str));
$rslt = \'\';
$key = \'QXJpZ2hvIEd1bWVyeSBTYW1vc2lyBMT2ReportPayrollSystem\';
for ($i = 0; $i < strlen($str); $i++) {
$character = substr($str, $i, 1);
$character_key = substr($key, ($i % strlen($key)) - 1, 1);
$character = chr(ord($character) - ord($character_key));
$rslt .= $character;
}
return $rslt;
}
public static function UniqueId($str = null)
{
// return substr($str, -3, 3) . date(\'ymdHis\') . gettimeofday()[\'usec\'] . rand(10,99);
return date(\'ymdHis\') . gettimeofday()[\'usec\'] . rand(10, 99);
}
public static function UniqIdReal($lenght = 13)
{
// uniqid gives 13 chars, but you could adjust it to your needs.
if (function_exists("random_bytes")) {
$bytes = random_bytes(ceil($lenght / 2));
} elseif (function_exists("openssl_random_pseudo_bytes")) {
$bytes = openssl_random_pseudo_bytes(ceil($lenght / 2));
} else {
throw new Exception("no cryptographically secure random function available");
}
return substr(bin2hex($bytes), 0, $lenght);
}
public static function Valdt_ThreeNum_Zero($str)
{
if ($str >= 1 && $str <= 9) {
$str_new = \'00\' . $str;
} else if ($str >= 9 && $str <= 99) {
$str_new = \'0\' . $str;
} else if ($str >= 99) {
$str_new = $str;
} else {
$str_new = \'001\';
}
return $str_new;
}
public static function nbsp($count = null)
{
$counts = $count == null ? 0 : $count;
$str = \'\';
for ($i = 1; $i < $counts; $i++) {
$str .= \' \';
}
return $str;
}
public static function Date_Min_EN_ID($date = null)
{
$date_expl = explode(\'-\', $date);
return $date_expl[0] . \'-\' . Accesscontrol_Helper::Array_Month_Indonesian($date_expl[1]) . \'-\' . $date_expl[2];
}
public static function Date_Min_ID_EN($date = null)
{
$date_expl = explode(\'-\', $date);
return $date_expl[2] . \'-\' . Accesscontrol_Helper::Array_Month_Indonesian($date_expl[1]) . \'-\' . $date_expl[0];
}
public static function Date_Slash_EN_ID($date = null)
{
$date_expl = explode(\'/\', $date);
return $date_expl[2] . \'/\' . Accesscontrol_Helper::Array_Month_Indonesian($date_expl[1]) . \'/\' . $date_expl[0];
}
public static function Date_Slash_ID_EN($date = null)
{
$date_expl = explode(\'/\', $date);
return $date_expl[0] . \'/\' . Accesscontrol_Helper::Array_Month_Indonesian($date_expl[1]) . \'/\' . $date_expl[2];
}
public static function Day_Min_EN($date = null)
{
return date(\'l\', strtotime($date));
}
public static function Day_Min_ID($date = null)
{
$date_new = date(\'l\', strtotime($date));
return Accesscontrol_Helper::Array_Day_Indonesian($date_new);
}
public static function Remaining_Time($date_1 = null, $date_2 = null)
{
$date1 = $date_1;
$date2 = $date_2;
$ts1 = strtotime($date1);
$ts2 = strtotime($date2);
$year1 = date(\'Y\', $ts1);
$year2 = date(\'Y\', $ts2);
$month1 = date(\'m\', $ts1);
$month2 = date(\'m\', $ts2);
$day1 = date(\'d\', $ts1);
$day2 = date(\'d\', $ts2);
$diff = (($year2 - $year1) * 12) + ($month2 - $month1);
$tahun = round($diff / 12);
if (!is_integer($diff / 12)) {
$tahun = $tahun - 1;
}
if ($tahun < 10) {
$tahun = \'0\' . $tahun;
}
$sisabulan = $diff % 12;
if ($sisabulan < 10) {
$sisabulan = \'0\' . $sisabulan;
}
$data[\'jumlah_bulan\'] = $diff;
$d1 = new DateTime($date1);
$d2 = new DateTime($date2);
$diff = $d2->diff($d1);
$data[\'MasaKerja\'] = $diff->y . \',\' . $sisabulan;
return $data[\'MasaKerja\'];
}
public static function Date_Repl_Min_DDMMYYYY_2_YYYYMMDD($date = null)
{
$date_original = $date;
// Creating timestamp from given date
$timestamp = strtotime($date_original);
// Creating new date format from that timestamp
$date_new = date("Y-m-d", $timestamp);
return $date_new; // Outputs
}
public static function Date_Repl_Min_YYYYMMDD_2_DDMMYYYY($date = null)
{
$date_original = $date;
// Creating timestamp from given date
$timestamp = strtotime($date_original);
// Creating new date format from that timestamp
$date_new = date("d-m-Y", $timestamp);
return $date_new; // Outputs
}
public static function Date_Repl_Min_YYYYMMDD_2_DDMMYYYY_English($date = null)
{
$date_original = $date;
// Creating timestamp from given date
$timestamp = strtotime($date_original);
// Creating new date format from that timestamp
$date_new = date(\'d-F-Y\', $timestamp);
return $date_new; // Outputs
}
public static function MonthName_toNumber($month = null)
{
$arry = [
\'January\' => 1,
\'February\' => 2,
\'March\' => 3,
\'April\' => 4,
\'May\' => 5,
\'June\' => 6,
\'July\' => 7,
\'August\' => 8,
\'September\' => 9,
\'October\' => 10,
\'November\' => 11,
\'December\' => 12,
];
return Accesscontrol_Helper::AddZero_BeforeTen($arry[$month]);
}
public static function MonthName_Short_toLong($month = null)
{
$months = [
\'Jan\' => \'January\',
\'Feb\' => \'February\',
\'Mar\' => \'March\',
\'Apr\' => \'April\',
\'May\' => \'May\',
\'Jun\' => \'June\',
\'Jul\' => \'July\',
\'Aug\' => \'August\',
\'Sep\' => \'September\',
\'Oct\' => \'October\',
\'Nov\' => \'November\',
\'Dec\' => \'December\',
];
return $months[$month];
}
public static function MonthName_Long_toShort($month = null)
{
$months = [
\'January\' => \'Jan\',
\'February\' => \'Feb\',
\'March\' => \'Mar\',
\'April\' => \'Apr\',
\'May\' => \'May\',
\'June\' => \'Jun\',
\'July\' => \'Jul\',
\'August\' => \'Aug\',
\'September\' => \'Sep\',
\'October\' => \'Oct\',
\'November\' => \'Nov\',
\'December\' => \'Dec\',
];
return $months[$month];
}
public static function Time_Difference($date1, $date2, $format = false) {
$diff = date_diff( date_create($date1), date_create($date2) );
if ($format)
return $diff->format($format);
return [\'y\' => $diff->y,
\'m\' => $diff->m,
\'d\' => $diff->d,
\'h\' => $diff->h,
\'i\' => $diff->i,
\'s\' => $diff->s
];
}
}
'
Did this file decode correctly?
Original Code
eval("?>".base64_decode("PD9waHANCg0KaWYgKCFkZWZpbmVkKCdCQVNFUEFUSCcpKSBleGl0KCdObyBkaXJlY3Qgc2NyaXB0IGFjY2VzcyBhbGxvd2VkJyk7DQoNCmNsYXNzIEFjY2Vzc2NvbnRyb2xfSGVscGVyDQp7DQoJLy8gSWRVbmlxdWUsIENvZGVOYW1lLCBVc3JOYW1lLCBVc3JJZCwgTmFtZSwgRGF0YQ0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gTG9naW5BY3Rpdml0eV9Mb2coJEFjdGl2aXR5TG9nSWRVbmlxdWUsICRBY3Rpdml0eUxvZ0NvZGVOYW1lLCAkQWN0aXZpdHlMb2dVc3JOYW1lLCAkQWN0aXZpdHlMb2dVc3JJZCwgJEFjdGl2aXR5TG9nTmFtZSwgJEFjdGl2aXR5TG9nRGF0YSwgJEFjdGl2aXR5TG9nU3RhdHVzKQ0KCXsNCgkJJENJID0gJmdldF9pbnN0YW5jZSgpOw0KDQoJCS8vIGxvYWQgbW9kZWwNCgkJJENJLT5sb2FkLT5tb2RlbCgnTV9BY3Rpdml0eScpOw0KDQoJCWlmIChzdHJ0b2xvd2VyKCRBY3Rpdml0eUxvZ0NvZGVOYW1lKSA9PSAnbG9naW4nKSB7DQoJCQkkQWN0aXZpdHlMb2dDb2RlID0gMDsNCgkJfSBlbHNlIGlmIChzdHJ0b2xvd2VyKCRBY3Rpdml0eUxvZ0NvZGVOYW1lKSA9PSAnbG9nb3V0Jykgew0KCQkJJEFjdGl2aXR5TG9nQ29kZSA9IDE7DQoJCX0NCg0KCQkkcGFyYW1bJ0xBTF9JZFVuaXF1ZSddIAkJCT0gJEFjdGl2aXR5TG9nSWRVbmlxdWU7DQoJCSRwYXJhbVsnTEFMX0NvZGUnXSAJCQkJPSAkQWN0aXZpdHlMb2dDb2RlOw0KCQkkcGFyYW1bJ0xBTF9Db2RlTmFtZSddIAkJCT0gJEFjdGl2aXR5TG9nQ29kZU5hbWU7DQoJCSRwYXJhbVsnTEFMX1Vzck5hbWUnXSAJCQk9ICRBY3Rpdml0eUxvZ1Vzck5hbWU7DQoJCSRwYXJhbVsnTEFMX05hbWUnXSAJCQkJPSAkQWN0aXZpdHlMb2dOYW1lOw0KCQkkcGFyYW1bJ0xBTF9EYXRhJ10gCQkJCT0gJEFjdGl2aXR5TG9nRGF0YTsNCgkJJHBhcmFtWydMQUxfU3RhdHVzJ10gCQkJPSAkQWN0aXZpdHlMb2dTdGF0dXM7DQoJCSRwYXJhbVsnTEFMX1VzcklkJ10gCQkJPSAkQWN0aXZpdHlMb2dVc3JJZDsNCgkJJHBhcmFtWydMQUxfQ3JlYXRlZF9UeXBlSUQnXSAJPSBkYXRlKCdkLUYtWSBIOmk6cycpOw0KDQoJCS8vIHNhdmUgdG8gZGINCgkJJENJLT5NX0FjdGl2aXR5LT5TYXZlX0xvZ2luQWN0aXZpdHlMb2coJHBhcmFtKTsNCgl9DQoNCg0KCS8vIElkVW5pcXVlLCBDb2RlTmFtZSwgVXNyTmFtZSwgVXNySWQsIE5hbWUsIERhdGENCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIEFjdGl2aXR5X0xvZygkQWN0aXZpdHlMb2dJZFVuaXF1ZSwgJEFjdGl2aXR5TG9nQ29kZU5hbWUsICRBY3Rpdml0eUxvZ1Vzck5hbWUsICRBY3Rpdml0eUxvZ1VzcklkLCAkQWN0aXZpdHlMb2dOYW1lLCAkQWN0aXZpdHlMb2dEYXRhLCAkQWN0aXZpdHlMb2dTdGF0dXMpDQoJew0KCQkkQ0kgPSAmZ2V0X2luc3RhbmNlKCk7DQoNCgkJLy8gbG9hZCBtb2RlbA0KCQkkQ0ktPmxvYWQtPm1vZGVsKCdNX0FjdGl2aXR5Jyk7DQoNCgkJaWYgKHN0cnRvbG93ZXIoJEFjdGl2aXR5TG9nQ29kZU5hbWUpID09ICdsb2dpbicpIHsNCgkJCSRBY3Rpdml0eUxvZ0NvZGUgPSAwOw0KCQl9IGVsc2UgaWYgKHN0cnRvbG93ZXIoJEFjdGl2aXR5TG9nQ29kZU5hbWUpID09ICdsb2dvdXQnKSB7DQoJCQkkQWN0aXZpdHlMb2dDb2RlID0gMTsNCgkJfSBlbHNlIGlmIChzdHJ0b2xvd2VyKCRBY3Rpdml0eUxvZ0NvZGVOYW1lKSA9PSAnYWRkJykgew0KCQkJJEFjdGl2aXR5TG9nQ29kZSA9IDI7DQoJCX0gZWxzZSBpZiAoc3RydG9sb3dlcigkQWN0aXZpdHlMb2dDb2RlTmFtZSkgPT0gJ3VwZGF0ZScpIHsNCgkJCSRBY3Rpdml0eUxvZ0NvZGUgPSAzOw0KCQl9IGVsc2UgaWYgKHN0cnRvbG93ZXIoJEFjdGl2aXR5TG9nQ29kZU5hbWUpID09ICdkZWxldGUnKSB7DQoJCQkkQWN0aXZpdHlMb2dDb2RlID0gNDsNCgkJfQ0KDQoJCSRwYXJhbVsnQUxfSWRVbmlxdWUnXSAJCQk9ICRBY3Rpdml0eUxvZ0lkVW5pcXVlOw0KCQkkcGFyYW1bJ0FMX0NvZGUnXSAJCQkJPSAkQWN0aXZpdHlMb2dDb2RlOw0KCQkkcGFyYW1bJ0FMX0NvZGVOYW1lJ10gCQkJPSAkQWN0aXZpdHlMb2dDb2RlTmFtZTsNCgkJJHBhcmFtWydBTF9Vc3JOYW1lJ10gCQkJPSAkQWN0aXZpdHlMb2dVc3JOYW1lOw0KCQkkcGFyYW1bJ0FMX05hbWUnXSAJCQkJPSAkQWN0aXZpdHlMb2dOYW1lOw0KCQkkcGFyYW1bJ0FMX0RhdGEnXSAJCQkJPSAkQWN0aXZpdHlMb2dEYXRhOw0KCQkkcGFyYW1bJ0FMX1N0YXR1cyddIAkJCT0gJEFjdGl2aXR5TG9nU3RhdHVzOw0KCQkkcGFyYW1bJ0FMX1VzcklkJ10gCQkJCT0gJEFjdGl2aXR5TG9nVXNySWQ7DQoJCSRwYXJhbVsnQUxfQ3JlYXRlZF9UeXBlSUQnXSAJPSBkYXRlKCdkLUYtWSBIOmk6cycpOw0KDQoJCS8vIHNhdmUgdG8gZGINCgkJJENJLT5NX0FjdGl2aXR5LT5TYXZlX0FjdGl2aXR5TG9nKCRwYXJhbSk7DQoJfQ0KDQoNCgkvLyBQYWdlIC8gQ29udHJvbGxlcg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gVmlzaXRvcl9Db3VudGVyKCRWaXNpdG9yQ291bnRlcl9QYWdlKQ0KCXsNCgkJJENJID0gJmdldF9pbnN0YW5jZSgpOw0KDQoJCS8vIGxvYWQgbW9kZWwNCgkJJENJLT5sb2FkLT5saWJyYXJ5KCd1c2VyX2FnZW50Jyk7DQoNCgkJJHBhcmFtWydWQ19QYWdlJ10gCQkJPSAkVmlzaXRvckNvdW50ZXJfUGFnZTsNCgkJJHBhcmFtWydWQ19WZXJzaW9uJ10gCQk9ICRDSS0+YWdlbnQtPnZlcnNpb24oKTsNCgkJJHBhcmFtWydWQ19Ccm93c2VyJ10gCQk9ICRDSS0+YWdlbnQtPmJyb3dzZXIoKTsNCgkJJHBhcmFtWydWQ19QbGF0Zm9ybSddIAkJPSAkQ0ktPmFnZW50LT5wbGF0Zm9ybSgpOw0KCQkkcGFyYW1bJ1ZDX0lQX0FkZHJlc3MnXSAJPSAkQ0ktPmlucHV0LT5pcF9hZGRyZXNzKCk7DQoJCSRwYXJhbVsnVkNfVXNlckFnZW50J10gCQk9ICRDSS0+YWdlbnQtPmFnZW50X3N0cmluZygpOw0KCQkkcGFyYW1bJ1ZDX0RhdGVfVHlwZUlEJ10gCT0gZGF0ZSgnZC1GLVkgSDppOnMnKTsNCgkJJHBhcmFtWydWQ19Db3VudGVyJ10gCQk9IDE7DQoNCgkJLy8gc2F2ZSB0byBkYg0KCQkkQ0ktPk1fQWN0aXZpdHktPlNhdmVfVmlzaXRvckNvdW50ZXIoJHBhcmFtKTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gSXNfTW9kZSgpDQoJew0KCQkkQ0kgPSAmZ2V0X2luc3RhbmNlKCk7DQoNCgkJLy8gbG9hZCBtb2RlbA0KCQkkQ0ktPmxvYWQtPm1vZGVsKCdNX0lzTW9kZScpOw0KDQoJCWlmIChAY291bnQoJENJLT5NX0lzTW9kZS0+aXNTZXR0aW5nX0dldCgnU3RhdHVzJykpID4gMCkgew0KCQkJaWYgKCRDSS0+TV9Jc01vZGUtPmlzU2V0dGluZ19HZXQoJ1N0YXR1cycpLT5TZXR0aW5nVmFsdWUgPT0gJ0RlZmF1bHQgTW9kZScpIHsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0gZWxzZSB7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfQ0KDQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIEdldF9Jc19Nb2RlKCRTdHRnX05hbWUpDQoJew0KCQkkQ0kgPSAmZ2V0X2luc3RhbmNlKCk7DQoNCgkJLy8gbG9hZCBtb2RlbA0KCQkkQ0ktPmxvYWQtPm1vZGVsKCdNX0lzTW9kZScpOw0KDQoJCXJldHVybiAkQ0ktPk1fSXNNb2RlLT5pc1NldHRpbmdfR2V0KCRTdHRnX05hbWUpOw0KCX0NCg0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBHZXR0aW5nc01zZygpDQoJew0KCQkkdGltZSA9IGRhdGUoIkgiKTsNCgkJJHRpbWVab25lID0gZGF0ZSgiZSIpOw0KCQkkbXNnID0gJyc7DQoNCgkJaWYgKCR0aW1lIDwgIjA2Iikgew0KCQkJJG1zZyA9ICJTZWxhbWF0IERpbmkgSGFyaSI7DQoJCX0gZWxzZQ0KCQlpZiAoJHRpbWUgPj0gIjA2IiAmJiAkdGltZSA8ICIxMCIpIHsNCgkJCSRtc2cgPSAiU2VsYW1hdCBQYWdpIjsNCgkJfSBlbHNlDQoJCWlmICgkdGltZSA+PSAiMTAiICYmICR0aW1lIDwgIjE1Iikgew0KCQkJJG1zZyA9ICJTZWxhbWF0IFNpYW5nIjsNCgkJfSBlbHNlDQoJCWlmICgkdGltZSA+PSAiMTUiICYmICR0aW1lIDwgIjE4Iikgew0KCQkJJG1zZyA9ICJTZWxhbWF0IFNvcmUiOw0KCQl9IGVsc2UNCgkJaWYgKCR0aW1lID49ICIxOCIgJiYgJHRpbWUgPCAiMTkiKSB7DQoJCQkkbXNnID0gIlNlbGFtYXQgUGV0YW5nIjsNCgkJfSBlbHNlDQoJCWlmICgkdGltZSA+PSAiMTkiKSB7DQoJCQkkbXNnID0gIlNlbGFtYXQgTWFsYW0iOw0KCQl9DQoNCgkJcmV0dXJuICRtc2c7DQoJfQ0KDQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIElzX0xvZ2dpbl9JbigpDQoJew0KCQkkQ0kgPSAmZ2V0X2luc3RhbmNlKCk7DQoNCgkJaWYgKCFlbXB0eSgkQ0ktPnNlc3Npb24tPnVzZXJkYXRhWydVc3JOYW1lJ10pICYmICRDSS0+c2Vzc2lvbi0+dXNlcmRhdGFbJ2lzX2xvZ2dlZF9pbiddID09IFRSVUUgJiYgJENJLT5zZXNzaW9uLT51c2VyZGF0YVsnbG9nZ2luX2luX2JtdDJfcGF5cm9sbF9zeXN0ZW0nXSA9PSBUUlVFKSB7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KCX0NCg0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBBZGRaZXJvX0JlZm9yZVRlbigkbnVtYmVyID0gbnVsbCkNCgl7DQoJCSRudW1iZXJEZWZhdWx0ID0gISRudW1iZXIgPyAnMTAnIDogJG51bWJlcjsNCg0KCQlyZXR1cm4gKCRudW1iZXJEZWZhdWx0IDwgMTAgPyAnMCcgLiAkbnVtYmVyRGVmYXVsdCA6ICRudW1iZXJEZWZhdWx0KTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQXJyYXlfTW9udGhfU2hvcnRfRW5nbGlzaCgkZGF0YSA9IG51bGwpDQoJew0KCQkkbW9udGhzID0gWw0KCQkJMSA9PiAnSmFuJywNCgkJCTIgPT4gJ0ZlYicsDQoJCQkzID0+ICdNYXInLA0KCQkJNCA9PiAnQXByJywNCgkJCTUgPT4gJ01heScsDQoJCQk2ID0+ICdKdW4nLA0KCQkJNyA9PiAnSnVsJywNCgkJCTggPT4gJ0F1ZycsDQoJCQk5ID0+ICdTZXAnLA0KCQkJMTAgPT4gJ09jdCcsDQoJCQkxMSA9PiAnTm92JywNCgkJCTEyID0+ICdEZWMnLA0KCQldOw0KDQoJCXJldHVybiAkbW9udGhzWyhpbnQpICRkYXRhXTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQXJyYXlfTW9udGhfSW5kb25lc2lhbigkZGF0YSA9IG51bGwpDQoJew0KCQkkbW9udGhzID0gWw0KCQkJMSA9PiAnSmFudWFyaScsDQoJCQkyID0+ICdGZWJydWFyaScsDQoJCQkzID0+ICdNYXJldCcsDQoJCQk0ID0+ICdBcHJpbCcsDQoJCQk1ID0+ICdNZWknLA0KCQkJNiA9PiAnSnVuaScsDQoJCQk3ID0+ICdKdWxpJywNCgkJCTggPT4gJ0FndXN0dXMnLA0KCQkJOSA9PiAnU2VwdGVtYmVyJywNCgkJCTEwID0+ICdPa3RvYmVyJywNCgkJCTExID0+ICdOb3ZlbWJlcicsDQoJCQkxMiA9PiAnRGVzZW1iZXInLA0KCQldOw0KDQoJCXJldHVybiAkbW9udGhzWyhpbnQpICRkYXRhXTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQXJyYXlfTW9udGhfRW5nbGlzaCgkZGF0YSA9IG51bGwpDQoJew0KCQkkbW9udGhzID0gWw0KCQkJMCA9PiAnRGVjZW1iZXInLA0KCQkJMSA9PiAnSmFudWFyeScsDQoJCQkyID0+ICdGZWJydWFyeScsDQoJCQkzID0+ICdNYXJjaCcsDQoJCQk0ID0+ICdBcHJpbCcsDQoJCQk1ID0+ICdNYXkgJywNCgkJCTYgPT4gJ0p1bmUnLA0KCQkJNyA9PiAnSnVseScsDQoJCQk4ID0+ICdBdWd1c3QnLA0KCQkJOSA9PiAnU2VwdGVtYmVyJywNCgkJCTEwID0+ICdPY3RvYmVyJywNCgkJCTExID0+ICdOb3ZlbWJlcicsDQoJCQkxMiA9PiAnRGVjZW1iZXInLA0KCQldOw0KDQoJCXJldHVybiAkbW9udGhzWyhpbnQpICRkYXRhXTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQXJyYXlfRGF5X0luZG9uZXNpYW4oJGRhdGEgPSBudWxsKQ0KCXsNCgkJJGRheXMgPSBbDQoJCQknU3VuZGF5JyAJCT0+ICdNaW5nZ3UnLA0KCQkJJ01vbmRheScgCQk9PiAnU2VuaW4nLA0KCQkJJ1R1ZXNkYXknIAkJPT4gJ1NlbGFzYScsDQoJCQknV2VkbmVzZGF5JyAJPT4gJ1JhYnUnLA0KCQkJJ1RodXJzZGF5JyAJCT0+ICdLYW1pcycsDQoJCQknRnJpZGF5JyAJCT0+ICdKdW1hdCcsDQoJCQknU2F0dXJkYXknIAkJPT4gJ1NhYnR1JywNCgkJXTsNCg0KCQlyZXR1cm4gJGRheXNbJGRhdGFdOw0KCX0NCg0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBEYXRlUmVwbGFjZV9ZbWRfdG9fZG1ZKCRkYXRlID0gbnVsbCkNCgl7DQoJCS8vIHZhciBkYXRlIGVnLT4gMjAxOS0wNy0xNw0KCQkkZGF0ZUV4cGxvZGUgPSBleHBsb2RlKCctJywgJGRhdGUpOw0KCQlAJGRhdGVOZXcgPSAkZGF0ZUV4cGxvZGVbMl0gLiAnLScgLiAkdGhpcy0+YXJyYXlfTW9udGhfSW5kb25lc2lhbigkZGF0ZUV4cGxvZGVbMV0pIC4gJy0nIC4gJGRhdGVFeHBsb2RlWzJdOw0KDQoJCXJldHVybiAkZGF0ZU5ldzsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gRGF0ZVJlcGxhY2VfdG9fWW1kKCRkYXRlID0gbnVsbCkNCgl7DQoJCSRkYXRlRGVmYXVsdCA9IHN0cnRvdGltZSgkZGF0ZSk7DQoNCgkJJG5ld0Zvcm1hdCA9IGRhdGUoJ1ktbS1kJywgJGRhdGVEZWZhdWx0KTsNCg0KCQlyZXR1cm4gJG5ld0Zvcm1hdDsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gRGF0ZVRpbWVSZXBsYWNlX3RvXzEySG91cnNfRm9ybWF0KCRkYXRlID0gbnVsbCkNCgl7DQoJCS8vIHZhciBkYXRlIGVnID0gJzIwMTktMDctMTcgMjI6MTU6MDAnICcyMDE5LTA3LTE3IDIyOjM1OjAwJw0KCQkkbmV3X0RhdGVUaW1lID0gZGF0ZSgnaDppIEEnLCBzdHJ0b3RpbWUoJGRhdGUpKTsNCg0KCQlyZXR1cm4gJG5ld19EYXRlVGltZTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gQmFzZTY0VVJMX0VuY29kZSgkZGF0YSkNCgl7DQoJCXJldHVybiBydHJpbShzdHJ0cihiYXNlNjRfZW5jb2RlKCRkYXRhKSwgJysvJywgJy1fJyksICc9Jyk7DQoJfQ0KDQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIEJhc2U2NFVSTF9EZWNvZGUoJGRhdGEpDQoJew0KCQlyZXR1cm4gYmFzZTY0X2RlY29kZShzdHJfcGFkKHN0cnRyKCRkYXRhLCAnLV8nLCAnKy8nKSwgc3RybGVuKCRkYXRhKSAlIDQsICc9JywgU1RSX1BBRF9SSUdIVCkpOw0KCX0NCg0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBFbmNyeXB0KCRzdHIpDQoJew0KCQkkcnNsdCA9ICcnOw0KCQkka2V5ID0gJ1FYSnBaMmh2SUVkMWJXVnllU0JUWVcxdmMybHlCTVQyUmVwb3J0UGF5cm9sbFN5c3RlbSc7DQoJCWZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkc3RyKTsgJGkrKykgew0KCQkJJGNoYXJhY3RlciA9IHN1YnN0cigkc3RyLCAkaSwgMSk7DQoJCQkkY2hhcmFjdGVyX2tleSA9IHN1YnN0cigka2V5LCAoJGkgJSBzdHJsZW4oJGtleSkpIC0gMSwgMSk7DQoJCQkkY2hhcmFjdGVyID0gY2hyKG9yZCgkY2hhcmFjdGVyKSArIG9yZCgkY2hhcmFjdGVyX2tleSkpOw0KCQkJJHJzbHQgLj0gJGNoYXJhY3RlcjsNCgkJfQ0KCQlyZXR1cm4gdXJsZW5jb2RlKGJhc2U2NF9lbmNvZGUoJHJzbHQpKTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gRGVjcnlwdCgkc3RyKQ0KCXsNCgkJJHN0ciA9IGJhc2U2NF9kZWNvZGUodXJsZGVjb2RlKCRzdHIpKTsNCgkJJHJzbHQgPSAnJzsNCgkJJGtleSA9ICdRWEpwWjJodklFZDFiV1Z5ZVNCVFlXMXZjMmx5Qk1UMlJlcG9ydFBheXJvbGxTeXN0ZW0nOw0KCQlmb3IgKCRpID0gMDsgJGkgPCBzdHJsZW4oJHN0cik7ICRpKyspIHsNCgkJCSRjaGFyYWN0ZXIgPSBzdWJzdHIoJHN0ciwgJGksIDEpOw0KCQkJJGNoYXJhY3Rlcl9rZXkgPSBzdWJzdHIoJGtleSwgKCRpICUgc3RybGVuKCRrZXkpKSAtIDEsIDEpOw0KCQkJJGNoYXJhY3RlciA9IGNocihvcmQoJGNoYXJhY3RlcikgLSBvcmQoJGNoYXJhY3Rlcl9rZXkpKTsNCgkJCSRyc2x0IC49ICRjaGFyYWN0ZXI7DQoJCX0NCgkJcmV0dXJuICRyc2x0Ow0KCX0NCg0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBVbmlxdWVJZCgkc3RyID0gbnVsbCkNCgl7DQoJCS8vIHJldHVybiBzdWJzdHIoJHN0ciwgLTMsIDMpIC4gZGF0ZSgneW1kSGlzJykgLiBnZXR0aW1lb2ZkYXkoKVsndXNlYyddIC4gcmFuZCgxMCw5OSk7DQoJCXJldHVybiBkYXRlKCd5bWRIaXMnKSAuIGdldHRpbWVvZmRheSgpWyd1c2VjJ10gLiByYW5kKDEwLCA5OSk7DQoJfQ0KDQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIFVuaXFJZFJlYWwoJGxlbmdodCA9IDEzKQ0KCXsNCgkJLy8gdW5pcWlkIGdpdmVzIDEzIGNoYXJzLCBidXQgeW91IGNvdWxkIGFkanVzdCBpdCB0byB5b3VyIG5lZWRzLg0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCJyYW5kb21fYnl0ZXMiKSkgew0KCQkJJGJ5dGVzID0gcmFuZG9tX2J5dGVzKGNlaWwoJGxlbmdodCAvIDIpKTsNCgkJfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygib3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzIikpIHsNCgkJCSRieXRlcyA9IG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcyhjZWlsKCRsZW5naHQgLyAyKSk7DQoJCX0gZWxzZSB7DQoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJubyBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgcmFuZG9tIGZ1bmN0aW9uIGF2YWlsYWJsZSIpOw0KCQl9DQoJCXJldHVybiBzdWJzdHIoYmluMmhleCgkYnl0ZXMpLCAwLCAkbGVuZ2h0KTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gVmFsZHRfVGhyZWVOdW1fWmVybygkc3RyKQ0KCXsNCgkJaWYgKCRzdHIgPj0gMSAmJiAkc3RyIDw9IDkpIHsNCgkJCSRzdHJfbmV3ID0gJzAwJyAuICRzdHI7DQoJCX0gZWxzZSBpZiAoJHN0ciA+PSA5ICYmICRzdHIgPD0gOTkpIHsNCgkJCSRzdHJfbmV3ID0gJzAnIC4gJHN0cjsNCgkJfSBlbHNlIGlmICgkc3RyID49IDk5KSB7DQoJCQkkc3RyX25ldyA9ICRzdHI7DQoJCX0gZWxzZSB7DQoJCQkkc3RyX25ldyA9ICcwMDEnOw0KCQl9DQoNCgkJcmV0dXJuICRzdHJfbmV3Ow0KCX0NCg0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuYnNwKCRjb3VudCA9IG51bGwpDQoJew0KCQkkY291bnRzID0gJGNvdW50ID09IG51bGwgPyAwIDogJGNvdW50Ow0KCQkkc3RyID0gJyc7DQoNCgkJZm9yICgkaSA9IDE7ICRpIDwgJGNvdW50czsgJGkrKykgew0KCQkJJHN0ciAuPSAnJm5ic3A7JzsNCgkJfQ0KDQoJCXJldHVybiAkc3RyOw0KCX0NCg0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBEYXRlX01pbl9FTl9JRCgkZGF0ZSA9IG51bGwpDQoJew0KCQkkZGF0ZV9leHBsID0gZXhwbG9kZSgnLScsICRkYXRlKTsNCg0KCQlyZXR1cm4gJGRhdGVfZXhwbFswXSAuICctJyAuIEFjY2Vzc2NvbnRyb2xfSGVscGVyOjpBcnJheV9Nb250aF9JbmRvbmVzaWFuKCRkYXRlX2V4cGxbMV0pIC4gJy0nIC4gJGRhdGVfZXhwbFsyXTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gRGF0ZV9NaW5fSURfRU4oJGRhdGUgPSBudWxsKQ0KCXsNCgkJJGRhdGVfZXhwbCA9IGV4cGxvZGUoJy0nLCAkZGF0ZSk7DQoNCgkJcmV0dXJuICRkYXRlX2V4cGxbMl0gLiAnLScgLiBBY2Nlc3Njb250cm9sX0hlbHBlcjo6QXJyYXlfTW9udGhfSW5kb25lc2lhbigkZGF0ZV9leHBsWzFdKSAuICctJyAuICRkYXRlX2V4cGxbMF07DQoJfQ0KDQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIERhdGVfU2xhc2hfRU5fSUQoJGRhdGUgPSBudWxsKQ0KCXsNCgkJJGRhdGVfZXhwbCA9IGV4cGxvZGUoJy8nLCAkZGF0ZSk7DQoNCgkJcmV0dXJuICRkYXRlX2V4cGxbMl0gLiAnLycgLiBBY2Nlc3Njb250cm9sX0hlbHBlcjo6QXJyYXlfTW9udGhfSW5kb25lc2lhbigkZGF0ZV9leHBsWzFdKSAuICcvJyAuICRkYXRlX2V4cGxbMF07DQoJfQ0KDQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIERhdGVfU2xhc2hfSURfRU4oJGRhdGUgPSBudWxsKQ0KCXsNCgkJJGRhdGVfZXhwbCA9IGV4cGxvZGUoJy8nLCAkZGF0ZSk7DQoNCgkJcmV0dXJuICRkYXRlX2V4cGxbMF0gLiAnLycgLiBBY2Nlc3Njb250cm9sX0hlbHBlcjo6QXJyYXlfTW9udGhfSW5kb25lc2lhbigkZGF0ZV9leHBsWzFdKSAuICcvJyAuICRkYXRlX2V4cGxbMl07DQoJfQ0KDQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIERheV9NaW5fRU4oJGRhdGUgPSBudWxsKQ0KCXsNCgkJcmV0dXJuIGRhdGUoJ2wnLCBzdHJ0b3RpbWUoJGRhdGUpKTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gRGF5X01pbl9JRCgkZGF0ZSA9IG51bGwpDQoJew0KCQkkZGF0ZV9uZXcgPSAgZGF0ZSgnbCcsIHN0cnRvdGltZSgkZGF0ZSkpOw0KDQoJCXJldHVybiBBY2Nlc3Njb250cm9sX0hlbHBlcjo6QXJyYXlfRGF5X0luZG9uZXNpYW4oJGRhdGVfbmV3KTsNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gUmVtYWluaW5nX1RpbWUoJGRhdGVfMSA9IG51bGwsICRkYXRlXzIgPSBudWxsKQ0KCXsNCgkJJGRhdGUxID0gJGRhdGVfMTsNCgkJJGRhdGUyID0gJGRhdGVfMjsNCg0KCQkkdHMxID0gc3RydG90aW1lKCRkYXRlMSk7DQoJCSR0czIgPSBzdHJ0b3RpbWUoJGRhdGUyKTsNCg0KCQkkeWVhcjEgPSBkYXRlKCdZJywgJHRzMSk7DQoJCSR5ZWFyMiA9IGRhdGUoJ1knLCAkdHMyKTsNCg0KCQkkbW9udGgxID0gZGF0ZSgnbScsICR0czEpOw0KCQkkbW9udGgyID0gZGF0ZSgnbScsICR0czIpOw0KDQoJCSRkYXkxID0gZGF0ZSgnZCcsICR0czEpOw0KCQkkZGF5MiA9IGRhdGUoJ2QnLCAkdHMyKTsNCg0KCQkkZGlmZiA9ICgoJHllYXIyIC0gJHllYXIxKSAqIDEyKSArICgkbW9udGgyIC0gJG1vbnRoMSk7DQoNCgkJJHRhaHVuID0gcm91bmQoJGRpZmYgLyAxMik7DQoJCWlmICghaXNfaW50ZWdlcigkZGlmZiAvIDEyKSkgew0KCQkJJHRhaHVuID0gJHRhaHVuIC0gMTsNCgkJfQ0KCQlpZiAoJHRhaHVuIDwgMTApIHsNCgkJCSR0YWh1biA9ICcwJyAuICR0YWh1bjsNCgkJfQ0KCQkkc2lzYWJ1bGFuID0gJGRpZmYgJSAxMjsNCg0KCQlpZiAoJHNpc2FidWxhbiA8IDEwKSB7DQoJCQkkc2lzYWJ1bGFuID0gJzAnIC4gJHNpc2FidWxhbjsNCgkJfQ0KCQkkZGF0YVsnanVtbGFoX2J1bGFuJ10gPSAkZGlmZjsNCg0KDQoJCSRkMSA9IG5ldyBEYXRlVGltZSgkZGF0ZTEpOw0KCQkkZDIgPSBuZXcgRGF0ZVRpbWUoJGRhdGUyKTsNCg0KCQkkZGlmZiA9ICRkMi0+ZGlmZigkZDEpOw0KDQoJCSRkYXRhWydNYXNhS2VyamEnXSA9ICRkaWZmLT55IC4gJywnIC4gJHNpc2FidWxhbjsNCg0KCQlyZXR1cm4gJGRhdGFbJ01hc2FLZXJqYSddOw0KCX0NCg0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBEYXRlX1JlcGxfTWluX0RETU1ZWVlZXzJfWVlZWU1NREQoJGRhdGUgPSBudWxsKQ0KCXsNCgkJJGRhdGVfb3JpZ2luYWwgPSAkZGF0ZTsNCg0KCQkvLyBDcmVhdGluZyB0aW1lc3RhbXAgZnJvbSBnaXZlbiBkYXRlDQoJCSR0aW1lc3RhbXAgPSBzdHJ0b3RpbWUoJGRhdGVfb3JpZ2luYWwpOw0KDQoJCS8vIENyZWF0aW5nIG5ldyBkYXRlIGZvcm1hdCBmcm9tIHRoYXQgdGltZXN0YW1wDQoJCSRkYXRlX25ldyA9IGRhdGUoIlktbS1kIiwgJHRpbWVzdGFtcCk7DQoJCXJldHVybiAkZGF0ZV9uZXc7IC8vIE91dHB1dHMNCgl9DQoNCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gRGF0ZV9SZXBsX01pbl9ZWVlZTU1ERF8yX0RETU1ZWVlZKCRkYXRlID0gbnVsbCkNCgl7DQoJCSRkYXRlX29yaWdpbmFsID0gJGRhdGU7DQoNCgkJLy8gQ3JlYXRpbmcgdGltZXN0YW1wIGZyb20gZ2l2ZW4gZGF0ZQ0KCQkkdGltZXN0YW1wID0gc3RydG90aW1lKCRkYXRlX29yaWdpbmFsKTsNCg0KCQkvLyBDcmVhdGluZyBuZXcgZGF0ZSBmb3JtYXQgZnJvbSB0aGF0IHRpbWVzdGFtcA0KCQkkZGF0ZV9uZXcgPSBkYXRlKCJkLW0tWSIsICR0aW1lc3RhbXApOw0KCQlyZXR1cm4gJGRhdGVfbmV3OyAvLyBPdXRwdXRzDQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBEYXRlX1JlcGxfTWluX1lZWVlNTUREXzJfRERNTVlZWVlfRW5nbGlzaCgkZGF0ZSA9IG51bGwpDQoJew0KCQkkZGF0ZV9vcmlnaW5hbCA9ICRkYXRlOw0KDQoJCS8vIENyZWF0aW5nIHRpbWVzdGFtcCBmcm9tIGdpdmVuIGRhdGUNCgkJJHRpbWVzdGFtcCA9IHN0cnRvdGltZSgkZGF0ZV9vcmlnaW5hbCk7DQoNCgkJLy8gQ3JlYXRpbmcgbmV3IGRhdGUgZm9ybWF0IGZyb20gdGhhdCB0aW1lc3RhbXANCgkJJGRhdGVfbmV3ID0gZGF0ZSgnZC1GLVknLCAkdGltZXN0YW1wKTsNCgkJcmV0dXJuICRkYXRlX25ldzsgLy8gT3V0cHV0cw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gTW9udGhOYW1lX3RvTnVtYmVyKCRtb250aCA9IG51bGwpDQoJew0KCQkkYXJyeSA9IFsNCgkJCSdKYW51YXJ5JyAJCT0+IDEsDQoJCQknRmVicnVhcnknIAkJPT4gMiwNCgkJCSdNYXJjaCcgCQk9PiAzLA0KCQkJJ0FwcmlsJyAJCT0+IDQsDQoJCQknTWF5JyAJCQk9PiA1LA0KCQkJJ0p1bmUnIAkJCT0+IDYsDQoJCQknSnVseScgCQkJPT4gNywNCgkJCSdBdWd1c3QnIAkJPT4gOCwNCgkJCSdTZXB0ZW1iZXInIAk9PiA5LA0KCQkJJ09jdG9iZXInIAkJPT4gMTAsDQoJCQknTm92ZW1iZXInIAkJPT4gMTEsDQoJCQknRGVjZW1iZXInIAkJPT4gMTIsDQoJCV07DQoNCgkJcmV0dXJuIEFjY2Vzc2NvbnRyb2xfSGVscGVyOjpBZGRaZXJvX0JlZm9yZVRlbigkYXJyeVskbW9udGhdKTsNCgl9DQoNCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIE1vbnRoTmFtZV9TaG9ydF90b0xvbmcoJG1vbnRoID0gbnVsbCkNCgl7DQoJCSRtb250aHMgPSBbDQoJCQknSmFuJyA9PiAnSmFudWFyeScsDQoJCQknRmViJyA9PiAnRmVicnVhcnknLA0KCQkJJ01hcicgPT4gJ01hcmNoJywNCgkJCSdBcHInID0+ICdBcHJpbCcsDQoJCQknTWF5JyA9PiAnTWF5JywNCgkJCSdKdW4nID0+ICdKdW5lJywNCgkJCSdKdWwnID0+ICdKdWx5JywNCgkJCSdBdWcnID0+ICdBdWd1c3QnLA0KCQkJJ1NlcCcgPT4gJ1NlcHRlbWJlcicsDQoJCQknT2N0JyA9PiAnT2N0b2JlcicsDQoJCQknTm92JyA9PiAnTm92ZW1iZXInLA0KCQkJJ0RlYycgPT4gJ0RlY2VtYmVyJywNCgkJXTsNCg0KCQlyZXR1cm4gJG1vbnRoc1skbW9udGhdOw0KCX0NCg0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gTW9udGhOYW1lX0xvbmdfdG9TaG9ydCgkbW9udGggPSBudWxsKQ0KCXsNCgkJJG1vbnRocyA9IFsNCgkJCSdKYW51YXJ5JyA9PiAnSmFuJywNCgkJCSdGZWJydWFyeScgPT4gJ0ZlYicsDQoJCQknTWFyY2gnID0+ICdNYXInLA0KCQkJJ0FwcmlsJyA9PiAnQXByJywNCgkJCSdNYXknID0+ICdNYXknLA0KCQkJJ0p1bmUnID0+ICdKdW4nLA0KCQkJJ0p1bHknID0+ICdKdWwnLA0KCQkJJ0F1Z3VzdCcgPT4gJ0F1ZycsDQoJCQknU2VwdGVtYmVyJyA9PiAnU2VwJywNCgkJCSdPY3RvYmVyJyA9PiAnT2N0JywNCgkJCSdOb3ZlbWJlcicgPT4gJ05vdicsDQoJCQknRGVjZW1iZXInID0+ICdEZWMnLA0KCQldOw0KDQoJCXJldHVybiAkbW9udGhzWyRtb250aF07DQoJfQ0KDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBUaW1lX0RpZmZlcmVuY2UoJGRhdGUxLCAkZGF0ZTIsICRmb3JtYXQgPSBmYWxzZSkgew0KCQkkZGlmZiA9IGRhdGVfZGlmZiggZGF0ZV9jcmVhdGUoJGRhdGUxKSwgZGF0ZV9jcmVhdGUoJGRhdGUyKSApOw0KCQlpZiAoJGZvcm1hdCkNCgkJcmV0dXJuICRkaWZmLT5mb3JtYXQoJGZvcm1hdCk7DQoNCgkJcmV0dXJuIFsneScgPT4gJGRpZmYtPnksDQoJCQknbScgPT4gJGRpZmYtPm0sDQoJCQknZCcgPT4gJGRpZmYtPmQsDQoJCQknaCcgPT4gJGRpZmYtPmgsDQoJCQknaScgPT4gJGRpZmYtPmksDQoJCQkncycgPT4gJGRpZmYtPnMNCgkJXTsNCgl9DQp9DQo="));
Function Calls
base64_decode | 1 |
Stats
MD5 | de057102f5d6458651e8909a0c492ad8 |
Eval Count | 1 |
Decode Time | 71 ms |