REVISI TOKEN UJIAN - MAKSIMAL 3 KALI

Pemasangan: unggah ZIP ini melalui menu Update Aplikasi pada server CBT.
Sebelum update, cadangkan aplikasi dan database; lakukan di luar sesi ujian.
Tidak memerlukan impor SQL atau perubahan struktur database.

Aturan (untuk ujian yang mengaktifkan Pakai Token):
1. Ambil Soal tetap tidak memerlukan token.
2. Mulai Mengerjakan dan Lanjutkan Mengerjakan harus memasukkan token benar.
3. Maksimal 3 verifikasi token benar per siswa per ujian pada periode token yang sama.
   Mulai pertama kali termasuk hitungan tersebut.
4. Input token salah tidak dihitung.
5. Setelah 3 kali, verifikasi berikutnya ditolak sampai token baru aktif.
6. Token pusat tetap berganti setiap 15 menit; kuota periode berikutnya kembali 3.
7. Jawaban dan waktu mulai tidak direset saat melanjutkan.
8. Waktu ujian tetap berjalan saat siswa menunggu token baru.
9. Berlaku pada web peserta, tautan share/SEB/guest, dan endpoint API.
   Klien API harus memanggil cek-token sebelum setiap mulai/lanjut.
   ZIP ini tidak berisi perubahan APK klien native terpisah.

Catatan operasional:
- Verifikasi yang berhasil dihitung, meskipun halaman kemudian ditutup sebelum masuk.
- Izin hasil verifikasi hanya dapat dipakai sekali, berlaku maksimal 120 detik,
  dan berakhir ketika token berganti.
- Hitungan tersimpan di writable/exam_token_access agar tetap ada setelah logout.
  Jangan menghapus folder ini untuk menghindari hilangnya hitungan aktif.
- Identitas guest menggunakan ID guest yang sudah dimiliki aplikasi.
- Gunakan satu folder writable bersama bila menggunakan lebih dari satu server aplikasi.

Validasi: lint PHP pada 6 file yang berubah; pengujian logika kuota, token salah,
rotasi token, izin sekali pakai, identitas/ujian terpisah, dan handler tombol lanjut.
Pengujian pada hosting nyata dengan database dan perangkat siswa belum dilakukan.
