Returning 1 result(s) out of 1 in 0.073 second(s)

  • 14.225.254.32:443 (tcp/http/tls) - last seen on 2025-04-14 at 04:37:16 UTC

    • IP
      14.225.254.32
      Network
      14.225.240.0/20
      Domain(s)
      *.localhost *.test avatar.test bio.test dangky.test node_modules.test otp.test push.test search.test tiktok.test views.test vote-app.test
      Device

      <enterprise field>: device.class

      Operating System
      Microsoft Windows
      URL

      https://14.225.254.32/ 200

      HTTP Title
      Ứng dụng cần License
      ASN
      AS135905
      Organization
      VIETNAM POSTS AND TELECOMMUNICATIONS GROUP
      Protocol
      http
      Source
      datascan
    • NOTE
      This tab is a merge from current page results.
      CPE(s)
      Domain(s)
      *.localhost *.test avatar.test bio.test dangky.test node_modules.test otp.test push.test search.test tiktok.test views.test vote-app.test
      Hostname(s)
      avatar.test bio.test dangky.test node_modules.test otp.test push.test search.test views.test vote-app.test
      IP(s)
      14.225.254.32
      Port(s)
      443
      Protocol(s)
      http
      Subject Organization(s)
      Laragon
      Tag(s)
      URL(s)
      /
    • Operating System
      Microsoft Windows
      Product
      Apache HTTP Server 2.4.62
      HTTP Component(s)
      PHP PHP 8.3.16 OpenSSL OpenSSL 3.0.15
      CPE(s)

      <enterprise field>: cpe

    • Issuer Common Name
      laragon
      Issuer Organization
      Laragon
      Subject Organization
      Laragon
      Subject Common Name
      laragon
      Subject Alt Name
      localhost avatar.test *.avatar.test bio.test *.bio.test dangky.test *.dangky.test node_modules.test *.node_modules.test otp.test *.otp.test push.test *.push.test search.test *.tiktok.test views.test *.views.test vote-app.test *.vote-app.test *.localhost *.test
      SHA256 Fingerprint
      27480ecc9c59410fb44201adde18353abeb6ba1b381e1172c562a2eb8a051b64
      Validity Not Before
      2025-04-12T02:51:05Z
      Validity Not After
      2026-04-12T02:51:05Z
    • This feature requires at least a "Lion View" to unlock. Go to our Pricing page for more.

    • Data MD5
      980bed3507bb33f189331f9b9e7ff62b
      HTTP Header MD5
      07f953860c93bf30420d19accabeeb34
      HTTP Body MD5
      8830858fdd633d37f899d401989f1cca
    • HTTP/1.1 200 OK
      Date: Mon, 14 Apr 2025 04:37:14 GMT
      Server: Apache/2.4.62 (Win64) OpenSSL/3.0.15 PHP/8.3.16
      X-Powered-By: PHP/8.3.16
      Connection: close
      Transfer-Encoding: chunked
      Content-Type: text/html; charset=UTF-8
      
      6136
      <!DOCTYPE html>
      <html lang="vi">
      <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Ứng dụng cần License</title>
        <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
        <style>
          /* Reset & Font */
          * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
          }
          body {
            font-family: 'Roboto', sans-serif;
            background-color: #f4f4f9;
            color: #333;
            line-height: 1.6;
            padding-top: 70px; /* Để dành chỗ cho navbar cố định */
          }
          /* Navbar */
          .navbar {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            height: 70px;
            background: #4CAF50;
            color: #fff;
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 0 20px;
            z-index: 1200;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
          }
          .navbar .brand {
            font-size: 20px;
            font-weight: bold;
          }
          .navbar .license-info-nav {
            font-size: 14px;
            text-align: right;
          }
          .navbar .license-info-nav button {
            margin-top: 5px;
            padding: 6px 12px;
            font-size: 12px;
            font-weight: bold;
            border: none;
            border-radius: 6px;
            background: linear-gradient(135deg, #ff4b2b, #ff416c);
            color: #fff;
            cursor: pointer;
            transition: transform 0.3s ease, box-shadow 0.3s ease;
          }
          .navbar .license-info-nav button:hover {
            transform: scale(1.05);
            box-shadow: 0 4px 10px rgba(255,65,108,0.4);
          }
          .navbar .license-info-nav button:active {
            transform: scale(0.98);
          }
          /* Modal License */
          #licenseModal {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0,0,0,0.6);
            display: flex;
            justify-content: center;
            align-items: center;
            z-index: 1000;
          }
          #licenseModal .modal-content {
            background: #fff;
            padding: 30px 20px;
            border-radius: 8px;
            width: 90%;
            max-width: 400px;
            text-align: center;
            box-shadow: 0 8px 20px rgba(0,0,0,0.2);
            animation: fadeIn 0.5s ease;
          }
          @keyframes fadeIn {
            from { opacity: 0; transform: translateY(-20px); }
            to { opacity: 1; transform: translateY(0); }
          }
          #licenseModal h2 {
            margin-bottom: 20px;
            color: #4CAF50;
          }
          #licenseModal input {
            width: 100%;
            padding: 12px;
            margin-bottom: 15px;
            font-size: 16px;
            border: 1px solid #ddd;
            border-radius: 4px;
            text-align: center;
          }
          #licenseModal button {
            width: 100%;
            padding: 12px;
            font-size: 16px;
            border: none;
            border-radius: 4px;
            background-color: #4CAF50;
            color: #fff;
            cursor: pointer;
            transition: background-color 0.3s ease;
          }
          #licenseModal button:hover {
            background-color: #45a049;
          }
          #licenseResult {
            margin-top: 10px;
            font-weight: 500;
          }
          /* Ứng dụng chính */
          .container {
            max-width: 1200px;
            margin: 20px auto;
            padding: 40px;
            background: #fff;
            border-radius: 8px;
            box-shadow: 0 6px 20px rgba(0,0,0,0.1);
            display: none;
            position: relative;
            animation: fadeIn 0.5s ease;
          }
          .container h2 {
            text-align: center;
            color: #4CAF50;
            margin-bottom: 20px;
          }
          label {
            display: block;
            margin-bottom: 10px;
            font-size: 18px;
            font-weight: 500;
          }
          textarea {
            width: 100%;
            padding: 15px;
            font-size: 16px;
            margin-bottom: 20px;
            border: 1px solid #ddd;
            border-radius: 6px;
            resize: vertical;
            min-height: 200px;
          }
          .control-group {
            display: flex;
            flex-wrap: wrap;
            gap: 15px;
            justify-content: center;
            margin-bottom: 20px;
          }
          .control-group > * {
            flex: 1;
            min-width: 150px;
          }
          button, input[type="file"] {
            padding: 12px 15px;
            font-size: 16px;
            border: 1px solid #ddd;
            border-radius: 6px;
            cursor: pointer;
            background: #4CAF50;
            color: #fff;
            transition: background 0.3s ease;
          }
          button:hover, input[type="file"]:hover {
            background: #45a049;
          }
          column-toggle {
          display: flex
      ;
          flex-wrap: wrap;
          justify-content: center;
          align-items: center;
          gap: 15px;
          padding: 30px 20px;
          /* margin: 20px auto; */
          /* background: #eef3f7; */
          /* border: 1px solid #cdd7e0; */
          border-radius: 8px;
          max-width: 800px;
      }
          .column-toggle .toggle-title {
            font-size: 16px;
            font-weight: bold;
            margin-right: 10px;
            color: #333;
          }
          .column-toggle label {
            font-size: 15px;
            color: #555;
            display: flex;
            align-items: center;
            gap: 5px;
            cursor: pointer;
          }
          .column-toggle input[type="checkbox"] {
            width: 16px;
            height: 16px;
            accent-color: #4CAF50;
            cursor: pointer;
          }
          .output-table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
          }
          .output-table th, .output-table td {
            padding: 12px;
            text-align: center;
            border: 1px solid #ddd;
          }
          .output-table th {
            background: #f4f4f4;
            font-weight: bold;
          }
          .output-table tr:nth-child(even) {
            background: #f9f9f9;
          }
          .loading-img {
            width: 24px;
            height: 24px;
            vertical-align: middle;
          }
          .profile-icon {
            cursor: pointer;
            width: 24px;
            height: 24px;
          }
          #summary {
            font-size: 18px;
            font-weight: bold;
            margin-bottom: 10px;
            text-align: center;
          }
        .options-container {
        display: flex;
        justify-content: space-between;
        align-items: flex-start;
        gap: 20px;
        padding: 10px 20px;
        margin: 20px auto;
        background-color: #eef3f7;
        border: 1px solid #cdd7e0;
        border-radius: 8px;
        max-width: 1200px;
      }
      
      /* Sử dụng CSS Grid để xếp 8 switch thành 2 hàng, mỗi hàng 4 cột */
      .column-toggle {
          display: grid
      ;
          grid-template-columns: repeat(4, 2fr);
          /* gap: 10px; */
          width: 40%;
      }
      
      .column-toggle .toggle-title {
        grid-column: 1 / -1; /* Chiếm toàn bộ hàng đầu tiên */
        font-size: 16px;
        font-weight: bold;
        margin-bottom: 10px;
        text-align: center;
        color: #333;
      }
      
      /* Kiểu cho Switch */
      .switch {
        display: flex;
        flex-direction: column;
        align-items: center;
        cursor: pointer;
      }
      
      .switch input {
        opacity: 0;
        width: 0;
        height: 0;
      }
      .slider {
        position: relative;
        width: 40px;
        height: 20px;
        background-color: #ccc;
        border-radius: 20px;
        transition: 0.4s;
        margin-bottom: 5px;
      }
      .slider:before {
        position: absolute;
        content: "";
        height: 16px;
        width: 16px;
        left: 2px;
        bottom: 2px;
        background-color: #fff;
        border-radius: 50%;
        transition: 0.4s;
      }
      .switch input:checked + .slider {
        background-color: #4CAF50;
      }
      .switch input:checked + .slider:before {
        transform: translateX(20px);
      }
      .switch .switch-text {
        font-size: 14px;
        color: #555;
        text-align: center;
      }
      
      /* Phần License Info Panel */
      .license-info-panel {
        font-size: 14px;
        //text-align: right;
        padding: 20px;
        background: #ffffff;
        //border: 1px solid #ddd;
        border-radius: 8px;
        //box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
        max-width: 300px;
        width: 300px;
       margin-top: 20px;
      }
      .export-btn {
          background-color: #3498db;
          color: white;
          padding: 10px 15px;
          border: none;
          width:200px;
          height:40px;
          border-radius: 5px;
          cursor: pointer;
      }
      
      .start-btn {
          background-color: #2ecc71;
          color: white;
          padding: 10px 15px;
          border: none;
          width:135px;
          height:40px;
          border-radius: 5px;
          cursor: pointer;
      }
      
      .check-live-btn {
          background-color: #e74c3c;
          color: white;
          padding: 10px 15px;
          border: none;
          width:135px;
          height:40px;
          border-radius: 5px;
          cursor: pointer;
      }
      
      button:hover {
          opacity: 0.8;
      }
      
      
        </style>
        <script src="https://cdn.jsdelivr.net/npm/otplib-ext-totp@7.0.2/otplib-browser.min.js"></script>
        <script defer>
          // Hàm kích hoạt License: gửi License Key đến API, lưu vào localStorage và hiển thị thông tin license
          function activateLicense() {
            const licenseKey = document.getElementById("licenseInput").value.trim();
            const licenseResult = document.getElementById("licenseResult");
            
            if (!licenseKey) {
              licenseResult.style.color = "red";
              licenseResult.innerText = "Vui lòng nhập License Key của bạn!";
              return;
            }
            
            fetch("license.php", {
                method: "POST",
                headers: { "Content-Type": "application/x-www-form-urlencoded" },
                body: new URLSearchParams({ license_key: licenseKey })
            })
            .then(response => response.json())
            .then(data => {
                if (data.status === "valid") {
                    licenseResult.style.color = "green";
                    licenseResult.innerText = data.message;
                    // Lưu License Key và thông tin liên quan vào localStorage
                    localStorage.setItem("licenseKey", licenseKey);
                    localStorage.setItem("expiration_date", data.expiration_date);
                    localStorage.setItem("registration_date", data.registration_date);
                    localStorage.setItem("days_remaining", data.days_remaining);
                    localStorage.setItem("licenseValid", "true");
                    // Ẩn modal License và hiển thị ứng dụng chính
                    document.getElementById("licenseModal").style.display = "none";
                    document.getElementById("mainApp").style.display = "block";
                    displayLicenseInfo();
                } else {
                    licenseResult.style.color = "red";
                    licenseResult.innerText = data.message;
                }
            })
            .catch(error => {
                licenseResult.style.color = "red";
                licenseResult.innerText = "Lỗi kết nối đến server.";
                console.error(error);
            });
          }
      
          // Hiển thị thông tin license từ localStorage trong navbar
          function displayLicenseInfo() {
            const licenseKey = localStorage.getItem("licenseKey");
            const registration_date = localStorage.getItem("registration_date") || "N/A";
            const expiration_date = localStorage.getItem("expiration_date") || "N/A";
            const days_remaining = localStorage.getItem("days_remaining") || "N/A";
            
            const licenseInfo = document.getElementById("licenseInfo");
            licenseInfo.innerHTML = `<strong>License:</strong> ${licenseKey}<br/>
                                     <strong>Đăng ký:</strong> ${registration_date}<br/>
                                     <strong>Hết hạn:</strong> ${expiration_date}<br/>
                                     <strong>Còn lại:</strong> ${days_remaining} ngày<br>
                                     `;
          }
          // Hàm thoát License: xóa dữ liệu license từ localStorage và reload trang
          function logoutLicense() {
            localStorage.removeItem("licenseKey");
            localStorage.removeItem("expiration_date");
            localStorage.removeItem("registration_date");
            localStorage.removeItem("days_remaining");
            localStorage.removeItem("licenseValid");
            location.reload();
          }
          // Kiểm tra nếu đã lưu License và hợp lệ khi tải trang
          window.onload = function() {
            const storedLicense = localStorage.getItem("licenseKey");
            const licenseValid = localStorage.getItem("licenseValid");
            if (storedLicense && licenseValid === "true") {
                document.getElementById("licenseModal").style.display = "none";
                document.getElementById("mainApp").style.display = "block";
                displayLicenseInfo();
            } else {
                document.getElementById("licenseModal").style.display = "flex";
            }
          };
      
          // Các hàm xử lý ứng dụng chính (giữ nguyên)
          let allCuts = [];
          let intervalId;
          const doubleClickThreshold = 500;
      
          function handleFileUpload(event) {
            const file = event.target.files[0];
            if (!file) return;
            const reader = new FileReader();
            reader.onload = function(e) {
              document.getElementById("inputText").value = e.target.result;
            };
            reader.readAsText(file);
          }
      
          function cutStrings() {
            allCuts = [];
            let inputText = document.getElementById("inputText").value;
            if (!inputText.trim()) {
              alert("Vui lòng nhập chuỗi cần cắt.");
              return;
            }
            let inputLines = inputText.split("\n");
            inputLines.forEach(line => {
              let parts = line.split("|").slice(0, 5);
              allCuts.push(parts);
            });
            let output = "<table class='output-table'>";
            output += "<thead><tr>";
            output += "<th class='col-stt'>STT</th>";
            output += "<th class='col-uid'>UID</th>";
            output += "<th class='col-pass'>Password</th>";
            output += "<th class='col-2fa'>2FA</th>";
            output += "<th class='col-email'>Email</th>";
            output += "<th class='col-pass-email'>Pass Email</th>";
            output += "<th class='col-status'>Status</th>";
            output += "<th class='col-profile'>Tools</th>";
            output += "</tr></thead>";
            output += "<tbody id='otpTableBody'></tbody></table>";
            document.getElementById("output").innerHTML = output;
            updateOTPCells();
            if (intervalId) clearInterval(intervalId);
          }
      
          async function updateOTPCells() {
            const tbody = document.getElementById("otpTableBody");
            if (!tbody) return;
            tbody.innerHTML = "";
            for (let i = 0; i < allCuts.length; i++) {
              const stt = i + 1;
              const uid = allCuts[i][0]?.trim() || "<em>Chưa có dữ liệu</em>";
              const pass = allCuts[i][1]?.trim() || "<em>Chưa có dữ liệu</em>";
              const secret = allCuts[i][2]?.trim() || "";
              const email = allCuts[i][3]?.trim() || "<em>Chưa có dữ liệu</em>";
              const passEmail = allCuts[i][4]?.trim() || "<em>Chưa có dữ liệu</em>";
              const otpCellContent = secret 
                ? `<img src="https://i.pinimg.com/originals/f6/65/6a/f6656aa6fdb6b8f905dea0bcc2d71dd8.gif" class="loading-img" />`
                : "<em>Không có dữ liệu</em>";
              const statusCellContent = `<em>...</em>`;
              const profileCellContent = `<img src="https://img.icons8.com/fluency-systems-regular/48/000000/settings.png" alt="Hồ sơ" class="profile-icon" onclick="openBrowserProfile('${uid}')"/>`;
              const rowHTML = `<tr id="row-${i}">
                <td class="col-stt">${stt}</td>
                <td class="col-uid" onclick="copyToClipboard('${uid}')">${uid}</td>
                <td class="col-pass" onclick="copyToClipboard('${pass}')">${pass}</td>
                <td class="col-2fa" id="otpCell-${i}" onclick="copyToClipboard(this.innerText)" oncontextmenu="handleRightClick(event, ${i})">${otpCellContent}</td>
                <td class="col-email" onclick="copyToClipboard('${email}')">${email}</td>
                <td class="col-pass-email" onclick="copyToClipboard('${passEmail}')">${passEmail}</td>
                <td class="col-status" id="statusCell-${i}">${statusCellContent}</td>
                <td class="col-profile">${profileCellContent}</td>
              </tr>`;
              tbody.innerHTML += rowHTML;
            }
            for (let i = 0; i < allCuts.length; i++) {
              const secret = allCuts[i][2]?.trim() || "";
              if (secret) {
                try {
                  const code = otplib.authenticator.generate(secret);
                  document.getElementById(`otpCell-${i}`).innerText = code;
                } catch (e) {
                  document.getElementById(`otpCell-${i}`).innerText = "Lỗi";
                  console.error("Lỗi giải 2FA:", e);
                }
              }
            }
          }
      
          function toggleColumn(columnClass, checkbox) {
            const cells = document.querySelectorAll("." + columnClass);
            cells.forEach(cell => {
              cell.style.display = checkbox.checked ? "table-cell" : "none";
            });
          }
      
          function handleRightClick(event, index) {
            event.preventDefault();
            const cell = document.getEle
    • {
         "@category" : "datascan",
         "@timestamp" : "2025-04-14T04:37:16.000Z",
         "app" : {
            "extract" : {
               "domain" : [
                  "jsdelivr.net",
                  "pinimg.com",
                  "icons8.com",
                  "googleapis.com"
               ],
               "file" : [
                  "license.php"
               ],
               "hostname" : [
                  "cdn.jsdelivr.net",
                  "fonts.googleapis.com",
                  "i.pinimg.com",
                  "img.icons8.com"
               ],
               "url" : [
                  "https://cdn.jsdelivr.net/npm/otplib-ext-totp@7.0.2/otplib-browser.min.js",
                  "https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap",
                  "https://i.pinimg.com/originals/f6/65/6a/f6656aa6fdb6b8f905dea0bcc2d71dd8.gif",
                  "https://img.icons8.com/fluency-systems-regular/48/000000/settings.png"
               ]
            },
            "http" : {
               "bodymd5" : "8830858fdd633d37f899d401989f1cca",
               "bodymmh3" : 542157651,
               "component" : [
                  {
                     "product" : "PHP",
                     "productversion" : "8.3.16",
                     "productvendor" : "PHP"
                  },
                  {
                     "product" : "OpenSSL",
                     "productversion" : "3.0.15",
                     "productvendor" : "OpenSSL"
                  }
               ],
               "headermd5" : "07f953860c93bf30420d19accabeeb34",
               "headermmh3" : -1037103007,
               "title" : "\u1ee8ng d\u1ee5ng c\u1ea7n License"
            },
            "length" : 16384
         },
         "asn" : "AS135905",
         "ca" : "false",
         "country" : "VN",
         "cpe" : "<enterprise field>: cpe",
         "cpecount" : "<enterprise field>: cpecount",
         "data" : "HTTP/1.1 200 OK\r\nDate: Mon, 14 Apr 2025 04:37:14 GMT\r\nServer: Apache/2.4.62 (Win64) OpenSSL/3.0.15 PHP/8.3.16\r\nX-Powered-By: PHP/8.3.16\r\nConnection: close\r\nTransfer-Encoding: chunked\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n6136\r\n<!DOCTYPE html>\n<html lang=\"vi\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>\u1ee8ng d\u1ee5ng c\u1ea7n License</title>\n  <link href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n  <style>\n    /* Reset & Font */\n    * {\n      margin: 0;\n      padding: 0;\n      box-sizing: border-box;\n    }\n    body {\n      font-family: 'Roboto', sans-serif;\n      background-color: #f4f4f9;\n      color: #333;\n      line-height: 1.6;\n      padding-top: 70px; /* \u0110\u1ec3 d\u00e0nh ch\u1ed7 cho navbar c\u1ed1 \u0111\u1ecbnh */\n    }\n    /* Navbar */\n    .navbar {\n      position: fixed;\n      top: 0;\n      left: 0;\n      right: 0;\n      height: 70px;\n      background: #4CAF50;\n      color: #fff;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      padding: 0 20px;\n      z-index: 1200;\n      box-shadow: 0 2px 5px rgba(0,0,0,0.1);\n    }\n    .navbar .brand {\n      font-size: 20px;\n      font-weight: bold;\n    }\n    .navbar .license-info-nav {\n      font-size: 14px;\n      text-align: right;\n    }\n    .navbar .license-info-nav button {\n      margin-top: 5px;\n      padding: 6px 12px;\n      font-size: 12px;\n      font-weight: bold;\n      border: none;\n      border-radius: 6px;\n      background: linear-gradient(135deg, #ff4b2b, #ff416c);\n      color: #fff;\n      cursor: pointer;\n      transition: transform 0.3s ease, box-shadow 0.3s ease;\n    }\n    .navbar .license-info-nav button:hover {\n      transform: scale(1.05);\n      box-shadow: 0 4px 10px rgba(255,65,108,0.4);\n    }\n    .navbar .license-info-nav button:active {\n      transform: scale(0.98);\n    }\n    /* Modal License */\n    #licenseModal {\n      position: fixed;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background: rgba(0,0,0,0.6);\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      z-index: 1000;\n    }\n    #licenseModal .modal-content {\n      background: #fff;\n      padding: 30px 20px;\n      border-radius: 8px;\n      width: 90%;\n      max-width: 400px;\n      text-align: center;\n      box-shadow: 0 8px 20px rgba(0,0,0,0.2);\n      animation: fadeIn 0.5s ease;\n    }\n    @keyframes fadeIn {\n      from { opacity: 0; transform: translateY(-20px); }\n      to { opacity: 1; transform: translateY(0); }\n    }\n    #licenseModal h2 {\n      margin-bottom: 20px;\n      color: #4CAF50;\n    }\n    #licenseModal input {\n      width: 100%;\n      padding: 12px;\n      margin-bottom: 15px;\n      font-size: 16px;\n      border: 1px solid #ddd;\n      border-radius: 4px;\n      text-align: center;\n    }\n    #licenseModal button {\n      width: 100%;\n      padding: 12px;\n      font-size: 16px;\n      border: none;\n      border-radius: 4px;\n      background-color: #4CAF50;\n      color: #fff;\n      cursor: pointer;\n      transition: background-color 0.3s ease;\n    }\n    #licenseModal button:hover {\n      background-color: #45a049;\n    }\n    #licenseResult {\n      margin-top: 10px;\n      font-weight: 500;\n    }\n    /* \u1ee8ng d\u1ee5ng ch\u00ednh */\n    .container {\n      max-width: 1200px;\n      margin: 20px auto;\n      padding: 40px;\n      background: #fff;\n      border-radius: 8px;\n      box-shadow: 0 6px 20px rgba(0,0,0,0.1);\n      display: none;\n      position: relative;\n      animation: fadeIn 0.5s ease;\n    }\n    .container h2 {\n      text-align: center;\n      color: #4CAF50;\n      margin-bottom: 20px;\n    }\n    label {\n      display: block;\n      margin-bottom: 10px;\n      font-size: 18px;\n      font-weight: 500;\n    }\n    textarea {\n      width: 100%;\n      padding: 15px;\n      font-size: 16px;\n      margin-bottom: 20px;\n      border: 1px solid #ddd;\n      border-radius: 6px;\n      resize: vertical;\n      min-height: 200px;\n    }\n    .control-group {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 15px;\n      justify-content: center;\n      margin-bottom: 20px;\n    }\n    .control-group > * {\n      flex: 1;\n      min-width: 150px;\n    }\n    button, input[type=\"file\"] {\n      padding: 12px 15px;\n      font-size: 16px;\n      border: 1px solid #ddd;\n      border-radius: 6px;\n      cursor: pointer;\n      background: #4CAF50;\n      color: #fff;\n      transition: background 0.3s ease;\n    }\n    button:hover, input[type=\"file\"]:hover {\n      background: #45a049;\n    }\n    column-toggle {\n    display: flex\n;\n    flex-wrap: wrap;\n    justify-content: center;\n    align-items: center;\n    gap: 15px;\n    padding: 30px 20px;\n    /* margin: 20px auto; */\n    /* background: #eef3f7; */\n    /* border: 1px solid #cdd7e0; */\n    border-radius: 8px;\n    max-width: 800px;\n}\n    .column-toggle .toggle-title {\n      font-size: 16px;\n      font-weight: bold;\n      margin-right: 10px;\n      color: #333;\n    }\n    .column-toggle label {\n      font-size: 15px;\n      color: #555;\n      display: flex;\n      align-items: center;\n      gap: 5px;\n      cursor: pointer;\n    }\n    .column-toggle input[type=\"checkbox\"] {\n      width: 16px;\n      height: 16px;\n      accent-color: #4CAF50;\n      cursor: pointer;\n    }\n    .output-table {\n      width: 100%;\n      border-collapse: collapse;\n      margin-top: 20px;\n    }\n    .output-table th, .output-table td {\n      padding: 12px;\n      text-align: center;\n      border: 1px solid #ddd;\n    }\n    .output-table th {\n      background: #f4f4f4;\n      font-weight: bold;\n    }\n    .output-table tr:nth-child(even) {\n      background: #f9f9f9;\n    }\n    .loading-img {\n      width: 24px;\n      height: 24px;\n      vertical-align: middle;\n    }\n    .profile-icon {\n      cursor: pointer;\n      width: 24px;\n      height: 24px;\n    }\n    #summary {\n      font-size: 18px;\n      font-weight: bold;\n      margin-bottom: 10px;\n      text-align: center;\n    }\n  .options-container {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  gap: 20px;\n  padding: 10px 20px;\n  margin: 20px auto;\n  background-color: #eef3f7;\n  border: 1px solid #cdd7e0;\n  border-radius: 8px;\n  max-width: 1200px;\n}\n\n/* S\u1eed d\u1ee5ng CSS Grid \u0111\u1ec3 x\u1ebfp 8 switch th\u00e0nh 2 h\u00e0ng, m\u1ed7i h\u00e0ng 4 c\u1ed9t */\n.column-toggle {\n    display: grid\n;\n    grid-template-columns: repeat(4, 2fr);\n    /* gap: 10px; */\n    width: 40%;\n}\n\n.column-toggle .toggle-title {\n  grid-column: 1 / -1; /* Chi\u1ebfm to\u00e0n b\u1ed9 h\u00e0ng \u0111\u1ea7u ti\u00ean */\n  font-size: 16px;\n  font-weight: bold;\n  margin-bottom: 10px;\n  text-align: center;\n  color: #333;\n}\n\n/* Ki\u1ec3u cho Switch */\n.switch {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  cursor: pointer;\n}\n\n.switch input {\n  opacity: 0;\n  width: 0;\n  height: 0;\n}\n.slider {\n  position: relative;\n  width: 40px;\n  height: 20px;\n  background-color: #ccc;\n  border-radius: 20px;\n  transition: 0.4s;\n  margin-bottom: 5px;\n}\n.slider:before {\n  position: absolute;\n  content: \"\";\n  height: 16px;\n  width: 16px;\n  left: 2px;\n  bottom: 2px;\n  background-color: #fff;\n  border-radius: 50%;\n  transition: 0.4s;\n}\n.switch input:checked + .slider {\n  background-color: #4CAF50;\n}\n.switch input:checked + .slider:before {\n  transform: translateX(20px);\n}\n.switch .switch-text {\n  font-size: 14px;\n  color: #555;\n  text-align: center;\n}\n\n/* Ph\u1ea7n License Info Panel */\n.license-info-panel {\n  font-size: 14px;\n  //text-align: right;\n  padding: 20px;\n  background: #ffffff;\n  //border: 1px solid #ddd;\n  border-radius: 8px;\n  //box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n  max-width: 300px;\n  width: 300px;\n margin-top: 20px;\n}\n.export-btn {\n    background-color: #3498db;\n    color: white;\n    padding: 10px 15px;\n    border: none;\n    width:200px;\n    height:40px;\n    border-radius: 5px;\n    cursor: pointer;\n}\n\n.start-btn {\n    background-color: #2ecc71;\n    color: white;\n    padding: 10px 15px;\n    border: none;\n    width:135px;\n    height:40px;\n    border-radius: 5px;\n    cursor: pointer;\n}\n\n.check-live-btn {\n    background-color: #e74c3c;\n    color: white;\n    padding: 10px 15px;\n    border: none;\n    width:135px;\n    height:40px;\n    border-radius: 5px;\n    cursor: pointer;\n}\n\nbutton:hover {\n    opacity: 0.8;\n}\n\n\n  </style>\n  <script src=\"https://cdn.jsdelivr.net/npm/otplib-ext-totp@7.0.2/otplib-browser.min.js\"></script>\n  <script defer>\n    // H\u00e0m k\u00edch ho\u1ea1t License: g\u1eedi License Key \u0111\u1ebfn API, l\u01b0u v\u00e0o localStorage v\u00e0 hi\u1ec3n th\u1ecb th\u00f4ng tin license\n    function activateLicense() {\n      const licenseKey = document.getElementById(\"licenseInput\").value.trim();\n      const licenseResult = document.getElementById(\"licenseResult\");\n      \n      if (!licenseKey) {\n        licenseResult.style.color = \"red\";\n        licenseResult.innerText = \"Vui l\u00f2ng nh\u1eadp License Key c\u1ee7a b\u1ea1n!\";\n        return;\n      }\n      \n      fetch(\"license.php\", {\n          method: \"POST\",\n          headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n          body: new URLSearchParams({ license_key: licenseKey })\n      })\n      .then(response => response.json())\n      .then(data => {\n          if (data.status === \"valid\") {\n              licenseResult.style.color = \"green\";\n              licenseResult.innerText = data.message;\n              // L\u01b0u License Key v\u00e0 th\u00f4ng tin li\u00ean quan v\u00e0o localStorage\n              localStorage.setItem(\"licenseKey\", licenseKey);\n              localStorage.setItem(\"expiration_date\", data.expiration_date);\n              localStorage.setItem(\"registration_date\", data.registration_date);\n              localStorage.setItem(\"days_remaining\", data.days_remaining);\n              localStorage.setItem(\"licenseValid\", \"true\");\n              // \u1ea8n modal License v\u00e0 hi\u1ec3n th\u1ecb \u1ee9ng d\u1ee5ng ch\u00ednh\n              document.getElementById(\"licenseModal\").style.display = \"none\";\n              document.getElementById(\"mainApp\").style.display = \"block\";\n              displayLicenseInfo();\n          } else {\n              licenseResult.style.color = \"red\";\n              licenseResult.innerText = data.message;\n          }\n      })\n      .catch(error => {\n          licenseResult.style.color = \"red\";\n          licenseResult.innerText = \"L\u1ed7i k\u1ebft n\u1ed1i \u0111\u1ebfn server.\";\n          console.error(error);\n      });\n    }\n\n    // Hi\u1ec3n th\u1ecb th\u00f4ng tin license t\u1eeb localStorage trong navbar\n    function displayLicenseInfo() {\n      const licenseKey = localStorage.getItem(\"licenseKey\");\n      const registration_date = localStorage.getItem(\"registration_date\") || \"N/A\";\n      const expiration_date = localStorage.getItem(\"expiration_date\") || \"N/A\";\n      const days_remaining = localStorage.getItem(\"days_remaining\") || \"N/A\";\n      \n      const licenseInfo = document.getElementById(\"licenseInfo\");\n      licenseInfo.innerHTML = `<strong>License:</strong> ${licenseKey}<br/>\n                               <strong>\u0110\u0103ng k\u00fd:</strong> ${registration_date}<br/>\n                               <strong>H\u1ebft h\u1ea1n:</strong> ${expiration_date}<br/>\n                               <strong>C\u00f2n l\u1ea1i:</strong> ${days_remaining} ng\u00e0y<br>\n                               `;\n    }\n    // H\u00e0m tho\u00e1t License: x\u00f3a d\u1eef li\u1ec7u license t\u1eeb localStorage v\u00e0 reload trang\n    function logoutLicense() {\n      localStorage.removeItem(\"licenseKey\");\n      localStorage.removeItem(\"expiration_date\");\n      localStorage.removeItem(\"registration_date\");\n      localStorage.removeItem(\"days_remaining\");\n      localStorage.removeItem(\"licenseValid\");\n      location.reload();\n    }\n    // Ki\u1ec3m tra n\u1ebfu \u0111\u00e3 l\u01b0u License v\u00e0 h\u1ee3p l\u1ec7 khi t\u1ea3i trang\n    window.onload = function() {\n      const storedLicense = localStorage.getItem(\"licenseKey\");\n      const licenseValid = localStorage.getItem(\"licenseValid\");\n      if (storedLicense && licenseValid === \"true\") {\n          document.getElementById(\"licenseModal\").style.display = \"none\";\n          document.getElementById(\"mainApp\").style.display = \"block\";\n          displayLicenseInfo();\n      } else {\n          document.getElementById(\"licenseModal\").style.display = \"flex\";\n      }\n    };\n\n    // C\u00e1c h\u00e0m x\u1eed l\u00fd \u1ee9ng d\u1ee5ng ch\u00ednh (gi\u1eef nguy\u00ean)\n    let allCuts = [];\n    let intervalId;\n    const doubleClickThreshold = 500;\n\n    function handleFileUpload(event) {\n      const file = event.target.files[0];\n      if (!file) return;\n      const reader = new FileReader();\n      reader.onload = function(e) {\n        document.getElementById(\"inputText\").value = e.target.result;\n      };\n      reader.readAsText(file);\n    }\n\n    function cutStrings() {\n      allCuts = [];\n      let inputText = document.getElementById(\"inputText\").value;\n      if (!inputText.trim()) {\n        alert(\"Vui l\u00f2ng nh\u1eadp chu\u1ed7i c\u1ea7n c\u1eaft.\");\n        return;\n      }\n      let inputLines = inputText.split(\"\\n\");\n      inputLines.forEach(line => {\n        let parts = line.split(\"|\").slice(0, 5);\n        allCuts.push(parts);\n      });\n      let output = \"<table class='output-table'>\";\n      output += \"<thead><tr>\";\n      output += \"<th class='col-stt'>STT</th>\";\n      output += \"<th class='col-uid'>UID</th>\";\n      output += \"<th class='col-pass'>Password</th>\";\n      output += \"<th class='col-2fa'>2FA</th>\";\n      output += \"<th class='col-email'>Email</th>\";\n      output += \"<th class='col-pass-email'>Pass Email</th>\";\n      output += \"<th class='col-status'>Status</th>\";\n      output += \"<th class='col-profile'>Tools</th>\";\n      output += \"</tr></thead>\";\n      output += \"<tbody id='otpTableBody'></tbody></table>\";\n      document.getElementById(\"output\").innerHTML = output;\n      updateOTPCells();\n      if (intervalId) clearInterval(intervalId);\n    }\n\n    async function updateOTPCells() {\n      const tbody = document.getElementById(\"otpTableBody\");\n      if (!tbody) return;\n      tbody.innerHTML = \"\";\n      for (let i = 0; i < allCuts.length; i++) {\n        const stt = i + 1;\n        const uid = allCuts[i][0]?.trim() || \"<em>Ch\u01b0a c\u00f3 d\u1eef li\u1ec7u</em>\";\n        const pass = allCuts[i][1]?.trim() || \"<em>Ch\u01b0a c\u00f3 d\u1eef li\u1ec7u</em>\";\n        const secret = allCuts[i][2]?.trim() || \"\";\n        const email = allCuts[i][3]?.trim() || \"<em>Ch\u01b0a c\u00f3 d\u1eef li\u1ec7u</em>\";\n        const passEmail = allCuts[i][4]?.trim() || \"<em>Ch\u01b0a c\u00f3 d\u1eef li\u1ec7u</em>\";\n        const otpCellContent = secret \n          ? `<img src=\"https://i.pinimg.com/originals/f6/65/6a/f6656aa6fdb6b8f905dea0bcc2d71dd8.gif\" class=\"loading-img\" />`\n          : \"<em>Kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u</em>\";\n        const statusCellContent = `<em>...</em>`;\n        const profileCellContent = `<img src=\"https://img.icons8.com/fluency-systems-regular/48/000000/settings.png\" alt=\"H\u1ed3 s\u01a1\" class=\"profile-icon\" onclick=\"openBrowserProfile('${uid}')\"/>`;\n        const rowHTML = `<tr id=\"row-${i}\">\n          <td class=\"col-stt\">${stt}</td>\n          <td class=\"col-uid\" onclick=\"copyToClipboard('${uid}')\">${uid}</td>\n          <td class=\"col-pass\" onclick=\"copyToClipboard('${pass}')\">${pass}</td>\n          <td class=\"col-2fa\" id=\"otpCell-${i}\" onclick=\"copyToClipboard(this.innerText)\" oncontextmenu=\"handleRightClick(event, ${i})\">${otpCellContent}</td>\n          <td class=\"col-email\" onclick=\"copyToClipboard('${email}')\">${email}</td>\n          <td class=\"col-pass-email\" onclick=\"copyToClipboard('${passEmail}')\">${passEmail}</td>\n          <td class=\"col-status\" id=\"statusCell-${i}\">${statusCellContent}</td>\n          <td class=\"col-profile\">${profileCellContent}</td>\n        </tr>`;\n        tbody.innerHTML += rowHTML;\n      }\n      for (let i = 0; i < allCuts.length; i++) {\n        const secret = allCuts[i][2]?.trim() || \"\";\n        if (secret) {\n          try {\n            const code = otplib.authenticator.generate(secret);\n            document.getElementById(`otpCell-${i}`).innerText = code;\n          } catch (e) {\n            document.getElementById(`otpCell-${i}`).innerText = \"L\u1ed7i\";\n            console.error(\"L\u1ed7i gi\u1ea3i 2FA:\", e);\n          }\n        }\n      }\n    }\n\n    function toggleColumn(columnClass, checkbox) {\n      const cells = document.querySelectorAll(\".\" + columnClass);\n      cells.forEach(cell => {\n        cell.style.display = checkbox.checked ? \"table-cell\" : \"none\";\n      });\n    }\n\n    function handleRightClick(event, index) {\n      event.preventDefault();\n      const cell = document.getEle",
         "datamd5" : "980bed3507bb33f189331f9b9e7ff62b",
         "datammh3" : 898781700,
         "device" : {
            "class" : "<enterprise field>: device.class"
         },
         "domain" : [
            "*.localhost",
            "*.test",
            "avatar.test",
            "bio.test",
            "dangky.test",
            "node_modules.test",
            "otp.test",
            "push.test",
            "search.test",
            "tiktok.test",
            "views.test",
            "vote-app.test"
         ],
         "extkeyusage" : [
            "serverAuth"
         ],
         "fingerprint" : {
            "md5" : "607c6bdbcfe97cd36703575ed7f80442",
            "sha1" : "32b9e79f9c65faa72cbd9ef5d1da8bb88904dd98",
            "sha256" : "27480ecc9c59410fb44201adde18353abeb6ba1b381e1172c562a2eb8a051b64"
         },
         "geolocus" : {
            "asn" : "AS135905",
            "continent" : "AS",
            "continentname" : "Asia",
            "country" : "VN",
            "countryname" : "Vietnam",
            "domain" : [
               "vnnic.vn",
               "vnpt.vn"
            ],
            "isineu" : "false",
            "latitude" : "14.058324",
            "location" : "14.058324,108.277199",
            "longitude" : "108.277199",
            "netname" : "VNPT-VN",
            "organization" : "VNPT",
            "subnet" : "14.224.0.0/11"
         },
         "hostname" : [
            "avatar.test",
            "bio.test",
            "dangky.test",
            "node_modules.test",
            "otp.test",
            "push.test",
            "search.test",
            "views.test",
            "vote-app.test"
         ],
         "ip" : "14.225.254.32",
         "ipv6" : "false",
         "issuer" : {
            "city" : "Singapore",
            "commonname" : "laragon",
            "country" : "SG",
            "organization" : "Laragon",
            "organizationalunit" : "Server"
         },
         "keyusage" : [
            "digitalSignature",
            "keyEncipherment"
         ],
         "latitude" : "16.1667",
         "location" : "16.1667,107.8333",
         "longitude" : "107.8333",
         "node" : {
            "country" : "<enterprise field>: node.country",
            "groupid" : "<enterprise field>: node.groupid",
            "id" : "<enterprise field>: node.id",
            "physicalcountry" : "<enterprise field>: node.physicalcountry"
         },
         "organization" : "VIETNAM POSTS AND TELECOMMUNICATIONS GROUP",
         "os" : "Windows",
         "osbits" : 64,
         "osvendor" : "Microsoft",
         "port" : 443,
         "product" : "HTTP Server",
         "productvendor" : "Apache",
         "productversion" : "2.4.62",
         "protocol" : "http",
         "protocolversion" : "1.1",
         "publickey" : {
            "algorithm" : "rsaEncryption",
            "length" : 2048
         },
         "reason" : "OK",
         "rtt" : 0.458981,
         "seen_date" : "2025-04-14",
         "serial" : "08:ce:03:80:13:8a:53:55:66:37:ec:48:2e:3a:b2:1c:9d:30:bd:0c",
         "signature" : {
            "algorithm" : "sha256WithRSAEncryption"
         },
         "source" : "datascan",
         "srcip" : "91.196.152.43",
         "srcport" : 41959,
         "status" : 200,
         "subject" : {
            "altname" : [
               "localhost",
               "avatar.test",
               "*.avatar.test",
               "bio.test",
               "*.bio.test",
               "dangky.test",
               "*.dangky.test",
               "node_modules.test",
               "*.node_modules.test",
               "otp.test",
               "*.otp.test",
               "push.test",
               "*.push.test",
               "search.test",
               "*.tiktok.test",
               "views.test",
               "*.views.test",
               "vote-app.test",
               "*.vote-app.test",
               "*.localhost",
               "*.test"
            ],
            "city" : "Singapore",
            "commonname" : "laragon",
            "country" : "SG",
            "organization" : "Laragon",
            "organizationalunit" : "Server"
         },
         "subnet" : "14.225.240.0/20",
         "tag" : "<enterprise field>: tag",
         "tld" : [
            "localhost",
            "test"
         ],
         "tls" : "true",
         "transport" : "tcp",
         "ttl" : 110,
         "url" : "/",
         "validity" : {
            "notafter" : "2026-04-12T02:51:05Z",
            "notbefore" : "2025-04-12T02:51:05Z"
         },
         "version" : "v3",
         "wildcard" : "true"
      }